Project
자바 - 오목
반응형
package OhMok;
public class Player {
String player1,player2;
int score = 0; // score는 cnt식으로 전적을 표시할거임
Player(){
this.player1 = player1; this.player2=player2;
// default
}
void show() { // player들을 보여주는 method
System.out.println(this.player1+"님과 "+this.player2+"님이 게임 준비를 마쳤습니다.");
}
}
package OhMok;
public interface OmokB {
public void show();
public int OmokAct(char x, int y, int turn);
} // 강제 오버라이딩 해버렷
package OhMok;
public class OmokA implements OmokB {
int[][] Line = new int[10][10]; //
public void show() { // show
int numX = 64; // 하단 좌표 값
int numY = 0; // 좌측 좌표 값 초기화
for(int[] Y : Line) {
numY++; // Line 인덱스 값에 맞춰 반복 Y증가
System.out.print(numY < 10 ? numY+ " " : numY);
// 3항 연산을 써서 라인을 간단하게 출력해버리기
// 세로는 0부터 9까지 (10줄)라면 10 + " " : 그게아니어도 10
// 이렇게 안하면 true false가 나오더라...
// ?연산은 if문,else문을 간결하게 쓰는 용도임
// 좌측에 Y좌표 표시
for (int j : Y ) {
if(j == 1 ) {
System.out.print(" o"); // o돌
} else if ( j == 2 ) { // j 차례는 2
System.out.print(" x"); // x 돌
} else {
System.out.print(" ."); //Line을 구분 짓고, 오목알을 넣기 위한 .공백
}
}
System.out.println();
}
System.out.print(" ");
for(int[] X : Line ) {
numX++; // 하단X // X좌표는 A-J (10개)
System.out.print(" "+(char)numX);
}
System.out.println();
} // 하단 라인
@Override // 오버라이드
public int OmokAct(char x, int y, int turn) { // x축을 char형으로 y축은 정수값으로 해보면
int chX = ((int) x) - 97;
// x축은 아스키코드 숫자로 변경 돌 박을거니까!! X 좌표값
int chY = --y;
// 배열에 넣는 값 -1
int cnt = 0;
// 가로,세로,킹각선 체킹 용도
int _x,_y = 0; // 오목알 역할을 할?것이면서, .을 바꿔줄 변수임
// 언더바 = 리터럴
String name = new String();
// 사용자 name 클래스 선언
name = (turn == 1 ) ? "o돌" : "x돌";
// 사용자의 차례변경문 turn값이 1이라면 o돌 그게 아니라면 x돌
// player1 사용자를 o player2 사용자를 x로 둘 예정
// 마찬가지로 3항 연산을 이용
if ( Line[chY][chX] != 0 ) {
// 라인에 Y와 X축이 0이 아니라면 이미 있는거기 때문에
// 오목판을 만들어줄 필요가 없다. ㄴ알것ㅈ대ㅑ거
System.out.println("이미 오목돌이 설치되어 있습니다.");
return 0;
} else {
Line[chY][chX] = turn; // 그게아니라면 턴을 바꿈
}
// 가로 체크 .. 맞는건지 확인좀 해보고싶다 ..
_x = chX;
_y = chY;
cnt = 0;
while(Line[_y][_x] == turn && _x > 0 ) {
// 라인에 있는 _y축 _x축 오목알이 과 x축(오목알 가로)가 0보다 크다면
_x--; // x축 .을 1개 제거
} while(Line[_y][++_x] == turn && _x <= 10 ) {
cnt++; // 오목알을 체크할거임 즉 5개가 되면 종료를 시킬거
}
if(cnt == 5) {
System.out.println(name + "승리");
return 0; // return값을 1로 주면
}
_x = chX;
_y = chY; //가로랑 똑같이
cnt = 0; // cnt 초기화
while(Line[_y][_x] == turn && _y > 0 ) {
//이번엔 y값 기능 설정 (세로 체크를 할거라서)
_y--;
} while(Line[++_y][_x] == turn && _y <= 10 ) {
// 가로 while문 처럼 ++_Y
cnt++;
} if (cnt == 5 ) {
System.out.println(name+ "승리");
return 0;
}
// 세로 체크도 해야하는데 가로랑 비슷하게
_x = chX;
_y = chY;
cnt = 0;
while(Line[_y][_x] == turn && _y > 0 ) {
_y++;
_x--;
} while(Line[++_y][_x] == turn && _y <= 10 ) {
cnt++;
} if (cnt == 5 ) {
System.out.println(name + " 승리 ");
return 0;
}
_x = chX;
_y = chY;
cnt = 0;
while(Line[_y][_x] == turn && _y > 0 ) {
_x--;
_y--;
} while(Line[++_y][_x] == turn && _y <= 0 ) {
cnt++;
} if ( cnt == 5 ) {
System.out.println(name + " 승리 ");
return 0;
}
// 우상은 세로축 플러스 x축 마이너스
// 우하는 가로세로축 마이너스
return 0;
}
}
package OhMok;
import java.util.Scanner;
public class Main { //
public static void main(String[] args) {
// 오목 게임
// 2차원 배열을 이용해서 ..
// Interface Omok.LOADING
// A.user B.user가 번갈아가면서 누를거임
Scanner sc = new Scanner (System.in);
Player p1 = new Player();// 플레이어를 정하기 위한 객체
OmokA o1 = new OmokA(); //
String y = "y", Y = "Y", n ="n", N="N";
String sel,name1,name2;
int turn = 0; // 차례를 알려주는 변수 (0 = player 1 // 1 = player 2 )
char x ; // x축 입력받는 아스키코드 변수
int y1 = 0;
System.out.print("오목 게임을 시작 하시겠습니까? (Y/N)");
sel = sc.next();
if(sel.equals(y)||sel.equals(Y)) {
System.out.println("게임을 시작합니다. Player1, Player2 순서를 정하세요.");
System.out.print("Player1 이름 입력 >");
name1 = sc.next();
p1.player1 = name1;
System.out.print("Player2 이름 입력 >");
name2 = sc.next();
p1.player2 = name2;
System.out.println("플레이어 생성이 종료 되었습니다.");
p1.show();
boolean loop = true;
while(loop) { // 플레이어 생성이 종료 되면 게임 시작
o1.show();
System.out.println("X 좌표를 입력하세요.");
x = sc.next().charAt(0);
System.out.println("y 좌표를 입력하세요.");
y1 = sc.nextInt();
turn = (turn == 1 ) ? 2 : 1; // x,y값 입력이 끝나면 턴 넘김
o1.OmokAct(x, y1, turn);
System.out.println(" 다음 턴 입니다. ");
// turn이 1이 아니면 2 또는 1 // 턴제 바꿔주기
// loop = false; // 누가 이겼는지 설정하고 loop 닫아야함
}
System.out.println("게임 종료.");
sc.close();
} else if (sel.equals(n)|| sel.equals(N)) {
System.out.println("프로그램 종료");
}
}
}
반응형
'Project' 카테고리의 다른 글
JAVA - 제품 관리 프로그램 (0) | 2020.11.19 |
---|---|
JAVA - 학생 성적 관리 프로그램 / 장학금 여부 / 학점제 / 총합 평균 (0) | 2020.11.12 |
자바(JAVA) - 개인 프로젝트 : 구구단 게임 (0) | 2020.11.11 |
JAVA(자바) - 개인 프로젝트: 운동 기록 관리 프로그램 (0) | 2020.11.11 |
[미니 프로젝트1] 운동 관리 프로그램 주제 선정 - 기록 일지 1 (3) | 2020.10.31 |
댓글