Commit ab0b2d1e by krkane

Update Baaskood.c

parent 287a8af7
Showing with 264 additions and 134 deletions
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Struktuur mängija andmete hoidmiseks
struct Player {
int hp; // Elud
int attack; // Rünnaku tugevus
int potion_count; // Võlujookide arv
#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"
};
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"
};
// Struktuur vastase andmete hoidmiseks
struct Enemy {
int hp; // Elud
char type[20]; // Tüüp
int attack; // Rünnaku tugevus
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"
};
// Funktsioon, mis loob mängija
struct Player create_player() {
struct Player player;
player.hp = 100; // 100 elu
player.attack = 10; // 10 rünnaku tugevus
player.potion_count = 3; //3 võlujooki
Player CreatePlayer()
{
Player player;
player.health = 100;
player.attack = 10;
player.potionCount = 3;
return player;
}
// Funktsioon võitluse jaoks
int fight(struct Player *player, struct Enemy *enemy) {
int player_hp = player->hp;
int enemy_hp = enemy->hp;
int player_attack, enemy_attack;
while (player_hp > 0 && enemy_hp > 0) {
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");
// Genereerime juhusliku arvu, et määrata, milline käik on õige
int correctChoice = rand() % 2 + 1;
// Kui see on esimene vaenlane, siis pole mõtet lisada õiget ja vale valikut
if (defeated_enemies == 0)
{
printf("1. Vasakule\n"
"2. Paremale\n"
"0. Välju mängust\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");
}
int choice;
scanf("%d", &choice);
while (choice != 1 && choice != 2 && choice != 0)
{
printf("Palun sisestage õige valik...");
scanf("%d", &choice);
}
if (choice == 0)
{
printf("Sul tekib äkki tunne, et see ei ole veel aeg seikluseks ning otsustad mängust väljuda.\n");
return 0;
}
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");
return 1;
}
else if ((choice == 1 && correctChoice == 2) || (choice == 2 && correctChoice == 1))
{
printf("Tunned, et midagi 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;
}
else
{
printf("Vale valik. Palun vali uuesti.\n");
return Move(defeated_enemies); // Rekursiivselt kutsu Move funktsiooni uuesti, et saaksid uue valiku teha
}
}
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) {
printf("\nValikud:\n");
printf("1. Ründa\n");
printf("2. Põgene\n");
......@@ -44,137 +112,200 @@ int fight(struct Player *player, struct Enemy *enemy) {
switch (choice) {
case 1:
player_attack = rand() % player->attack + 1; // mängija rünnak
enemy_attack = rand() % enemy->attack + 1; // vastase rünnak
if (player_attack > enemy_attack) {
enemy_hp -= player_attack;
printf("Vastane kaotas %d elu.\n", player_attack);
} else if (enemy_attack > player_attack) {
player_hp -= enemy_attack;
printf("Sa kaotasid %d elu.\n", enemy_attack);
playerAttack = rand() % p->attack + 1; // Random player attack
enemyAttack = rand() % e->attack + 1; // Random enemy attack
if (playerAttack > enemyAttack) {
int damageDealt = playerAttack;
enemyHp -= damageDealt;
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("Kumbki ei saanud viga.\n");
printf(evenScenarios[rand() % (sizeof(evenScenarios) / sizeof(evenScenarios[0]))]);
}
break;
case 2:
printf("Sa põgenesid vaenlase eest.\n");
return 0; // Mäng läbi, mängija põgenes
printf("\nSa põgenesid koopast.\nVäljun...\n");
escaped = 1;
break;
case 3:
use_potion(&player); // Saada mängija struktuuri viide funktsioonile
usePotion(p, initialHealth, playerHp);
break;
case 4:
printf("Sa lõpetasid enda käigu.\n");
break;
default:
printf("Vale valik. Vali uuesti.\n");
printf("Vale valik. Palun vali uuesti.\n");
}
if (player_hp <= 0) {
printf("Sa kaotasid.\n");
if (playerHp <= 0) {
printf("Kahjuks, sa kaotasid.\n");
return 0; // Mängija kaotas
} else if (enemy_hp <= 0) {
printf("Sa võitsid!\n");
return 1; // Mängija võitis
} else if (enemyHp <= 0) {
printf("Sinu võit!\n\n");
}
}
return escaped ? 0 : 1; // If player escaped, return 0, otherwise return 1
}
// Funktsioon, mis liigub järgmisesse koopasse
void move_next_room() {
printf("Järgmine koobas. Vali suund:\n");
printf("1. Vasakule\n");
printf("2. Paremale\n");
printf("Vali suund: ");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Liigud vasakule järgmisesse sügavusse.\n");
break;
case 2:
printf("Liigud paremale järgmisesse sügavusse.\n");
break;
default:
printf("Vale valik. Liigud otse järgmisesse sügavusse.\n");
int bossFight(Player *p, Enemy *boss) {
int playerHp = p->health;
int bossHp = boss->health;
int playerAttack, bossAttack;
int escaped = 0; // Flag variable to track if player escaped
int initialHealth = p->health; // Store initial health
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) {
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("Vali tegevus: ");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
playerAttack = rand() % p->attack + 1; // Random player attack
bossAttack = rand() % boss->attack + 1; // Random boss attack
if (playerAttack > bossAttack) {
int damageDealt = playerAttack;
bossHp -= damageDealt;
printf(playerHitScenarios[rand() % (sizeof(playerHitScenarios) / sizeof(playerHitScenarios[0]))], damageDealt, bossHp);
} else if (bossAttack > playerAttack) {
int damageTaken = bossAttack;
playerHp -= damageTaken;
printf(enemyHitScenarios[rand() % (sizeof(enemyHitScenarios) / sizeof(enemyHitScenarios[0]))], damageTaken, playerHp);
} else {
printf(evenScenarios[rand() % (sizeof(evenScenarios) / sizeof(evenScenarios[0]))]);
}
break;
case 2:
printf("\nTe põgenesite lahingust.\n");
escaped = 1;
break;
case 3:
usePotion(p, initialHealth, playerHp);
break;
case 4:
printf("\nTe lõpetasite oma käigu.\n");
break;
default:
printf("\nVale valik. Palun valige uuesti.\n");
}
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
}
}
return escaped ? 0 : 1; // If player escaped, return 0, otherwise return 1
}
// Funktsioon, mis suurendab mängija elusid ja rünnaku tugevust peale võitlust
void level_up(struct Player *player) {
player->hp += 20; // Lisame mängijale 20 HP-d
player->attack += 5; // Lisame mängijale 5 rünnaku tugevust
printf("Mängija omistas võitluses au! Sa said 20 lisa HP-d ja 5 lisa rünnaku tugevust!\n");
void 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
// Ensure current health doesn't exceed initial health
if (p->health > initialHealth)
p->health = 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);
}
else
{
printf("\nSul ei ole võlujooki enam saadaval!\n");
}
}
// Funktsioon mängija võlujoogi kasutamiseks
void use_potion(struct Player *player) {
if (player->potion_count > 0) {
player->hp += 25; // Lisame mängijale 25 HP-d
player->potion_count--; // Vähendame mängija võlujookide arvu
printf("Kasutasid võlujooki. Sa said 25 elu tagasi.\n");
} else {
printf("Sul pole ühtegi jooki!\n");
}
void levelUp(Player *p)
{
p->health += 20; // Lisame mängijale 20 HP-d
p->attack += 5; // 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,
p->attack);
}
// Funktsioon, mis genereerib vastase vastavalt alistatud vastaste arvule
struct Enemy generate_enemy(int defeated_enemies) {
struct Enemy enemy;
// suurendab vaenlase elude arvu, kasutades alistatud vastaste arvu
enemy.hp = 50 + defeated_enemies * 10; // Näiteks 50 + (10 * alistatud vastaste arv)
//vaenlase rünnaku tugevus vastavalt tüübile
switch (defeated_enemies) {
case 0:
strcpy(enemy.type, "Päkapikk"); // Päkapikk
enemy.attack = 5; // Näiteks 5
break;
case 1:
strcpy(enemy.type, "Ork"); // Ork
enemy.attack = 8; // Näiteks 8
break;
case 2:
strcpy(enemy.type, "Smurf"); // Smurf
enemy.attack = 10; // Näiteks 10
break;
case 3:
strcpy(enemy.type, "Deemon"); // Deemon
enemy.attack = 15; // Näiteks 15
break;
default:
strcpy(enemy.type, "Bandiit"); // Bandiit
enemy.attack = 20; // Näiteks 20
Enemy CreateEnemy(int defeated_enemies)
{
Enemy enemy;
// Genereeri vaenlase elude arv, kasutades alistatud vastaste arvu
enemy.health = 50 + defeated_enemies * 10; // Näiteks 50 + (10 * alistatud vastaste arv)
// Määra vaenlase rünnaku tugevus vastavalt tüübile
switch (defeated_enemies)
{
case 0:
strcpy(enemy.type, "Päkapikk"); // Päkapikk
enemy.attack = 10;
break;
case 1:
strcpy(enemy.type, "Ork"); // Ork
enemy.attack = 15;
break;
case 2:
strcpy(enemy.type, "Smurf"); // Smurf
enemy.attack = 20;
break;
case 3:
strcpy(enemy.type, "Deemon"); // Deemon
enemy.attack = 25;
break;
default:
strcpy(enemy.type, "Bandiit"); // Bandiit
enemy.attack = 30;
}
return enemy;
}
int main() {
srand(time(0)); // juhuslike numbrite generaator
struct Player player = create_player();
int defeated_enemies = 0;
printf("Tere tulemast mängu! Sinu ülesanne on alistada koopas kõik pätid ja röövlid.\n");
while (1) {
struct Enemy enemy = generate_enemy(defeated_enemies);
printf("Vastane %s, eludega %d ja rünnaku tugevusega %d tahab sinuga kakelda.\n", enemy.type, enemy.hp, enemy.attack);
int result = fight(&player, &enemy);
if (result == 1) {
defeated_enemies++;
level_up(&player);
move_next_room();
} else {
break;
}
}
printf("Mäng läbi! alistasid %d vaenlast.\n", defeated_enemies);
return 0;
}
\ No newline at end of file
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;
strcpy(boss.type, "Final Boss");
return boss;
}
void PrintWelcomeMessage(void)
{
printf(" __ __ _ \n");
printf(" \\ \\ / /__| | ___ ___ _ __ ___ ___ \n");
printf(" \\ \\ /\\ / / _ \\ |/ __/ _ \\| '_ ` _ \\ / _ \\ \n");
printf(" \\ V V / __/ | (_| (_) | | | | | | __/ \n");
printf(" \\_/\\_/ \\___|_|\\___\\___/|_| |_| |_|\\___| \n");
}
void DisplayGameRules(void)
{
printf("\nTere mängija! Olete sisenenud koopasse, milles peitub"
" suur varandus. Varandust kaitsevad aga mitmed koletised, kes"
" takistavad teid selle saamisest!\n"
"Alista kõik koletised ning omasta võidukalt varandus!\n\n"
"Mängides on sul mitmeid valikuid:\n"
"1. Võitle - Asud võitlusesse koletisega, kus teie võitlus käib"
" läbi täringu visete.\n"
"2. Põgene - Saad ükskõik mis hetkel põgeneda koopast ning"
" lõpetada mängu.\n"
"3. Kasuta võlujooki - sellega saad endale võitluse ajal"
" taastada 25 elu.\n");
}
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