Commit 6afe41df by gerann

Update gameBase.c

parent c1c50d4c
Showing with 212 additions and 103 deletions
#include "Header.h" #include "Header.h"
const char *playerHitScenarios[] = { const char *playerHitScenarios[] = {
"Sa tegid kiire rünnaku vastasele. Ta võttis %d kahju (Alles %dHP).\n", "\nSa tegid kiire rünnaku vastasele. Ta võttis %d kahju (Alles %dHP).\n",
"Vastane kaotas tasakaalust, kui ründasid teda. Ta kaotas %d elu (Alles %dHP).\n", "\nVastane kaotas tasakaalust, kui ründasid teda. Ta kaotas %d elu"
"Sa tegid ründes viimase otsustava löögi vastasele. Ta võttis %d kahju (Alles %dHP).\n" "(Alles %dHP).\n",
"\nSa tegid ründes viimase otsustava löögi vastasele. Ta võttis %d kahju"
"(Alles %dHP).\n"
}; };
const char *enemyHitScenarios[] = { const char *enemyHitScenarios[] = {
"Vastane eiras sinu rünnakut ja vastas oma rünnakuga. Sa kaotasid %d elu. (Alles %dHP)\n", "\nVastane eiras sinu rünnakut ja vastas oma rünnakuga. Sa kaotasid %d elu."
"Vastane ründas sind ja võttis %d kahju. (Alles %dHP)\n", "(Alles %dHP)\n",
"Vastane tabas sind ootamatult, võttes %d elu. (Alles %dHP)\n" "\nVastane ründas sind ja võttis %d kahju. (Alles %dHP)\n",
"\nVastane tabas sind ootamatult, võttes %d elu. (Alles %dHP)\n"
}; };
const char *evenScenarios[] = { const char *evenScenarios[] = {
"Mängija ja vastane võitlevad väsimatult. Kumbki ei taha alla anda!\n", "\nMängija ja vastane võitlevad väsimatult. Kumbki ei taha alla anda!\n",
"Tõeline võitlus jätkub! Kumbki vastane ei anna alla!\n", "\nTõeline võitlus jätkub! Kumbki vastane ei anna alla!\n",
"Võitlus kuumeneb, kuid tulemused ei muutu! Mõlemad vastased on visad!\n" "\nVõitlus kuumeneb, kuid tulemused ei muutu! Mõlemad vastased on visad!\n"
}; };
Player CreatePlayer() Player CreatePlayer()
{ {
Player player; Player player;
player.health = 100; player.health = PLAYER_BASE_HEALTH;
player.attack = 10; player.attack = PLAYER_BASE_DAMAGE;
player.potionCount = 3; player.potionCount = POT_COUNT;
return player; return player;
} }
int Move(int defeated_enemies) int Move(int defeated_enemies)
{ {
printf("Sa seisad koopas, kust avanevad kaks pimedat käiku. Igaüks neist tundub olevat süngem kui teine.\n" printf("\nSa seisad koopas, kust avanevad kaks pimedat käiku. Üks"
"Süda puperdades mõtled sa, millisesse neist suunduda.\n"); " süngem kui teine.\n"
"Süda puperdades mõtled sa, millisesse neist suunduda.\n\n");
// Genereerime juhusliku arvu, et määrata, milline käik on õige // Genereerime juhusliku arvu, et määrata, milline käik on õige
int correctChoice = rand() % 2 + 1; int correctChoice = rand() % 2 + 1;
...@@ -40,15 +45,16 @@ int Move(int defeated_enemies) ...@@ -40,15 +45,16 @@ int Move(int defeated_enemies)
{ {
printf("1. Vasakule\n" printf("1. Vasakule\n"
"2. Paremale\n" "2. Paremale\n"
"0. Välju mängust\n"); "0. Välju koopast\n");
} }
else else
{ {
// Kui see pole esimene vaenlane, siis määrame vasaku ja parema käigu vastavalt juhuslikult // Kui see pole esimene vaenlane, siis määrame vasaku ja parema käigu vastavalt juhuslikult
printf("1. %s\n", (correctChoice == 1) ? "Mine vasakule" : "Mine paremale"); printf("1. %s\n", (correctChoice == 1) ? "Mine vasakule" :
printf("2. %s\n", (correctChoice == 2) ? "Mine vasakule" : "Mine paremale"); "Mine paremale");
printf("3. Mine tagasi puhkealale\n" printf("2. %s\n", (correctChoice == 2) ? "Mine vasakule"
"0. Välju mängust\n"); : "Mine paremale");
printf("0. Välju mängust\n");
} }
int choice; int choice;
...@@ -61,29 +67,46 @@ int Move(int defeated_enemies) ...@@ -61,29 +67,46 @@ int Move(int defeated_enemies)
if (choice == 0) if (choice == 0)
{ {
printf("Sul tekib äkki tunne, et see ei ole veel aeg seikluseks ning otsustad mängust väljuda.\n"); printf("Sul tekib äkki tunne, et see ei ole veel aeg seikluseks ning"
" otsustad koopast väljuda.\n");
printf("Kas te soovite mänguseisu salvestada?\n");
printf("1 - Jah\n0 - Ei\n");
int select;
scanf("%d", &select);
while (select != 1 && select != 0)
{
printf("Palun sisestage õige valik...");
scanf("%d", &select);
}
printf("\nVäljun....");
if (select == 1)
{
printf("\nSalvesin mängu. Väljun....\n");
return SAVE_GAME;
}
else
return 0; return 0;
} }
if ((choice == 1 && correctChoice == 1) || (choice == 2 && correctChoice == 2)) if ((choice == 1 && correctChoice == 1) || (choice == 2 &&
correctChoice == 2))
{ {
printf("Sinu süda peksleb põnevusest, kui astud ettevaatlikult käiku.\n" printf("\nSinu süda peksleb kiiresti, kui astud ettevaatlikult edasi."
"Seina ääres näeb välja nagu oleks midagi... liikunud?\n" "\n"
"Sa süvendad oma hingamist ja jätkad edasist teekonda.\n"); "Seina ääres näeb välja nagu oleks miski... liikunud?\n"
"Sa süvendad oma hingamist ja jätkad kangelaslikul sammul.\n");
return 1; return 1;
} }
else if ((choice == 1 && correctChoice == 2) || (choice == 2 && correctChoice == 1))
else if ((choice == 1 && correctChoice == 2) || (choice == 2 &&
correctChoice == 1))
{ {
printf("Tunned, et midagi pole päris õige.\n" printf("\nTunned, et miskii pole päris õige.\n"
"Järsku kuuled kaugel mingit veidrat müra...\n" "Järsku kuuled kaugel mingit veidrat müra...\n"
"See osutub ohtlikuks lõksuks! Sa kaotad elusid!\n"); "See osutub ohtlikuks lõksuks! Sa kaotad elusid!\n\n");
return -1; return LOSE_HP;
}
else if (choice == 3)
{
printf("Sa otsustad naasta puhkealale ja valmistuda järgmiseks seikluseks.\n"
"Taas kord tunned end turvaliselt tulede valgel ja lõkke praksumisel.\n");
return 3;
} }
else else
{ {
...@@ -92,76 +115,78 @@ int Move(int defeated_enemies) ...@@ -92,76 +115,78 @@ int Move(int defeated_enemies)
} }
} }
void handleTrap(Player *player) { int fight(Player *p, Enemy *e)
player->health -= 10; // Subtract 10 from player's max health {
if (player->health <= 0) {
printf("Kahjuks, sa kaotasid.\n");
exit(0); // Player lost the game
} else {
printf("Sul on alles %d elu.\n", player->health);
}
}
int fight(Player *p, Enemy *e) {
int playerHp = p->health; int playerHp = p->health;
int enemyHp = e->health; int enemyHp = e->health;
int playerAttack, enemyAttack; int playerAttack, enemyAttack;
int escaped = 0; // Flag variable to track if player escaped int escaped = 0; // Flag variable to track if player escaped
int initialHealth = p->health; // Store initial health int initialHealth = p->health; // Store initial health
while (playerHp > 0 && enemyHp > 0 && !escaped) { while (playerHp > 0 && enemyHp > 0 && !escaped)
{
printf("\nValikud:\n"); printf("\nValikud:\n");
printf("1. Ründa\n"); printf("1. Ründa\n");
printf("2. Põgene\n"); printf("2. Kasuta võlujooki\n");
printf("3. Kasuta võlujooki\n"); printf("3. Põgene\n");
printf("4. Lõpeta enda käik\n");
printf("Vali tegevus: "); printf("Vali tegevus: ");
int choice; int choice;
scanf("%d", &choice); scanf("%d", &choice);
switch (choice) { switch (choice)
{
case 1: case 1:
playerAttack = rand() % p->attack + 1; // Random player attack playerAttack = rand() % p->attack + 1; // Random player attack
enemyAttack = rand() % e->attack + 1; // Random enemy attack enemyAttack = rand() % e->attack + 1; // Random enemy attack
if (playerAttack > enemyAttack) { if (playerAttack > enemyAttack)
{
int damageDealt = playerAttack; int damageDealt = playerAttack;
enemyHp -= damageDealt; enemyHp -= damageDealt;
printf(playerHitScenarios[rand() % (sizeof(playerHitScenarios) / sizeof(playerHitScenarios[0]))], damageDealt, enemyHp); printf(playerHitScenarios[rand() %
} else if (enemyAttack > playerAttack) { (sizeof(playerHitScenarios) /
sizeof(playerHitScenarios[0]))], damageDealt, enemyHp);
}
else if (enemyAttack > playerAttack)
{
int damageTaken = enemyAttack; int damageTaken = enemyAttack;
playerHp -= damageTaken; playerHp -= damageTaken;
printf(enemyHitScenarios[rand() % (sizeof(enemyHitScenarios) / sizeof(enemyHitScenarios[0]))], damageTaken, playerHp); printf(enemyHitScenarios[rand() % (sizeof(enemyHitScenarios)
} else { / sizeof(enemyHitScenarios[0]))], damageTaken, playerHp);
printf(evenScenarios[rand() % (sizeof(evenScenarios) / sizeof(evenScenarios[0]))]); }
else
{
printf(evenScenarios[rand() % (sizeof(evenScenarios) /
sizeof(evenScenarios[0]))]);
} }
break; break;
case 2: case 2:
printf("\nSa põgenesid koopast.\nVäljun...\n"); playerHp = usePotion(p, initialHealth, playerHp);
escaped = 1;
break; break;
case 3: case 3:
usePotion(p, initialHealth, playerHp); printf("\nSa põgenesid koopast.\n");
break; escaped = 1;
case 4:
printf("Sa lõpetasid enda käigu.\n");
break; break;
default: default:
printf("Vale valik. Palun vali uuesti.\n"); printf("Vale valik. Palun vali uuesti.\n");
} }
if (playerHp <= 0) { if (playerHp <= 0)
{
printf("Kahjuks, sa kaotasid.\n"); printf("Kahjuks, sa kaotasid.\n");
return 0; // Mängija kaotas return 0; // Mängija kaotas
} else if (enemyHp <= 0) { }
else if (enemyHp <= 0)
{
printf("Sinu võit!\n\n"); printf("Sinu võit!\n\n");
} }
} }
return escaped ? 0 : 1; // If player escaped, return 0, otherwise return 1 return escaped ? 0 : 1; // If player escaped, return 1, otherwise return 0
} }
int bossFight(Player *p, Enemy *boss) { int bossFight(Player *p, FinalBoss *boss)
{
int playerHp = p->health; int playerHp = p->health;
int bossHp = boss->health; int bossHp = boss->health;
int playerAttack, bossAttack; int playerAttack, bossAttack;
...@@ -171,48 +196,51 @@ int bossFight(Player *p, Enemy *boss) { ...@@ -171,48 +196,51 @@ int bossFight(Player *p, Enemy *boss) {
printf("\nTe seisate võimsa vaenlase, %s, ees. Tal on %dHP ja tema rünnaku tugevus on %d.\n", boss->type, boss->health, boss->attack); printf("\nTe seisate võimsa vaenlase, %s, ees. Tal on %dHP ja tema rünnaku tugevus on %d.\n", boss->type, boss->health, boss->attack);
while (playerHp > 0 && bossHp > 0 && !escaped) { while (playerHp > 0 && bossHp > 0 && !escaped)
{
printf("\nValikud:\n"); printf("\nValikud:\n");
printf("1. Ründa\n"); printf("1. Ründa\n");
printf("2. Põgene\n"); printf("2. Kasuta võlujooki\n");
printf("3. Kasuta võlujooki\n"); printf("3. põgene\n");
printf("4. Lõpeta enda käik\n");
printf("Vali tegevus: "); printf("Vali tegevus: ");
int choice; int choice;
scanf("%d", &choice); scanf("%d", &choice);
switch (choice) { switch (choice)
{
case 1: case 1:
playerAttack = rand() % p->attack + 1; // Random player attack playerAttack = rand() % p->attack + 1; // Random player attack
bossAttack = rand() % boss->attack + 1; // Random boss attack bossAttack = rand() % boss->attack + 1; // Random boss attack
if (playerAttack > bossAttack) { if (playerAttack > bossAttack)
{
int damageDealt = playerAttack; int damageDealt = playerAttack;
bossHp -= damageDealt; bossHp -= damageDealt;
printf(playerHitScenarios[rand() % (sizeof(playerHitScenarios) / sizeof(playerHitScenarios[0]))], damageDealt, bossHp); printf(playerHitScenarios[rand() % (sizeof(playerHitScenarios) / sizeof(playerHitScenarios[0]))], damageDealt, bossHp);
} else if (bossAttack > playerAttack) { }
else if (bossAttack > playerAttack)
{
int damageTaken = bossAttack; int damageTaken = bossAttack;
playerHp -= damageTaken; playerHp -= damageTaken;
printf(enemyHitScenarios[rand() % (sizeof(enemyHitScenarios) / sizeof(enemyHitScenarios[0]))], damageTaken, playerHp); printf(enemyHitScenarios[rand() % (sizeof(enemyHitScenarios) / sizeof(enemyHitScenarios[0]))], damageTaken, playerHp);
} else { }
else
{
printf(evenScenarios[rand() % (sizeof(evenScenarios) / sizeof(evenScenarios[0]))]); printf(evenScenarios[rand() % (sizeof(evenScenarios) / sizeof(evenScenarios[0]))]);
} }
break; break;
case 2: case 2:
printf("\nTe põgenesite lahingust.\n"); playerHp = usePotion(p, initialHealth, playerHp);
escaped = 1;
break; break;
case 3: case 3:
usePotion(p, initialHealth, playerHp); printf("\nSa põgenesid koopast.\n");
break; escaped = 1;
case 4:
printf("\nTe lõpetasite oma käigu.\n");
break; break;
default: default:
printf("\nVale valik. Palun valige uuesti.\n"); printf("Vale valik. Palun vali uuesti.\n");
} }
if(bossHp < bosshp/2 && specialAttack == 0) if(bossHp <= BOSS_HEALTH && specialAttack == 0)
{ {
printf("\nKoopa pealik vihastab. Ta kogub ennast tummise rünnaku jaoks." printf("\nKoopa pealik vihastab. Ta kogub ennast tummise rünnaku jaoks."
"\nSa märkasid rünnakut viimasel sekundil ning sul on kaks valikut.\n"); "\nSa märkasid rünnakut viimasel sekundil ning sul on kaks valikut.\n");
...@@ -233,57 +261,95 @@ int bossFight(Player *p, Enemy *boss) { ...@@ -233,57 +261,95 @@ int bossFight(Player *p, Enemy *boss) {
{ {
printf("Pealik napilt riivab oma mõõgaga su kätt ning sa ei saanud viga.\n" printf("Pealik napilt riivab oma mõõgaga su kätt ning sa ei saanud viga.\n"
"Su valik säästis sulle su elu.\n" "Su valik säästis sulle su elu.\n"
"Sa kogud sekundiks hinge ning kaklus jätkub\\n"); "Sa kogud sekundiks hinge ning kaklus jätkub\n");
} }
else if ((choice == 1 && correctChoice == 2) || (choice == 2 && correctChoice == 1)) else if ((choice == 1 && correctChoice == 2) || (choice == 2 && correctChoice == 1))
{ {
printf("Pealik lööb kogu oma jõu ja uhkusega sulle rangluu pihta.\n" printf("Pealik lööb kogu oma jõu ja uhkusega sulle rangluu pihta.\n"
"Sa karjud suurest valust.\n"); "Sa karjud suurest valust.\n");
playerHp -= SPECIAL_DAMAGE; playerHp -= SPECIAL_DAMAGE;
printf("Löök võttis sult %d elu (alles %d HP)", SPECIAL_DAMAGE,
playerHp);
if (playerHp <= 0) if (playerHp <= 0)
{ {
printf("\nSu keha ei pidanud löögile vastu ning jooksid nii energiast kui ka verest tühjaks." printf("\nSu keha ei pidanud löögile vastu ning jooksid nii energiast kui ka verest tühjaks."
"\nKahjuks, sa kaotasid.\n"); "\nKahjuks, sa kaotasid.\n");
return 0; // Mängija kaotas return 0; // Mängija kaotas
} }
specialAttack = 1; }
specialAttack++;
} }
if (playerHp <= 0) { if (playerHp <= 0)
{
printf("\nKahjuks, sa kaotasid.\n"); printf("\nKahjuks, sa kaotasid.\n");
return 0; // Mängija kaotas return 0; // Mängija kaotas
} else if (bossHp <= 0) {
printf("\nTe võitsite!\n");
return 1; // Mängija võitis
} }
else if (bossHp <= 0)
{
printf("\n\nTEIE VÕIT!\nKõnnite võidukalt üle Final Bossi"
" korjuse ja näete suurt hunnikut sädelevat kulda\n"
"Ja ENNÄE!! Varanduse kõrval lebab uinund printsess\n"
"Aga teie võitlusest väsinud käed suudavad kanda"
" ainult üht, kas printsessi, või varandust...\n");
printf("Kumma te valite:\n1. Varandus\n2. Printsess\n>");
int finalChoice;
scanf("%d", &finalChoice);
while(finalChoice != 1 && finalChoice != 2)
{
printf("Palun valige sobilik valik...\n>");
scanf("%d\n", &finalChoice);
} }
if (finalChoice == 1)
{
printf("Te haarate varanduse ning kõnnite koopa"
" väljapääsu poole, vaadates veel korra üle õla"
" printsessi poole, kuid ta ei peata teid.\n"
"\nMÄNG LÄBI\n");
return 0;
}
else
{
printf("Te võtate imekauni printsessi oma sülle"
" ning alustate retke tagasi koopa väljapääsu poole\n"
"Vaadates veel korra säreleva varanduse poole"
", kuid see ei peata teid.\n"
"\nMÄNG LÄBI\n");
return 0;
}
}
}
return escaped ? 0 : 1; // If player escaped, return 0, otherwise return 1 return escaped ? 0 : 1; // If player escaped, return 0, otherwise return 1
} }
void usePotion(Player *p, int initialHealth, int currentHealth) int usePotion(Player *p, int initialHealth, int currentHealth)
{ {
if (p->potionCount > 0) if (p->potionCount > 0)
{ {
int restoredHealth = currentHealth - initialHealth; // Calculate restored health int healing = POTION;
p->health += 25; // Increase current health by 25 currentHealth += healing; // Increase current health by 25
// Ensure current health doesn't exceed initial health // Ensure current health doesn't exceed initial health
if (p->health > initialHealth) if (currentHealth > initialHealth)
p->health = initialHealth; {
healing = (currentHealth - initialHealth) * -1 + POTION;
currentHealth = initialHealth;
}
p->potionCount--; // Decrease potion count p->potionCount--; // Decrease potion count
printf("\nKasutasid võlujooki. Sa said %d elu tagasi (%d-HP). Alles %d" printf("\nKasutasid võlujooki. Sa said %d elu tagasi (%d-HP). Alles %d"
" võlujooki.\n", restoredHealth, p->health, p->potionCount); " võlujooki.\n", healing, currentHealth, p->potionCount);
} }
else else
{ {
printf("\nSul ei ole võlujooki enam saadaval!\n"); printf("\nSul ei ole võlujooki enam saadaval!\n");
} }
return currentHealth;
} }
void levelUp(Player *p) void levelUp(Player *p)
{ {
p->health += 20; // Lisame mängijale 20 HP-d p->health += LEVEL_UP_HP; // Lisame mängijale 20 HP-d
p->attack += 5; // Lisame mängijale 5 rünnakuvõimet p->attack += LEVEL_UP_ATTACK; // Lisame mängijale 5 rünnakuvõimet
printf("Mängija taseme tõus! Sa said 20 lisa HP-d ja 5 lisa rünnakuvõimet" printf("Mängija taseme tõus! Sa said 20 lisa HP-d ja 5 lisa rünnakuvõimet"
"!\n"); "!\n");
printf("Mängija andmed: HP - %d, rünnakuvõime - %d\n\n", p->health, printf("Mängija andmed: HP - %d, rünnakuvõime - %d\n\n", p->health,
...@@ -301,23 +367,23 @@ Enemy CreateEnemy(int defeated_enemies) ...@@ -301,23 +367,23 @@ Enemy CreateEnemy(int defeated_enemies)
{ {
case 0: case 0:
strcpy(enemy.type, "Päkapikk"); // Päkapikk strcpy(enemy.type, "Päkapikk"); // Päkapikk
enemy.attack = 10; enemy.attack = ELF_BASE_DAMAGE;
break; break;
case 1: case 1:
strcpy(enemy.type, "Ork"); // Ork strcpy(enemy.type, "Ork"); // Ork
enemy.attack = 15; enemy.attack = ORK_BASE_DAMAGE;
break; break;
case 2: case 2:
strcpy(enemy.type, "Smurf"); // Smurf strcpy(enemy.type, "Smurf"); // Smurf
enemy.attack = 20; enemy.attack = SMURF_BASE_DAMAGE;
break; break;
case 3: case 3:
strcpy(enemy.type, "Deemon"); // Deemon strcpy(enemy.type, "Deemon"); // Deemon
enemy.attack = 25; enemy.attack = DEEMON_BASE_DAMAGE;
break; break;
default: default:
strcpy(enemy.type, "Bandiit"); // Bandiit strcpy(enemy.type, "Bandiit"); // Bandiit
enemy.attack = 30; enemy.attack = BANDIIT_BASE_DAMAGE;
} }
return enemy; return enemy;
...@@ -328,8 +394,8 @@ FinalBoss CreateFinalBoss(int defeated_enemies) ...@@ -328,8 +394,8 @@ FinalBoss CreateFinalBoss(int defeated_enemies)
FinalBoss boss; FinalBoss boss;
// Adjust boss stats based on the number of defeated enemies // Adjust boss stats based on the number of defeated enemies
// You can customize the boss's stats and type based on the game's design // You can customize the boss's stats and type based on the game's design
boss.health = 100 + defeated_enemies * 20; boss.health = BOSS_HEALTH + defeated_enemies * 20;
boss.attack = 20 + defeated_enemies * 5; boss.attack = BOSS_DAMAGE + defeated_enemies * 5;
strcpy(boss.type, "Final Boss"); strcpy(boss.type, "Final Boss");
return boss; return boss;
} }
...@@ -357,3 +423,46 @@ void DisplayGameRules(void) ...@@ -357,3 +423,46 @@ void DisplayGameRules(void)
"3. Kasuta võlujooki - sellega saad endale võitluse ajal" "3. Kasuta võlujooki - sellega saad endale võitluse ajal"
" taastada 25 elu.\n"); " taastada 25 elu.\n");
} }
int Menu(void)
{
int choice;
putchar('\n');
puts("Valige enda soov!");
puts("1 - Alusta uut mängu");
puts("2 - Kuva reeglid");
puts("3 - Jätka mängu");
puts("0 - Välju");
choice = GetIntInRange(INPUT_MIN, INPUT_MAX);
return choice;
}
int GetIntInRange(int min, int max)
{
int num;
do
{
printf("> ");
scanf("%d", &num);
if (num < min || num > max)
{
printf("\nPalun valige õige sisend!\n");
}
}
while (num < min || num > max);
return num;
}
void handleTrap(Player *player)
{
player->health -= LOSE_HP; // Subtract 10 from player's max health
if (player->health <= 0)
{
printf("Kahjuks, sa kaotasid.\n");
exit(0); // Player lost the game
}
else
{
printf("Sul on alles %d elu.\n", player->health);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment