1. 오늘 학습 키워드
행맨(이라는 이름의 단어 맞추기 게임)을 만들 예정이다.
그러므로 오늘의 작성 내용은 설명보다 어떤 기능이 필요한지 시행착오를 거치는 내용들이 될 것 같다.
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
step 1. 조건의 정리
행맨 게임의 기본 틀을 생각하고, 그에 따라 필요한 것들을 나눠보자.
필요한 요소
1. 입력창 : Console.ReadLine();
2. 입력한 글자와 비교할 비밀단어
// string secretword = "secret" 외의 다른 단어도 OK
// 생각 변경>> char [] secretword = "secret".TocharArray(); 로 지정 (처음부터 단어를 char 배열로 선언)
3. 입력한 글자와 입력창의 글자가 동일한지 확인 //bool값으로 판독>맞다면 5번
4. 입력하는 알파벳이 문자열 안에 있을 경우 정답처리를 해줘야한다.
5. 같은 위치의 char이 동일할 경우에는 _에서 같은 문자로 바꿔줘야함
// _ _ _ _ _ _ 에서 _ e _ _ e _ 으로. 언더바로 나타날 곳도 필요하다.
//TryParse를 이용하면 형변환까지 같이 가능할 것 같다.
6. 기회 제한을 둬야한다. 그 전까지는 반복된다. //반복문에서 횟수가 점점 차감되는 식으로 하면 되지 않을까? (횟수 x--)
우선 여기까지만 생각하고, 코드를 짜보도록 하자. 뭔가 안된다 싶으면, 내용을 추가해보면 될 것이다.
+정보: $를 사용하면 " " 문자열 안에도 데이터 값을 넣을 수 있다.
예시: string A= "데이터"; 인 경우, string sent = A+"가 필요합니다";로 쓸 수도 있지만 string sent = $"{A}가 필요합니다";로도 쓸 수 있다. 한 문장 안에 데이터가 여러개 들어가야 한다면 이쪽이 편하니까 참고하자.
(A+" "+B+" "보다 $"{A} {B}"가 낫다.)
코드 1
//비밀문자 지정
char[] secretword = "hangman".ToCharArray();
//hangman 이라는 단어를 h/a/n/g/m/a/n 으로 쪼갬
char[] guessWord = new char[secretword.Length];
//guessWord라는 이름의 hangman의 문자와 같은 수의 방을 가진 배열 생성
bool guess=false; //불리언 생성. 왜 false인가?>정답을 다 맞추면 true가 될것
int x = 6; //6회의 횟수제한
for (int i=0; i<guessWord.Length; i++)
{
guessWord[i]= '_';
}
//guesWord의 배열에 전부 _를 채워넣는 작업
Console.WriteLine("알파벳을 입력해주세요.");
Console.WriteLine($"정답 현황: {new string (guessWord)}"); //char 형태인 guessWord를 문자열의 형태로 출력
Console.WriteLine($"정답 기회가 {x}회 남았습니다."); // 기회가 얼마나 남았는지 확인시켜주는 문장

코드 1. 일단 가장 기본적인 출력을 만들었다.
hangman을 예제로 삼자, 그와 딱맞는 7개의 칸(언더바)로 나타났다.
문제는 지금부터이다.
이제부터 우리는
1. 알파벳을 입력하면
2. 숨겨진 단어의 알파벳과 일치하는지 확인하고
3. 일치하면 _ 변경하며
4. 횟수가 계속 차감되어야 한다.
5. 가능하면 깔끔하게 지워가면서 할 수 있다면 더 좋다.(*선택)
코드 2
//코드 1의 for문까지는 동일 코드이다.
do
{
Console.WriteLine($"정답 기회가 {x}회 남았습니다."); //초기값 6으로 뜨는 것 확인
char input;
bool OK; //입력한 데이터가 char값인지 확인
OK = char.TryParse(Console.ReadLine(), out input);//입력값을 input에 char 값으로 변경
if (OK) //input값이 char의 형태일 경우 실행
{
//입력한 알파벳이 secretWord와 같으면 OK, 다르면 기회 차감
for(int i = 0; i < secretword.Length; i++) //i의 값이 하나씩 증가하면서 secretword와 input데이터를 확인한다.
{
if (secretword[i] == input)
{
guessWord[i] = input; //맞춘 알파벳은 공개시킴
secretword[i] = '0'; //알파벳이 아닌 숫자 0으로 바꾸어 중복정답 방지
Console.WriteLine($"정답 현황: {new string(guessWord)}");
}
else
{
x--; //그냥 넣었더니 h 부분에 n이 들어간 것도 횟수를 차감한다. 개선필요
}
}
}
else //입력 값이 알파벳 문자 하나가 아닐 경우 실행
{
Console.WriteLine("알파벳을 하나만 입력해주세요");
}
} while (x > 0 && !guess); //정답 기회가 0이 되면 종료됨

시간이 부족하여 완료하지는 못했으나, 어느정도의 구조는 완성된 모습이다.
3. 학습하며 겪었던 문제점 & 에러
- 문제&에러에 대한 정의
입력을 했을 때 x값이 대량으로 차감되었다. (코드 2의 사진 참고)
char [0]에는 n이 없는데 char [1]에는 n이 있을 경우, x--가 이루어지지 않아야 하는데, char [0]에서 x값이 차감이 되어버린 것이다.
- 내가 할 시도
x값이 감소될 조건을 좀 더 추가해야한다. 하나라도 값이 맞는다면, 기회는 차감되지 않아야 한다.
또한 정답을 맞췄을 때, bool guess의 값을 바꾸어 게임을 끝내는 방법도 구해야 한다.
4. 내일 학습 할 것은 무엇인지
행맨의 완성! 그것부터 목표로 잡을 예정이다.
가능하면 안에 만들어둔 여러 문자열 중에서 랜덤으로 뽑는 형식을 만들어보고 싶지만, 아직 방법을 떠올리지 못했다.
우선 행맨이 작동가능한 기본 코드를 완성하고 완료할 예정이다.
'Unity_사전캠프' 카테고리의 다른 글
[사전캠프 11일 차] 오목 게임 기획 (팀플) (0) | 2025.03.31 |
---|---|
[사전캠프 10일차] 행맨-2 (0) | 2025.03.28 |
[사전캠프 8일차] 이중 반복문, 배열 최소최대 (0) | 2025.03.26 |
[사전캠프 7일차] 반복문 복습, Random 클래스 (0) | 2025.03.25 |
[사전캠프 6일차] for, while, do-while? 반복문, 그리고 배열. (0) | 2025.03.24 |