#include <stdio.h>
#include <stdlib.h>
//技能结构体
typedef struct Skill{
char *name;
int power;
}Skill;
//装备结构体
typedef struct Weapon{
char *name;
int power;
}Weapon;
//英雄结构体
typedef struct HeroStruct{
char *name;
int blood;
int power;
Weapon weapon;
Skill skill;
}HeroStruct;
//怪物结构体
typedef struct MonsterStruct{
char *name;
int blood;
int power;
Skill skill;
}MonsterStruct;
//定义英雄的数组
HeroStruct herolist[3];
//怪物的数组
MonsterStruct monsterlist[3];
//英雄技能的数组
Skill heroSkillList[3];
//怪物的技能数组
Skill monsterSkillList[3];
//英雄的装备
Weapon weaponList[3];
#pragma mark ------加载数据
void loadData(){
char *heroNames[] = {"悟空","八戒","沙僧"};
char *monsterNames[] = {"小骨","小杀","小画"};
char *weaponNames[] = {"金箍棒","猪耙","铲子"};
char *heroOfSkillNames[] = {"皮一呦","皮一啊","嘛尼嘛尼呗美哄"};
char *monsterOfSkillNames[] = {"#¥#%","次无谓~啐~","五指抓"};
int skillPower[] = {50,30,5};
int heroBloods[] = {600,470,360};
int monsterBloods[] = {400,370,260};
int heroPowers[] = {60,30,10};
int monsterPowers[] = {30,20,5};
int weaponPowers[] = {30,20,10};
//把装备放入数组
for (int i=0; i<3; i++) {
Weapon weapon={weaponNames[i],weaponPowers[i]};
weaponList[i]=weapon;
}
//把英雄技能放入数组
for (int i=0; i<3; i++) {
Skill skill={heroOfSkillNames[i],skillPower[i]};
heroSkillList[i]=skill;
}
//把怪物技能放入数组
for (int i=0; i<3; i++) {
Skill skill={monsterOfSkillNames[i],skillPower[i]};
monsterSkillList[i]=skill;
}
//把英雄放入数组
for (int i=0; i<3; i++) {
HeroStruct hero;
hero.name = heroNames[i];
hero.blood = heroBloods[i];
hero.power = heroPowers[i];
hero.skill = heroSkillList[2]; //默认将初始技能设置为第三个
hero.weapon = weaponList[2];
herolist[i] = hero;
//或者HeroStruct hero={heroNames[i],heroBloods[i],heroPowers[i]...};
}
//把怪物放入数组
for (int i=0; i<3; i++) {
MonsterStruct monster;
monster.name = monsterNames[i];
monster.blood = monsterBloods[i];
monster.power = monsterPowers[i];
monster.skill = monsterSkillList[2];
monsterlist[i] = monster;
}
}
#pragma mark ----选择英雄函数
HeroStruct chooseHero(HeroStruct list[]){
printf("壮士~请选择英雄\n");
//遍历英雄数组,输出英雄名字
for (int i=0; i<3; i++) {
HeroStruct hero = list[i];
printf("英雄编号:%d %s\n",i+1,hero.name);
}
//选择英雄
int whitchHeroNum=0;
scanf(" %d",&whitchHeroNum);
HeroStruct hero = herolist[whitchHeroNum-1];
printf("你选择了装备了%s的%s,他拥有%d滴血,初始攻击力为%d\n",hero.weapon.name,hero.name,hero.blood,hero.power);
return hero;
}
#pragma mark ------选择武器函数
Weapon changWeapon(){
printf("你选择了更换武器\n");
for (int i=0; i<3; i++) {
Weapon weapon = weaponList[i];
printf("%d:%s\n",i+1,weapon.name);
}
int chooseWeaponNum=0;
scanf(" %d",&chooseWeaponNum);
Weapon weapon = weaponList[chooseWeaponNum-1];
printf("装备了攻击力是%d的%s\n",weapon.power,weapon.name);
return weapon;
}
#pragma mark -----怪物出现函数
MonsterStruct showMonster(MonsterStruct list[]){
printf("\n夜幕降临~!龇牙咧嘴的怪物们将要出现\n");
int rand=arc4random()%3;
MonsterStruct monster=list[rand];
printf("拥有%d滴血的%s带着宝宝们出现了,他拥有%d攻击力\n\n",monster.blood,monster.name,monster.power);
return monster;
}
#pragma mark -----战斗函数
void fire(HeroStruct hero,MonsterStruct monster){
while (1) {
printf("伟大的%s您可以使用这些技能\n",hero.name);
for (int i=0; i<3; i++) {
Skill heroSkill = heroSkillList[i];
printf("%d %s\n",i+1,heroSkill.name);
}
//英雄选择技能
int chooseSkillNum = 0;
scanf(" %d",&chooseSkillNum);
chooseSkillNum = chooseSkillNum>0&&chooseSkillNum<=3?chooseSkillNum:3;
Skill heroSkill = heroSkillList[chooseSkillNum-1];
//给怪物一定的几率攻击英雄
int rand = arc4random()%4;
Skill monsterSkill;
if (rand!=3) {
monsterSkill = monsterSkillList[rand];
monster.power += monsterSkill.power;
printf("%s使用了%s技能\n",monster.name,monsterSkill.name);
}
//怪物攻击
hero.blood-=monster.power;
hero.blood=hero.blood<=0?0:hero.blood;
printf("对%s造成了%d伤害,%s还剩了%d滴血\n",hero.name,monster.power,hero.name,hero.blood);
//怪物攻击之后,攻击力变为使用技能之前的状态
if (rand!=3) {
monster.power -= monsterSkill.power;
}
//英雄攻击
hero.skill = heroSkill;
hero.power+=heroSkill.power;
monster.blood-=hero.power;
monster.blood=monster.blood<=0?0:monster.blood;
printf("%s使用了%s技能,对%s造成了%d伤害,还剩%d滴血\n",hero.name,hero.skill.name,monster.name,hero.power,monster.blood);
hero.power-=heroSkill.power;
if (hero.blood==0||monster.blood==0) {
break; //战斗结束 分晓胜负
}
}
char *message = hero.blood == 0?"英雄被打死":"怪物被打死";
printf("%s\n",message);
}
#pragma mark ----游戏开始函数
void startGame(){
printf("欢迎来到***游戏\n");
//加载数据
loadData();
//选择英雄
HeroStruct hero = chooseHero(herolist);
//装备武器
printf("是否需要更换武器?\n1.yes 2.no\n");
int isChangeWeapon=0;
scanf(" %d",&isChangeWeapon);
if (isChangeWeapon==1) {
Weapon weapon = changWeapon();
hero.power += weapon.power;
hero.weapon = weapon;
printf("装备上%s后,英雄的战斗力增加到了%d\n",hero.weapon.name, hero.power); //有问题
}
//怪物
MonsterStruct monster = showMonster(monsterlist);
//战斗
fire(hero,monster);
}
int main(int argc, const char * argv[]) {
startGame();
return 0;
}
#include <stdlib.h>
//技能结构体
typedef struct Skill{
char *name;
int power;
}Skill;
//装备结构体
typedef struct Weapon{
char *name;
int power;
}Weapon;
//英雄结构体
typedef struct HeroStruct{
char *name;
int blood;
int power;
Weapon weapon;
Skill skill;
}HeroStruct;
//怪物结构体
typedef struct MonsterStruct{
char *name;
int blood;
int power;
Skill skill;
}MonsterStruct;
//定义英雄的数组
HeroStruct herolist[3];
//怪物的数组
MonsterStruct monsterlist[3];
//英雄技能的数组
Skill heroSkillList[3];
//怪物的技能数组
Skill monsterSkillList[3];
//英雄的装备
Weapon weaponList[3];
#pragma mark ------加载数据
void loadData(){
char *heroNames[] = {"悟空","八戒","沙僧"};
char *monsterNames[] = {"小骨","小杀","小画"};
char *weaponNames[] = {"金箍棒","猪耙","铲子"};
char *heroOfSkillNames[] = {"皮一呦","皮一啊","嘛尼嘛尼呗美哄"};
char *monsterOfSkillNames[] = {"#¥#%","次无谓~啐~","五指抓"};
int skillPower[] = {50,30,5};
int heroBloods[] = {600,470,360};
int monsterBloods[] = {400,370,260};
int heroPowers[] = {60,30,10};
int monsterPowers[] = {30,20,5};
int weaponPowers[] = {30,20,10};
//把装备放入数组
for (int i=0; i<3; i++) {
Weapon weapon={weaponNames[i],weaponPowers[i]};
weaponList[i]=weapon;
}
//把英雄技能放入数组
for (int i=0; i<3; i++) {
Skill skill={heroOfSkillNames[i],skillPower[i]};
heroSkillList[i]=skill;
}
//把怪物技能放入数组
for (int i=0; i<3; i++) {
Skill skill={monsterOfSkillNames[i],skillPower[i]};
monsterSkillList[i]=skill;
}
//把英雄放入数组
for (int i=0; i<3; i++) {
HeroStruct hero;
hero.name = heroNames[i];
hero.blood = heroBloods[i];
hero.power = heroPowers[i];
hero.skill = heroSkillList[2]; //默认将初始技能设置为第三个
hero.weapon = weaponList[2];
herolist[i] = hero;
//或者HeroStruct hero={heroNames[i],heroBloods[i],heroPowers[i]...};
}
//把怪物放入数组
for (int i=0; i<3; i++) {
MonsterStruct monster;
monster.name = monsterNames[i];
monster.blood = monsterBloods[i];
monster.power = monsterPowers[i];
monster.skill = monsterSkillList[2];
monsterlist[i] = monster;
}
}
#pragma mark ----选择英雄函数
HeroStruct chooseHero(HeroStruct list[]){
printf("壮士~请选择英雄\n");
//遍历英雄数组,输出英雄名字
for (int i=0; i<3; i++) {
HeroStruct hero = list[i];
printf("英雄编号:%d %s\n",i+1,hero.name);
}
//选择英雄
int whitchHeroNum=0;
scanf(" %d",&whitchHeroNum);
HeroStruct hero = herolist[whitchHeroNum-1];
printf("你选择了装备了%s的%s,他拥有%d滴血,初始攻击力为%d\n",hero.weapon.name,hero.name,hero.blood,hero.power);
return hero;
}
#pragma mark ------选择武器函数
Weapon changWeapon(){
printf("你选择了更换武器\n");
for (int i=0; i<3; i++) {
Weapon weapon = weaponList[i];
printf("%d:%s\n",i+1,weapon.name);
}
int chooseWeaponNum=0;
scanf(" %d",&chooseWeaponNum);
Weapon weapon = weaponList[chooseWeaponNum-1];
printf("装备了攻击力是%d的%s\n",weapon.power,weapon.name);
return weapon;
}
#pragma mark -----怪物出现函数
MonsterStruct showMonster(MonsterStruct list[]){
printf("\n夜幕降临~!龇牙咧嘴的怪物们将要出现\n");
int rand=arc4random()%3;
MonsterStruct monster=list[rand];
printf("拥有%d滴血的%s带着宝宝们出现了,他拥有%d攻击力\n\n",monster.blood,monster.name,monster.power);
return monster;
}
#pragma mark -----战斗函数
void fire(HeroStruct hero,MonsterStruct monster){
while (1) {
printf("伟大的%s您可以使用这些技能\n",hero.name);
for (int i=0; i<3; i++) {
Skill heroSkill = heroSkillList[i];
printf("%d %s\n",i+1,heroSkill.name);
}
//英雄选择技能
int chooseSkillNum = 0;
scanf(" %d",&chooseSkillNum);
chooseSkillNum = chooseSkillNum>0&&chooseSkillNum<=3?chooseSkillNum:3;
Skill heroSkill = heroSkillList[chooseSkillNum-1];
//给怪物一定的几率攻击英雄
int rand = arc4random()%4;
Skill monsterSkill;
if (rand!=3) {
monsterSkill = monsterSkillList[rand];
monster.power += monsterSkill.power;
printf("%s使用了%s技能\n",monster.name,monsterSkill.name);
}
//怪物攻击
hero.blood-=monster.power;
hero.blood=hero.blood<=0?0:hero.blood;
printf("对%s造成了%d伤害,%s还剩了%d滴血\n",hero.name,monster.power,hero.name,hero.blood);
//怪物攻击之后,攻击力变为使用技能之前的状态
if (rand!=3) {
monster.power -= monsterSkill.power;
}
//英雄攻击
hero.skill = heroSkill;
hero.power+=heroSkill.power;
monster.blood-=hero.power;
monster.blood=monster.blood<=0?0:monster.blood;
printf("%s使用了%s技能,对%s造成了%d伤害,还剩%d滴血\n",hero.name,hero.skill.name,monster.name,hero.power,monster.blood);
hero.power-=heroSkill.power;
if (hero.blood==0||monster.blood==0) {
break; //战斗结束 分晓胜负
}
}
char *message = hero.blood == 0?"英雄被打死":"怪物被打死";
printf("%s\n",message);
}
#pragma mark ----游戏开始函数
void startGame(){
printf("欢迎来到***游戏\n");
//加载数据
loadData();
//选择英雄
HeroStruct hero = chooseHero(herolist);
//装备武器
printf("是否需要更换武器?\n1.yes 2.no\n");
int isChangeWeapon=0;
scanf(" %d",&isChangeWeapon);
if (isChangeWeapon==1) {
Weapon weapon = changWeapon();
hero.power += weapon.power;
hero.weapon = weapon;
printf("装备上%s后,英雄的战斗力增加到了%d\n",hero.weapon.name, hero.power); //有问题
}
//怪物
MonsterStruct monster = showMonster(monsterlist);
//战斗
fire(hero,monster);
}
int main(int argc, const char * argv[]) {
startGame();
return 0;
}