오늘은 틱텍토+를 만들었다.
맵의 크기설정: 크기를 플레이어가 설정하고 설정한 값만큼 연결해야 승리
플레이어 턴 표시: 누가 할 차롄지 명시해준다
플레이어가 설정한 크기의 맵 설정
크기마다 달라지는 승리조건
승리자 확인
기본 틱텍토 구성
게임의 크기가 커지면 커질수록 불가능에 가까워지는 승리
: 5칸 이상이 넘어가면 승리조건 5연결로 제한
대각선 승리코드가 최대 맵의 칸 숫자를 넘어가면 오류
: 승리조건 최댓값 설정?(아직 구상중)
100자리수가 넘어가면 맵크기
: 플레이어 맵 크기 선언 조건 추가(100을 못넘기게)
이를 통해 이때까지 못했던 코드의 기본구성과 2주차 까지의 복습을 한 것 같다.
하지만 실력이 부족해서 줄일 수 있는 코드를 못 줄인 것 같고 너무 욕심 부린 탓에 시간을 너무 허비했던 것 같다.
다음부턴 욕심 안 부리고 적당히 할 일을 계획해야겠다.
밑의 코드를 보고 틱텍토 주제에 너무 방대하다는 생각을 하면서 내 실력을 실감했다.
namespace stu;
class Program
{
static void Main(string[] args)
{
Console.Clear();
Console.WriteLine("plaase enter the size you want: ");
string? playerBoardSize = Console.ReadLine();
int board = int.Parse(playerBoardSize);
int totalBoard = board * board;
int playerTurn = 1;
int playerChoice = 0;
int win = 0;
string player1Mark = "O";
string player2Mark = "X";
string[] boardNum = new string[totalBoard];
void boardUpdate()
{
Console.WriteLine("1P: O" + "\n" + "2P: X");
for (int j = 0; j < board; j++)
{
for (int i = 0; i < board; i++)
{
Console.Write(" ㄱ");
}
Console.WriteLine();
for (int i = 0; i < board; i++)
{
if ((j * board) + i < 10)
{
Console.Write(" {0} " + " ", boardNum[(j * board) + i]);
}
else
{
Console.Write(" {0} ", boardNum[(j * board) + i]);
}
}
Console.WriteLine();
for (int i = 0; i < board; i++)
{
Console.Write("ㄴ ");
}
Console.WriteLine();
}
}
for (int i = 0; i < boardNum.Length; i++)
{
boardNum[i] = i.ToString();
}
Console.Clear();
boardUpdate();
for (int i = 1; i < 4; i++)
{
Console.Write(i + "player turn: ");
string playerSay = Console.ReadLine();
bool Num = int.TryParse(playerSay, out playerChoice);
if (i == 0)
{
Console.Clear();
}
if (playerTurn % 2 == 0 && i == 2)
{
if (Num == true && playerChoice < totalBoard && 0 <= playerChoice)
{
if (boardNum[playerChoice] != player1Mark && boardNum[playerChoice] != player2Mark)
{
boardNum[playerChoice] = player2Mark;
playerTurn = 1;
i -= 2;
Console.Clear();
boardUpdate();
allCheck();
}
else
{
Console.Clear();
boardUpdate();
Console.WriteLine("please select an empty space!");
i -= 1;
}
}
else
{
Console.Clear();
boardUpdate();
Console.WriteLine("Please enter the specified number!");
i -= 1;
}
}
else if (playerTurn % 2 == 1 && i == 1)
{
if(Num == true && 0 <= playerChoice && playerChoice < totalBoard)
{
if (boardNum[playerChoice] != player1Mark && boardNum[playerChoice] != player2Mark)
{
boardNum[playerChoice] = player1Mark;
playerTurn = 2;
Console.Clear();
boardUpdate();
allCheck();
}
else
{
Console.Clear();
boardUpdate();
Console.WriteLine("please select an empty space!");
i -= 1;
}
}
else
{
Console.Clear();
boardUpdate();
Console.WriteLine("Please enter the specified number!");
i -= 1;
}
}
}
//이김 검증
void checkW()
{
for (int i = 0; i < board; i++)
{
for (int j = 0; j < board-1; j++)
{
if (boardNum[(i * board) + j] == boardNum[(i * board) + (j + 1)] && boardNum[(i * board) + j] == player1Mark)
{
win += 1;
if (win == board - 1)
{
player1Win();
}
}
else if (boardNum[(i * board) + j] == boardNum[(i * board) + (j + 1)] && boardNum[(i * board) + j] == player2Mark)
{
win += 1;
if (win == board - 1)
{
player2Win();
}
}
else
{
win = 0;
break;
}
}
}
}
void checkL()
{
for (int i = 0; i < board; i++)
{
for (int j = 0; j < board - 1; j++)
{
if (boardNum[i + (j * board)] == boardNum[i + ((j + 1) * board)] && boardNum[i + (j * board)] == player1Mark)
{
win += 1;
if (win == board - 1)
{
player1Win();
}
}
else if (boardNum[i + (j * board)] == boardNum[i + ((j + 1) * board)] && boardNum[i + (j * board)] == player2Mark)
{
win += 1;
if (win == board - 1)
{
player2Win();
}
}
else
{
win = 0;
break;
}
}
}
}
void checkD()
{
for (int i = 0; i < board; i++)
{
for (int j = 0; j < board - 1; j++)
{
if (boardNum[i + (j * (board + 1))] == boardNum[i + ((j + 1) * (board + 1))] && boardNum[i + (j * (board + 1))] == player1Mark)
{
win += 1;
if (win == board - 1)
{
player1Win();
}
}
else if (boardNum[i + (j * (board + 1))] == boardNum[i + ((j + 1) * (board + 1))] && boardNum[i + (j * (board + 1))] == player2Mark)
{
win += 1;
if (win == board - 1)
{
player2Win();
}
}
else
{
win = 0;
break;
}
}
}
}
void checkRD()
{
for (int i = 0; i < board; i++)
{
for (int j = 0; j < board - 1; j++)
{
if (boardNum[i + (j * (board-1))] == boardNum[i + ((j + 1) * (board - 1))] && boardNum[i + (j * (board - 1))] == player1Mark)
{
win += 1;
if (win == board - 1)
{
player1Win();
}
}
else if (boardNum[i + (j * (board - 1))] == boardNum[i + ((j + 1) * (board - 1))] && boardNum[i + (j * (board - 1))] == player2Mark)
{
win += 1;
if (win == board - 1)
{
player2Win();
}
}
else
{
win = 0;
break;
}
}
}
}
void allCheck()
{
checkL();
checkW();
checkD();
checkRD();
}
void player1Win()
{
Console.Clear();
Console.WriteLine("player1 win!!");
}
void player2Win()
{
Console.Clear();
Console.WriteLine("player2 win!!");
}
}
}