/*
* 가위바위보 게임을 작성합니다
*
* 1.모든 내용은main() 내부에 정의
* 2. 게임의 룰은 다음과 같음
* 3. 게임이 시작되면, ===== 가위바위보 게임을 시작합니다(y/n) ===== 출력
* 4. 만약 y 를 입력하면 아래처럼 나옵니다.
* 4-1 가위(1), 바위(2), 보(3) 메세지 출력
* 4-2 1 or 가위 를 입력 하면 사용자의 값은 가위입니다.
* 4-3 컴은 랜덤값을 이용해서 1, 2, 3 중 하나를 생성후 사용자와 비교 합니다
* 4-4 결과를 컴에 출력한다. ==> ex> 당신 : 가위 컴 : 보 U win draw or lose
* 4-5 결과 출력 후 게임 더하기 (y/n) 를 출력 하소, y인 경우 4-1 로 되돌아 가서 게임이 다시 시작된다
* 즉 n 가 입력될떄까지 게임 무한 반복죔
* 4-6 만약 게임을 더 이상 하지 않는 n 가 입력된다면, 좋은 하루 되세요~ 출력 후 게임 종료
*
* 5. 위 4번 에서 n 을 입력하면 게임도 안하는 당신은 바보 라는 메세지 출력 후 게임 종료
*/
package cohttp://m.avi6.begin;
import javax.swing.JOptionPane;
public class GawiBawiBoGame1 {
//메세지 객체를 이용해서 메세지 이용, 따라서 필드로 Message 객체를 선언
private Message message;
//id 필드도 선언
private String id;
//게임 시작 여부 및 계속 지속 여부 필드 선언
private boolean isBegin;
private boolean isContinue;
private int win;
private int draw;
private int lose;
//게임 횟수 카운트
private int count;
//상수 : 항상 고정된 값을 갖는 변수
//자바에서 상수는 특정 키워드를 사용해서 합니다. final 키워드를 이용하면 상수가 됩니다,
//즉 값을 변경하면 무조건 에러임
//사용자 및 컴위 정보를 저장하는 배열의 길이를 담는 상수 선언
//자바에서 상수는 항상 대문자
private static final int RECORD_VALUE = 20;
//사용자의 값을 저장하는 배열 선언
private String[] userValues;
private String[] comValues;
//생성자를 어떻게 정의 할까요??
public GawiBawiBoGame1() {
}
//첫 메세지를 출력하도록 하는 메서드 정의
//ID입력을 받음,, 존재여부에 따라서 메세지 내용이 조금 틀려지겟넹,,,
public void printGameBeginMsg() {
//일반메세지 이므로, 객체 생성없이 static 메서드 호출 해서 메세지 출력함
this.id = Message.getInitMsg();
//System.out.println(id.length());
//id 존재 유무에 따라서 Message 클래스의 생성자를 호출할 떄 값이 틀려지게 보냄
if(id.length() == 0 || id.isEmpty()) {//사용자 ID 없음.
message = new Message(null);
return;
}
message = new Message(id);
String res = message.playGameMsg();
switch (res) {
case "Y":
case "y":
this.isBegin = true;
break;
}
//사용자의 입력값 여부에 따른 프로그램 종료 또는 게임 start
if(!isBegin) {
message.sayYock();
System.exit(0);
}
startGame(); //게임시작 메서드 호출
}
private void startGame() {
this.userValues = new String[RECORD_VALUE];
this.comValues = new String[RECORD_VALUE];
while(true) {
//무한루프 돌면서 게임을 진행함
count++; //게임판수 증가
String res = message.getInput();
//컴값도 얻어냅니다
int comVal = getRandom.postRandom(1, 3);
//각 생성된 값을 배열에 넣어줍니다.
userValues[count - 1] = res;
comValues[count - 1] = String.valueOf(comVal);
//배열의 사용자와 컴의 값을 넣어줍니다
//넣기전에 생각할 것... 만약 게임수가 20회가 넘으면 새 배열을 생성해 줘야 함,,
if(count - 1 == RECORD_VALUE) {
//새 배열을 생성해서, 기존값을 모두 복사하고, 다음 index 에 값을 넣을 수 있는 메서드를 정의 및 호출해서 사용해야함
expandArr(count);
}
}
}
private void expandArr(int length) {
String[] tempUserExpArr = new String[length * 2];
String[] tempcomExpArr = new String[length * 2];
//System 클래스에 보면 arrayCopy 란 API 가 잇음
//또는 Arrays 클래스에 보면 배열 복제 API 도 잇고,,
System.arraycopy(userValues, 0, tempUserExpArr, 0, userValues.length);
System.arraycopy(userValues, 0, tempcomExpArr, 0, comValues.length);
this.userValues = tempUserExpArr;
this.comValues = tempcomExpArr;
}
/*
public static void main(String[] args) {
// TODO Auto-generated method stub
char gbb;
int paper;
int rock;
int c;
int user = 0;
boolean isCorrect = false;
dan: while (true) {
String input = JOptionPane.showInputDialog("가위바위보 게임을 시작합니다(y/n)");
if (input.equalsIgnoreCase("n")) {// 게임종료if..
System.out.println("게임도 안하는 당신은 바보");
break;
}
input = JOptionPane.showInputDialog("가위(1), 바위(2), 보(3) 입력 : ");
switch (input) {
case "1":
case "가위":
user = 1;
break;
case "2":
case "바위":
user = 2;
break;
case "3":
case "보":
user = 3;
break;
}
// 컴값 생성
int com = (int) (Math.random() * 3 + 1);
System.out.println("나는 " + input + "컴퓨터는 " + com);
if (com == user) {
System.out.println("비겼습니다");
} else if ((user == 1 && com == 2) || (user == 2 && com == 3) || (user == 3 && com == 1)) {
System.out.println("졌습니다");
} else if ((user == 3 && com == 2) || (user == 2 && com == 1) || (user == 1 && com == 3)) {
System.out.println("이겼습니다");
}
continue;
}
}
*/
}
package langes;
import javax.swing.JOptionPane;
public class StringUtil {
//@ 존재 여부 있다면 id 를 리턴함
public static String getEmailId(String email) {
int atIdx = email.indexOf('@');
if(atIdx == -1)
return null;
String id = email.substring(0, atIdx);
return id;
}
public static int checkIdLength(String id) {
//지역변수를 이용해서 값을 리턴시킵니다
//-1이 리턴된다는 의미는 범위가 너무 큼, 0은 공백, 1은 범위 작음, 2 ok
int leng = id.length();
int result;//
if(id.isEmpty()) {
return 0;
}
if(leng < 8) {
result = 1;
}else if(leng > 15) {
result = -1;
}else {
result = 2;
}
return result;
}
//대문자 여부 검증 메서드 정의
public static boolean upperContain(String id) {
for(int i = 0; i < id.length(); i++) {
if(Character.isUpperCase(id.charAt(i))) {
return true;
}
}
return false;
}
public static boolean digiContain(String id) {
for(int i = 0; i < id.length(); i++) {
if(Character.isDigit(id.charAt(i))) {
return true;
}
}
return false;
}
}
package langes;
import javax.print.attribute.standard.JobKOctetsProcessed;
import javax.swing.JOptionPane;
/*
* 여러분이 작성한 가위바위보 게임이 시작되면, ID를 받게 합니다.
* 이때 받은 ID를 검증하는 클래스 입니다.
*
* ID 조건은 이메일이고, 이메일은 아래와 같은 조건을 가지게 됩니다.
*
* @ 반드시 있어야 하고, @ 이전 ID 는 8 ~ 15자 사이, 대문자, 숫자가 하나 이상 존재해야 합니다.
*
* 위 조건이 이미 자바스크립트 시간에 했었습니다.
*
* 단, 위 조건을 처리하도록 하는 기능은 static 으로 처리 합니다.
*
* 그리고 내부적으로 각각의 검증을 하는 메서드를 private 로 처리하고, 결과만 되돌릴지,
* 아니면, 추후 비슷한 기능을 위해 각각의 검증 메서드를 public 으로 처리해서 재사용할지는 여러분이 결정하시면 됩니다,
*
* 결과는 다음과 같아야 합니다.
*
* 게임 시작 --> ID 입력--> 입력 ID 검증 --> 검증 OK --> 실행
* 검증이 실패하면 --> 어떤 부분이 잘못됐는지 출력 후 , 재입력 받도록 하세요. 검증이 실패하면 절대 실행되지 않습니다.
*/
public class Stirng {
public static void main(String[] args) {
String start = JOptionPane.showInputDialog("게임을 시작하겠습니까?");
String email = JOptionPane.showInputDialog("Email입력");
String id = StringUtil.getEmailId(email);
int res = StringUtil.checkIdLength(id);
if(res != 2) {
System.out.println("입력한 이메일 ID에 문제가 있습니다.");
return;
}
System.out.println(StringUtil.upperContain(id));
System.out.println(StringUtil.digiContain(id));
System.out.println(res);
}
}
/*
public static void main(String[] args) {
// TODO Auto-generated method stub
char gbb;
int paper;
int rock;
int c;
int user = 0;
boolean isCorrect = false;
dan: while (true) {
String input = JOptionPane.showInputDialog("가위바위보 게임을 시작합니다(y/n)");
if (input.equalsIgnoreCase("n")) {// 게임종료if..
System.out.println("게임도 안하는 당신은 바보");
break;
}
input = JOptionPane.showInputDialog("가위(1), 바위(2), 보(3) 입력 : ");
switch (input) {
case "1":
case "가위":
user = 1;
break;
case "2":
case "바위":
user = 2;
break;
case "3":
case "보":
user = 3;
break;
}
// 컴값 생성
int com = (int) (Math.random() * 3 + 1);
System.out.println("나는 " + input + "컴퓨터는 " + com);
if (com == user) {
System.out.println("비겼습니다");
} else if ((user == 1 && com == 2) || (user == 2 && com == 3) || (user == 3 && com == 1)) {
System.out.println("졌습니다");
} else if ((user == 3 && com == 2) || (user == 2 && com == 1) || (user == 1 && com == 3)) {
System.out.println("이겼습니다");
}
continue;
}
}
*/
}
'언어 > java' 카테고리의 다른 글
Field(전역 지역 변수) (0) | 2024.02.24 |
---|---|
240222 (0) | 2024.02.22 |
240219 (0) | 2024.02.19 |
배열 (0) | 2024.02.19 |
제어문 break, continue (0) | 2024.02.18 |