#include
#include
#include
#include
// Определете структурата на въпросите
typedef struct {
char въпрос [256];
char отговор [256];
char опция1 [256];
char опция2 [256];
char опция3 [256];
char опция4 [256];
} Въпрос;
// Определете структурата на състоянието на играта
typedef struct {
int currentQuestion;
int moneywon;
int lifelineused [3]; // 0 за неизползвани, 1 за използван
int gameover;
} Gamestate;
// функция за зареждане на въпроси от файл
Въпрос* LoadQuestions (const char* fileName, int* numquestions) {
Файл* fp =fopen (име на файл, "r");
ако (fp ==null) {
printf ("Файл за отваряне на въпрос! \ n");
връщане null;
}
// Прочетете броя на въпросите
fscanf (fp, "%d \ n", numquestions);
// разпределете паметта за въпросите
Въпрос* Въпроси =Malloc (* numquestions* sizeof (въпрос));
ако (въпроси ==NULL) {
printf ("Грешка при разпределяне на памет за въпроси! \ n");
fclose (FP);
връщане null;
}
// Прочетете въпросите от файла
за (int i =0; i <*numquestions; i ++) {
fscanf (fp, "%[^\ n] \ n", въпроси [i] .question);
fscanf (fp, "%[^\ n] \ n", въпроси [i] .Answer);
fscanf (fp, "%[^\ n] \ n", въпроси [i] .option1);
fscanf (fp, "%[^\ n] \ n", въпроси [i] .option2);
fscanf (fp, "%[^\ n] \ n", въпроси [i] .option3);
fscanf (fp, "%[^\ n] \ n", въпроси [i] .option4);
}
fclose (FP);
въпроси за връщане;
}
// функция за показване на текущия въпрос
void displayquestion (въпрос на въпрос) {
printf ("\ n%s \ n \ n", въпрос.question);
printf ("1. %s \ n", въпрос.option1);
printf ("2. %s \ n", въпрос.option2);
printf ("3. %s \ n", въпрос.option3);
printf ("4. %s \ n", въпрос.option4);
}
// функция за справяне с отговора на играча
int getanswer (gamestate* игра) {
int отговор;
printf ("\ nenter вашия отговор (1-4):");
scanf ("%d", &отговор);
// Утвърждаване на отговора
докато (отговор <1 || отговор> 4) {
printf ("Невалиден отговор! Моля, въведете число между 1 и 4:");
scanf ("%d", &отговор);
}
отговор отговор;
}
// функция, за да проверите дали отговорът е правилен
int checkanswer (въпрос на въпрос, int answer) {
if (Отговор ==1 &&strcmp (Question.option1, въпрос.answer) ==0) {
връщане 1;
} else if (Отговор ==2 &&strcmp (въпрос.option2, въпрос.answer) ==0) {
връщане 1;
} else if (Отговор ==3 &&strcmp (въпрос.option3, въпрос.answer) ==0) {
връщане 1;
} else if (Отговор ==4 &&strcmp (въпрос.option4, въпрос.answer) ==0) {
връщане 1;
} else {
връщане 0;
}
}
// функция за обработка на спасителни линии
void uselifeline (Gamestate* игра) {
int choice;
printf ("\ nwich lifeline бихте ли искали да използвате? \ n");
printf ("1. 50/50 \ n");
printf ("2. Попитайте публиката \ n");
printf ("3. Телефон приятел \ n");
printf ("Въведете своя избор (1-3):");
scanf ("%d", &избор);
// валидиран избор
докато (избор <1 || избор> 3) {
printf ("Невалиден избор! Моля, въведете число между 1 и 3:");
scanf ("%d", &избор);
}
// Проверете дали Lifeline вече се използва
if (game-> lifeelineused [избор - 1] ==1) {
printf ("Вече сте използвали тази спасителна линия! \ n");
връщане;
}
// внедряване на Lifeline Logic тук (например, премахнете неправилни опции, симулирайте гласа на аудиторията и т.н.)
Game-> LifeLineused [Choice - 1] =1;
printf ("Lifeline се използва успешно! \ n");
}
// функция за игра на играта
void playGame (Въпроси* въпроси, int numquestions) {
Игра за геймстати;
game.currentQuestion =0;
game.moneywon =0;
memset (game.lifelineused, 0, sizeof (game.lifelineused));
game.gameover =0;
докато (! game.gameover) {
// Показване на текущия въпрос
displayquestion (въпроси [game.currentquestion]);
// обработка на спасителни линии
printf ("\ ndo искате да използвате спасителна линия? (y/n):");
char lifelinechoice;
scanf (" %c", &lifelinechoice);
ако (lifelinechoice =='y') {
Uselifeline (&Game);
}
// Вземете отговора на играча
int antfor =getanswer (&game);
// проверете дали отговорът е правилен
ако (checkanswer (въпроси [game.currentquestion], отговор)) {
printf ("правилно! \ n");
game.moneywon + =1000 * (game.currentQuestion + 1);
game.currentquestion ++;
ако (game.currentQuestion ==numquestions) {
game.gameover =1;
printf ("\ ncongratulations! Вие спечелихте $%d! \ n", game.moneywon);
почивка;
}
} else {
printf ("неправилно! \ n");
game.gameover =1;
printf ("\ nyou спечели $%d. По -добър късмет следващия път! \ n", game.moneywon);
почивка;
}
}
}
int main () {
srand (време (null));
int numquestions;
Въпроси* Въпроси =LoadQuestions ("Въпроси.txt", &Numquestions);
ако (въпроси ==NULL) {
връщане 1;
}
printf ("\ nwelcome до кой иска да бъде милионер! \ n");
PlayGame (въпроси, Numquestions);
безплатно (въпроси);
връщане 0;
}
`` `
Как да използвам този код:
1. Създайте въпрос на въпроси: Създайте текстов файл, наречен `ourcle.txt` и следвайте този формат:
`` `
10 // Брой въпроси
Каква е столицата на Франция? // Въпрос
Париж // Правилен отговор
Берлин // Вариант 1
Лондон // Вариант 2
Рим // Вариант 3
Токио // Вариант 4
... // Добавете още въпроси в същия формат
`` `
2. Съставете и изпълнете: Компилирайте кода с помощта на C компилатор (например GCC) и стартирайте изпълнимия.
Обяснение:
* Структури на данни:
* `СТРУКТУРА НА ВЪПРОС:Притежава опциите за текст, отговор и многократен избор.
* `GameState` Структура:проследява текущия въпрос, спечелените пари, използваните спасители и играта над статуса.
* Функции:
* `loadquestions ()`:Зарежда въпроси от файл.
* `DisplayQuestion ()`:Показва текущия въпрос и опции.
* `getAnswer ()`:подканва играча за отговор и утвърждава въвеждането.
* `checkanswer ()`:Сравнява отговора на играча с правилния отговор.
* `uselifeline ()`:обработва избора и внедряването на LifeLine (Заплаща за действителна Lifeline Logic).
* `PlayGame ()`:Управлява основния цикъл на играта, обработка на въпроси, отговори и спасителни линии.
* Логика на играта:
* `PlayGame ()` Функцията повтаря чрез въпроси, докато играчът не достигне окончателния въпрос или отговори неправилно.
* Играчът може да използва LifeLines, като избере опции от меню.
* Играта следи напредъка и спечелените пари на играча.
За да внедрите спасителните линии, ще трябва да добавите следното във функцията `uselifeline ()`:
* 50/50: Премахнете на случаен принцип две неправилни опции.
* Попитайте публиката: Генерирайте гласовете на случайна аудитория, като давате правилния отговор по -голям шанс за победа.
* Телефон Приятел: Генерирайте отговора на случаен „приятел“, който може да бъде правилен или неправилен с определена вероятност.
Този код предоставя основна структура за игра „Кой иска да бъде милионер“. Можете да го подобрите допълнително от:
* Прилагане на по -усъвършенствана логика на LifeLine.
* Добавяне на визуални елементи и анимации.
* Включване на по -сложни въпросителни.
* Запазване и зареждане на напредъка на играта.