๊ณผ์ : ํ์ ๊ฒ์ ๋ง๋ค๊ธฐ
๋ฉ๋ด: 1. ๋จ์ด๋ฑ๋กํ๊ธฐ, 2. ๊ฒ์ํ๊ธฐ
1. ๋จ์ด ๋๊ฐ ๋ฑ๋กํ๊ธฐ
-> ๊ฒ์์ ํ์ํ ๋จ์ด๋ฅผ ์ ๋ ฅํ๋ฉด ํ์ผ์ ์ ์ฅ์ํค๊ธฐ
2. ๊ฒ์-> ํ์ผ์ ์ ์ฅ๋์ด ์๋ ๋จ์ด ๋ถ๋ฌ์์
๋๋ค์ผ๋ก ํ๋ฉด์ ์ถ๋ ฅ์ด ๋๊ณ ์ ๋ ฅํด์ ๋ง์ถ๋ฉด ํฌ์ธํธ ํ๋
3. ์๊ฐ์ด ์ง๋ ์๋ก ๋จ์ด๊ฐ ์ฌ๋ฌ๊ฐ์ฉ ๋์ด๋๋ฉฐ ๋์ด๋ ์ฌ๋ฆฌ๊ธฐ
4. ํน์ ๋ ๋ฒจ์ด์ ๊ฐ๋ฉด ํด๋ฆฌ์ด
5. ๊ฒ์ ์์ ์ ์ด์ ๋ฑ๋กํ ๋จ์ด๊น์ง ๋ก๋ํ๊ธฐ
========================================
(ํ์ผ์ด ์์ ๊ฒฝ์ฐ ์์ธ์ฒ๋ฆฌ)
๊ณ ์ํ์
1. feof ํจ์๋ฅผ ํตํด ํ์ผ์ ๋ง์ง๋ง์ ํ์ธํ์ฌ ์ฒ๋ฆฌํ๋ ค๊ณ ํ์ผ๋ feof ํจ์๋ ํ์ผ์ ๋ง์ง๋ง์ ๋ง๋๊ณ ํ๋ฒ ๋ ์คํ๋์ด ๋ง์ง๋ง ํ์ค์ด ๋ ์ ์ฅ๋๋ ์ค๋ฅ๊ฐ ์์์
2. ๋จ์ด ์ ์ฅ ์ ~~\n ์ผ๋ก ์ ์ฅ๋์ด ๋ง์ง๋ง ๋จ์ด ์ถ๋ ฅ ์ ๋น์นธ์ด ์ถ๋ ฅ๋๋ ๋ฌธ์ ๊ฐ ์์์
ใด ํด๊ฒฐ: fgets ํจ์๊ฐ ๋จ์ํ ๋ฌธ์์ด์ ๋ฃ์ด์ฃผ๋ ํจ์๊ฐ ์๋๋ผ return ๊ฐ์ด ์๋ ๊ฒ์ ๋์ค์ ์๊ณ ์ด๋ฅผ ์ด์ฉํด ํด๊ฒฐํจ
3. ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด๊ณผ ํ์ผ์์ ์ฝ์ด์จ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ์๊พธ ๋ค๋ฅด๊ฒ ๋์ค๋ ์ค๋ฅ๊ฐ ์์์.
ใด ํด๊ฒฐ: fgets ํจ์๊ฐ ๊ฐํ๋ฌธ์๋ฅผ ๋ฐ๋ก ์ฝ์ด์ค๋ ๊ฒ์ ์๊ณ ์ ์ฅ๋ ๋ฌธ์์ด์ ๊ธธ์ด-1 ์ธ๋ฑ์ค์ \0์ผ๋ก NULL๊ฐ์ ์ง์ ๋ฃ์ด ๊ฐํ๋ฌธ์๋ฅผ NULL๋ก ๋์ฒดํ์ฌ ํด๊ฒฐํจ
์์ฌ์ด์
1. ๊ฒ์์ด ํ๋ ์ด๋๋ while๋ฌธ ๋ด์ ์บก์ํ๊ฐ ๊ฐ๋ฅํ ๋ถ๋ถ์ ์ฐพ์ ํจ์๋ก ๋ฌถ๊ณ ์ถ์์ผ๋, ์ ๋ถ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋์์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ์ธ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅด์ง์์ ํจ์๋ก ๋ฌถ์ง ๋ชปํจ
2. ์ค์ฝ์ด ๋ฃ๋๊ฑธ ๊น๋จน์...
=========================================
#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);
}
'๐ฑ > ๐ฑ์ฐ์ต๐ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
221214_๋ฆฌ๊ทธ๊ฒ์2 (0) | 2022.12.14 |
---|---|
221213_๋ฆฌ๊ทธ๊ฒ์๋ง๋ค๊ธฐ (0) | 2022.12.13 |
221208_๋น๊ณ ๊ฒ์+์ฌ๋ผ์ด๋ํผ์ฆ (0) | 2022.12.08 |
221207_๊ณผ์ ์ซ์์ผ๊ตฌ (0) | 2022.12.07 |
221206 ๊ณผ์ _์์๋ + ๋ค์ด์๋ชฌ๋ ๋ณ (0) | 2022.12.06 |
๋๊ธ