#include
#include
#include
#include
// Határozza meg a kérdés szerkezetét
typedef struct {
char kérdés [256];
char válasz [256];
Char 1. opció [256];
CHAR opció2 [256];
CHAR opció3 [256];
CHAR opció4 [256];
} Kérdés;
// Határozza meg a játék állapotának felépítését
typedef struct {
int currentquestion;
Int Moneywon;
int lifelineused [3]; // 0 fel nem használt, 1 használt
int játék;
} GameState;
// Funkció a kérdések feltöltéséhez egy fájlból
Kérdés* Load Questions (const char* fájlnév, int* numquestions) {
Fájl* fp =fopen (fájlnév, "r");
if (fp ==null) {
printf ("Hiba megnyitási fájl megnyitása! \ n");
visszatérés nulla;
}
// Olvassa el a kérdések számát
fscanf (fp, "%d \ n", számok);
// Memória elosztása a kérdésekhez
Kérdés* KÉRDÉSEK =MALLOC (* Numquestions* sizeOF (kérdés));
if (kérdések ==null) {
printf ("Hiba a memória felosztása a kérdésekhez! \ n");
fclose (fp);
visszatérés nulla;
}
// Olvassa el a kérdéseket a fájlból
for (int i =0; i <*numquestions; i ++) {
fscanf (fp, "%[^\ n] \ n", kérdések [i]. kérdés);
fscanf (fp, "%[^\ n] \ n", kérdések [i] .answer);
fscanf (fp, "%[^\ n] \ n", kérdések [i] .option1);
fscanf (fp, "%[^\ n] \ n", kérdések [i] .option2);
fscanf (fp, "%[^\ n] \ n", kérdések [i] .option3);
fscanf (fp, "%[^\ n] \ n", kérdések [i] .option4);
}
fclose (fp);
visszatérő kérdések;
}
// funkció az aktuális kérdés megjelenítéséhez
érvénytelen kijelzőkérdés (kérdés kérdés) {
printf ("\ n%s \ n \ n", kérdés.question);
printf ("1. %s \ n", kérdés.option1);
printf ("2. %s \ n", kérdés.option2);
printf ("3. %s \ n", kérdés.option3);
printf ("4. %s \ n", kérdés.option4);
}
// funkció a játékos válaszának kezelésére
int getanswer (gameState* játék) {
int válasz;
printf ("\ nenter a válaszod (1-4):");
scanf ("%d", és válasz);
// A válasz érvényesítése
míg (válasz <1 || válasz> 4) {
printf ("Érvénytelen válasz! Kérjük, írjon be egy számot 1 és 4 között:");
scanf ("%d", és válasz);
}
visszatérő válasz;
}
// funkció annak ellenőrzésére, hogy a válasz helyes -e
int checkanswer (kérdés, kérdés, int válasz) {
if (válasz ==1 &&strcmp (kérdés.option1, kérdés.answer) ==0) {
visszatérés 1;
} egyébként, ha (válasz ==2 &&strcmp (kérdés.option2, kérdés.answer) ==0) {
visszatérés 1;
} egyébként, ha (válasz ==3 &&strcmp (kérdés.option3, kérdés.answer) ==0) {
visszatérés 1;
} egyébként, ha (válasz ==4 &&strcmp (kérdés.option4, kérdés.answer) ==0) {
visszatérés 1;
} else {
visszatérés 0;
}
}
// Funkció az élethosszúságok kezelésére
void uselifeline (GameState* játék) {
int választás;
printf ("\ nwhch Lifeline -t szeretne használni? \ n");
printf ("1. 50/50 \ n");
printf ("2. Kérdezd meg a közönséget \ n");
printf ("3. Telefon egy barátot \ n");
printf ("Írja be a választását (1-3):");
scanf ("%d", és választás);
// A választás érvényesítése
míg (választás <1 || választás> 3) {
printf ("Érvénytelen választás! Kérjük, írjon be egy számot 1 és 3 között:");
scanf ("%d", és választás);
}
// Ellenőrizze, hogy a mentőkötél már használja -e
if (Game-> LiefineSused [Choice - 1] ==1) {
printf ("Már használta ezt a mentőkötél! \ n");
visszatérés;
}
// A Lifeline logika megvalósítása itt (például távolítsa el a helytelen lehetőségeket, szimulálja a közönség szavazását stb.)
Game-> LifelineLise [Choice - 1] =1;
printf ("A mentőkép sikeresen használható! \ n");
}
// a játék lejátszásához funkció
void playgame (kérdés* kérdések, int numquestions) {
GameState játék;
Game.CurrentQuestion =0;
Game.MoneyWon =0;
memset (Game.lifelineUsuse, 0, sizeOF (Game.lifelineUsUsed));
Game.GameOver =0;
míg (! Game.GameOver) {
// Jelenítse meg az aktuális kérdést
displayQuestion (kérdések [Game.CurrentQuestion]);
// Kezelje az élettartamokat
printf ("\ ndo Használni akarsz egy mentőt? (Y/N):");
char lifeLinechoice;
scanf (" %c", &lifeLinechoice);
if (lifeLineChoice =='y') {
Uselifeline (&Game);
}
// kapja meg a játékos válaszát
int válasz =getanswer (&játék);
// Ellenőrizze, hogy a válasz helyes -e
if (checkanswer (kérdések [játék.currentQuestion], válasz)) {
printf ("helyes! \ n");
Game.MoneyWon + =1000 * (Game.CurrentQuestion + 1);
Game.CurrentQuestion ++;
if (Game.CurrentQuestion ==Numquestions) {
Game.GameOver =1;
printf ("\ ncongratulations! $%d! \ n", játék.Moneywon);
szünet;
}
} else {
printf ("helytelen! \ n");
Game.GameOver =1;
printf ("\ nyou $%d -t nyert. Better szerencse legközelebb! \ n", Game.Moneywon);
szünet;
}
}
}
int main () {
srand (idő (null));
int számok;
Kérdés* KÉRDÉSEK =LoadQuestions ("CORMS.TXT", &NumQuestions);
if (kérdések ==null) {
visszatérés 1;
}
printf ("\ nwelcome, hogy ki akar milliomos lenni! \ n");
Playgame (kérdések, számok);
ingyenes (kérdések);
visszatérés 0;
}
`` `
Hogyan használjuk ezt a kódot:
1. Hozzon létre egy kérdésfájlt: Hozzon létre egy `coles.txt" nevű szöveges fájlt, és kövesse ezt a formátumot:
`` `
10 // kérdések száma
Mi a francia fővárosa? // kérdés
Párizs // Helyes válasz
Berlin // 1. lehetőség
London // 2. lehetőség
Róma // 3. lehetőség
Tokió // 4. lehetőség
... // További kérdések adjon hozzá ugyanabban a formátumban
`` `
2. Helyezze a kódot C fordítóval (például GCC), és futtassa a futtatható fájlt.
Magyarázat:
* Adatszerkezetek:
* `Kérdés` struktúra:A kérdés szöveget, a választ és a feleletválasztós lehetőségeket tartja.
* `GameState` struktúrája:nyomon követi a jelenlegi kérdést, a nyert pénzt, a használt élethosszúságot és a játékot.
* Funkciók:
* `loadQuestions ()`:kérdéseket tölt be egy fájlból.
* `displayQuestion ()`:Megjeleníti az aktuális kérdést és lehetőségeket.
* `getanswer ()`:Felkéri a lejátszót a válaszra, és validálja a bemenetet.
* `checkanswer ()`:Összehasonlítja a játékos válaszát a helyes válaszral.
* `uselifeline ()`:kezeli a mentőkép kiválasztását és megvalósítását (helyőrző a tényleges Lifeline logika számára).
* `PlayGame ()`:kezeli a fő játékhurokot, a kérdéseket, a válaszokat és az életciklusokat.
* Játék logika:
* A „Playgame ()” funkció a kérdéseken keresztül iterál, amíg a játékos el nem éri a végső kérdést vagy a válaszokat helytelenül.
* A lejátszó használhatja a LifeLines -t, ha a menüből lehetőségeket választ.
* A játék nyomon követi a játékos előrehaladását és a nyert pénzét.
Az élethosszig tartó élethosszig tartó megvalósításhoz a következőket kell hozzáadnia a 'uselifeline () `függvényhez:
* 50/50: Távolítsa el a két helytelen lehetőséget véletlenszerűen.
* Kérdezze meg a közönséget: Generáljon véletlenszerű közönség szavazatokat, így a helyes válasz nagyobb esélyt ad a győzelemre.
* telefon egy barátja: Készítsen véletlenszerű "barát" választ, amely bizonyos valószínűséggel lehet helyes vagy helytelen.
Ez a kód alapvető struktúrát biztosít a "aki milliomos akar lenni" játéknak. Tovább javíthatja:
* A fejlettebb Lifeline logika megvalósítása.
* Vizuális elemek és animációk hozzáadása.
* A bonyolultabb kérdésformátumok beépítése.
* A játék előrehaladásának megtakarítása és betöltése.