C언어 기초/C언어 연습
C언어로 만든 간단한 행맨 게임
한 면만 쓴 종이
2021. 11. 6. 01:27
/*
* 행맨 게임
* 2021-11-06
*/
#include <stdio.h>
#include <Windows.h>
#include <stdbool.h>
#include <time.h>
#include <string.h>
/*
* Define
*/
#define HANGMAN 20
#define ANSWER_WIDTH 70
#define MAX 1000
/*
* 함수 선언
*/
// 커서 이동 함수
void gotoxy(int x, int y);
// 기본 배경(처형대, 밑줄 등) 출력 함수
void Background();
// 답 입력받기
void Answer();
// 행맨 몸 관리 함수
void Body(int* bodyCount);
// 글자 대조 함수
int Compare(char take);
// 글자 맞췄을 때 함수
void Correct(int len_ptr, char take);
/*
* 변수 선언
*/
char answer[MAX]; // 답 받는 변수
char player[MAX]; // 맞춘 답 저장 변수
int count = 0; // 답 글자 수
int body = 0;
int* bodyCount = &body; // 행맨 몸 count에 쓰일 변수
int success = 0; // 성공 횟수
char already; // 이미 맞춘 문자인지 확인하기 위한 변수
int main() {
// 정답 입력받고 문자 개수만큼 칸 출력
Answer();
// 기본 필드 출력(처형대, 답 칸)
Background();
gotoxy(0, 1);
printf("영문자를 하나씩 입력하여 정답을 맞춰보세요. \n");
// 게임 시작
char take;
while(1) {
gotoxy(0, 2);
scanf_s("%c", &take, 1);
rewind(stdin); // 입력 버퍼 비우기
Compare(take);
// 정답 맞췄을 때
if (success == (count - 1)) {
gotoxy(0, HANGMAN + 3);
printf("정답을 맞췄습니다!\n");
printf("3초 뒤 게임을 종료합니다.\n");
Sleep(3000);
printf("Bye~\n");
exit(0);
}
else if (*bodyCount > 6)
{
gotoxy(0, HANGMAN + 3);
printf("게임 실패! 다음에 다시 도전하세요~");
break;
}
}
return 0;
}
void gotoxy(int x, int y) {
COORD Pos;
Pos.X = x;
Pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
void Background() {
gotoxy(HANGMAN, 3);
printf("\n");
printf(" _______________ \n");
printf(" || |\n");
printf(" || |\n");
printf(" || |\n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf(" || \n");
printf("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ\n");
int i = 0;
while (answer[i] != 0) {
if (answer[i] == NULL)
count--;
count++;
i++;
}
gotoxy(ANSWER_WIDTH, 23);
for (int k = 0; k < count-1; k++)
printf("_");
Sleep(500);
}
void Answer()
{
printf("생각한 단어를 입력하세요: \n");
fgets(answer, MAX, stdin);
rewind(stdin);
system("cls");
}
int Compare(char take)
{
// 맞췄을 때
char* ptr = strchr(answer, take);
already = strchr(player, take);
if (ptr != NULL) {
if (already == NULL) {
success += 1;
Correct(strlen(ptr), take);
return 1;
}
else
{
printf("이미 맞춘 문자입니다\n");
return 1;
}
}
else
{
// 틀렸을 때
printf("틀렸습니다!");
*bodyCount += 1;
gotoxy(ANSWER_WIDTH + (*bodyCount), 5);
printf("%c", take); // 틀린 문자 출력
// Body 함수 호출
Body(bodyCount);
return 0;
}
}
void Body(int* bodyCount) {
// case만들어서 bodyCount이용 -> 몸 늘리기
switch (*bodyCount) {
case 1:
gotoxy(HANGMAN - 1, 8);
printf("O");
break;
case 2:
gotoxy(HANGMAN - 1, 9);
printf("I");
break;
case 3:
gotoxy(HANGMAN - 2, 10);
printf("\ ");
break;
case 4:
gotoxy(HANGMAN, 10);
printf("/");
break;
case 5:
gotoxy(HANGMAN - 2, 11);
printf("/");
break;
case 6:
gotoxy(HANGMAN, 11);
printf("\");
break;
default:
break;
}
}
void Correct(int len_ptr, char take)
{
int location_a = count - len_ptr; // 전체 문자열 길이 - ptr길이
printf("맞췄습니다!");
gotoxy(ANSWER_WIDTH + location_a, HANGMAN + 3);
player[location_a] = take;
printf("%c", take);
}
c언어를 공부한 것을 활용해보고자 행맨게임을 만들어 보았습니다.
콘솔창에서 실행되기 때문에 부족한 부분이 많습니다. 후에 다른 언어들도 공부한 후, 더 완성도 높은
프로그램을 만들어보겠습니다.