栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++编写的简易宝可梦对战小游戏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++编写的简易宝可梦对战小游戏

最近想到了用C++写个小时候课间嘴上玩的那种宝可梦游戏,先试写了个demo,只有早期的三个宝可梦和基础招式,感兴趣的朋友可以再自己添加,也没有各种物防特攻数值啥的,等以后会搞图形化界面了再做个复杂的,功能完善的。

玩法就是选择宝可梦和电脑对战,除了攻击还有三次防御的机会,可以完全抵消对面这轮的攻击,增加了一点博弈的感觉(其实和电脑也没啥好博弈的)

上代码

#include
#include
#include
enum Type {normal,fire,grass,water};//定义招式与pokemon属性
struct Atk//招式结构体
{
    char name[20];//招式名
    int damage;//伤害
    Type type;//属性
    int speed;//招式速度
    int pp; //招式技能点数量
};
Atk def{"def",0,normal,10,3};//防御
struct pokemon//pokemon结构体
{
    char name[30];//名
    int hp;//初始血量
    int speed;//pokemon本身速度
    Type type;//属性
    Atk atk1;//招式1到4
    Atk atk2;
    Atk atk3;
    Atk atk4;
    int def;//防御点数
};
void initial();
int choose(int);
int AIchoose(int);
int p_choose(int,pokemon);
int AI_choose(int,pokemon);
void duel(pokemon p_pokemon,pokemon AI_pokemmon);
double damage_coeff(Type type1,Type type2);

int main()
{
    using namespace std;
    int cont=1;//设定循环游戏的flag
    while(cont==1)
    {
        system("cls");//新游戏开始时清屏
        //初始化各个招式与pokemon
        Atk watergun{"water gun",40,water,2,2};//水枪
        Atk quickattack{"quick attack",40,normal,5,3};//电光石火
        Atk scratch{"scratch",40,normal,2,8};//抓
        Atk bubblebeam{"bubble beam",65,water,1,1};//泡沫光线
        Atk razorleaf{"razor leaf",55,grass,3,1};//飞叶快刀
        Atk vinewhip{"vine whip",35,grass,4,2};//藤鞭
        Atk tackle{"tackle",35,normal,2,10};//撞击
        Atk ember{"ember",40,fire,2,1};//火苗
        Atk firespin{"fire spin",35,fire,4,2};//火焰旋涡
        pokemon bulbasaur{"bulbasaur",200,3,grass,tackle,quickattack,vinewhip,razorleaf,3};//妙蛙种子
        pokemon charmander{"charmander",200,2,fire,scratch,quickattack,ember,firespin,3};//小火龙
        pokemon squirtle{"squirtle",200,1,water,tackle,quickattack,watergun,bubblebeam,3};//杰尼龟
        initial();
        pokemon p_pokemon;
        pokemon AI_pokemon;
        int Num1,Num2;
        Num1=choose(Num1);
        Num2=AIchoose(Num2);
        //确定双方选择的pokemon
        switch(Num1)
        {
            case 1:
                p_pokemon=bulbasaur;
                break;
            case 2:
                p_pokemon=charmander;
                break;
            case 3:
                p_pokemon=squirtle;
                break;
        }
        switch(Num2)
        {
            case 0:
                AI_pokemon=bulbasaur;
                break;
            case 1:
                AI_pokemon=charmander;
                break;
            case 2:
                AI_pokemon=squirtle;
                break;
        }
        system("cls");
        Sleep(500);
        cout <<"You choose "<cont;
    }
    cin.get();
    return 0;
}

void initial()//初始化界面
{
    using namespace std;
    cout <<"Welcome to the pokemon duel!"<>Num;
    if(Num!=1&&Num!=2&&Num!=3)
    {
        cout <<"You choose a wrong number, choose it again:";
        Num=choose(Num);
    }
    return Num;
}
int AIchoose(int Num)//电脑选择pokemon,利用随机数让电脑随机选择
{
    using namespace std;
    srand((unsigned)time(NULL));
    Num = rand() % 3;
    return Num;
}
int p_choose(int pchoose,pokemon p_pokemon)//玩家选择招式,利用递归让玩家正确输入
{
    using namespace std;
    cin >>pchoose;
    //判断玩家所选的招式PP是否足够
    if(pchoose==1&&p_pokemon.atk1.pp<=0)
    {
        cout <<"You don't have enough pp"<5||pchoose<=0)
    {
        cout <<"You choose a wrong number, choose it again:";
        pchoose=p_choose(pchoose,p_pokemon);
    }
    return pchoose;
}
int AI_choose(int AIchoose,pokemon AI_pokemon)//利用随机数让电脑随机选择
{
    using namespace std;
    srand((unsigned)time(NULL));
    AIchoose = rand() % 5;
    //判断电脑选择招式的PP是否足够
    if(AIchoose==0&&AI_pokemon.atk1.pp<=0)
    {
        Sleep(1000);
        AIchoose=AI_choose(AIchoose,AI_pokemon);
    }
    if(AIchoose==1&&AI_pokemon.atk2.pp<=0)
    {
        Sleep(1000);
        AIchoose=AI_choose(AIchoose,AI_pokemon);
    }
    if(AIchoose==2&&AI_pokemon.atk3.pp<=0)
    {
        Sleep(1000);
        AIchoose=AI_choose(AIchoose,AI_pokemon);
    }
    if(AIchoose==3&&AI_pokemon.atk4.pp<=0)
    {
        Sleep(1000);
        AIchoose=AI_choose(AIchoose,AI_pokemon);
    }
    if(AIchoose==4&&AI_pokemon.def<=0)
    {
        Sleep(1000);
        AIchoose=AI_choose(AIchoose,AI_pokemon);
    }
    return AIchoose;
}
double damage_coeff(Type type1,Type type2)//计算攻击时伤害加成系数,type1为招式属性,type2为pokemon属性
{
    if(type1==normal)
    {
        return 1;
    }
    if(type1==grass)
    {
        switch(type2)
        {
            case grass:
                return 0.5;
                break;
            case fire:
                return 0.5;
                break;
            case water:
                return 2;
                break;
        }
    }
    if(type1==fire)
    {
        switch(type2)
        {
            case grass:
                return 2;
                break;
            case fire:
                return 0.5;
                break;
            case water:
                return 0.5;
                break;
        }
    }
    if(type1==water)
    {
        switch(type2)
        {
            case grass:
                return 0.5;
                break;
            case fire:
                return 2;
                break;
            case water:
                return 0.5;
                break;
        }
    }
}
void duel(pokemon p_pokemon,pokemon AI_pokemmon)//战斗流程函数
{
    using namespace std;
    while(p_pokemon.hp>0&&AI_pokemmon.hp>0)//双方HP均大于0时继续战斗
    {
        //显示双方相关信息
        cout <<"Your HP:"<0)
                {
                    cout <<"You use "<0)
                {
                    cout <<"You win!"<0&&p_pokemon.hp<=0)
                {
                    cout <<"You have been defeated!"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号