내일배움캠프/C# 문제
C# 문제 (간단한 콘솔 게임 만들기)
danpat77
2025. 1. 31. 11:43
1번 문제 : 숫자 맞추기 게임 만들기
풀이 : Random()함수를 이용해 랜덤 값을 number에 저장을 하고 사용자가 입력한 숫자와 number가 서로 다르면 while문이 계속 작동을 할 수 있게 작성을 한다.
while문 안에서는 if문을 통해 number의 숫자보다 크거나 작으면 다른 숫자를 입력하라는 문구가 출력되고 number의 숫자를 맞추면 축하 문구와 함께 시도 횟수를 출력해준다.
int number = new Random().Next(1, 101);
int count = 0;
int inputnum = 0;
Console.WriteLine("1부터 100 사이의 숫자를 맞춰보세요");
while (inputnum != number)
{
Console.Write("숫자를 입력하시오 : ");
inputnum = int.Parse(Console.ReadLine());
count++;
if (inputnum < number)
{
Console.WriteLine("좀 더 큰 숫자를 입력하세요.");
}
else if (inputnum > number)
{
Console.WriteLine("좀 더 작은 숫자를 입력하세요.");
}
else
{
Console.WriteLine("축하합니다! 숫자를 맞추셨습니다.");
Console.WriteLine($"시도 횟수 : {count}");
}
}
2번 문제 : 틱택토 게임 만들기
풀이 : 입력된 숫자를 for문을 통해 배열에 저장된 값과 비교을 하여 입력된 숫자와 배열에 저장된 숫자가 같으면 표시하고 다르면 표시가 되지 않는다.
승패는 누가 먼저 한줄을 채웠는지를 확인하기 위해 if문으로 조건을 세워 비교하여 승패를 정한다.
bool winer = false;
int player = 1;
string choice = "";
string[,] map = new string[3, 3]
{
{"1", "2", "3" },
{"4", "5", "6" },
{"7", "8", "9" }
};
while (!winer)
{
Console.Clear();
Console.WriteLine("플레이어 1: X 와 플레이어 2: O");
Console.WriteLine("\n");
if (player%2 == 1)
{
Console.WriteLine("플레이어1 차례 입니다.\n");
choice = "x";
}
else
{
Console.WriteLine("플레이어2 차례 입니다.\n");
choice = "o";
}
Console.WriteLine("\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(map[i, j] + " ");
}
Console.WriteLine("\n");
}
binggo();
Console.Write("1 ~ 9 중에서 숫자를 입력해 주세요 : ");
string input = Console.ReadLine();
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (input == map[i, j])
{
map[i, j] = choice;
player++;
}
}
Console.WriteLine();
}
}
void binggo(){
int i = 0;
for (i = 0; i < 3; i++)
{
if (map[i, 0] == map[i, 1] && map[i, 1] == map[i, 2])
{
Console.WriteLine($"플레이어{(player%2)+1}님이 승리 했습니다.");
winer = true;
break;
}
else if (map[0, i] == map[1, i] && map[1, i] == map[2, i])
{
Console.WriteLine($"플레이어{(player % 2) + 1}님이 승리 했습니다.");
winer = true;
break;
}
else if (map[0, 0] == map[1, 1] && map[2, 2] == map[1, 1])
{
Console.WriteLine($"플레이어{(player % 2) + 1}님이 승리 했습니다.");
winer = true;
break;
}
else if (map[0, 2] == map[1, 1] && map[2, 0] == map[1, 1])
{
Console.WriteLine($"플레이어{(player % 2) + 1}님이 승리 했습니다.");
winer = true;
break;
}
else if (map[0, 0] != "1" && map[0, 1] != "2" && map[0, 2] != "3" &&
map[1, 0] != "4" && map[1, 1] != "5" && map[1, 2] != "6" &&
map[2, 2] != "7" && map[2, 2] != "8" && map[2, 2] != "9")
{
Console.WriteLine("무승부");
break;
}
}
}
문제점 : 중복된 숫자를 입력했을때 다른 숫자를 입력하라는 문구가 표시가 되지 않고 게임이 끝나고 여러번 출력이 됨
해결점 : 문제점을 몇시간동안 해결하지 못해 염예찬튜터님께 조언을 받았다. 튜터님께서 for문 밖에서 입력된 숫자를 중복 확인을 해야 한다고 말씀을 하셔서 기존 for문을 통해 배열에 저장된 값을 하니씩 확인하던 방식에서 if문을 통해 입력된 숫자를 판단하여 배열의 위치값을 저장을해서 바로 배열의 저장값을 확인 하는 방식으로 바꾸었다.
변경된 코드
bool winer = false;
int player = 1;
int num;
int x = 0; // 배열 좌표 저장 값
int y = 0; // 배열 좌표 저장 값
string choice = "";
string[,] map = new string[3, 3]
{
{"1", "2", "3" },
{"4", "5", "6" },
{"7", "8", "9" }
};
while (!winer)
{
Console.Clear();
Console.WriteLine("플레이어 1: X 와 플레이어 2: O");
Console.WriteLine("\n");
if (player%2 == 1)
{
Console.WriteLine("플레이어1 차례 입니다.\n");
choice = "x";
}
else
{
Console.WriteLine("플레이어2 차례 입니다.\n");
choice = "o";
}
Console.WriteLine("\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(map[i, j] + " ");
}
Console.WriteLine("\n");
}
binggo();
Console.Write("1 ~ 9 중에서 숫자를 입력해 주세요 : ");
string input = Console.ReadLine();
bool res = int.TryParse(input, out num);
if (res == true)
{
if (num >= 1 && num <= 3)
{
x = 0;
y = num - 1;
}
else if (num >= 4 && num <= 6)
{
x = 1;
y = num - 4;
}
else if (num >= 7 && num <= 9)
{
x = 2;
y = num - 7;
}
if (map[x, y] != "x" && map[x, y] != "o")
{
map[x, y] = choice;
player++;
}
else
{
Console.Write("이미 입력된 숫자입니다 다른 숫자를 골라주세요");
Console.ReadLine();
}
}
}
void binggo(){
int i = 0;
for (i = 0; i < 3; i++)
{
if (map[i, 0] == map[i, 1] && map[i, 1] == map[i, 2])
{
Console.WriteLine($"플레이어{(player%2)+1}님이 승리 했습니다.");
winer = true;
break;
}
else if (map[0, i] == map[1, i] && map[1, i] == map[2, i])
{
Console.WriteLine($"플레이어{(player % 2) + 1}님이 승리 했습니다.");
winer = true;
break;
}
else if (map[0, 0] == map[1, 1] && map[2, 2] == map[1, 1])
{
Console.WriteLine($"플레이어{(player % 2) + 1}님이 승리 했습니다.");
winer = true;
break;
}
else if (map[0, 2] == map[1, 1] && map[2, 0] == map[1, 1])
{
Console.WriteLine($"플레이어{(player % 2) + 1}님이 승리 했습니다.");
winer = true;
break;
}
else if (map[0, 0] != "1" && map[0, 1] != "2" && map[0, 2] != "3" &&
map[1, 0] != "4" && map[1, 1] != "5" && map[1, 2] != "6" &&
map[2, 2] != "7" && map[2, 2] != "8" && map[2, 2] != "9")
{
Console.WriteLine("무승부");
break;
}
}
}