C# 콘솔 틱택토 게임
작성자 정보
- 마스터 작성
- 작성일
컨텐츠 정보
- 192 조회
- 목록
본문
C# 콘솔 틱택토 게임 만들기
1.전체 코드
string[] Area = {"-","-","-","-","-","-","-","-","-"};
bool isPlayer = true;
Console.WriteLine("\t틱택토 게임");
Console.WriteLine("");
Console.WriteLine("0,0 |0,1 |0,2");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("--------------------------");
Console.WriteLine("1,0 |1,1 |1,2");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("--------------------------");
Console.WriteLine("2,0 |2,1 |2,2");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("");
Console.WriteLine("");
Turn(isPlayer);
void Turn(bool isPlayerTurn)
{
if (isPlayerTurn)
{
Console.WriteLine("플레이어 차례입니다.");
Console.WriteLine("선택할 좌표를 고르세요 X좌표(0,1,2)중에서");
int num1 = int.Parse(Console.ReadLine());
CheckNum(num1, 1);
Console.WriteLine("선택할 좌표를 고르세요 Y좌표(0,1,2)중에서");
int num2 = int.Parse(Console.ReadLine());
CheckNum(num2, 2);
selectArea(num1, num2, isPlayer);
}
else
{
Console.WriteLine("컴퓨터 차례입니다.");
Console.WriteLine("컴퓨터가 고르고 있습니다.");
Random random = new Random();
int num1 = random.Next(0, 3);
int num2 = random.Next(0, 3);
selectArea(num1, num2, isPlayer);
}
}
void selectArea(int X, int Y, bool isPlayerTurn)
{
if(X ==0 && Y == 0)
{
if (Area[0] == "-")
{
Area[0] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if(X ==0 && Y == 1)
{
if (Area[1] == "-")
{
Area[1] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 0 && Y == 2)
{
if (Area[2] == "-")
{
Area[2] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 1 && Y == 0)
{
if (Area[3] == "-")
{
Area[3] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 1 && Y == 1)
{
if (Area[4] == "-")
{
Area[4] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 1 && Y == 2)
{
if (Area[5] == "-")
{
Area[5] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 2 && Y == 0)
{
if (Area[6] == "-")
{
Area[6] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 2 && Y == 1)
{
if (Area[7] == "-")
{
Area[7] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 2 && Y == 2)
{
if (Area[8] == "-")
{
Area[8] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
MapRender();
if ((Area[0] == "O" && Area[1] == "O" && Area[2] == "O") ||
(Area[3] == "O" && Area[4] == "O" && Area[5] == "O") ||
(Area[6] == "O" && Area[7] == "O" && Area[8] == "O") ||
(Area[0] == "O" && Area[3] == "O" && Area[6] == "O") ||
(Area[1] == "O" && Area[4] == "O" && Area[7] == "O") ||
(Area[2] == "O" && Area[5] == "O" && Area[8] == "O") ||
(Area[0] == "O" && Area[4] == "O" && Area[8] == "O") ||
(Area[2] == "O" && Area[4] == "O" && Area[7] == "O")
)
{
Console.WriteLine("플레이어의 승리 입니다.");
}
else if ((Area[0] == "X" && Area[1] == "X" && Area[2] == "x") ||
(Area[3] == "X" && Area[4] == "X" && Area[5] == "X") ||
(Area[6] == "X" && Area[7] == "X" && Area[8] == "X") ||
(Area[0] == "X" && Area[3] == "X" && Area[6] == "X") ||
(Area[1] == "X" && Area[4] == "X" && Area[7] == "X") ||
(Area[2] == "X" && Area[5] == "X" && Area[8] == "X") ||
(Area[0] == "X" && Area[4] == "X" && Area[8] == "X") ||
(Area[2] == "X" && Area[4] == "X" && Area[7] == "X")
)
{
Console.WriteLine("컴퓨터의 승리 입니다.");
}
else
{
isPlayer = isPlayerTurn ? false : true;
Turn(isPlayer);
}
}
void MapRender()
{
Console.Clear();
Console.WriteLine("");
Console.WriteLine("0,0 |0,1 |0,2");
Console.WriteLine(" "+Area[0]+" | "+Area[1]+ " | "+Area[2]+" ");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("--------------------------");
Console.WriteLine("1,0 |1,1 |1,2");
Console.WriteLine(" " + Area[3] + " | " + Area[4] + " | " + Area[5] + " ");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("--------------------------");
Console.WriteLine("2,0 |2,1 |2,2");
Console.WriteLine(" " + Area[6] + " | " + Area[7] + " | " + Area[8] + " ");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("");
Console.WriteLine("");
}
void CheckNum(int number, int type)
{
if (number == 0 || number == 1 || number == 2) { }
else
{
Console.WriteLine("잘못 고르셨습니다.");
Console.WriteLine("다시 골라주세요");
if(type == 1)
{
Console.WriteLine("선택할 좌표를 고르세요 X좌표(0,1,2)중에서");
int num1 = int.Parse(Console.ReadLine());
CheckNum(num1, type);
}
else
{
Console.WriteLine("선택할 좌표를 고르세요 Y좌표(0,1,2)중에서");
int num2 = int.Parse(Console.ReadLine());
CheckNum(num2, type);
}
}
}
2. 플로우 차트
2-1 플레이어 선택
2-2 숫자를 선택 했는지 확인 (잘못 선택하였을 경우 다시 선택)
2-3 좌표값을 확인 (이미 존재하는 위치라면 다시 선택)
2-4 콘솔창 clear를 사용하여 선택한 위치에 표기 하기
2-5 빙고가 되었는지 확인하기
2-6 턴넘기기 (반복)
2-7 랜덤으로 숫자 선택하기 (잘못 선택하였을 경우 다시 선택)
2-8 좌표값을 확인 (이미 존재하는 위치라면 다시 선택)
2-9 콘솔창 clear를 사용하여 선택한 위치에 표기 하기
2-10 2-5 빙고가 되었는지 확인하기
2-11 턴넘기기 (반복)
2-12 빙고가 되었다면 승리자 표기 후 끝내기
3.코드 분석
3-1 변수 선언
string[] Area = {"-","-","-","-","-","-","-","-","-"}; // 배열 위치 값
bool isPlayer = true; // 플레이어 턴 유무
3-2 숫자를 선택했는지 확인하는 메서드
void CheckNum(int number, int type)
{
if (number == 0 || number == 1 || number == 2) { }
else
{
Console.WriteLine("잘못 고르셨습니다.");
Console.WriteLine("다시 골라주세요");
if(type == 1)
{
Console.WriteLine("선택할 좌표를 고르세요 X좌표(0,1,2)중에서");
int num1 = int.Parse(Console.ReadLine());
CheckNum(num1, type);
}
else
{
Console.WriteLine("선택할 좌표를 고르세요 Y좌표(0,1,2)중에서");
int num2 = int.Parse(Console.ReadLine());
CheckNum(num2, type);
}
}
}
숫자가 0,1,2 이외의 숫자 혹은 다른 문자라면 다시 선택하게 한다.
3-3 선택한 좌표를 확인하고 상태값을 바꾸는 메서드
void selectArea(int X, int Y, bool isPlayerTurn)
{
if(X ==0 && Y == 0)
{
if (Area[0] == "-")
{
Area[0] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if(X ==0 && Y == 1)
{
if (Area[1] == "-")
{
Area[1] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 0 && Y == 2)
{
if (Area[2] == "-")
{
Area[2] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 1 && Y == 0)
{
if (Area[3] == "-")
{
Area[3] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 1 && Y == 1)
{
if (Area[4] == "-")
{
Area[4] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 1 && Y == 2)
{
if (Area[5] == "-")
{
Area[5] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 2 && Y == 0)
{
if (Area[6] == "-")
{
Area[6] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 2 && Y == 1)
{
if (Area[7] == "-")
{
Area[7] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
else if (X == 2 && Y == 2)
{
if (Area[8] == "-")
{
Area[8] = isPlayerTurn ? "O" : "X";
}
else
{
Console.WriteLine("이미 선택된 좌표 입니다. 다른 곳을 고르세요");
Turn(isPlayerTurn);
}
}
MapRender();
if ((Area[0] == "O" && Area[1] == "O" && Area[2] == "O") ||
(Area[3] == "O" && Area[4] == "O" && Area[5] == "O") ||
(Area[6] == "O" && Area[7] == "O" && Area[8] == "O") ||
(Area[0] == "O" && Area[3] == "O" && Area[6] == "O") ||
(Area[1] == "O" && Area[4] == "O" && Area[7] == "O") ||
(Area[2] == "O" && Area[5] == "O" && Area[8] == "O") ||
(Area[0] == "O" && Area[4] == "O" && Area[8] == "O") ||
(Area[2] == "O" && Area[4] == "O" && Area[7] == "O")
)
{
Console.WriteLine("플레이어의 승리 입니다.");
}
else if ((Area[0] == "X" && Area[1] == "X" && Area[2] == "x") ||
(Area[3] == "X" && Area[4] == "X" && Area[5] == "X") ||
(Area[6] == "X" && Area[7] == "X" && Area[8] == "X") ||
(Area[0] == "X" && Area[3] == "X" && Area[6] == "X") ||
(Area[1] == "X" && Area[4] == "X" && Area[7] == "X") ||
(Area[2] == "X" && Area[5] == "X" && Area[8] == "X") ||
(Area[0] == "X" && Area[4] == "X" && Area[8] == "X") ||
(Area[2] == "X" && Area[4] == "X" && Area[7] == "X")
)
{
Console.WriteLine("컴퓨터의 승리 입니다.");
}
else
{
isPlayer = isPlayerTurn ? false : true;
Turn(isPlayer);
}
}
selectArea() 매서드는 크게 3개의영역으로 구분합니다.
1.선택한 좌표가 비어 있는지 확인하는 영역
ㄴ for문으로 쉽게 하고 싶었는데 x,y값을 case로 바꾸는 방법이 생각안남
2. 콘솔창을 다시 그려주는 함수 호출
3. 빙고가 되었는지 확인하는 영역
ㄴ 플레이어 승리조건, 컴퓨터 승리조건, 긔외의 경우 턴을 넘기는 기능을 추가
3-4 맵을 그리는 메서드
void MapRender()
{
Console.Clear();
Console.WriteLine("");
Console.WriteLine("0,0 |0,1 |0,2");
Console.WriteLine(" "+Area[0]+" | "+Area[1]+ " | "+Area[2]+" ");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("--------------------------");
Console.WriteLine("1,0 |1,1 |1,2");
Console.WriteLine(" " + Area[3] + " | " + Area[4] + " | " + Area[5] + " ");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("--------------------------");
Console.WriteLine("2,0 |2,1 |2,2");
Console.WriteLine(" " + Area[6] + " | " + Area[7] + " | " + Area[8] + " ");
Console.WriteLine("\t|\t|\t");
Console.WriteLine("");
Console.WriteLine("");
}
string[] Area의 데이터를 가져와서 뿌려주는 방식을 사용했다.
3-5 턴을 시작하는 메서드
지금은 바로 바로 선택되어서 컴퓨터 턴이 안보임void Turn(bool isPlayerTurn)
{
if (isPlayerTurn)
{
Console.WriteLine("플레이어 차례입니다.");
Console.WriteLine("선택할 좌표를 고르세요 X좌표(0,1,2)중에서");
int num1 = int.Parse(Console.ReadLine());
CheckNum(num1, 1);
Console.WriteLine("선택할 좌표를 고르세요 Y좌표(0,1,2)중에서");
int num2 = int.Parse(Console.ReadLine());
CheckNum(num2, 2);
selectArea(num1, num2, isPlayer);
}
else
{
Console.WriteLine("컴퓨터 차례입니다.");
Console.WriteLine("컴퓨터가 고르고 있습니다.");
Random random = new Random();
int num1 = random.Next(0, 3);
int num2 = random.Next(0, 3);
selectArea(num1, num2, isPlayer);
}
}
4.결과
관련자료
-
이전
-
다음