본문 바로가기

IT&코딩/Java

Java - 7일차 (Game 설계)

728x90
반응형

■ 주민등록번호 분석 프로그램

 

□ 조건

 

프로그램 시작하면  

 

이름과 주민등록번호 13자리를 입력받는다.

 

<맞는 경우>

홍길동님의 주민등록번호 분석결과

생년월일 : XXXX년 XX월 XX일

나이 : XX세

성별 : 남(여)

출생지역 : XX지역

 

<틀리는 경우>

잘못된 주민등록번호입니다.

 

 

 

□ 주민등록번호 코드

 

package jun.java.exam04;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
public class JuminQuiz {
	public static void main(String[] args) throws IOException {
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		
		System.out.print("이름 : ");
		String name = br.readLine();
		
		int[] jumin = new int[13];
		System.out.print("주민등록번호 : ");
		for(int i=0; i<jumin.length; i++) {
			jumin[i] = System.in.read() - 48;
		}
		System.in.read();System.in.read(); // 엔터값 처리
		
		float hap = 0.f; float temp = 0.f; float total = 0,f;
		float cre = 2.f;
		for(int i=0; i<jumin.length-1; i++) {
			if(cre == 10.f) cre = 2.f;
			hap += jumin[i] * cre;
			cre++;
		}
		
		temp = 11.f * (int)(hap/11.f) + 11.f -hap;
		total = temp - 10.f * (int)(temp/10.f);
		
		if(jumin[jumin.length-1] != total) {
			System.out.println("잘못된 주민등록번호입니다");
			return;
		}
		
		System.out.println();
		System.out.println(name + "님의 주민등록번호 분석결과");
		System.out.println();
		
		int year = 1900;
		
		switch(jumin[6]) {
		case 3:
		case 4:year = 2000;
		case 9:
		case 0: year = 1800;
		default : year = 1900;
		}
		year = year + jumin[0]*10 + jumin[1];
		int month = jumin[2]*10 + jumin[3];
		int day = jumin[4]*10 + jumin[5];
		
		System.out.println("생년월일 : " + year + "년 " + month + "월 " + day + "일생");
		System.out.println("나이 : " + (Calendar.getInstance().get(Calendar.YEAR) - year) + "세");
		System.out.println("성별 : " + (jumin[6] % 2 == 0? "여성" : "남성"));
		
		String area = "";
		switch(jumin[7]) {
		case 0: area = "서울지역"; break;
		case 1: area = "경기지역"; break;
		case 2: area = "강원지역"; break;
		case 3: area = "충북지역"; break;
		case 4: area = "충남지역"; break;
		case 5: area = "전북지역"; break;
		case 6: area = "전남지역"; break;
		case 7: area = "경북지역"; break;
		case 8: area = "경남지역"; break;
		case 9: area = "제주지역"; break;
		}
		System.out.println("출생지역 : " + area);
	} // end main

}

 


 

■ 홀짝게임 1

 

// money = 1000;

// 홀짝 맞추기
// 1. 홀수
// 2. 짝수
// 0. 프로그램 종료
// 메뉴선택 : (커서) 1 + enter
// 번호 입력시
// 베팅금액 : (커서) 200 + enter

// 주사위를 던지려면 enter를 입력하세요 -> enter를 치면
// 주사위 값
// YOU WIN(LOSE)
// 잔액 : 1200원
//---------------------------------------------
// 0번 누르면 "정말로 종료하시겠습니까(Y/N)? : 
// y면 종료
// n면 다시 메뉴로

※ 랜덤 값 만들기

// Math.random(); 0<= 값 <1 에 해당하는 double 값이 나온다.
// 6을 곱하면 0<= 값 < 6
// int로 형변환 하면 0<= 값 <=5
// _1을 하면 

// 다른 대안
// Random r = new Random();
// r.nextInt() 를 x라고 부르면 -21.......<= x < 21.............
// x >>> 1 하면 무조건 양수가 됨.
// x % 6 + 1

package jun.java.exam09;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class DiceQuizEx {

	public static void main(String[] ar) throws IOException {
		int money = 1000; int holjjak; int menu; double dap;
		
		while(true) {
		System.out.println("<홀짝 맞추기>");
		System.out.println("1. 홀수");
		System.out.println("2. 짝수");
		System.out.println("0. 프로그램 종료");
		System.out.print("메뉴선택 : ");
		menu = System.in.read() - 48;
		System.in.read();
		System.in.read();
		
		if(menu == 1 || menu == 2) {
			
			BufferedReader br = 
					new BufferedReader(new InputStreamReader(System.in));
			
			System.out.print("베팅 금액 : ");
			holjjak = Integer.parseInt(br.readLine());
			
			dap = (Math.random())*6;
			if(menu%2 == ((int)dap+1)%2) {
				System.out.println("YOU WIN!!!");
				money += holjjak;
				System.out.println("당신의 남은 금액은 "+money+"입니다");
			}else {
				System.out.println("YOU LOSE!!!");
				money -= holjjak;
				System.out.println("당신의 남은 금액은 "+money+"입니다");
				}
			}
		else if(menu == 0) {
			System.out.print("정말로 종료하시겠습니까?(Y/N) ");
			char ch = (char)System.in.read();
			if(ch == 'Y')
				break;
		}
		}
		}
	}

 


 

■ 홀짝게임 2

 

package jun.java.exam01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class DiceGame {

	public static void main(String[] args) throws IOException {
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		int money = 1000; // 게임머니 
		int menu = -1; // 선택한 메뉴
		boolean isStop = false;
		// 낮은 결합도, 높은 응집도
		while(!isStop) {
			System.out.println("1. 홀수");
			System.out.println("2. 짝수");
			System.out.println("0. 게임종료");
			System.out.print("메뉴선택 : ");
			try {
				menu = Integer.parseInt(br.readLine());		
			}catch(NumberFormatException nfe) {
				menu = -1; // 대체값 기법
			}
			if(menu == 0) {
				System.out.println();
				System.out.print("정말로 종료하시겠습니까? (y.n) : ");
				char result = (char)System.in.read();
				System.in.read();System.in.read();
				if(result =='Y'||result == 'y') {
					// System.exit(0); 종료
					isStop = true;
				}
				System.out.println();
				continue;
			}
			if(menu != 1 && menu != 2) {
				System.err.println("\n메뉴 입력 오류 : 메뉴를 확인하시고 다시 입력해 주세요 ");
				continue;
			}
			
			
			System.out.println();
			System.out.print("베팅금액 = ");
			
			int batMoney = Integer.parseInt(br.readLine());
	
			if(batMoney > money) {
				System.out.println();
				System.out.println("현재 보유금액보다 많은 금액을 배팅하셨습니다");
				System.out.println("ALL IN으로 처리하겠습니다.");
				batMoney = money;
			}
			
			System.out.println();
			System.out.println("주사위를 던지려면 Enter를 치세요");
			System.in.read();System.in.read(); // Enter 값 처리
			
			int dice = (int)(Math.random()*6)+1;
			/* 참고 Random 객체를 이용하면
			 * Random r = new Random();
			 * int dice = r.nextInt; -2147483648 ~ 2147483647
			 * dice = (dice >>> 1) % 6 +1;
			 */
			System.out.println("주사위 값 : " + dice);
			if((menu + dice) % 2 == 0) { // 내가 이기는 경우
				System.out.println("YOU WIN!!");
				money += batMoney;
			}else {// 내가 지는 경우
				System.out.println("YOU WIN!!");
				money -= batMoney;
			}
			
			System.out.println("잔액 : " +money);
			
			if(money<=0) {
				System.out.println();
				System.out.println("가진 돈을 다 잃으셨습니다. 돈 벌어서 다시 오세요");
				isStop = true;
			}
			if(money >= 5000) {
				System.out.println();
				System.out.println("지나친 도박은 몸에 해롭습니다. 게임을 강제적으로 종료합니다");
				isStop = true;
			}
			System.out.println();
		}// end while
		
	}

}

 


 

■ 가위바위보 게임

 

// money = 1000;
// 1. 주먹
// 2. 가위
// 3. 보자기
// 0. 게임종료
// 메뉴선택 : 1
// 배팅금액 : 200

// 결과를 보려면 엔터를 치세요 - Enter

// Computer : 주먹 
// YOU : 주먹 
// 결과 : Draw
// 잔액 : 1000원 

package jun.java.exam05;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class RCPGameEx {

	public static void main(String[] args) throws IOException {
		BufferedReader br =
				new BufferedReader(new InputStreamReader(System.in));
		
		int money = 1000;
		boolean isStop = false;
		int menu = -1;
		int[][] result = { {0, 1, -1}, {-1, 0, 1}, {1, -1, 1} };
		String[] str = {"주먹", "가위", "보자기"};
		
		while(!isStop) {
			System.out.println("1. 주먹");
			System.out.println("2. 가위");
			System.out.println("3. 보자기");
			System.out.println("0. 게임종료");
			System.out.print("메뉴선택 : ");
			
			try {
			menu = Integer.parseInt(br.readLine());		
			}catch(NumberFormatException nfe) {
				menu = -1; // 대체값 기법
			}
			
			if(menu == 0) {
				System.out.println();
				System.out.print("정말로 종료하시겠습니까? (y.n) : ");
				char response = (char)System.in.read();
				System.in.read();System.in.read();
				if(response =='Y'||response == 'y') {
					// System.exit(0); 종료
					isStop = true;
				}
				System.out.println();
				continue;
			}
			if(menu != 1 && menu != 2 && menu != 3) {
				System.err.println("\n메뉴 입력 오류 : 메뉴를 확인하시고 다시 입력해 주세요 ");
				continue;
			}
			
			
			System.out.println();
			System.out.print("베팅금액 = ");
			int batMoney = Integer.parseInt(br.readLine());
			if(batMoney > money) {
				System.out.println();
				System.out.println("현재 보유금액보다 많은 금액을 배팅하셨습니다");
				System.out.println("ALL IN으로 처리하겠습니다.");
				batMoney = money;
			}
				System.out.println();
				System.out.println("결과를 보려면 Enter를 치세요");
				System.in.read();System.in.read(); // Enter 값 처리
				
				int com = (int)(Math.random()*3)+1;
				System.out.println("Cimput" + str[com-1] + ", YOU : " + str[menu-1]);
				
				if(result[menu-1][com-1] == 1) {//내가 이긴 거
					money += batMoney;
					System.out.println("you win!!");
				}else if(result[menu-1][com-1] == -1) {// 내가 진거
					money -= batMoney;
					System.out.println("you lose!!");
				}else if(result[menu-1][com-1] == 0) {// 비긴 거
					System.out.println("draw!!");
				}
				
				System.out.println("잔액 : " +money);
				
				if(money<=0) {
					System.out.println();
					System.out.println("가진 돈을 다 잃으셨습니다. 돈 벌어서 다시 오세요");
					isStop = true;
				}
				if(money >= 5000) {
					System.out.println();
					System.out.println("지나친 도박은 몸에 해롭습니다. 게임을 강제적으로 종료합니다");
					isStop = true;
				}
				
		}
	}

}

 


 

■ 야구게임

 

// 게임을 진행하려면 ENTER를 치세요! ENTER
// COMPUTER가 숫자를 생성했습니다

// COMPUTER 세자리 000 (각 자리 0~9까지) 대신 중복되면 안 됨 
// ex) 7 1 4 단자리로 끊어서 입력받아야 한다.
// 이중 FOR문으로
// 0 1 2 만약 이전 생성수랑 겹치면 다시 만들어

// 당신이 생각하는 숫자 : 1 2 4 

// 숫자가 있지만 자릿수가 다르면 BALL
// 숫자가 있고 자릿수도 같으면 STRIKE
// 없으면 아웃

// 10회 안에 성공해야 함

package jun.java.exam06;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BaseballGameEx {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.print("게임을 진행하시겠습니까?(y/n)");
		String res = br.readLine();
		if(res.equals("N") || res.equals("Y"))
			return;
		
		System.out.println("숫자를 생성했습니다.");
		
		int[] computer = new int[3];
		
		for(int i=0; i<computer.length; i++) {
			computer[i] = (int)(Math.random()*10);
			for(int j=0; j<i; j++) {
				if(computer[j] == computer[i]) {
					i--;
					return;
				}
			}
		}
		
		for(int i=0; i<computer.length; i++) // 컴퓨터가 생성한 숫자 확인
			System.out.println("computer[" + i + "] = " + computer[i]);
		
		System.out.println();
		
		int[] myNum = new int[3];
		
		for(int i=0; i<10; i++) {
			System.out.print("당신이 생각하는 숫자는? : ");
			
			String imsiNum = br.readLine(); // 지금 방식 charAt으로 한 글자 뽑아서
			for(int j=0; j<myNum.length; j++)
				myNum[j] = imsiNum.charAt(j) - 48;
			
			int strike = 0; int ball = 0;
			for(int j=0; j<computer.length; j++) {
				for(int k=0; k<myNum.length; k++) {
					if(computer[j] == myNum[k]) {
						if(j==k)strike++;
						else ball++;
						break;
					}
				}
			}
			
			System.out.println(i + 1 + "구 : " + strike + "스트라이크, " + ball + "볼" );
			
			if(strike == 3) {
				System.out.println("정답입니다.");
				break;
			}
			if(i==9) {
				System.out.println();
				System.out.print("실패입니다.\n정답은 : ");
				for(int j=0; j<computer.length; j++) // 컴퓨터가 생성한 숫자확인
					System.out.print(computer[j]);
			}
			System.out.println();
		} // end for i
		
	}
}

 


 

■ 마방진 게임

 

package jun.java.exam01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Mabangjin {

	public static void main(String[] args) throws IOException {
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		
		System.out.print("숫자(홀수만) : ");
		int num = Integer.parseInt(br.readLine());
		
		int[][] mabang = new int[num][num];
		
		int row=0; int col = num / 2;
		
		for(int su=1; su<=num*num; su++) {
			mabang[row][col] = su;
			if(su % num == 0) {
				row++; continue;
			}
				
			row--; col++;
			if(row < 0) row = mabang.length - 1; // num - 1과 똑같은 것이다.
			if(col > mabang.length - 1) col = 0;
		}

		System.out.println();
		
		for(int i=0; i<mabang.length; i++) {
			for(int j=0; j<mabang[i].length; j++) {
				System.out.print(mabang[i][j] + "\t");
			}
			System.out.println();
		}
	}
}

 

728x90
반응형