package kr.or.ddit.basic;
import java.util.Random;
import javax.swing.JOptionPane;
/*
* 문제)
* 컴퓨터와 가위바위보를 진행하는 프로그램을 작성하시오.
* 컴퓨터가 가위 바위 보는 난수를 이용해서 구하고,
* 사용자의 입력은 showInputDialog()메서드를 이용하여 입력받는다.
*
* 입력시간은 5초로 제한하고 카운트 다운을 진행한다
* 5초안에 입력이 없으면 게임에 진 것으로 처리한다
*
* 5초 안에 입력이 있으면 승패를 구해서 결과를 출력한다.
*
* 결과 예시)
* 1) 5초 안에 입력을 못했을 경우
* -- 결 과 --
* 시간 초과로 당신이 졌습니다...
*
* 2) 5초 안에 입력을 했을 경우
* -- 결과 --
* 컴퓨터 : 가위
* 사용자 : 바위
* 결 과 : 당신이 이겼습니다.
*/
public class ThreadTest07 {
public static void main(String[] args) {
ThreadTest07 th = new ThreadTest07();
th.startGame();
}
public void startGame() {
Thread game = new Game();
Thread count = new CountDown();
game.start();
count.start();
}
}
class Game extends Thread {
// countdown 클래스와 이어주기 위한 boolean
public static boolean inputCheck = false;
@Override
public void run() {
String com = com();
String user="";
int userNo=0;
do {
user = JOptionPane.showInputDialog("가위 바위 보");
userNo = num(user);
if (userNo!=0) {
break;
}
System.out.println("잘못된 입력입니다.");
} while(true);
int comNo = num(com);
inputCheck = true;
System.out.println("-- 결 과 --");
System.out.println("컴퓨터 : " + com);
System.out.println("사용자 : " + user);
String result = result(userNo, comNo);
System.out.println("결 과 : " + result);
}
// 컴퓨터의 난수를 이용해 구하는 메서드
public String com() {
int com = new Random().nextInt(3) + 1;
if (com == 1) {
return "가위";
}
if (com == 2) {
return "바위";
}
return "보";
}
// 낸 것을 숫자로 반환하는 메서드
public int num(String input) {
if (input.equals("가위")) {
return 1;
}
if (input.equals("바위")) {
return 2;
}
if (input.equals("보")) {
return 3;
}
return 0;
}
// 결과 반환 메서드
public String result(int userNo, int comNo) {
int result = userNo - comNo;
if (result == 0) {
return "비겼습니다.";
}
if (result == 1 || result == -2) {
return "이겼습니다.";
}
if (result == 2 || result == -1) {
return "졌습니다.";
}
return null;
}
}
// 카운트 다운
class CountDown extends Thread {
@Override
public void run() {
for (int i = 5; i >= 1; i--) {
if (Game.inputCheck) {
return;
}
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO: handle exception
}
}
System.out.println("-- 결 과 --");
System.out.println("시간 초과로 당신이 졌습니다...");
System.exit(0);
}
}