Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
krkane
/
Rüütli Vaev
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
1
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
ab0b2d1e
authored
Mar 20, 2024
by
krkane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update Baaskood.c
parent
287a8af7
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
233 additions
and
102 deletions
Source/Baaskood.c
Source/Baaskood.c
View file @
ab0b2d1e
#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
.
h
p
=
100
;
// 100 elu
player
.
attack
=
10
;
// 10 rünnaku tugevus
player
.
potion
_count
=
3
;
//3 võlujooki
Player
CreatePlayer
()
{
Player
player
;
player
.
h
ealth
=
100
;
player
.
attack
=
10
;
player
.
potion
Count
=
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
;
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
(
player
_hp
>
0
&&
enemy_hp
>
0
)
{
while
(
player
Hp
>
0
&&
enemyHp
>
0
&&
!
escaped
)
{
printf
(
"
\n
Valikud:
\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
(
"
\n
Sa põgenesid koopast.
\n
Väljun...
\n
"
);
escaped
=
1
;
break
;
case
3
:
use
_potion
(
&
player
);
// Saada mängija struktuuri viide funktsioonile
use
Potion
(
p
,
initialHealth
,
playerHp
);
break
;
case
4
:
printf
(
"Sa lõpetasid enda käigu.
\n
"
);
break
;
default:
printf
(
"Vale valik.
V
ali uuesti.
\n
"
);
printf
(
"Vale valik.
Palun v
ali uuesti.
\n
"
);
}
if
(
player
_h
p
<=
0
)
{
printf
(
"
S
a kaotasid.
\n
"
);
if
(
player
H
p
<=
0
)
{
printf
(
"
Kahjuks, s
a 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
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
(
"
\n
Te 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
(
"
\n
Valikud:
\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
:
printf
(
"Liigud vasakule järgmisesse sügavusse.
\n
"
);
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
(
"Liigud paremale järgmisesse sügavusse.
\n
"
);
printf
(
"
\n
Te põgenesite lahingust.
\n
"
);
escaped
=
1
;
break
;
case
3
:
usePotion
(
p
,
initialHealth
,
playerHp
);
break
;
case
4
:
printf
(
"
\n
Te lõpetasite oma käigu.
\n
"
);
break
;
default:
printf
(
"Vale valik. Liigud otse järgmisesse sügavusse.
\n
"
);
printf
(
"
\n
Vale valik. Palun valige uuesti.
\n
"
);
}
if
(
playerHp
<=
0
)
{
printf
(
"
\n
Kahjuks, sa kaotasid.
\n
"
);
return
0
;
// Mängija kaotas
}
else
if
(
bossHp
<=
0
)
{
printf
(
"
\n
Te võitsite!
\n
"
);
return
1
;
// Mängija võitis
}
}
}
// 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
"
);
return
escaped
?
0
:
1
;
// If player escaped, return 0, otherwise return 1
}
// 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
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
(
"
\n
Kasutasid võlujooki. Sa said %d elu tagasi (%d-HP). Alles %d"
" võlujooki.
\n
"
,
restoredHealth
,
p
->
health
,
p
->
potionCount
);
}
else
{
printf
(
"
\n
Sul ei ole võlujooki enam saadaval!
\n
"
);
}
}
// Funktsioon, mis genereerib vastase vastavalt alistatud vastaste arvule
struct
Enemy
generate_enemy
(
int
defeated_enemies
)
{
struct
Enemy
enemy
;
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
);
}
// suurendab vaenlase elude arvu, kasutades alistatud vastaste arvu
enemy
.
hp
=
50
+
defeated_enemies
*
10
;
// Näiteks 50 + (10 * alistatud vastaste arv)
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)
//vaenlase rünnaku tugevus vastavalt tüübile
switch
(
defeated_enemies
)
{
// Määra 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
enemy
.
attack
=
10
;
break
;
case
1
:
strcpy
(
enemy
.
type
,
"Ork"
);
// Ork
enemy
.
attack
=
8
;
// Näiteks 8
enemy
.
attack
=
15
;
break
;
case
2
:
strcpy
(
enemy
.
type
,
"Smurf"
);
// Smurf
enemy
.
attack
=
10
;
// Näiteks 10
enemy
.
attack
=
20
;
break
;
case
3
:
strcpy
(
enemy
.
type
,
"Deemon"
);
// Deemon
enemy
.
attack
=
15
;
// Näiteks 15
enemy
.
attack
=
25
;
break
;
default:
strcpy
(
enemy
.
type
,
"Bandiit"
);
// Bandiit
enemy
.
attack
=
20
;
// Näiteks 20
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
;
}
}
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
;
}
printf
(
"Mäng läbi! alistasid %d vaenlast.
\n
"
,
defeated_enemies
);
void
PrintWelcomeMessage
(
void
)
{
printf
(
" __ __ _
\n
"
);
printf
(
"
\\
\\
/ /__| | ___ ___ _ __ ___ ___
\n
"
);
printf
(
"
\\
\\
/
\\
/ / _
\\
|/ __/ _
\\
| '_ ` _
\\
/ _
\\
\n
"
);
printf
(
"
\\
V V / __/ | (_| (_) | | | | | | __/
\n
"
);
printf
(
"
\\
_/
\\
_/
\\
___|_|
\\
___
\\
___/|_| |_| |_|
\\
___|
\n
"
);
}
return
0
;
void
DisplayGameRules
(
void
)
{
printf
(
"
\n
Tere 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
"
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment