<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近想到了用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++寶可夢對戰遊戲的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45