#include
#include
#include
#include
// Soru yapısını tanımlayın
typedef struct {
karakter sorusu [256];
karakter cevap [256];
Char Option1 [256];
Char Option2 [256];
Char Option3 [256];
Char Option4 [256];
} Soru;
// Oyun durumu yapısını tanımlayın
typedef struct {
int currentQuestion;
Int Moneywon;
int LifLineSited [3]; // kullanılmayan için 0, 1 kullanılmış için
int gameover;
} Gamestate;
// Bir dosyadan soru yükleme işlevi
Soru* LoadQuestions (const char* dosya adı, int* numQuestions) {
Dosya* fp =fopen (dosya adı, "r");
if (fp ==null) {
printf ("Hata açma soru dosyası! \ n");
NULL DÖN;
}
// soru sayısını okuyun
fscanf (fp, "%d \ n", numQuestions);
// Sorular için bellek tahsisi
Soru* Sorular =MALLOC (* NumQuestions* sizeof (soru));
if (sorgular ==null) {
printf ("Sorular için bellek tahsis etme hatası! \ n");
fclose (FP);
NULL DÖN;
}
// Dosyadaki soruları okuyun
for (int i =0; i <*numQuestions; i ++) {
fscanf (fp, "%[^\ n] \ n", sorular [i] .Question);
fscanf (fp, "%[^\ n] \ n", sorular [i] .Sanswer);
fscanf (fp, "%[^\ n] \ n", sorular [i] .option1);
fscanf (fp, "%[^\ n] \ n", sorular [i] .option2);
fscanf (fp, "%[^\ n] \ n", sorular [i] .option3);
fscanf (fp, "%[^\ n] \ n", sorular [i] .option4);
}
fclose (FP);
İade soruları;
}
// Mevcut soruyu görüntüleme işlevi
Void DisplayQuestion (soru sorusu) {
printf ("\ n%s \ n \ n", soru. Soru);
printf (" %1. %s \ n", soru.option1);
printf ("2. %s \ n", soru.option2);
printf (" %3. %s \ n", soru.option3);
printf (" %4. %s \ n", soru.option4);
}
// Oyuncunun cevabını ele alma işlevi
int getAnswer (gamestate* game) {
int cevap;
printf ("\ nenter cevabınızı (1-4):");
Scanf ("%d" &cevap);
// cevabı doğrulayın
while (cevap <1 || Cevap>
4) {
printf ("Geçersiz cevap! Lütfen 1 ile 4 arasında bir sayı girin:");
Scanf ("%d" &cevap);
}
dönüş cevabı;
}
// Cevabın doğru olup olmadığını kontrol etme işlevi
int checkanswer (soru sorusu, int cevap) {
if (cevap ==1 &&strcmp (soru.option1, soru.aanswer) ==0) {
dönüş 1;
} else if (cevap ==2 &&strcmp (soru.option2, soru.aanswer) ==0) {
dönüş 1;
} else if (cevap ==3 &&strcmp (soru.option3, soru.answer) ==0) {
dönüş 1;
} else if (cevap ==4 &&strcmp (soru.option4, soru.aanswer) ==0) {
dönüş 1;
} başka {
dönüş 0;
}
}
// Yaşam çizgilerini işleme işlevi
void useLifeline (gamestate* game) {
int Choice;
printf ("\ nwhch Lifeline? \ n" kullanmak ister misiniz?);
printf ("1. 50/50 \ n");
printf ("2.. İzleyiciye sor \ n");
printf ("3. A Friend \ n'ye telefon edin");
printf ("Seçiminizi girin (1-3):");
Scanf ("%d" ve seçim);
// Seçimi doğrulayın
while (Seçim <1 || Seçim> 3) {
printf ("Geçersiz seçim! Lütfen 1 ile 3 arasında bir sayı girin:");
Scanf ("%d" ve seçim);
}
// Yaşam çizgisinin zaten kullanılıp kullanılmadığını kontrol edin
if (game-> lifelineSed [seçim - 1] ==1) {
printf ("Bu yaşam çizgisini zaten kullandınız! \ n");
geri dönmek;
}
// Yaşam Hattı mantığını buraya uygulayın (örneğin, yanlış seçenekleri kaldırın, kitle oylamasını simüle et, vb.)
Game-> LifLineSited [Seçim - 1] =1;
printf ("Lifeline başarıyla kullanıldı! \ n");
}
// oyunu oynatma işlevi
void playgame (soru* soruları, int numQuestions) {
Gamestate oyunu;
game.currentQuestion =0;
game.moneywon =0;
MemSet (Game.Lifelineed, 0, sizeof (Game.LifelineSed));
game.gameover =0;
while (! game.gameover) {
// Mevcut soruyu görüntüleyin
DisplayQuestion (Sorular [Game.CurrentQuestion]);
// Lifelines'ı kullanın
printf ("\ ndo bir yaşam çizgisi kullanmak mı istiyorsunuz? (y/n):");
Char Lifelinechoice;
Scanf (" %C" ve LifeliLeChoice);
if (lifelinechoice =='y') {
Uselifeline (&Game);
}
// Oyuncunun Cevabını Alın
int cevap =getAnswer (&game);
// Cevabın doğru olup olmadığını kontrol edin
if (checkanswer (sorular [game.currentQuestion], cevap)) {
printf ("doğru! \ n");
game.moneywon + =1000 * (oyun.CurrentQuestion + 1);
Game.CurrentQuestion ++;
if (game.currentQuestion ==numQuestions) {
game.gameover =1;
printf ("\ ncongRatulations!%D! \ n" kazandınız, game.moneywon);
kırmak;
}
} başka {
printf ("yanlış! \ n");
game.gameover =1;
printf ("\ nyou%d. Bir dahaki sefere daha iyi şanslar! \ n", game.moneywon);
kırmak;
}
}
}
int main () {
Srand (zaman (null));
Int NumQuestions;
Soru* Sorular =LoadQuestions ("Sorular.txt", &numQuestions);
if (sorgular ==null) {
dönüş 1;
}
printf ("\ nwelcome kim milyoner olmak istiyor! \ n");
PlayGame (Sorular, NumQuestions);
ücretsiz (sorular);
dönüş 0;
}
``
Bu kod nasıl kullanılır:
1. Bir soru dosyası oluşturun: `` Sorgular.txt '' adlı bir metin dosyası oluşturun ve bu biçimi izleyin:
``
10 // soru sayısı
Fransa'nın başkenti nedir? // Soru
Paris // Doğru cevap
Berlin // Seçenek 1
Londra // Seçenek 2
Roma // Seçenek 3
Tokyo // Seçenek 4
... // Aynı formatta daha fazla soru ekleyin
``
2. der ve çalıştır: Kodu bir C derleyicisi (örn. GCC) kullanarak derleyin ve yürütülebilir dosyayı çalıştırın.
Açıklama:
* Veri Yapıları:
* `` Soru` Yapısı:Soru metnini, cevaplarını ve çoktan seçmeli seçenekleri tutar.
* `Gamestate 'Yapısı:Mevcut soruyu, kazanılan para, kullanılan yaşam çizgileri ve oyun üzerinde oyun izler.
* Fonksiyonlar:
* `loadQuestions ()`:Bir dosyadan soruları yükler.
* `displayQuestion ()`:Geçerli soru ve seçenekleri görüntüler.
* `getAnSwer ()`:Oynatıcıyı bir cevap için ister ve girişi doğrular.
* `checkanswer ()`:Oyuncunun cevabını doğru cevapla karşılaştırır.
* `useLifeline ()`:Yaşam çizgisi seçimi ve uygulamasını işler (gerçek yaşam çizgisi mantığı için yer tutucu).
* `playgame ()`:Ana oyun döngüsünü yönetir, soruları, cevapları ve yaşam çizgilerini yönetir.
* oyun mantığı:
* `Playgame ()` işlevi, oyuncu son soruya ulaşana veya yanlış cevaplara ulaşana kadar sorular aracılığıyla yinelenir.
* Oyuncu bir menüden seçenekler seçerek Lifelines kullanabilir.
* Oyun oyuncunun ilerlemesini ve para kazandığını takip ediyor.
Yaşam çizgilerini uygulamak için aşağıdakileri `` `` `` `` `` `işlevi de: '' a eklemeniz gerekecektir.
* 50/50: İki yanlış seçeneği rastgele kaldırın.
* İzleyiciye sorun: Rastgele kitle oyları oluşturun, doğru cevaba daha yüksek bir kazanma şansı verir.
* Bir arkadaşa telefon edin: Belli bir olasılıkla doğru veya yanlış olabilen rastgele bir "arkadaşın" cevabı oluşturun.
Bu kod, "Milyoner Olmak İsteyen" oyunu için temel bir yapı sağlar. Bunu aşağıdakilerle daha da geliştirebilirsiniz:
* Daha gelişmiş yaşam çizgisi mantığının uygulanması.
* Görsel öğeler ve animasyonlar eklemek.
* Daha karmaşık soru formatlarını dahil etmek.
* Tasarruf ve yükleme oyunu ilerlemesi.