반응형
문제
- 사용자로부터 문자를 입력받아 숨겨진 단어를 맞추는 행맨 게임을 작성하세요. 사용자가 단어의 모든 문자를 맞추거나 주어진 기회내에 맞추지 못할 때까지 반복합니다.
- 게임 설명: 행맨 게임은 사용자가 단어를 추측하는 게임입니다. 사용자는 알파벳을 하나씩 입력하고, 맞출 때마다 단어의 해당 위치에 문자가 표시됩니다. 틀릴 경우, 기회가 줄어듭니다.
- 배열 사용: char[] 배열을 사용하여 단어를 저장하고, 추측된 문자를 저장합니다.
- 반복문 사용: 게임은 사용자가 단어를 맞추거나 기회가 끝날 때까지 반복됩니다.
- 조건문 사용: 각 입력된 문자가 단어에 포함되는지 확인합니다.
- 사용 변수 설명
- secretWord: 맞춰야 할 단어입니다. 예제에서는 hangman으로 설정되어 있습니다.
- guessWord: 사용자가 맞춘 문자를 저장하는 문자 배열로, 초기에는 언더스코어(_)로 채워져 있습니다.
- attempts: 사용자가 틀릴 수 있는 기회의 수로, 초기에는 6으로 설정되어 있습니다.
- wordGuessed: 사용자가 단어를 모두 맞췄는지를 나타내는 불리언 변수입니다.
이 문제는 간단하게 단어의 각 문자들을 _로 감추고 문자를 맞출 때마다 표기해서 기한내에 모든 문자를 맞춰야 하는 문제이다.
로직은 아래와 같다.
- 맞춰야할 단어를 변수1에 저장하고 변수2에 변수1.Length만큼 _로 채운 문자열을 저장한다.
- 사용자의 문자 입력을 받는다. (이때 기회를 1씩 차감한다.)
- 변수2에 해당 문자가 있으면 문자를 표기한다.
- 기회가 모두 소진되거나 모든 문자를 맞출때까지 2번으로 돌아간다.
전체 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hangman
{
public static class Program
{
static string secretWord;
public static string ProcessGuess(string guessWord, char find)
{
int pos = 0;
StringBuilder sb = new StringBuilder(guessWord);
while (pos != -1)
{
pos = secretWord.IndexOf(find, pos);
if (pos == -1)
break;
sb[pos] = find;
pos++;
}
return sb.ToString();
}
public static void Main(string[] args)
{
secretWord = Util.ReadLine("맞춰야할 단어 입력 : ");
string guessWord = new string('_', secretWord.Length);
int attempts = Math.Clamp(secretWord.Length - 1, 1, secretWord.Length);
bool wordGuessed = false;
while (!wordGuessed && attempts > 0)
{
Console.WriteLine($"현재 문자열 {guessWord}, 남은 기회 {attempts}");
char c = Util.ReadChar("맞출 문자 입력 : ");
guessWord = ProcessGuess(guessWord, c);
wordGuessed = (guessWord == secretWord);
attempts--;
}
if (wordGuessed)
Console.WriteLine($"정답 문자열 : {guessWord}, 남은 기회 {attempts}");
else
Console.WriteLine($"남은 기회 소진, 정답 문자열 : {secretWord}");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Util
{
public static string ReadLine(string msg)
{
string line;
do
{
Console.Write(msg);
line = Console.ReadLine();
} while (string.IsNullOrEmpty(line));
return line;
}
public static char ReadChar(string msg)
{
string line;
do
{
line = ReadLine(msg);
} while (line.Length != 1);
return line[0];
}
}
반응형
'부트캠프 > 스파르타코딩클럽' 카테고리의 다른 글
[내일배움캠프 사전캠프] 달리기반 문제 3 - 2 (0) | 2025.06.27 |
---|---|
[내일배움캠프 사전캠프] TIL - 5 (0) | 2025.06.13 |
[내일배움캠프 사전캠프] TIL - 4 (0) | 2025.06.12 |
[내일배움캠프 사전캠프] TIL - 3 (0) | 2025.06.11 |
[내일배움캠프 사전캠프] TIL - 2 (1) | 2025.06.10 |