반응형
행맨 게임
정해진 문자열을 플레이어가 정해진 기회 속에서 찾아내는 게임입니다.
플레이어는 문자 하나씩 입력을 하는 방식으로 진행되며 입력한 문자가 문자열에 포함되어 있다면
해당 문자를 표시합니다. 하지만 문자열에 포함되지 않는 문자를 입력했다면 기회를 1 차감합니다.
사용한 변수
string secretWord = "hangman";
char[] guessWord = new char[secretWord.Length];
int attepts = 6;
int foundCnt = 0;
- secretWord: 사용자가 맞춰야 할 단어입니다.
- guessWord: 플레이어가 맞춘 문자들을 저장할 배열입니다. 초기값은 모두 '_'로 설정됩니다.
- attepts: 플레이어의 남은 시도 횟수입니다. 초기값은 6입니다.
- foundCnt: 플레이어가 맞춘 문자 개수를 추적합니다.
풀이 방법
반복문과 조건문, 배열을 이용하여 풀이합니다.
While문을 통해 기회가 0보다 크다면 게임을 계속 진행하는 방식으로 구현했습니다.
while (attepts >= 0)
이후 기회의 개수가 0이거나 문자열을 모두 맞췄다면 종료하였습니다.
if (attepts == 0)
{
Console.WriteLine("남은 기회가 없습니다.");
break;
}
Console.WriteLine(guessWord); // 찾은 문자열 출력
if (foundCnt == secretWord.Length)
{
Console.WriteLine("문자를 맞추는데 성공했습니다.");
break;
}
이후 Console.ReadLine 함수를 이용하여 문자를 입력받았습니다.
char c = char.Parse(Console.ReadLine());
해당 문자가 이미 입력된 문자인지,
그리고 찾아야하는 문자열에 포함이 된 문자인지 반복문을 이용하여 체크했습니다.
bool foundChar = false;
for (int i = 0; i < guessWord.Length; i++)
{
if (c == guessWord[i])
{
foundChar = true;
break;
}
}
bool isInScretWord = false;
for (int i = 0; i < secretWord.Length; i++)
{
if (c == secretWord[i])
{
isInScretWord = true;
break;
}
}
만약 이미 입력된 문자가 아니고 찾아야하는 문자열에 포함이 된다면 문자를 찾은 것 으로,
그렇지 않다면 찾지 못한것으로 하여 조건문을 실행했습니다.
if (foundChar == false && isInScretWord == true)
{
for (int i = 0; i < secretWord.Length; i++)
{
if (c == secretWord[i])
{
guessWord[i] = c;
foundCnt++;
}
}
}
else
attepts--;
위의 코드들을 while문 속에서 계속 반복하는 것으로 코드를 마무리했습니다.
전체 코드
using System;
string secretWord = "hangman"; // 맞춰야 하는 문자열
char[] guessWord = new char[secretWord.Length]; // 내가 맞춘 문자열
int attepts = 6; // 남은 기회
int foundCnt = 0; // 찾은 문자의 수
// guessWord '_'로 초기화
for (int i = 0; i < secretWord.Length; i++)
guessWord[i] = '_';
// 기회가 0보다 크거나 같다면 실행
while (attepts >= 0)
{
if (attepts == 0) // 기회가 더 이상 없다면 게임 종료
{
Console.WriteLine("남은 기회가 없습니다.");
break;
}
Console.WriteLine(guessWord); // 지금까지 찾은 문자열 출력
// 찾은 문자의 개수가 secretWord의 길이와 일치한다면 성공
if (foundCnt == secretWord.Length)
{
Console.WriteLine("문자를 맞추는데 성공했습니다.");
break;
}
// 남은 기회 출력
Console.WriteLine($"남은 기회는 {attepts}회 입니다");
// 입력한 문자 읽기
char c = char.Parse(Console.ReadLine());
// 이미 찾은 문자인지 체크
bool foundChar = false;
for (int i = 0; i < guessWord.Length; i++)
{
if (c == guessWord[i])
{
foundChar = true;
break;
}
}
// SecretWord안에 포함되는 문자인지 체크
bool isInScretWord = false;
for (int i = 0; i < secretWord.Length; i++)
{
if (c == secretWord[i])
{
isInScretWord = true;
break;
}
}
// 이미 찾은 문자가 아니고 SecretWord에 포함된다면 찾은 것으로
if (foundChar == false && isInScretWord == true)
{
for (int i = 0; i < secretWord.Length; i++)
{
if (c == secretWord[i])
{
guessWord[i] = c; // 일치하는 문자의 위치에 입력한 문자 입력
foundCnt++; // 찾은 문자의 개수 업데이트
}
}
}
else
{
// 못찾은 경우 기회 삭감
attepts--;
}
}
반응형
LIST
'내일배움캠프' 카테고리의 다른 글
틱택톡 C# (0) | 2025.01.25 |
---|---|
내일배움캠프 카드 배치 기능 구현 (0) | 2025.01.22 |
사칙연산간 우선순위 (0) | 2025.01.14 |
Convert와 Parse의 차이점 (0) | 2025.01.14 |
게임 분석 (0) | 2025.01.14 |