Commit 4079f980 by gerann

Update gameBase.c

parent 5de75c7c
Showing with 212 additions and 103 deletions
#include "Header.h"
const char *playerHitScenarios[] = {
"Sa 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",
"Sa tegid ründes viimase otsustava löögi vastasele. Ta võttis %d kahju (Alles %dHP).\n"
"\nSa tegid kiire rünnaku vastasele. Ta võttis %d kahju (Alles %dHP).\n",
"\nVastane kaotas tasakaalust, kui ründasid teda. Ta kaotas %d elu"
"(Alles %dHP).\n",
"\nSa tegid ründes viimase otsustava löögi vastasele. Ta võttis %d kahju"
"(Alles %dHP).\n"
};
const char *enemyHitScenarios[] = {
"Vastane eiras sinu rünnakut ja vastas oma rünnakuga. Sa kaotasid %d elu. (Alles %dHP)\n",
"Vastane ründas sind ja võttis %d kahju. (Alles %dHP)\n",
"Vastane tabas sind ootamatult, võttes %d elu. (Alles %dHP)\n"
"\nVastane eiras sinu rünnakut ja vastas oma rünnakuga. Sa kaotasid %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[] = {
"Mä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",
"Võitlus kuumeneb, kuid tulemused ei muutu! Mõlemad vastased on visad!\n"
"\nMängija ja vastane võitlevad väsimatult. Kumbki ei taha alla anda!\n",
"\nTõeline võitlus jätkub! Kumbki vastane ei anna alla!\n",
"\nVõitlus kuumeneb, kuid tulemused ei muutu! Mõlemad vastased on visad!\n"
};
Player CreatePlayer()
{
Player player;
player.health = 100;
player.attack = 10;
player.potionCount = 3;
player.health = PLAYER_BASE_HEALTH;
player.attack = PLAYER_BASE_DAMAGE;
player.potionCount = POT_COUNT;
return player;
}
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"
"Süda puperdades mõtled sa, millisesse neist suunduda.\n");
printf("\nSa seisad koopas, kust avanevad kaks pimedat käiku. Üks"
" 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
int correctChoice = rand() % 2 + 1;
......@@ -40,15 +45,16 @@ int Move(int defeated_enemies)
{
printf("1. Vasakule\n"
"2. Paremale\n"
"0. Välju mängust\n");
"0. Välju koopast\n");
}
else
{
// 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("2. %s\n", (correctChoice == 2) ? "Mine vasakule" : "Mine paremale");
printf("3. Mine tagasi puhkealale\n"
"0. Välju mängust\n");
printf("1. %s\n", (correctChoice == 1) ? "Mine vasakule" :
"Mine paremale");
printf("2. %s\n", (correctChoice == 2) ? "Mine vasakule"
: "Mine paremale");
printf("0. Välju mängust\n");
}
int choice;
......@@ -61,29 +67,46 @@ int Move(int defeated_enemies)
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;
}
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"
"Seina ääres näeb välja nagu oleks midagi... liikunud?\n"
"Sa süvendad oma hingamist ja jätkad edasist teekonda.\n");
printf("\nSinu süda peksleb kiiresti, kui astud ettevaatlikult edasi."
"\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;
}
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"
"See osutub ohtlikuks lõksuks! Sa kaotad elusid!\n");
return -1;
}
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;
"See osutub ohtlikuks lõksuks! Sa kaotad elusid!\n\n");
return LOSE_HP;
}
else
{
......@@ -92,76 +115,78 @@ int Move(int defeated_enemies)
}
}
void handleTrap(Player *player) {
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 fight(Player *p, Enemy *e)
{
int playerHp = p->health;
int enemyHp = e->health;
int playerAttack, enemyAttack;
int escaped = 0; // Flag variable to track if player escaped
int initialHealth = p->health; // Store initial health
while (playerHp > 0 && enemyHp > 0 && !escaped) {
while (playerHp > 0 && enemyHp > 0 && !escaped)
{
printf("\nValikud:\n");
printf("1. Ründa\n");
printf("2. Põgene\n");
printf("3. Kasuta võlujooki\n");
printf("4. Lõpeta enda käik\n");
printf("2. Kasuta võlujooki\n");
printf("3. Põgene\n");
printf("Vali tegevus: ");
int choice;
scanf("%d", &choice);
switch (choice) {
switch (choice)
{
case 1:
playerAttack = rand() % p->attack + 1; // Random player attack
enemyAttack = rand() % e->attack + 1; // Random enemy attack
if (playerAttack > enemyAttack) {
if (playerAttack > enemyAttack)
{
int damageDealt = playerAttack;
enemyHp -= damageDealt;
printf(playerHitScenarios[rand() % (sizeof(playerHitScenarios) / sizeof(playerHitScenarios[0]))], damageDealt, enemyHp);
} else if (enemyAttack > playerAttack) {
printf(playerHitScenarios[rand() %
(sizeof(playerHitScenarios) /
sizeof(playerHitScenarios[0]))], damageDealt, enemyHp);
}
else if (enemyAttack > playerAttack)
{
int damageTaken = enemyAttack;
playerHp -= damageTaken;
printf(enemyHitScenarios[rand() % (sizeof(enemyHitScenarios) / sizeof(enemyHitScenarios[0]))], damageTaken, playerHp);
} else {
printf(evenScenarios[rand() % (sizeof(evenScenarios) / sizeof(evenScenarios[0]))]);
printf(enemyHitScenarios[rand() % (sizeof(enemyHitScenarios)
/ sizeof(enemyHitScenarios[0]))], damageTaken, playerHp);
}
else
{
printf(evenScenarios[rand() % (sizeof(evenScenarios) /
sizeof(evenScenarios[0]))]);
}
break;
case 2:
printf("\nSa põgenesid koopast.\nVäljun...\n");
escaped = 1;
playerHp = usePotion(p, initialHealth, playerHp);
break;
case 3:
usePotion(p, initialHealth, playerHp);
break;
case 4:
printf("Sa lõpetasid enda käigu.\n");
printf("\nSa põgenesid koopast.\n");
escaped = 1;
break;
default:
printf("Vale valik. Palun vali uuesti.\n");
}
if (playerHp <= 0) {
if (playerHp <= 0)
{
printf("Kahjuks, sa kaotasid.\n");
return 0; // Mängija kaotas
} else if (enemyHp <= 0) {
}
else if (enemyHp <= 0)
{
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 bossHp = boss->health;
int playerAttack, bossAttack;
......@@ -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);
while (playerHp > 0 && bossHp > 0 && !escaped) {
while (playerHp > 0 && bossHp > 0 && !escaped)
{
printf("\nValikud:\n");
printf("1. Ründa\n");
printf("2. Põgene\n");
printf("3. Kasuta võlujooki\n");
printf("4. Lõpeta enda käik\n");
printf("2. Kasuta võlujooki\n");
printf("3. põgene\n");
printf("Vali tegevus: ");
int choice;
scanf("%d", &choice);
switch (choice) {
switch (choice)
{
case 1:
playerAttack = rand() % p->attack + 1; // Random player attack
bossAttack = rand() % boss->attack + 1; // Random boss attack
if (playerAttack > bossAttack) {
if (playerAttack > bossAttack)
{
int damageDealt = playerAttack;
bossHp -= damageDealt;
printf(playerHitScenarios[rand() % (sizeof(playerHitScenarios) / sizeof(playerHitScenarios[0]))], damageDealt, bossHp);
} else if (bossAttack > playerAttack) {
}
else if (bossAttack > playerAttack)
{
int damageTaken = bossAttack;
playerHp -= damageTaken;
printf(enemyHitScenarios[rand() % (sizeof(enemyHitScenarios) / sizeof(enemyHitScenarios[0]))], damageTaken, playerHp);
} else {
}
else
{
printf(evenScenarios[rand() % (sizeof(evenScenarios) / sizeof(evenScenarios[0]))]);
}
break;
case 2:
printf("\nTe põgenesite lahingust.\n");
escaped = 1;
playerHp = usePotion(p, initialHealth, playerHp);
break;
case 3:
usePotion(p, initialHealth, playerHp);
break;
case 4:
printf("\nTe lõpetasite oma käigu.\n");
printf("\nSa põgenesid koopast.\n");
escaped = 1;
break;
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."
"\nSa märkasid rünnakut viimasel sekundil ning sul on kaks valikut.\n");
......@@ -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"
"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))
{
printf("Pealik lööb kogu oma jõu ja uhkusega sulle rangluu pihta.\n"
"Sa karjud suurest valust.\n");
playerHp -= SPECIAL_DAMAGE;
printf("Löök võttis sult %d elu (alles %d HP)", SPECIAL_DAMAGE,
playerHp);
if (playerHp <= 0)
{
printf("\nSu keha ei pidanud löögile vastu ning jooksid nii energiast kui ka verest tühjaks."
"\nKahjuks, sa kaotasid.\n");
return 0; // Mängija kaotas
}
specialAttack = 1;
}
specialAttack++;
}
if (playerHp <= 0) {
if (playerHp <= 0)
{
printf("\nKahjuks, sa kaotasid.\n");
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
}
void usePotion(Player *p, int initialHealth, int currentHealth)
int usePotion(Player *p, int initialHealth, int currentHealth)
{
if (p->potionCount > 0)
{
int restoredHealth = currentHealth - initialHealth; // Calculate restored health
p->health += 25; // Increase current health by 25
int healing = POTION;
currentHealth += healing; // Increase current health by 25
// Ensure current health doesn't exceed initial health
if (p->health > initialHealth)
p->health = initialHealth;
if (currentHealth > initialHealth)
{
healing = (currentHealth - initialHealth) * -1 + POTION;
currentHealth = initialHealth;
}
p->potionCount--; // Decrease potion count
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
{
printf("\nSul ei ole võlujooki enam saadaval!\n");
}
return currentHealth;
}
void levelUp(Player *p)
{
p->health += 20; // Lisame mängijale 20 HP-d
p->attack += 5; // Lisame mängijale 5 rünnakuvõimet
p->health += LEVEL_UP_HP; // Lisame mängijale 20 HP-d
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"
"!\n");
printf("Mängija andmed: HP - %d, rünnakuvõime - %d\n\n", p->health,
......@@ -301,23 +367,23 @@ Enemy CreateEnemy(int defeated_enemies)
{
case 0:
strcpy(enemy.type, "Päkapikk"); // Päkapikk
enemy.attack = 10;
enemy.attack = ELF_BASE_DAMAGE;
break;
case 1:
strcpy(enemy.type, "Ork"); // Ork
enemy.attack = 15;
enemy.attack = ORK_BASE_DAMAGE;
break;
case 2:
strcpy(enemy.type, "Smurf"); // Smurf
enemy.attack = 20;
enemy.attack = SMURF_BASE_DAMAGE;
break;
case 3:
strcpy(enemy.type, "Deemon"); // Deemon
enemy.attack = 25;
enemy.attack = DEEMON_BASE_DAMAGE;
break;
default:
strcpy(enemy.type, "Bandiit"); // Bandiit
enemy.attack = 30;
enemy.attack = BANDIIT_BASE_DAMAGE;
}
return enemy;
......@@ -328,8 +394,8 @@ FinalBoss CreateFinalBoss(int defeated_enemies)
FinalBoss boss;
// 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
boss.health = 100 + defeated_enemies * 20;
boss.attack = 20 + defeated_enemies * 5;
boss.health = BOSS_HEALTH + defeated_enemies * 20;
boss.attack = BOSS_DAMAGE + defeated_enemies * 5;
strcpy(boss.type, "Final Boss");
return boss;
}
......@@ -357,3 +423,46 @@ void DisplayGameRules(void)
"3. Kasuta võlujooki - sellega saad endale võitluse ajal"
" 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