package Day07;
// 올림픽 선수
// 나라, 레인번호, 전진거리(속성)
// 돌발 상황 체크(기능) + 이동
import java.util.Random;
class Player{
String country;
int num;
int m;
Player(String country, int num, int m) {
this.country = country;
this.num = num;
this.m = m;
}
// 돌발상황
void runAndDol(int dol, Random r) {
int move = r.nextInt(10)+1;
if (dol == num) {
System.out.print(country + " 돌발상황 발생!!!");
System.out.println("의 이동거리: " + m);
} else {
m += move;
System.out.println(country + "의 이동거리: " + m);
}
}
}
public class Q1 {
static void main() throws InterruptedException {
// 돌발상황 -> Random
Random r = new Random();
Player kor = new Player("한국", 1, 0);
Player chi = new Player("중국", 2, 0);
Player usa = new Player("미국", 3, 0);
Player rus = new Player("러시아", 4, 0);
while (kor.m < 100 && chi.m < 100 && usa.m < 100 && rus.m < 100) {
// 돌발상황 발생한 레인
int dol = r.nextInt(4)+1;
// 선수들 이동해주고
kor.runAndDol(dol,r);
Thread.sleep(100);
chi.runAndDol(dol,r);
Thread.sleep(100);
usa.runAndDol(dol,r);
Thread.sleep(100);
rus.runAndDol(dol,r);
}
// 우승국 출력
if (kor.m > chi.m && kor.m > usa.m && kor.m > rus.m) {
System.out.println("한국이 우승했습니다.");
}
if (chi.m > kor.m && chi.m > usa.m && chi.m > rus.m) {
System.out.println("중국이 우승했습니다.");
}
if (usa.m > chi.m && usa.m > kor.m && usa.m > rus.m) {
System.out.println("미국이 우승했습니다.");
}
if (rus.m > chi.m && rus.m > usa.m && rus.m > kor.m) {
System.out.println("러시아가 우승했습니다.");
}
}
}
package Day07;
class A {
B b;
B makeB() {
b = new B();
return b;
}
}
class B {
int k;
}
public class ClassTest1 {
static void main() {
A a = new A();
B b = a.makeB();
b.k = 20;
B b1 = a.makeB();
a.b.k = 30;
System.out.println(b.k);
System.out.println(a.b.k);
}
}
package Day07;
// 파란 주사위 빨간 주사위가 2개가 있다.
// 주사위를 굴렸을 때 둘 중 하나가 50 숫자를 넘으면 종료
// 승리 주사위 출력
// 시간 부족으로 문제풀기 실패
import java.util.Random;
class Dice1 {
String color;
int num;
int sum = 0;
Dice1(String color, int num) {
this.color = color;
this.num = num;
}
void rollDice (Random r) {
int randomNum = r.nextInt(6)+1;
if (sum <= 50) {
sum = sum + randomNum;
}
}
}
public class Q2 {
static void main() {
Random r = new Random();
Dice1 redDice = new Dice1("RED", r.nextInt(6)+1);
Dice1 blueDice = new Dice1("BLUE", r.nextInt(6)+1);
redDice.rollDice(r);
blueDice.rollDice(r);
}
}
package Day07;
import java.util.Random;
// 주사위
class Dice {
String color;
Dice(String color) {
this.color = color;
}
// 주사위를 돌린다.
int diceRun() {
Random r = new Random();
return r.nextInt(6)+1;
}
}
public class Q2_1 {
static void main() {
Dice red = new Dice("빨간색");
Dice blue = new Dice("파란색");
int redTotal = 0;
int blueTotal = 0;
while (redTotal < 50 && blueTotal < 50) {
redTotal += red.diceRun();
blueTotal += blue.diceRun();
System.out.println(red.color + " 주사위: " + redTotal);
System.out.println(blue.color + " 주사위: " + blueTotal);
System.out.println("================");
}
if (redTotal > blueTotal) {
System.out.println(red.color + " 주사위 승리");
} else {
System.out.println(blue.color + " 주사위 승리");
}
}
}
package Day07;
// 클래스 배열
class Z{
int a;
}
public class classArrayTest {
static void main() {
Z[] z = new Z[5];
z[0] = new Z();
z[0].a = 10;
int[] array = new int[5];
array[0] = 10;
}
}
package Day07;
class MOver {
int add(int a, int b) {
return a + b;
}
/* 안됨
void add(int a, int b) {
System.out.println(a + b);
}
*/
// 됨
int add(double a, double b) {
return (int)(a + b);
}
}
public class MethodOverloading {
static void main() {
MOver m = new MOver();
// 사용자 입장에서 부를 때 편함
m.add(5, 7);
m.add(7.8, 9.0);
}
}
package Day07;
class ConO {
ConO(int a) {
}
ConO(String a) {
}
}
public class ConOverloading {
static void main() {
ConO con01 = new ConO(5);
ConO con02 = new ConO(4);
ConO con03 = new ConO(3);
ConO con04 = new ConO(2);
ConO con05 = new ConO("hello");
}
}
package Day07;
// 마피아 게임
// 시민 5명중 1명이 마피아, 랜덤으로 선택된다.
// 경찰 -> 마피아를 선택하는 변수
import java.util.Random;
class Police {
int pickNum;
}
class Person {
int num;
Person(int num) {
this.num = num;
}
}
public class Q3 {
static void main() {
Random r = new Random();
int mafiaNum = r.nextInt(5) + 1;
Person person1 = new Person(1);
Person person2 = new Person(2);
Person person3 = new Person(3);
Person person4 = new Person(4);
Person person5 = new Person(5);
Police police = new Police();
for (int i = 1; i <= 5; i++) {
police.pickNum = i;
if (police.pickNum == mafiaNum) {
System.out.println(i + "번 사람은 마피아입니다.");
} else {
System.out.println(i + "번 사람은 마피아가 아닙니다.");
}
}
}
}
package Day07;
import java.util.Random;
import java.util.Scanner;
// 시민 -> 마피아
class Citizen{
// 중요한 거
// 1. 번호
int num;
// 2. 마피아 여부를 알려주는 변수
boolean check;
Citizen(int num) {
this.num = num;
}
// 3. 경찰 나에게 질문을 하면 마피아인지 아닌지 알려줌(기능)
void talk() {
if (check) {
System.out.println("내가 마피아다");
} else {
System.out.println("억울하다. 나는 마피아가 아니다.");
}
}
}
// 경찰
class Police1{
// 입력
int mafiaCheck() {
Scanner sc = new Scanner(System.in);
System.out.print("마피아는?");
return sc.nextInt();
}
}
public class Q3_1 {
static void main() {
Citizen c1 = new Citizen(1);
Citizen c2 = new Citizen(2);
Citizen c3 = new Citizen(3);
Citizen c4 = new Citizen(4);
Citizen c5 = new Citizen(5);
Random r = new Random();
int ran = r.nextInt(5)+1;
if (c1.num == ran) {
c1.check = true;
} else if (c2.num == ran) {
c2.check = true;
} else if (c3.num == ran) {
c3.check = true;
} else if (c4.num == ran) {
c4.check = true;
} else {
c5.check = true;
}
Police1 p = new Police1();
while (true) {
int select = p.mafiaCheck();
if (select > 0 && select < 6) {
if (c1.num == select) {
c1.talk();
if (c1.check) {
break;
}
} else if (c2.num == select) {
c2.talk();
if (c2.check) {
break;
}
} else if (c3.num == select) {
c3.talk();
if (c3.check) {
break;
}
} else if (c4.num == select) {
c4.talk();
if (c4.check) {
break;
}
} else {
c5.talk();
if (c5.check) {
break;
}
}
} else {
System.out.println("잘못된 입력입니다.");
}
}
}
}
package Practice3;
/*
캐릭터는 다음 정보를 가진다.
-> 이름 레벨 경험치
1. gainExp() 경험치를 얻는다.
조건: 경험치를 추가한다.
경험치가 100 이상이면 레벨이 1 증가한다.
레벨업하면 경험치는 0으로 초기화한다.
2. checkLevel() 현재 상태를 출력한다.
출력 예: 이름: 기사
레벨: 2
경험치: 30
*/
class Character {
String name;
int lev;
int ex;
Character(String name, int lev, int ex) {
this.name = name;
this.lev = lev;
this.ex = ex;
}
void checkCharacter() {
System.out.println("이름: " + name);
System.out.println("레벨: " + lev);
System.out.println("경험치: " + ex);
}
void gainEx(int moreEx) {
ex += moreEx;
if (ex >= 100) {
System.out.println("경험치: " + ex + " + " + moreEx);
System.out.println();
System.out.println("🎉 레벨업! 🎉");
lev += 1;
ex = 0;
System.out.println();
checkCharacter();
} else {
System.out.println(moreEx + " 획득");
System.out.println("현재 경험치: " + ex);
}
}
}
public class Q1 {
static void main() {
Character c1 = new Character("양밥풀", 1, 50);
c1.checkCharacter();
c1.gainEx(10);
c1.gainEx(30);
c1.gainEx(100);
}
}
package Practice3;
/*
펫키우기 게임
1. feed()
조건: 밥을 먹으면 배고픔 수치가 20 감소한다.
배고픔 수치가 0보다 작아지면 0으로 만든다.
체력이 10 증가한다.
2. play()
놀면 배고픔 수치가 30 증가한다.
체력이 20 감소한다.
체력이 0 이하가 되면 "펫이 지쳤습니다." 출력
3. checkStatus() 현재 상태 출력
예:
이름: 초코
체력: 80
배고픔: 40
*/
class Pet {
String name;
int hp;
int hungry;
Pet(String name, int hp, int hungry) {
this.name = name;
this.hp = hp;
this.hungry = hungry;
}
void feed() {
hungry -= 20;
hp += 10;
System.out.println(name + "이가 밥을 먹었습니다! 🍖");
if (hungry < 0) {
hungry = 0;
System.out.println(name +"이는 이제 배고프지 않습니다! 🐾");
}
checkStatus();
}
void play() {
hungry += 30;
hp -= 20;
if (hp <= 0) {
System.out.println(name + "이가 지쳤습니다. 🧟♂️");
}
checkStatus();
}
void checkStatus() {
System.out.println("이름: " + name);
System.out.println("체력: " + hp);
System.out.println("배고픔: " + hungry);
}
}
public class Q2 {
static void main() {
Pet p = new Pet("밥풀", 100, 50);
p.checkStatus();
System.out.println();
p.feed();
System.out.println();
p.play();
System.out.println();
p.play();
System.out.println();
p.checkStatus();
}
}
package Practice3;
/*
RPG 전투 게임 ⚔️
조건: 플레이어와 몬스터가 싸우는 프로그램을 만든다.
[Player 클래스]
- 필드: 이름, 체력, 공격력
- attack(Monster monster) 메서드 생성
→ 몬스터의 체력을 공격력만큼 감소
→ 몬스터 체력이 0 이하이면 처치 출력
→ 아니면 남은 체력 출력
[Monster 클래스]
- 필드: 이름, 체력
- 생성자로 값 초기화
[main]
- 플레이어 객체 생성
- 몬스터 객체 생성
- 플레이어가 몬스터를 여러 번 공격
*/
class Player {
String name;
int hp;
int power;
Player(String name, int hp, int power) {
this.name = name;
this.hp = hp;
this.power = power;
}
void attack(Monster monster, Player player) {
System.out.println("🏹 " + name + "이가 " + monster.name + "를 공격했다!" + " 🏹");
System.out.println("🩸 " + "데미지: " + monster.hp + " - " + player.power + " 🩸");
monster.hp -= player.power;
if (monster.hp <= 0) {
monster.hp = 0;
System.out.println(monster.name + "의 체력이" + " 0이 되었습니다..." + " 👼");
} else {
System.out.println(monster.name + " 체력: " + monster.hp + " 😾");
}
}
}
class Monster {
String name;
int hp;
Monster(String name, int hp) {
this.name = name;
this.hp = hp;
}
void checkMonster() {
System.out.println("몬스터: " + name);
System.out.println(" 체력: " + hp);
}
}
public class Q3 {
static void main() {
Player p1 = new Player("밥풀", 100, 30);
Monster m1 = new Monster("길고양이", 100);
p1.attack(m1, p1);
System.out.println();
p1.attack(m1, p1);
System.out.println();
p1.attack(m1, p1);
System.out.println();
p1.attack(m1, p1);
System.out.println();
p1.attack(m1, p1);
// 개선할 부분
// for문을 활용해서 출력하기
for (int i = 0; i < 5; i++) {
p1.attack(m1, p1);
}
}
}
복잡하다. 근데 재밌다. 선생님이 설명해주시는 걸 못알아먹어도 재밌다.
지피티랑 객체화 문제를 푸는 시간이 가장 재밌었다.
조금 더 시간이 많았으면 좋았을텐데
얼른 내가 java에 더 익숙해져서 짧은 시간 내에도 많은 문제를 풀고 싶다!