C언어- 행맨(Hangman) 프로젝트

(1차원 배열로 구현함)

#include <stdio.h>
#include <stdlib.h>
#define ep 10 //end point 문제 개수=끝나는 지점

int delete[ep] = { 0 }; // 랜덤 반복 제거를 위한 배열
int gameover = 0; // 10번 우승했을 때 게임을 종료하기 위한 변수 => gameover가 10되면 게임 종료!!
int win = 0; // 우승 횟수를 나타내는 변수
int score = 0; // 점수를 나타내는 변수

int game(int receive, char *list, char *user) {
	printf("  (우승 횟수:%d 회)\n\n", win);

	int count = 0; // 몇 회 시행했는지 알려줌 (시도횟수)
	int answercount = 0; // 지금까지(반복 돌면서) 철자 몇 개 맞췄는지 알려줌

	while (1) {
		for (int i = 0; i < receive; i++)
			printf("%c", user[i]);

		if (count == 0)
			printf("  < %d글자 시작!! >\n알파벳을 입력해보세요:", receive);
		if (count != 0)
			printf("  < %d글자 남음!! >\n알파벳을 입력해보세요:", receive - answercount);

		int a = getchar();
		getchar();
		count++;

		int nowanswer = 0; // 아래 for문에서 철자 몇 개 맟췄는지 알려줌
		for (int i = 0; i <= receive; i++) {
			if (list[i] != user[i]) {
				if (list[i] == a) {
					user[i] = a;
					answercount++;
					nowanswer++;
				}
			}
		}
		if (nowanswer > 0)
			printf("\n정답입니다!!        [ 시도 횟수:%d ] \n\n", count);

		else if (nowanswer == 0)
			printf("\n중복이거나 오답입니다!! [ 시도 횟수:%d ] \n\n", count);

		if (answercount == receive) {
			printf("\n");
			for (int i = 0; i < receive; i++)
				printf("%c", user[i]);
			printf(" [ 시도 횟수:%d ]", count);
			printf("\n축하드립니다!! 엔터 시 다음으로 넘어가겠습니다!! \n\n");

			getch();
			gameover++;
			win++;
			score += count;
			return 0;
		}
	}
}

int setting(int number) {
	if (number == 0) {
		char list[4] = "fig"; //3 
		char user[4] = "___";
		game(3, list, user);
		return 0;
	}
	else if (number == 1) {
		char list[5] = "pear"; //4
		char user[5] = "____";
		game(4, list, user);
		return 0;
	}
	else if (number == 2) {
		char list[6] = "apple"; //5
		char user[6] = "_____";
		game(5, list, user);
		return 0;
	}
	else if (number == 3) {
		char list[7] = "cherry"; //6
		char user[7] = "______";
		game(6, list, user);
		return 0;
	}
	else if (number == 4) {
		char list[7] = "orange"; //6
		char user[7] = "______";
		game(6, list, user);
		return 0;
	}
	else if (number == 5) {
		char list[7] = "banana"; //6
		char user[7] = "______";
		game(6, list, user);
		return 0;
	}
	else if (number == 6) {
		char list[8] = "coconut"; //7
		char user[8] = "_______";
		game(7, list, user);
		return 0;
	}
	else if (number == 7) {
		char list[10] = "pineapple"; //9
		char user[10] = "_________";
		game(9, list, user);
		return 0;
	}
	else if (number == 8) {
		char list[10] = "persimmon"; //9
		char user[10] = "_________";
		game(9, list, user);
		return 0;
	}
	else if (number == 9) {
		char list[12] = "watermellon"; //11
		char user[12] = "___________";
		game(11, list, user);
		return 0;
	}
}

int ending() {
	system("cls");
	printf("\n\n=============== 결과 ===============\n");
	printf("=> 시도 횟수 합산:%d회\n", score);
	printf("=> 낮을 수록 높은 점수!! // 만점: 53회\n");
	printf("====================================\n\n");
	printf("CONGRATULATION~~~~~~~~~\n제작자: 안성현\n\n");
}


int main(void) {
	system("cls");
	printf("행맨을 시작합니다.\n주제는 과일입니다!!");

	srand(time(NULL));
	int random;
	do {
		random = rand() % 10;
	} while (delete[random] == 1);
	delete[random] = 1;
	setting(random);

	if (gameover == ep)
		ending();
	else
		main();
}

Leave a Reply

Your email address will not be published. Required fields are marked *