๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒฑ/๐ŸŒฑ์—ฐ์Šต๐ŸŒฑ

221209_ํƒ€์ž๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ

by Nessie! 2022. 12. 9.

๊ณผ์ œ: ํƒ€์ž ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ

 

๋ฉ”๋‰ด: 1. ๋‹จ์–ด๋“ฑ๋กํ•˜๊ธฐ, 2. ๊ฒŒ์ž„ํ•˜๊ธฐ

 

1. ๋‹จ์–ด ๋„๊ฐ ๋“ฑ๋กํ•˜๊ธฐ

-> ๊ฒŒ์ž„์— ํ•„์š”ํ•œ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํŒŒ์ผ์— ์ €์žฅ์‹œํ‚ค๊ธฐ

 

2. ๊ฒŒ์ž„-> ํŒŒ์ผ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋‹จ์–ด ๋ถˆ๋Ÿฌ์™€์„œ

๋žœ๋ค์œผ๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅ์ด ๋˜๊ณ  ์ž…๋ ฅํ•ด์„œ ๋งž์ถ”๋ฉด ํฌ์ธํŠธ ํš๋“

 

3. ์‹œ๊ฐ„์ด ์ง€๋‚  ์ˆ˜๋ก ๋‹จ์–ด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์”ฉ ๋Š˜์–ด๋‚˜๋ฉฐ ๋‚œ์ด๋„ ์˜ฌ๋ฆฌ๊ธฐ

 

4. ํŠน์ • ๋ ˆ๋ฒจ์ด์ƒ ๊ฐ€๋ฉด ํด๋ฆฌ์–ด

 

5. ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ ์ด์ „ ๋“ฑ๋กํ•œ ๋‹จ์–ด๊นŒ์ง€ ๋กœ๋“œํ•˜๊ธฐ

 

========================================

(ํŒŒ์ผ์ด ์—†์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ)

 

 

๊ณ ์ƒํ•œ์ 

1. feof ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰์„ ํ™•์ธํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ ํ–ˆ์œผ๋‚˜ feof ํ•จ์ˆ˜๋Š” ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰์„ ๋งŒ๋‚˜๊ณ  ํ•œ๋ฒˆ ๋” ์‹คํ–‰๋˜์–ด ๋งˆ์ง€๋ง‰  ํ•œ์ค„์ด ๋” ์ €์žฅ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ์Œ

2. ๋‹จ์–ด ์ €์žฅ ์‹œ ~~\n ์œผ๋กœ ์ €์žฅ๋˜์–ด ๋งˆ์ง€๋ง‰ ๋‹จ์–ด ์ถœ๋ ฅ ์‹œ ๋นˆ์นธ์ด ์ถœ๋ ฅ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Œ

ใ„ด ํ•ด๊ฒฐ: fgets ํ•จ์ˆ˜๊ฐ€ ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์ฃผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ return ๊ฐ’์ด ์žˆ๋Š” ๊ฒƒ์„ ๋‚˜์ค‘์— ์•Œ๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•จ

 

3. ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด๊ณผ ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์ž๊พธ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ์Œ.

ใ„ด ํ•ด๊ฒฐ: fgets ํ•จ์ˆ˜๊ฐ€ ๊ฐœํ–‰๋ฌธ์ž๋ฅผ ๋”ฐ๋กœ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์ €์žฅ๋œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด-1 ์ธ๋ฑ์Šค์— \0์œผ๋กœ NULL๊ฐ’์„ ์ง์ ‘ ๋„ฃ์–ด ๊ฐœํ–‰๋ฌธ์ž๋ฅผ NULL๋กœ ๋Œ€์ฒดํ•˜์—ฌ ํ•ด๊ฒฐํ•จ 

 

์•„์‰ฌ์šด์ 

1. ๊ฒŒ์ž„์ด ํ”Œ๋ ˆ์ด๋˜๋Š” while๋ฌธ ๋‚ด์— ์บก์Аํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์„ ์ฐพ์•„ ํ•จ์ˆ˜๋กœ ๋ฌถ๊ณ ์‹ถ์—ˆ์œผ๋‚˜, ์ „๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์™ธ์—๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€์•Š์•„ ํ•จ์ˆ˜๋กœ ๋ฌถ์ง€ ๋ชปํ•จ

 

2. ์Šค์ฝ”์–ด ๋„ฃ๋Š”๊ฑธ ๊นŒ๋จน์Œ...

 

=========================================

 

https://youtu.be/Dn32kxuP8aQ

https://youtu.be/uYKseTI4NbQ

#include <stdio.h>
#include <time.h>
#include <string.h>
#include <Windows.h>

#define CHAR_LENGTH 128
#define CLEAR_COUNT 8
#define MAX_FAIL_COUNT 5
#define MAX_TIEMR 5
#define MIN_GAME_LEVEL 1
#define MAX_GAME_LEVEL 5

typedef unsigned int uint;

char** wordArray;

void Save(char* word);
uint Load(bool needPrint);
void SetWordArray();

int main()
{
	
	srand(time(NULL));

	uint inputMenuNum, rowCount;
	uint checkCount = 0, failCount = 0;;

	while (true)
	{
		printf("1. ๋“ฑ๋ก๋œ ๋‹จ์–ด ํ™•์ธํ•˜๊ธฐ, 2. ๋‹จ์–ด ๋“ฑ๋กํ•˜๊ธฐ, 3. ๊ฒŒ์ž„์‹œ์ž‘, 4. ์ข…๋ฃŒํ•˜๊ธฐ\n");

		scanf_s("%d", &inputMenuNum);

		switch (inputMenuNum)
		{
		case 1:
		{
			system("cls");
			Load(true);

			break;
		}
		case 2:
		{
			system("cls");
			Load(true);				//๊ธฐ์กด ์ €์žฅ๋˜์–ด์žˆ๋˜ ์ •๋ณด๋“ค์„ ๋ถˆ๋Ÿฌ์™€ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

			char word[CHAR_LENGTH] = {};
			printf("๋“ฑ๋กํ•  ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”: ");
			scanf_s("%s", word, CHAR_LENGTH);

			Save(word);			//์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

			break;
		}
		case 3:
		{
			printf("๊ฒŒ์ž„ ์‹œ์ž‘!\n");
			rowCount = Load(false);

			if (rowCount == 0)			//ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์–ด ์ข…๋ฃŒํ•œ๋‹ค.
				break;

			wordArray = new char* [rowCount];

			for (uint i = 0; i < rowCount; i++)
			{
				wordArray[i] = new char[CHAR_LENGTH];
			}

			SetWordArray();

			uint gameLevel = MIN_GAME_LEVEL;

			//ํŠน์ • ๋ ˆ๋ฒจ๊นŒ์ง€ ํƒ€์ž์ž…๋ ฅ ๋ฐ˜๋ณต
			while (gameLevel <= MAX_GAME_LEVEL)
			{
				if (failCount >= MAX_FAIL_COUNT)
				{
					printf("๊ฒŒ์ž„ ์‹คํŒจ!\n"); 
					return 0;
				}

				time_t startTime = time(NULL);				//ํ˜„์žฌ์‹œ๊ฐ„ ๋ฐ˜ํ™˜
				time_t curTime = startTime;
				time_t lastTime = startTime;

				uint randomNum = rand() % rowCount;						//๋“ฑ๋ก๋œ ๋‹จ์–ด ์ค‘ ๋žœ๋คํ•œ ํ•œ์ค„์„ ๊ฐ€์ ธ์˜จ๋‹ค.
				printf_s("%d์ดˆ ์•ˆ์— ๋‹ค์Œ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”: %s\n", MAX_TIEMR - gameLevel, wordArray[randomNum], CHAR_LENGTH);

				char inputWord[CHAR_LENGTH] = { 0 };					//์ž…๋ ฅ๋ฐ›์€ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

				scanf_s("%s", inputWord, CHAR_LENGTH);					//๋ฐฐ์—ด์— ์ž…๋ ฅ๋ฐ›์€ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•˜๊ณ 

				curTime = time(0);

				//printf("curTime : %d\n", curTime);
				//printf("lastTime : %d\n", lastTime);
				//printf("curTime - lastTime : %d\n", curTime - lastTime);

				if (curTime - lastTime > MAX_TIEMR - gameLevel)
				{
					failCount++;
					printf("์‹œ๊ฐ„์ด ๊ฒฝ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.\n๋‚จ์€ ํšŸ์ˆ˜: %d\n", MAX_FAIL_COUNT - failCount);
					continue;
				}

				if (strncmp(wordArray[randomNum], inputWord, CHAR_LENGTH) == 0)		//์ž…๋ ฅ๋ฐ›์€ ๋‹จ์–ด์™€ ๋žœ๋คํ•˜๊ฒŒ ์„ ์ •๋œ ๋‹จ์–ด๊ฐ€ ์ผ์น˜ํ•œ์ง€ ํ™•์ธํ•œ๋‹ค (์ผ์น˜ํ• ๊ฒฝ์šฐ 1์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜)
					checkCount++;
				else
				{
					failCount++;
					printf("์ž˜๋ชป ์ž…๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‚จ์€ ํšŸ์ˆ˜: %d\n", MAX_FAIL_COUNT - failCount);
				}
				
				if (checkCount == CLEAR_COUNT)						//๋‹จ์–ด์ž…๋ ฅ์„ ํŠน์ • ํšŸ์ˆ˜ ์ด์ƒ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ฒŒ์ž„๋ ˆ๋ฒจ ์ฆ๊ฐ€!
				{
					printf("%d๋ ˆ๋ฒจ ์™„๋ฃŒ! ๋‹ค์Œ๋ ˆ๋ฒจ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.\n", gameLevel);

					failCount = 0;
					checkCount = 0;
					gameLevel++;
				}

			}

			printf("๊ฒŒ์ž„ ํด๋ฆฌ์–ด!\n");
			
		}

		case 4:
		{
			return 0;
		}
		}
	}




}


void Save(char* word)
{
	FILE* file;
	fopen_s(&file, "WordList.txt", "a");	//์ž๋™์œผ๋กœ ๋™์ ํ• ๋‹น์ด ๋˜๊ธฐ๋•Œ๋ฌธ์— ํ•ด์ œ๊นŒ์ง€ ๊ฐ™์ดํ•ด์ค˜์•ผํ•จ
	//์—†์œผ๋ฉด ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ์žˆ์œผ๋ฉด ๋ฎ์–ด์”Œ์›Œ์ง„๋‹ค. "w"์ผ๋•Œ๋งŒ, "a"๋Š” append์˜ ์˜๋ฏธ๋กœ ๋’ค์— ์ด์–ด์„œ ๋ถ™๋Š”๋‹ค.

	fprintf_s(file, "%s\n", word, CHAR_LENGTH);

	fclose(file);
}

uint Load(bool needPrint)
{
	FILE* file;
	fopen_s(&file, "WordList.txt", "r");

	uint rowCount = 0;

	//Weapon weapon;
	if (file == NULL)
	{
		printf("ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. \n");
		return rowCount;
	}

	if (needPrint)
		printf("๋‹จ์–ด ๋ชฉ๋ก\n");
	char word[CHAR_LENGTH] = {};

	while (true)
	{
		//if (feof(file))
		//	break;


		if (!fgets(word, CHAR_LENGTH, file)) break;

		//if (word[0] == '\n')
		//{
		//	printf("๊ฐœํ–‰๋ฌธ์ž ์ฐพ์•˜๋”ฐ.");
		//}
		//word[strlen(word) - 1] = '\0';
		//fscanf_s(file, "%s", word, CHAR_LENGTH);			//_s๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜๋“ค์€ ๋ฐฐ์—ด์ด ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ ๋ฐฐ์—ด๊ธธ์ด๋„ ๊ฐ™์ด ๋„˜๊ฒจ์ค˜์•ผํ•œ๋‹ค.

		if (needPrint)
			printf("%s", word);

		rowCount++;
		
	}

	//fscanf_s(file, "%s, %d", weapon.name, CHAR_LENGTH, &weapon.price);			//_s๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜๋“ค์€ ๋ฐฐ์—ด์ด ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ ๋ฐฐ์—ด๊ธธ์ด๋„ ๊ฐ™์ด ๋„˜๊ฒจ์ค˜์•ผํ•œ๋‹ค.

	if (needPrint)
		printf("\n");

	fclose(file);

	return rowCount;
}

void SetWordArray()
{
	FILE* file;
	fopen_s(&file, "WordList.txt", "r");

	uint rowCount = 0;

	//Weapon weapon;
	if (file == NULL)
		printf("ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. \n");

	while (true)
	{
		//if (feof(file))		//ํŒŒ์ผ์˜ ๋์ธ์ง€ ํ™•์ธํ•œ๋‹ค
		//	break;

		if (!fgets(wordArray[rowCount], CHAR_LENGTH, file)) break;			//ํ•œ์ค„ ์”ฉ ์ฝ์–ด์„œ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
		wordArray[rowCount][strlen(wordArray[rowCount]) - 1] = '\0';

		rowCount++;

	}

	fclose(file);
}

๋Œ“๊ธ€