从零开始写C++打怪小游戏(1)
大家好呀,我是yanxinchenji
最近開學了,作業有點多,停更了一段時間
當然,就算是開學,也抵擋不住我更新的激情!!
所以,我想教大家寫一個c++的打怪游戲!!無縫剪輯
話不多說,我們開始吧!
第一部分:游戲架構
作為一個打怪小游戲,必不可少的就是主角的各類屬性與功能啦~
所以,我們要先定義億些主角的屬性,比如血量、攻擊力、防御力
long long things[10000];//先定義10000個,后面再加 /* 1HP 2ATK 3DEF ...... //這里可以根據需要來自行添加 */定義完,我們需要思考一下這個游戲需要什么功能,比如商店,刷怪區等等
我這里給大家一個模板,不想動腦子的直接復制
void mianban();//定義干什么(省流) void welcome();//歡迎 int main();//主函數 string where[10000];//1武器店2藥店3家4狀態 void home(); //家 string guaiwu[123];//1小怪物2大怪物3boss4凋零風暴 void fight();//戰斗 void diaolingfengbao();//最終boss:凋零風暴 void daguai();//大怪物 void xiaoguai();//小怪物 void boss();//boss?按照我的這個模板,接下來需要編寫第二主函數:''mianban()''
第二部分:第二主函數
2.1:實現界面
我們在這里要思考,該如何去實現我們的界面?
我們可以用printf函數來輸出這樣一個界面:
?printf("-----------------------------------------------------\n"); printf(" 選擇行動 \n"); printf("1、與NPC戰斗 2、行徑 3、干活 \n"); printf("4、末日新生(第四章開放) 5、查看狀態\n"); printf("6、公告 7、睡覺\n"); printf("-----------------------------------------------------\n"); printf("請選擇>"); int l; cin>>l;?2.2:函數的跳轉
那么,界面也實現了,我們該怎么去跳轉到功能函數呢?
說人話,就是把第二主函數當作一個橋梁,讓玩家根據需要走到不同的地方
這個橋梁需要不同的分支,那我們如何去實現這種分支呢?
答案就是:switch語句!
具體switch的用法點這里
看了上面的百科,我們發現需要case語句來形成這座橋梁的分支
我們不妨先用偽代碼來做一個模板:
switch(l) {case 1:表達式1;break;case 2:表達式2;break;.....case n;表達式n;break; }當然,每個游戲都有防熊機制,免得游戲混亂
我們這時可以用defualt語句來避免這種情況:
default: cout<<"請不要亂輸!!"; Sleep(1000); break;我們已經學會了switch,接下來就要實現跳轉了
把上述的表達式1、2換成類似于daguai();xiaoguai();這樣的函數就可以啦!
2.3:功能的實現
我們聲明了函數,那我們怎么去定義函數呢?
你可以照著這樣做:
void daguai() {if(things[1]<=0){return daguai();}things[7]-=20; int i=1,n=0,l=1,taopao,cg;int lengque=0; char r,w; srand(static_cast<unsigned int >(time(0))) ; int randomNumber=rand(); int ddj=(randomNumber% 5)+6;int dhp=ddj*100;int dsh=ddj*20;int djb=ddj*10;int dfy=ddj*5; switch(episodes){case 1:break;case 2:dhp*=2;dsh*=2;dfy*=2;break;case 3:dhp*=5;dsh*=5;dfy*=5;break;case 4:dhp*=10;dsh*=10;dfy*=10;break;}cout<<"你面對的是"<<ddj<<"級大怪,是否迎戰(y/n)"<<endl;cin>>r;if(r=='y'){int f=0;while(things[1]>0&&dhp>0&&l!=123&&i<=20){cout<<"第"<<i<<"回合"<<endl;cout<<"你的生命:"<<things[1]<<endl;cout<<"大怪生命:"<<dhp<<endl;cout<<"輸入1攻擊(造成攻擊(你的傷害-怪的傷害),防御減半)"<<endl;cout<<"輸入2防御(不造成攻擊,防御*2)"<<endl; cout<<"輸入3使用技能(無敵,造成敵方等級*20傷害,boss:500點傷害)"<<endl;cout<<"輸入4逃跑(20%幾率,逃跑失敗也要減少血(無視防御),實在打不過撐過20回合自動結束)"<<endl; cout<<"輸入5使用戰斗急救包!!!"<<endl; taopao=(randomNumber% 5)+1;if (things[158]==10||things[158]==8||things[159]==1){cout<<"輸入6使用武器或防具技能!\n";}cin>>l;if(lengque>0&&f==1){lengque--; } switch(l){case 1:if((things[11]/2)<dsh){things[1]-=dsh-things[11]/2; } if(things[3]>dfy ) {dhp-=things[3]-dfy; } i++; f=1;break; case 2: if(things[11]*2<dsh){things[1]-=dsh-things[11]*2; } i++; f=1;break;case 3:if(lengque==0){dhp-=ddj*20;lengque=5;i++; break; } cout<<"冷卻中剩余"<<lengque<<"回合"<<endl; f=0;break;case 4:if(taopao=3){cout<<"逃跑成功!!!"<<endl; l=123;} f=1;break;case 5:f=1;if(things[12]>0){cout<<"使用成功!!!"<<endl; things[12]--;things[1]+=50;i++; } break; case 6:if(things[158]==10){dhp-=1000;cout<<"你使用了技能:橫掃一切\n怪物受到1000點傷害!!!";gs();i++;}if(things[158]==8){dhp-=200;cout<<"你使用了技能:降維打擊\n怪物受到200點傷害!!!";gs();i++;}if(things[159]==1){things[11]=things[11]*5;cout<<"你使用了技能:絕對防御\n防御力提升五倍!!!";gs();i++;}break;} }if(things[1]<=0){cout<<"你死了"<<endl;Sleep(1000);return daguai(); }if(dhp<=0){cout<<"你打敗了"<<ddj<<"級大怪"<<endl;cout<<"獎勵金幣"<<djb<<"$"<<endl;cout<<"獎勵經驗"<<ddj*10<<endl;money+=djb; things[2]+=ddj*10; }}else{cout<<"你已逃跑"<<endl; } }上述的是我寫的《末日新生》里的打大怪函數,你可以把它修改一下,變得更加美觀
我們不能只有這一個功能,所以我們需要更多的開發、研究
因篇幅限制,目前只能寫這么多
所以更多的內容請看后續更新的2、3、4!
我是yanxinchenji,我們下次再見!
總結
以上是生活随笔為你收集整理的从零开始写C++打怪小游戏(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 小游戏 NO 7 打怪游戏(无聊
- 下一篇: C语言 英汉互译电子词典 命令行,MFC