iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >利用C++编写简易宝可梦对战小游戏
  • 278
分享到

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

2024-04-02 19:04:59 278人浏览 泡泡鱼
摘要

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

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

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

上代码

#include<iOStream>
#include<windows.h>
#include<ctime>
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 "<<p_pokemon.name<<" and your opponent choose "<<AI_pokemon.name<<endl;
        duel(p_pokemon,AI_pokemon);
        cout <<"If you want to play another round,enter number 1,or enter others number to quit:"<<endl;
        cin >>cont;
    }
    cin.get();
    return 0;
}
 
void initial()//初始化界面
{
    using namespace std;
    cout <<"Welcome to the pokemon duel!"<<endl;
    cout <<"Your pokemon has 3 chances to defend.Once you decide to defend,you will not get damage this turn."<<endl;
    cout <<"But also,you can not attack this turn."<<endl;
    cout <<"Now choose your pokemon by enter the number:";
    cout <<"1.bulbasaur 2.charmander 3.squirtle";
}
int choose(int Num)//玩家选择pokemon,利用递归让玩家正确输入
{
    using namespace std;
    cin >>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"<<endl;
        pchoose=p_choose(pchoose,p_pokemon);
    }
    if(pchoose==2&&p_pokemon.atk2.pp<=0)
    {
        cout <<"You don't have enough pp"<<endl;
        pchoose=p_choose(pchoose,p_pokemon);
    }
    if(pchoose==3&&p_pokemon.atk3.pp<=0)
    {
        cout <<"You don't have enough pp"<<endl;
        pchoose=p_choose(pchoose,p_pokemon);
    }
    if(pchoose==4&&p_pokemon.atk4.pp<=0)
    {
        cout <<"You don't have enough pp"<<endl;
       pchoose=p_choose(pchoose,p_pokemon);
    }
    if(pchoose==5&&p_pokemon.def<=0)
    {
        cout <<"You don't have enough pp"<<endl;
        pchoose=p_choose(pchoose,p_pokemon);
    }
    if(pchoose>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:"<<p_pokemon.hp<<" Your opponent's HP:"<<AI_pokemmon.hp<<endl<<endl;
        cout <<"Choose your action this turn by ernter the number:"<<endl;
        cout <<"1."<<p_pokemon.atk1.name<<" PP:"<<p_pokemon.atk1.pp<<endl;
        cout <<"2."<<p_pokemon.atk2.name<<" PP:"<<p_pokemon.atk2.pp<<endl;
        cout <<"3."<<p_pokemon.atk3.name<<" PP:"<<p_pokemon.atk3.pp<<endl;
        cout <<"4."<<p_pokemon.atk4.name<<" PP:"<<p_pokemon.atk4.pp<<endl;
        cout <<"5.deffense PP:"<<p_pokemon.def;
        Atk this_turn_p_atk;//定义玩家本轮所选招式
        Atk this_turn_AI_atk;//定义电脑本轮所选招式
        int pchoose;
        pchoose=p_choose(pchoose,p_pokemon);
        int AIchoose;
        AIchoose=AI_choose(AIchoose,AI_pokemmon);
        switch(pchoose)
        {
            case 1:
                p_pokemon.atk1.pp=p_pokemon.atk1.pp-1;
                this_turn_p_atk=p_pokemon.atk1;
                break;
            case 2:
                p_pokemon.atk2.pp=p_pokemon.atk2.pp-1;
                this_turn_p_atk=p_pokemon.atk2;
                break;
            case 3:
                p_pokemon.atk3.pp=p_pokemon.atk3.pp-1;
                this_turn_p_atk=p_pokemon.atk3;
                break;
            case 4:
                p_pokemon.atk4.pp=p_pokemon.atk4.pp-1;
                this_turn_p_atk=p_pokemon.atk4;
                break;
            case 5:
                p_pokemon.def=p_pokemon.def-1;
                this_turn_p_atk=def;
                break;
        }
        switch(AIchoose)
        {
            case 0:
                AI_pokemmon.atk1.pp=AI_pokemmon.atk1.pp-1;
                this_turn_AI_atk=AI_pokemmon.atk1;
                break;
            case 1:
                AI_pokemmon.atk2.pp=AI_pokemmon.atk2.pp-1;
                this_turn_AI_atk=AI_pokemmon.atk2;
                break;
            case 2:
                AI_pokemmon.atk3.pp=AI_pokemmon.atk3.pp-1;
                this_turn_AI_atk=AI_pokemmon.atk3;
                break;
            case 3:
                AI_pokemmon.atk4.pp=AI_pokemmon.atk4.pp-1;
                this_turn_AI_atk=AI_pokemmon.atk4;
                break;
            case 4:
                AI_pokemmon.def=AI_pokemmon.def-1;
                this_turn_AI_atk=def;
                break;
        }
        system("cls");
        //判断是否有玩家本轮采取防御
        if(AIchoose==4&&pchoose!=5)
        {
            cout <<"You use "<<this_turn_p_atk.name<<".";
            Sleep(500);
            cout <<"But your attack was defended!"<<endl;
        }
        else if(pchoose==5&&AIchoose!=4)
        {
            cout <<"Your opponent use "<<this_turn_AI_atk.name<<".";
            Sleep(500);
            cout <<"But you defend the attack from the opponent!"<<endl;
        }
        else if(pchoose==5&&AIchoose==4)
        {
            cout <<"You both defend this turn."<<endl;
            Sleep(250);
        }
        else//双方都没有防御的情况
        {
            int p_speed,AI_speed;
            double p_coeff,AI_coeff;
            //真正的速度为pokemon本身速度加招式速度
            p_speed=p_pokemon.speed+this_turn_p_atk.speed;//本轮玩家真正的速度
            AI_speed=AI_pokemmon.speed+this_turn_AI_atk.speed;//本轮电脑真正的速度
            //计算伤害系数
            p_coeff=damage_coeff(this_turn_p_atk.type,AI_pokemmon.type);
            AI_coeff=damage_coeff(this_turn_AI_atk.type,p_pokemon.type);
            //比较双方谁本轮速度快,判断先手
            if(AI_speed>p_speed)
            {
                cout <<"Your opponent use "<<this_turn_AI_atk.name<<" !"<<endl;
                Sleep(500);
                p_pokemon.hp=p_pokemon.hp-this_turn_AI_atk.damage*AI_coeff;//计算收到的伤害,伤害为招式伤害乘以伤害系数
                if(p_pokemon.hp<=0)
                {
                    cout <<"You have been defeated!"<<endl;
                }
                else if(p_pokemon.hp>0)
                {
                    cout <<"You use "<<this_turn_p_atk.name<<" !"<<endl;
                    Sleep(500);
                    AI_pokemmon.hp=AI_pokemmon.hp-this_turn_p_atk.damage*p_coeff;
                    if(AI_pokemmon.hp<=0)
                    {
                        cout <<"You win!"<<endl;
                    }    
                }
            }
            else if(AI_speed<p_speed)
            {
                cout <<"You use "<<this_turn_p_atk.name<<" !"<<endl;
                Sleep(500);
                AI_pokemmon.hp=AI_pokemmon.hp-this_turn_p_atk.damage*p_coeff;
                if(AI_pokemmon.hp<=0)
                {
                    cout <<"You win!"<<endl;
                }
                else
                {
                    cout <<"Your opponent use "<<this_turn_AI_atk.name<<" !"<<endl;
                    Sleep(500);
                    p_pokemon.hp=p_pokemon.hp-this_turn_AI_atk.damage*AI_coeff;
                    if(p_pokemon.hp<=0)
                    {
                        cout <<"You have been defeated!"<<endl;
                    }
                }
            }
            else if(AI_speed==p_speed)
            {
                cout <<"You both attack at the same time!"<<endl;
                Sleep(500);
                cout <<"You use "<<this_turn_p_atk.name<<" !"<<endl;
                Sleep(500);
                cout <<" Your opponent use "<<this_turn_AI_atk.name<<" !"<<endl;
                Sleep(500);
                p_pokemon.hp=p_pokemon.hp-this_turn_AI_atk.damage*AI_coeff;
                AI_pokemmon.hp=AI_pokemmon.hp-this_turn_p_atk.damage*p_coeff;
                if(AI_pokemmon.hp<=0&&p_pokemon.hp>0)
                {
                    cout <<"You win!"<<endl;
                }
                else if(AI_pokemmon.hp>0&&p_pokemon.hp<=0)
                {
                    cout <<"You have been defeated!"<<endl;
                }
                else if(AI_pokemmon.hp<=0&&p_pokemon.hp<=0)
                {
                    cout <<"Draw game!";
                }
            }
        }
    }
}

以上就是利用C++编写简易宝可梦对战小游戏的详细内容,更多关于C++宝可梦对战游戏的资料请关注编程网其它相关文章!

--结束END--

本文标题: 利用C++编写简易宝可梦对战小游戏

本文链接: https://www.lsjlt.com/news/151729.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用C++编写简易宝可梦对战小游戏
    最近想到了用C++写个小时候课间嘴上玩的那种宝可梦游戏,先试写了个demo,只有早期的三个宝可梦和基础招式,感兴趣的朋友可以再自己添加,也没有各种物防特攻数值啥的,等以后会搞图形化界...
    99+
    2024-04-02
  • 利用c++编写简易版2048小游戏
    目录1、程序初始化2、画图操作3、字符控制4、判断游戏结束和游戏胜利别的不多说,先上效果图 我们都知道2048是个4 4的方格,为了方便数组下表我们生成5 5的数组,只用到1~4的...
    99+
    2024-04-02
  • 利用Matlab编写简易版连连看小游戏
    这是一款MATLAB连连看小游戏,基本实现了连连看的功能,不过目前没有写出死局判定的模块,日后可能会对其进行改进。 游戏截图 游戏组装说明 我们的变量path输入的是图像包的相...
    99+
    2024-04-02
  • 利用Python编写简易版德州扑克小游戏
    目录德州扑克简要介绍什么是德州扑克游戏规则简要介绍德州扑克游戏的python实现过程游戏初始化评选赢家游戏主题函数游戏体验与展示模块不足与后续改进德州扑克简要介绍 什么是德州扑克 德...
    99+
    2024-04-02
  • 利用Python写个简易版星空大战游戏
    目录前言一.游戏画面二.游戏结束画面三.游戏素材四.游戏代码五、核心代码1.导入模块2.动态星空背景函数3.不定时产生敌机函数4.飞碟的移动5.子弹的移动6.玩家射击函数7.播放背景...
    99+
    2024-04-02
  • 怎么利用Python编写简易版德州扑克小游戏
    小编给大家分享一下怎么利用Python编写简易版德州扑克小游戏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!德州扑克简要介绍什么是德州扑克德州扑克不知道大家是否玩过,它是起源于美国的得克萨斯州的一种博弈类卡牌游戏,英文名叫...
    99+
    2023-06-29
  • 怎么用Matlab编写简易版连连看小游戏
    这篇文章主要介绍“怎么用Matlab编写简易版连连看小游戏”,在日常操作中,相信很多人在怎么用Matlab编写简易版连连看小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Matlab编写简易版连连看...
    99+
    2023-06-29
  • 利用Python编写数字战舰游戏
    本篇内容主要讲解“利用Python编写数字战舰游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“利用Python编写数字战舰游戏”吧!前言制造多艘战舰:你需要小心,因为你需要确保你不要在战斗板上...
    99+
    2023-06-02
  • 怎么使用c语言编写简单小游戏
    编写一个简单的猜数字小游戏的例子:```#include #include #include int main() {int ran...
    99+
    2023-08-31
    c语言
  • 利用c++写一个简单的推箱子小游戏
    效果图 相信各位都肯定完整这种推箱子的小游戏。游戏玩法很简单,那就是一个人把所有的箱子推动到对应的位置那就可以赢了。 那么我们接下来看看这个推箱子的游戏改怎么写 char ma...
    99+
    2024-04-02
  • 利用C++实现简易的狼人杀游戏
    狼人杀游戏是一款非常有趣的角色扮演游戏,它需要玩家之间互相猜测身份并进行投票,通过推理来找出真正的狼人。 以下是一个基本的狼人杀游戏的C++实现,其中包含游戏角色、游戏流程和基本的逻...
    99+
    2023-05-14
    C++实现狼人杀游戏 C++狼人杀游戏 C++狼人杀 C++ 游戏
  • Python编写简易猜数字小游戏(附完整代码)
    Python编写简易猜数字小游戏(附完整代码) 猜数字游戏是一款非常经典的小游戏,本文将介绍如何使用Python编写一个简易的猜数字游戏,并提供完整的源代码。 首先,让我们了解一下游戏规则。游戏开始时...
    99+
    2023-09-23
    python java 开发语言
  • 利用java编写一个弹球小游戏
    本篇文章给大家分享的是有关利用java编写一个弹球小游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。弹球游戏实现原理:  隔一定时间(小于1秒)重新绘制图像,因为Graphi...
    99+
    2023-05-31
    java ava
  • 怎么用Python编写简易的成语接龙游戏
    本文小编为大家详细介绍“怎么用Python编写简易的成语接龙游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Python编写简易的成语接龙游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.游戏规则下...
    99+
    2023-06-29
  • 用js编写简单的贪吃蛇小游戏
    本文实例为大家分享了js编写简单的贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 代码如下: HTML 5 部分 <!DOCTYPE html> <html ...
    99+
    2024-04-02
  • 利用C语言编写一个扫雷游戏
    本篇文章为大家展示了利用C语言编写一个扫雷游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方...
    99+
    2023-06-06
  • 利用Python编写简易的录制屏幕小工具
    目录1、准备2、代码由于最近测试需要录制系统界面的操作过程,因为都是全屏的操作,所以用python做一个简单的录屏小工具。 实现过程也是比较简单,就是通过对屏幕操作进行不断的截图,最...
    99+
    2024-04-02
  • 怎么用Python编写一个宝石消消乐小游戏
    本篇内容介绍了“怎么用Python编写一个宝石消消乐小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开发工具python版本:3.6.4...
    99+
    2023-06-26
  • 基于C语言编写一个简单的抽卡小游戏
    目录效果图展示开始的界面输入1输入10输入0实现代码test4.26.c许愿.cgame.h下载小奔最近学了C语言不少的东西,但是想用学到的东西来搞一个小游戏。 不过小奔就不做那些猜...
    99+
    2024-04-02
  • 利用C语言编写一个三子棋游戏
    这篇文章给大家介绍利用C语言编写一个三子棋游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体内容如下说明:该游戏的实现需要用到三个文件1、test.c:放置主函数(main())和菜单函数(menu())和游戏函数...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作