JAVA/[실습문제]
[실습 문제] 상속 (포켓몬)
Itchild
2024. 4. 8. 17:39
728x90
반응형
또 시작된 포켓몬 게임 ,,, 포켓몬게임을 이겨내자
[ 실 습 문제 ]
▶포켓몬 클래스
이름 ----------> 멤버변수
경험치
레벨
----------------> 생성자 위치
게임() --------------> 메서드
50% 확률로 게임성공
성공: 경험치+10~50랜덤상승
실패: 경험치+10 상승
대화()
상태출력()
ㅁㅁㅁ는 Lv.ㅁ [현재 경험치 /100]
▶피카츄 클래스 -----------> 자식클래스
게임() -------> 메서드(무조건 성공)
100% 게임성공
대화()
피카피카
▶파이리 클래스 -----------> 자식클래스
게임() ------------> 메서드 (5분의 1 확률로 성공한다)
20% 게임성공
-> 1~5 : 나오면 성공
대화()
파아~~
▶main()에서
피카츄2마리
파이리 1마리 생성
게임을 각각 10번씩 시켜서 결과 출력
한글코딩 먼저 해보기 ~~~~!
!!! 한글코딩 !!!
▶포켓몬 클래스 {
이름 ;
경험치; : 기본값0
레벨; : 기본값 5
포켓몬 (이름){ // 생성자
이름
경험치 : 0
레벨 : 5
this(이름,0,5);
}
포켓몬 (이름, 경험치, 레벨){ // 생성자
이름
경험치
레벨
}
게임(){
랜덤 클래스 0~1 중에서 뽑기
if(0 이면 성공){
경험치 랜덤으로 10~50 상승
} else {
경험치 10 상승
}
}
대화(){
}
상태출력()
ㅁㅁㅁ는 Lv.ㅁ [ 현재경험치 / 100]
}
▶피카츄 클래스{
피카츄(name, exp, level){ // 생성자
super(name, exp, level);
}
게임(){
랜덤 클래스 무조건 0만 나오게
경험치 랜덤으로 10~50 상승
}
대화(){
피카피카
}
}
▶파이리 클래스 {
파이리 (name, exp, level){
super(name, exp, level);
게임(){
랜덤클래스 1~5 까지 중
if( 1이 나오면 ) {
성공 ! 경험치 10~50 랜덤 상승
}
else {
실패! 경험치 10 상승
}
}
대화(){
파아~~
}
}
▶ main() {
피카츄 pika1 = new 피카츄("이름", 5, 0)
피카츄 pika2 = new 피카츄("이름", )
파이리 ppp = new 파이리("파이리", 5,0)
int i = 0;
for(){ // 10번
피카츄.게임()
파이리.게임()
}
pika1.대화()
pika2.대화()
ppp.대화()
계획을 세운 후 코딩 진행 !
package class04;
import java.util.Random;
class Pokemon {
String name;
int exp;
int level;
Pokemon(String name) { // 이름을 사용자가 지정 할수도 있고
this(name, 0, 5);
}
Pokemon(String name, int exp, int level) {
this.name = name;
this.exp = exp;
this.level = level;
}
void game() {
Random rand = new Random();
int num = rand.nextInt(2);
if (num == 0) {
System.out.println("성공 !");
this.exp += rand.nextInt(41) + 10;
} else {
System.out.println("실패...!");
this.exp += 10;
}
while (this.exp >= 100) { // 경험치가 100이 넘어가면
System.out.println(this.name + ", 레벨업!");
this.level++; // 레벨업
this.exp -= 100; // 레벨업 되고 경험치는 다시 초기화 되어야 하므로 -100 해주기
}
}
void printChat() { // 대화
}
void print() { // 상태출력
System.out.print(this.name + "는 Lv. " + this.level);
System.out.println("[ " + this.exp + " / 100 ]");
System.out.println();
}
}
class Pikachu extends Pokemon {
Pikachu(String name, int exp, int level) {
super(name, exp, level);
}
void game() {
Random rand = new Random();
System.out.println("성공 !");
this.exp += rand.nextInt(41) + 10;
System.out.println("경험치 상승");
System.out.println();
while (this.exp >= 100) { // 경험치가 100이 넘어가면
System.out.println(this.name + ", 레벨업!");
this.level++; // 레벨업
this.exp -= 100; // 레벨업 되고 경험치는 다시 초기화 되어야 하므로 -100 해주기
}
}
void printChat() { // 대화
System.out.println("대화 : 피카피카");
}
}
class Pairi extends Pokemon {
Pairi(String name, int exp, int level) {
super(name, exp, level);
}
void game() {
Random rand = new Random();
int select = rand.nextInt(5) + 1;
if (select == 1) {
System.out.println("성공 !");
this.exp += rand.nextInt(41) + 10;
System.out.println("경험치 상승");
System.out.println();
} else {
System.out.println("실패...!");
this.exp += 10;
}
while (this.exp >= 100) { // 경험치가 100이 넘어가면
System.out.println(this.name + ", 레벨업!");
this.level++; // 레벨업
this.exp -= 100; // 레벨업 되고 경험치는 다시 초기화 되어야 하므로 -100 해주기
}
}
void printChat() { // 대화
System.out.println("대화 : 파아~~");
}
}
public class Test02 {
public static void main(String[] args) {
Pikachu pika1 = new Pikachu("피카츄1", 0, 5);
Pikachu pika2 = new Pikachu("피카츄2", 0, 6);
Pairi ppp = new Pairi("파이리", 0, 5);
for (int j = 0; j < 10; j++) {
pika1.game();
pika2.game();
ppp.game();
}
pika1.print();
pika2.print();
ppp.print();
pika1.printChat();
pika2.printChat();
ppp.printChat();
}
}
콘솔에 출력해보면

쭉쭉쭉 게임 10번 진행 후 포켓몬의 이름,레벨, 경험치
그리고 대화 메서드도 같이 출력 해볼수 있다.
강사님의 풀이 ★
코드를 많이 줄일수 있다 ! 줄일 수 있는 부분은 줄여나갈 것 !
package class04;
import java.util.Random;
class Poketmon {
String name;
int exp;
int lv;
String sound;// 오버라이딩을 더 줄여서
// String 울음소리를 멤버변수에 정의해서 오버라이딩을 없애볼수 있다
static Random rand = new Random();
Poketmon() { // 지정하지않는 경우에는 디폴트로 "포켓몬"이 설정됨
this("포켓몬");
}
Poketmon(String name) { // 이름을 사용자가 지정할수도있고,
this.name = name;
this.exp = 0;
this.lv = 5;
this.sound = "...";
}
void game() {
int action = rand.nextInt(2);
if (action == 0) {
gameT();
} else {
gameF();
}
lvUp();
}
// 모듈화 하기
// 코드가 아무리 짧아도 반복되면 모듈화를 사용하는게 좋다
void gameT() {
this.exp += (rand.nextInt(41) + 10);
System.out.println(this.name + ", 성공!");
}
void gameF() {
this.exp += 10;
System.out.println(this.name + ", 실패...");
}
void lvUp() { // 레벨업 하는 메서드도 만듬
while (this.exp >= 100) {
this.exp -= 100;
this.lv++;
System.out.println(this.name + ", 레벨업!");
}
}
void hello() { // 울음소리 하나만 지정하기
// 오버 라이딩 : 상속 o, 메서드 시그니처 동일
System.out.println(this.name + ": " + this.sound); // 포켓몬 : 울음소리
}
void printInfo() { // 출력
System.out.println(this.name + "는 Lv." + this.lv + " [" + this.exp + "/100]");
}
}
class Pika extends Poketmon {
Pika() { // 기본생성자 일때 레벨저장하기 !
this(5);
}
Pika(int lv) {// 생성자에서 무조건 인자가 많은거 부터 작성한다 , 인자가 있는거부터
super("피카츄");
this.lv = lv;
this.sound = "피카피카";
}
void game() {
int action = rand.nextInt(1);
if (action == 0) {
gameT();
} else {
gameF();
}
lvUp();
}
}
class Charmander extends Poketmon {
Charmander() {
this(5);
}
Charmander(int lv) {
super("파이리"); // super("파이리");
this.lv = lv; // this.level = level; 레벨을 이 레벨로 바꿔줘
this.sound = "파아~~~";
}
void game() {
int action = rand.nextInt(5);
if (action == 0) {
gameT();
} else {
gameF();
}
lvUp();
}
}
public class Test03 {
public static void main(String[] args) {
Pika p1 = new Pika(); // 피카츄,5,0
Pika p2 = new Pika(10); // 피카츄,10,0
Charmander c1 = new Charmander();
Charmander c2 = new Charmander(11);
for (int i = 0; i < 10; i++) {
p1.game();
p2.game();
c1.game();
}
p1.printInfo();
p2.printInfo();
c1.printInfo();
p1.hello();
c1.hello();
}
}
728x90
반응형