Untitled
unknown
c_cpp
3 years ago
2.7 kB
10
Indexable
#include <stdio.h>
#include <string.h>
#define lvup_atk 200
#define lvup_dfn 100
#define lvup_maxHp 20
#define lvup_maxMp 15
#define T 2
typedef struct pokemon{
int id;
char name[10];
int level;
int attack;
int defense;
int Hp;
int Mp;
int maxHp;
int maxMp;
int costMp;
}Pokemon;
int max(int a, int b){
if(a > b) return a;
else return b;
}
// TODO: upgrade and recover the Pokémon
void level_up(Pokemon *P){
if(P->level < 5){
P->level++;
P->attack += lvup_atk;
P->defense += lvup_dfn;
P->maxHp += lvup_maxHp;
P->maxMp += lvup_maxMp;
P->Hp = P->maxHp;
P->Mp = P->maxMp;
}
}
// TODO: simulate and print the process of the battle
void battle(Pokemon *A, Pokemon *B){
int turn = 0;
while(1){
if(A->Hp == 0 && B->Hp != 0){
printf("%s is the winner! %s died in vain...\n\n", B->name, A->name);
return;
}
else if(B->Hp == 0 && A->Hp != 0){
printf("%s is the winner! %s died in vain...\n\n", A->name, B->name);
return;
}
else if(A->Hp == 0 && B->Hp == 0){
printf("Draw.\n\n");
return;
}
if(turn == 0){
A->Mp += T;
if(A->Mp >= A->maxMp) A->Mp = A->maxMp;//注意Mp不能大於最大Mp
if(A->Mp < A->costMp){
A->Mp += T;
if(A->Mp >= A->maxMp) A->Mp = A->maxMp;
printf("%s used Rest!\n", A->name);
printf("%s now has %d MP.\n", A->name, A->Mp);
}
else{
A->Mp -= A->costMp;
B->Hp -= 2*(A->level)*max(A->attack-B->defense, 0)/100;
if(B->Hp < 0) B->Hp = 0;
printf("%s used Headbutt!\n", A->name);
printf("%s now has %d HP.\n", B->name, B->Hp);
}
turn = 1;
}
else{
B->Mp += T;
if(B->Mp >= B->maxMp) B->Mp = B->maxMp;
if(B->Mp < B->costMp){
B->Mp += T;
if(B->Mp > B->maxMp) B->Mp = B->maxMp;
printf("%s used Rest!\n", B->name);
printf("%s now has %d MP.\n", B->name, B->Mp);
}
else{
B->Mp -= B->costMp;
A->Hp -= 2*(B->level)*max(B->attack-A->defense, 0)/100;
if(A->Hp < 0) A->Hp = 0;
printf("%s used Headbutt!\n", B->name);
printf("%s now has %d HP.\n", A->name, A->Hp);
}
turn = 0;
}
}
}Editor is loading...