using System;
namespace HangmanGame
{
class Program
{
static void Main(string[] args)
{
// 1. 게임에 사용할 단어 목록 선언 (고등학교 수준의 영어 단어들)
// chemistry: 화학, biology: 생물학, democracy: 민주주의, equation: 방정식
string[] wordList = { "chemistry", "biology", "democracy", "equation" };
// 2. 랜덤 객체 생성 - Random 클래스는 무작위 숫자를 생성하는 클래스입니다
Random random = new Random();
// 3. 0부터 3까지의 랜덤 숫자 생성 (Next 메서드는 0부터 지정한 숫자 미만의 값을 반환)
int randomNumber = random.Next(4);
// 4. 생성된 랜덤 숫자를 인덱스로 사용하여 단어 목록에서 단어 선택
// 배열은 0부터 시작하므로 0이면 첫 번째 단어, 1이면 두 번째 단어...
string secretWord = wordList[randomNumber];
// 5. 디버그용: 선택된 단어와 인덱스 출력 (실제 게임에서는 삭제 가능)
Console.WriteLine("디버그: 선택된 단어 인덱스 = " + randomNumber);
// 6. 사용자가 맞춘 문자를 저장할 배열 초기화
// 언더스코어(_)로 채워서 맞추지 못한 글자를 표시
// 7. 게임에 필요한 변수 선언
// 틀릴 수 있는 최대 횟수 (6번 틀리면 게임 오버)
// 단어를 모두 맞췄는지 여부를 저장할 불리언 변수
// 사용자가 이미 입력한 문자들을 저장할 문자열
// 8. 게임 시작 메시지 출력
Console.WriteLine("행맨 게임을 시작합니다!");
Console.WriteLine("단어를 맞춰보세요. 총 " + attempts + "번의 기회가 있습니다.");
// 9. 게임 루프: 단어를 맞추거나 기회를 모두 소진할 때까지 반복
// !wordGuessed는 '단어를 맞추지 않았다'는 의미, attempts > 0은 '기회가 남아있다'는 의미
while (!wordGuessed && attempts > 0)
{
// 10. 현재 게임 상태 출력
// new string(guessWord)는 char 배열을 문자열로 변환
Console.WriteLine("\n현재 단어: " + new string(guessWord));
Console.WriteLine("남은 기회: " + attempts);
Console.WriteLine("추측한 문자들: " + guessedLetters);
// 11. 사용자에게 문자 입력 요청
Console.Write("알파벳 하나를 입력하세요: ");
// ReadLine()은 한 줄을 읽고, [0]은 첫 번째 문자를 선택
char guess = Console.ReadLine()[0];
// 입력된 문자를 소문자로 변환 (대문자 입력해도 처리 가능하게)
guess = Char.ToLower(guess);
// 12. 이미 추측한 문자인지 확인
// Contains 메서드는 문자열에 특정 문자/문자열이 포함되어 있는지 확인
if (guessedLetters.Contains(guess))
{
Console.WriteLine("이미 추측한 문자입니다. 다른 문자를 입력해주세요.");
// continue는 현재 반복을 중단하고 다음 반복으로 넘어감
continue;
}
// 13. 추측한 문자 목록에 추가 (나중에 표시하기 위해)
guessedLetters += guess + " ";
// 14. 입력한 문자가 비밀 단어에 포함되어 있는지 확인
bool correctGuess = false;
// 비밀 단어의 각 문자를 확인
for (int i = 0; i < secretWord.Length; i++)
{
// 입력한 문자가 비밀 단어의 i번째 문자와 일치하는지 확인
if (secretWord[i] == guess)
{
// 일치하면 guessWord 배열의 해당 위치에 그 문자를 표시
guessWord[i] = guess;
// 맞춘 문자가 있음을 표시
correctGuess = true;
}
}
// 15. 추측 결과에 따른 처리
if (correctGuess)
{
// 맞춘 경우
Console.WriteLine("정답입니다!");
// 16. 단어를 모두 맞췄는지 확인
// 일단 맞췄다고 가정하고 시작
wordGuessed = true;
// guessWord 배열에 언더스코어(_)가 있는지 확인
for (int i = 0; i < guessWord.Length; i++)
{
// 언더스코어가 하나라도 있으면 아직 단어를 다 맞추지 못한 것
if (guessWord[i] == '_')
{
wordGuessed = false;
// 언더스코어를 찾았으므로 더 이상 확인할 필요 없음
break;
}
}
}
else
{
// 틀린 경우
Console.WriteLine("틀렸습니다!");
// 기회 감소
attempts--;
// 남은 기회 알림
Console.WriteLine("남은 기회: " + attempts + "번");
}
}
// 17. 게임 결과 출력
if (wordGuessed)
{
// 단어를 맞춘 경우
Console.WriteLine("\n축하합니다! 단어를 맞추셨습니다: " + secretWord);
}
else
{
// 기회를 모두 소진한 경우
Console.WriteLine("\n게임 오버! 정답은 " + secretWord + "입니다.");
}
// 18. 게임 종료 메시지와 프로그램이 바로 종료되지 않도록 키 입력 대기
Console.WriteLine("게임을 종료합니다. 아무 키나 누르세요...");
Console.ReadKey();
}
}
}
1. 주석을 적고 하는데도 꽤 고난이도 였음. 주석들을 적어두고 코드를 쓰고. 다시 주석을 수정하고 해가며. 간신히 맞춰서 만들어냄.
2. 확실히 공부가 더 필요하다고 느낌. 금토일 해서 복습을 좀 해야할듯
'팀스파르타 내일배움캠프' 카테고리의 다른 글
| [사전캠프 14일차] 행맨 & 숫자 야구 게임 구현 (2025.04.03) (0) | 2025.04.03 |
|---|---|
| [사전캠프 14일차] 숫자야구 만들기!!! (0) | 2025.04.03 |
| [사전캠프 13일차] 달리기반 해보기!! (0) | 2025.04.02 |
| [사전캠프 12일차] 유니티 빗물받는 르탄이 어플 만들어보기!! (1) | 2025.04.01 |
| [사전캠프 11일차] C# 걷기반 재재재복습 (0) | 2025.03.31 |