UP - DOWN 게임 만들기 (첫 번째 팀 프로젝트, 셀프 리뷰 )

2024. 7. 1. 12:17·프로젝트

국비 수업을 들으면서 첫 팀프로젝트로 UP-DOWN 게임을 만들었다.

조건은 이렇다.

더보기
더보기

<업다운게임 제작하기>
<<<<요구사항>>>>
1. 1~100 사이의 정수가 랜덤으로 정답설정됩니다.
2. 사용자는 업다운게임을 합니다.
   50 DOWN
   25 UP
   26 정답입니다! :D
3. 정답을 5번안에 맞추게되면 명예의 전당에 기록됩니다.
   이름을 입력하세요. >> 작은 티모
4. 다음게임을 할때 [명예의 전당 : 티모]
5. 명예의 전당보다 빨리 맞추면
6. 새로 이름을 입력받습니다.

 

처음에는 나는 전공생이기 때문에 조원분들에 비해 조금이나마 더 익숙하니까 같이 코드를 짜본 후에 마지막에 내가 혼자 다듬을 생각이었다. 하지만 다들 너무 생각보다 잘 하고 열심히 하셔서 내가 손을 댈 부분은 별로 없었던 것 같다.

한 조원분이 notion을 이용할 생각을 하셔서 notion을 이용해서 팀 프로젝트의 진행방향과 과정이 자세히 담겼다.

https://minibcake.notion.site/4-6357d209bb5c4d99b39a95eb1136a579?pvs=4

자세한 부분은 노션을 참고했으면 좋겠다.

 

아래는 우리 팀의 최종 업다운게임 코드이다. 최대한 주석을 많이 사용해서 가독성과 이해를 높이려고 노력했다.

package Teamproject;

import java.util.Random;
import java.util.Scanner;
/*
팀과제 )

업다운 게임 제작하기

요구사항

1. 1 ~ 100 사이의 정수가 랜덤으로 정답설정됩니다.
2. 사용자는 업다운 게임을 합니다.
      50 down
      25 up
      26 정답입니다! :D
3. 정답을 5번안에 맞추게 되면 명예의 전당에 기록됩니다.
      이름을 입력하세요. >> 작은 티모
4. 다음 게임을 할 때 [명예의 전당 : 작은 티모]
5. 명예의 전당보다 빨리 맞추면
6. 새로 이름을 입력받습니다.

 */

public class Updowngame {

   public static void main(String[] args) {

      int ans; // 랜덤정답변수
      int guess; // 사용자 입력값
      int max; // 사용자 입력가능 범위지정
      int min; // 사용자 입력가능 범위지정
      int attempt; // 시도 횟수
      String king = ""; // 명예의 전당 이름
      int kingAttempt = 6; // 명예의 전당 기록(횟수)
      int menu; // 사용자 선택값

      Scanner sc = new Scanner(System.in);
      Random rd = new Random();

      System.out.println(".*[업다운 게임]*.");
      while (true) {
         // 메뉴 안내
         System.out.println("*.*.*.*.*.*.*.*");
         System.out.println("1. 게임 설명");
         System.out.println("2. 게임 시작");
         System.out.println("0. 게임 종료");

         if (king != "") {
            System.out.println("★☆[명예의 전당 : " + king + "님 (기록 : "+kingAttempt+"회)]☆★");
         }

         System.out.println("*.*.*.*.*.*.*.*");

         // 메뉴 입력값 검증
         while (true) {
            System.out.print("메뉴 번호 선택 >> ");
            menu = sc.nextInt();

            // 메뉴 입력값 while 종료조건
            if (0 <= menu && menu <= 2) {
               break;
            }

            // 제대로 된 입력값 안내
            System.out.println("해당하는 메뉴가 없습니다.");
            System.out.println("게임에 대한 설명을 들으려면 1 ,\n" 
                  + "게임을 시작하려면 2 ,\n" 
                  + "게임을 종료하려면 0 를 입력바랍니다.");
         } // 메뉴 입력값 검증 while종료

         // 게임 while 종료조건
         if (menu == 0) {
            System.out.println("업다운 게임을 종료합니다.");
            break;
         }

         // 게임설명
         else if (menu == 1) {
            System.out.println("[게임설명]\n" 
                  + "1. 컴퓨터가 1~100 중에서 임의의 수를 랜덤으로 정하면, 플레이어가 해당 수를 맞히는 게임입니다.\n"
                  + "2. 컴퓨터가 정한 수가 플레이어가 말한 수보다 작으면 컴퓨터는 '업'이라고 말하고,\n" 
                  + "   크다면 컴퓨터는 '다운'이라고 말해서 힌트를 줍니다.\n"
                  + "3. 플레이어는 힌트를 토대로 컴퓨터가 정한 수를 맞혀야 합니다.\n"
                  + "4. 명예의 전당에 기록된 횟수보다 적은 횟수에 맞추게 되면 명예의 전당에 오르게 됩니다.");
         }

         // 게임 시작 menu == 2
         else if (menu == 2) {
            System.out.println("업다운 게임을 시작합니다.");
            System.out.println("정답은 1~100까지의 정수 중에서 정해집니다.");

            ans = rd.nextInt(100) + 1; // 1~100 사이 정답 랜덤값 생성
            //System.out.println("정답은 " + ans);// 테스트용

            // 6. 초기화
            max = 100;
            min = 1;
            attempt = 0;

            while (true) {// 2번째 while문
               // 명예의 전당에 값이 있다면 명예의 전당 이름 출력

               // 8. 사용자 입력
               System.out.print("정수를 입력해주세요 >> ");
               guess = sc.nextInt(); // 사용자가 추측하는 값

               // 9.유효값검증
               if (guess >= min && guess <= max) {// 최소값과 최대값 사이의 숫자 입력
                  // guess이 ans보다 작다면 UP이라고 말한다
                  if (guess > ans) {// guess이 ans보다 크다면 DOWN이라고 말한다
                     // 그리고 다음번에 말해야할 수의 최댓값+1이 guess이 된다. ex) guess == 98 이라면 다음번에 97까지만
                     System.out.println("down! 정답이 입력값보다 작습니다.");
                     max = guess - 1;
                     attempt++;
                     continue;// 루프로 돌아가기
                  } else if (guess < ans) {
                     // guess이 ans보다 작다면 "UP"
                     // 최솟값+1이 guess ex)guess==20 다음번에는 21부터 말할 수 있다.
                     System.out.println("up! 정답이 입력값보다 큽니다.");
                     min = guess + 1;
                     attempt++;
                     continue;
                  } else {// guess==ans
                     attempt++;
                     System.out.println("정답입니다.");
                     System.out.println("★☆당신의 시도횟수 : "+attempt+"회☆★");


                     // 명예의 전당
                           if (1 <= attempt && attempt < kingAttempt ) {
                              System.out.println("★☆ 축하드립니다! 당신은 명예의 전당 등록 대상자 입니다. ☆★");
                              while(true) {
                                 System.out.print("이름을 입력해주세요 >>");   
                                 
                                 String name = sc.next();
                                 System.out.print("입력하신 "+name+"으로 저장하시겠습니까? (Y/N) >>");
                                 String answer = sc.next();
                                 
                                 if(answer.equals("Y")) {
                                   king = name;
                                    kingAttempt = attempt;//명예의 전당 기록 갱신
                                    break;
                                 }
                                 System.out.println();
                                 System.out.println("이름을 다시 입력해주세요");
                              }
                           } // 명예의전당 if문 종료

                     //종료
                     break;
                  }
               }
               // 범위가 아니었을 때
               System.out.println("유효한 값이 아닙니다.");
               System.out.println(min + "에서 " + max + "사이의 정수를 입력해주세요");
            }//2번째 while문 종료
         }//else if (menu == 2) 종료
      } // 게임 while 종료
   }// main
}// class

 

함수를 사용하지 않고 짠 코드이다.

 

<<셀프 리뷰>>

+

잘했던 점

1. notion을 이용한 점 -  회의록을 쉽게 작성할 수 있었음

2. 한명이 몰빵으로 한 것이 아닌, 모두가 참여해서 어느 누가 발표를 하던 상관이 없었음

3. 코드 및 주석 정리가 자세했다고 생각

 

-

아쉬웠던 점

1. 함수 사용 x

2. java.util.InputMismatchException 고려하지 않음 - 입력값에 정수가 아닌 문자열을 넣으면 오류가 발생함 

3. 요구사항과 뉘앙스에 맞는 코드위치가 아니었음 ( 명예의 전당 )

 

(( 총합 ))

함수를 사용했다면, 가독성과 유지보수가 용이했을 것이고, 각자 코드를 짤 때 분배하기가 더 쉬웠을 것이다. 

하지만 팀 프로젝트를 진행 도중에 함수를 배웠다. 함수를 쓸까 했지만 이미 다 짜여진 코드에서 함수를 추가하는게 너무 복잡하다는 생각이 들어서 상의하에 우리조는 함수를 사용하지 않기로 했다. 

다만 사용했으면 어땠을까 하는 아쉬움이 남기는 했다.

 

다만 국비 시작한 지 일주일도 안 된 상황에서 첫 번째 팀플 치고는 잘 했다고 생각한다.

혼자 해낼 수도 있는 어렵지 않은 코드를 짜는 것이었지만, 팀프로젝트의 주 목적인 "협동" 면에서는 만족스러웠다.

 

 

'프로젝트' 카테고리의 다른 글

COMA 클라이밍 크루 최종 프로젝트 자료  (0) 2024.11.14
[팀 프로젝트] COMA 클라이밍 크루 커뮤니티 중간 프로젝트 후기 및 느낀점  (1) 2024.10.01
[JAVA] 쇼핑몰 프로그램 MVC 패턴으로 구현하기 프로젝트  (0) 2024.07.24
[JAVA] 포켓몬 게임 프로젝트 - 2  (1) 2024.07.12
[JAVA] 포켓몬 게임 프로젝트  (2) 2024.07.12
'프로젝트' 카테고리의 다른 글
  • [팀 프로젝트] COMA 클라이밍 크루 커뮤니티 중간 프로젝트 후기 및 느낀점
  • [JAVA] 쇼핑몰 프로그램 MVC 패턴으로 구현하기 프로젝트
  • [JAVA] 포켓몬 게임 프로젝트 - 2
  • [JAVA] 포켓몬 게임 프로젝트
yn98
yn98
좌우명 : 여전할 것 인가, 역전할 것 인가? 백엔드 개발자가 되고싶은 역전하고 있는 개발자 꿈나무의 블로그입니다. 개발을 하면서 공부한 것들을 기록합니다. 24.06 ~
  • yn98
    개발 꿈나무
    yn98
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • Python (3)
      • 공부 (7)
      • DB (7)
      • JAVA (24)
      • JSP (9)
      • jQuery (2)
      • HTML (3)
      • Spring (20)
      • 웹 (4)
      • C (1)
      • Git (2)
      • 에러일기 (19)
      • 프로젝트 (6)
      • 책 (21)
        • 멘토씨리즈 자바 (14)
        • 2024 수제비 정보처리기사 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
    • Notion
  • 공지사항

  • 인기 글

  • 태그

    Di
    수제비
    html
    MVC
    DispatcherServlet
    정보처리기사
    스프링 프레임워크
    정보처리기사 실기
    recoverabledataaccessexception
    오버로딩
    멘토씨리즈 자바
    jsp
    오블완
    정처기
    codeup 4891 : 행복
    정처기 실기
    티스토리챌린지
    ViewResolver
    객체지향
    생성자
    2-layered 아키텍처
    이벤트 스케줄러
    상속
    @service
    @Component
    어노테이션
    Spring
    @repository
    java
    aop
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
yn98
UP - DOWN 게임 만들기 (첫 번째 팀 프로젝트, 셀프 리뷰 )

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.