[코드스쿼드 코코아 과정] 미션3 홀짝 게임 만들기

Kyu·2020년 11월 10일
0

여전히 요구사항이 많아서 내 수준으로는 안될거 같아 일단 문제를 더욱 잘게 쪼갰다.

과정 1

코드 보기

while문에서 중간에 뭘 입력할지 물으면서 한 턴 씩 돌아가는 게임을 만들려고 했다. 근데 한 번 홀수나 짝수를 입력하면 조건문을 벗어날때까지 계속 반복 했다.

코드는 위에서 아래로 읽는다. 아마 그것만 생각했어도 금방 이런 문제는 풀렸을 것이라고 생각한다.

과정 2

코드 보기

맞닥뜨린 문제는 중복으로 사용하는 print하는 것들은 메소드로 묶어서 간단히 출력할 수 있었는데 사용하고 있는 변수를 그 print를 묶은 메소드들에 포함시킬수 없냐였다. 내 질문을 다듬으면 "전역변수를 메인메소드에 사용할 수 있나?" 이었다. 이건 오늘 배운 클래스 멤버와 인스턴스 멤버에서 다루었었다. 답은 yes. 클래스 맴버와 인스턴스 맴버 바로가기

과정 3

코드 보기

전역변수를 메인메소드에 사용했다. 이를 통해서 반복문 안에 로직을 수정하기 쉬워졌다. 이 정도면 충분히 내가 만든 문제는 해결했다고 볼 수 있겠다.

과정 4

코드 보기

본격적으로 다음과 같은 게임을 만들기 시작했다. Todoist에 각 요구사항을 넣어서 하나씩 하나씩 끝내기로 했다. while문에 true를 넣어서 계속 반복시키는 것을 당연한거지만, 조건문만 넣어서 썼다보니 어떻게 계속 반복시켜야할지 생각하다가 어쩌다 팀원이 while문에 true넣어서 쓴것을 보고 나도 그렇게 배웠다.

과정 5

코드 보기

이기고 질때 하나의 메소드로 만들었다. 메소드 하나에 여러가지 기능을 넣고 싶었다. 이기고 지는 것에 관한 프린트 출력과 플레이어와 컴퓨터의 가지고 있는 금액의 변경을 한꺼번에 말이다.

또, 👇아래 코드와 같이 스캐너로 전역변수를 빼려고 했었다

class C {
	static Scanner sc = new Scanner(System.in);
    static int i;
    
    public static void m() {
    int i = sc.nextInt();
    }
}

그런데 이런식으로 전역변수로 빼서 메인메소드에서 사용할 수 없다. 이렇게하려면 리턴으로 빼야한다.


아래부터는 홀짝 만들면서 적은 노트들. 적을 게 너무 많아서 다음으로 미루련다.

한 메소드에는 한 기능 밖에 들어가지 못하는건가? 그러니까 메인메소드에서 (인스턴스가 필요없는) 단일 클래스로 입력을 주고 출력을 주는 메소드를 만드는데, 그 출력을 주는 메소드에서 print도 같이 출력하고 싶어서 이렇게 저렇게 해봤는데 안됐다. 결과는 그렇게 해주는 방법보다. 메인메소드에서 전역변수에 접근하여 그 전역변수를 메소드 안에서 사용하는게 내가 찾은 답이었다.

마이너스 금액이거나 베팅할수있는 금액을 넘기면 다시 입력 기능 구현 -> 돌아가게하는게 중요하니까 예외사항은 마지막에 구현하자

"Math 클래스가 제공하는 메소드는 모두 정적이므로 Import나 Math클래스 선언 없이 바로 사용이 가능합니다." 여기에서 느낀건 자바에서 직접 제공하는 클래스들도 내가 만드는 클래스랑 같은 맥락으로써, 예를들어 이 문구를 보면서 느낀건 Math 클래스가 모두 정적 즉 static 전역으로 사용할수있으니까 import나 math클래스 선언 없이, 즉 인스턴스를 만들필요가 없이 바로 사용이 가능하다라는걸 알아들을수있었다

Function gain and loss 커밋 이후에 내가할일

  • 상대방의 소지금이 0원이 되면 다음 상대가 등장. 다음 상대는 내 소지금 * pow(1.2, numStage) 의 소지금을 가지고 등장한다. -> 일단 내 소지금이랑 상대방소지금이라는 각각의 조건에 따라 if문을 만든다. 그리고 몇번째 턴인지 표시하고 스테이지를 표시한다. 이건 나중에.

pow(1.2, computerAmount) 이거 때문에 computerAmount를 int에서 double 로 바꿨다. 출력될때 소수점이 표시되서 지우고 싶은데 어떻게 해야할까? 그냥 올림해서 출력하면 되나?

실행은 되는데 컴퓨터어마운트가 0이거나 0이하일때 실행되어야할 if문이 실행되지않아서 디버거로 문제를 확인하는중. 확인함. 컴퓨터나 플레이어나 0이나 0이하가 되었을때 while문을 빠져나갈 방법이 없음. 해결

pow()를 사용하니까 좌항 우항 모두 더블형인데 어떻게 계산하지?
C.computerAmount = C.playerAmount * (int)Math.pow(1.2, numStage); 일단 이렇게하니까 빨간줄이 사라지긴 했다. 근데 실행해보니까 제대로 작동하지 않는다. 그래서 그냥 컴퓨터랑 플레이어 어마운트를 전부 더블로 바꿈. 문제해결.
근데 곱했을때 소수점자리가 남고 게임진행할때 소수점까지 입력해주면 번거롭고 복잡해질 느낌이라 반올림했다

한번씩 실행할때마다 턴을 나타내면 좋겟다. 턴을 나타내는 전역변수를 넣고 메소드안에 쉽게 넣었음

라이벌 8명은 반복문에서 조건을 스테이지 < 9 일때 계속 돌리게함

원래홀짝게임에 인디언랜덤이름을 끼워넣으려고했는데 턴이 다시시작될때마다 어떻게 다시 랜덤값을 만들어주어야할지 모르겠다

profile
TIL 남기는 공간입니다

0개의 댓글