728x90
TIC-TAC-TOE 게임
Tic_Tac_Toe.java
import java.util.*;
public class Tic_Tac_Toe {
public static void main(String[] args) {
int x,y;
int a=0,b=0;
Scanner scan= new Scanner(System.in);
//게임판을 나타내는 2차원 배열을 초기화한다.
char[][] array = {
{' ',' ',' '},
{' ',' ',' '},
{' ',' ',' '}
};
//게임판을 그린다.
do {
for(int i =0; i<3; i++) {
for(int j=0; j<3; j++) {
if(j==2)
System.out.print(" "+array[j][i]);
else
System.out.print(" "+array[j][i]+"|");
}
System.out.println();
if(i !=2)
System.out.println("---|---|---");
}
//좌표를 입력받는다.
System.out.println("다음 수의 좌표를 입력하세요 : ");
x = scan.nextInt();
y = scan.nextInt();
//사용자가 놓은 위치를 검사한다.
if(array[x][y] != ' ') {
System.out.println("이미 입력된 위치입니다.");
continue;//중복으로 입력될 경우 컴퓨터가 한번 더 놓는거 방지
}
else
array[x][y] = 'X';
//컴퓨터가 놓을 위치를 결정한다.
for(a=0;a<3;a++) {
for(b=0;b<3;b++) {
if(array[a][b]==' ')
break;
}
if(array[a][b]==' ')
break;
}
if(a<3&&b<3)
array[a][b] = 'O';
}while(true);
}
}
실행결과 : 0, 0 입력
지뢰찾기 게임
MineSweeper.java
public class MineSweeper {
public static void main(String[] args) {
//게임판을 나타내는 부울형의 2차원 배열을 생성한다.
boolean[][] game = new boolean[10][10];
//난수를 발생하여서 30%확률로 지뢰를 저장한다.
for(int i =0; i<10; i++) {
for(int j=0; j<10; j++) {
if(Math.random()<0.3)
game[i][j]=true;
}
}
for(int i=0; i<10; i++) {
for(int j=0; j<10;j++) {
if(game[i][j]==true)
System.out.print("*");
else
System.out.print("ㅁ");
}
System.out.println();
}
}
}
실행결과
랜덤워크 : Switch 사용
RandomWalk.java
import java.util.*;
/**
* 방 전체를 2차원 배열 tile[10][10]로 모델링을 하고
* 처음에는 딱정벌레가 배열에 중심에 있다고 가정하라.
* title[][]의 초기값은 false이다.
* 딱정벌레가 타일을 지나갈 때마다 2차원 배열의 값을 true로 만들어서 딱정벌레가 지나갔음을 나타낸다.
* 0부터 3까지의 랜덤한 숫자를 생섯하여 다음과 같이 움직인다.
* 즉 0이면 북쪽으로 이동하고
* 2이면 남쪽으로 이동한다.
* 0부터 3까지 랜덤한 숫자는 다음과 같이 생성할 수 있다.
* int direction = (int)(Math.random()*4);
*
*/
public class RandomWalk {
public static void main(String[] args) {
boolean[][] tile = new boolean[10][10];
int x=5,y=5;
int w;
tile[x][y]=true;
for(w=0;w<10;w++) {
int direction = (int)(Math.random()*4);
switch(direction) {
case 0:
x++;
break;
case 1:
x--;
break;
case 2:
y++;
break;
case 3:
y--;
break;
}
tile[x][y]=true;
System.out.println("-------------------------------------");
for(int a=0; a<10;a++) {
for(int b =0; b<10;b++) {
if(tile[a][b]==true)
System.out.print("# ");
else
System.out.print(". ");
}
System.out.println();
}
System.out.println("-------------------------------------");
}
System.out.println("전체 이동 수는 = "+w);
}
}
실행결과
랜덤워크 : if - else if 사용
RandomWalkBook.java
import java.util.*;
public class RandomWalk_Book {
public static void main(String[] args) {
//게임판을 나타내는 부울형의 2차원 배열 생성
boolean tile[][] = new boolean[10][10];
int steps;
int x=5, y=5;
//시작점
tile[5][5] = true;
//난수를 생성하여서 다음의 갈 곳을 결정한다. 게임판의 범위를 넘어가지 않도록 검사한다.
for(steps = 0; steps<10; steps++) {
//0부터 3 까지 랜덤숫자생성
int direction = (int)(Math.random() * 4);
if(direction == 0&&x>0)
x--;
else if (direction == 1&&x<9)
x++;
else if (direction == 2&&y>0)
y--;
else if (y<9)
y++;
tile[y][x] = true;
//게임판을 화면에 그린다.
System.out.println("-----------------------------");
for(int i=0;i<10;i++) {
for( int j=0; j<10; j++) {
if(tile[i][j] == true)
System.out.print("# ");
else
System.out.print(". ");
}
System.out.println();
}
System.out.println("-----------------------------");
}
System.out.println("전체 이동 수는 = " + steps);
}
}
실행결과
**2차원 배열(two dimensional array)
2차원 배열이란 배열의 요소로 1차원 배열을 가지는 배열입니다.
자바에서는 2차원 배열을 나타내는 타입을 따로 제공하지 않습니다.
대신에 1차원 배열의 배열 요소로 또 다른 1차원 배열을 사용하여 2차원 배열을 나타낼 수 있습니다.
따라서 자바에서 2차원 배열은 다음과 같은 문법으로 선언할 수 있습니다.
1. 타입[][] 배열이름;
2. 타입 배열이름[][];
3. 타입[] 배열이름[];
예제
int[][] arr = new int[2][3];
int k = 10;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = k; // 인덱스를 이용한 초기화
k += 10;
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
실행결과
10 20 30
40 50 60
배열의 선언과 동시에 초기화하는 방법
타입 배열이름[열의길이][행의길이] = {
{배열요소[0][0], 배열요소[0][1], ...},
{배열요소[1][0], 배열요소[1][1], ...},
{배열요소[2][0], 배열요소[2][1], ...},
...
};
예제
int[][] arr = {
{10, 20, 30},
{40, 50, 60}
};
실행결과
10 20 30
40 50 60
**가변배열
자바에서는 2차원 배열을 생성할 때 열의 길이를 명시하지 않음으로써, 행마다 다른 길이의 배열을 요소로 저장할 수 있습니다.
이렇게 행마다 다른 길이의 배열을 저장할 수 있는 배열을 가변 배열(dynamic array)이라고 합니다.
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[1];
선언과 동시에 초기화
int[][] arr = {
{10, 20},
{10, 20, 30, 40},
{10}
};
실행결과
10 20
10 20 30 40
10
출처 : http://www.tcpschool.com/java/java_array_twoDimensional
728x90
반응형
'공부 > JAVA' 카테고리의 다른 글
[JAVA 배열의 선언과 사용2] 특정한 값 찾기, 주사위 던지기, 극장 예약 시스템 (0) | 2022.08.21 |
---|---|
[JAVA 배열의 선언과 사용1] 성적 평균 계산하기, 문자와 배열, 최소값과 최대값 구하기 (0) | 2022.08.21 |
[JAVA 조건문] 최대 공약수 찾기 , 약수 계산하기, 난수의 합 계산하기, 숫자 추측 게임, 로또 확률 계산 (0) | 2022.08.21 |
[JAVA 반복문] 성적에 따라 학점 결정하기, 인사말 출력하기, 월의 일수 출력하기 (0) | 2022.08.21 |
[JAVA 입력과 출력] 원의 면적 계산하기, 직사각형의 둘레와 면적 계산하기 (0) | 2022.08.21 |