大家好!
我最近花了四天的時間做了一個小游戲:
戰斗1.0
由于是第一次寫那么多代碼,
可能會有很多BUG,請大佬見諒!
如有BUG,希望大佬能告訴我,謝謝!
話有點多話不多說上代碼!
代碼
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
const long long wqs=11;
string t;
bool f=1;
struct wj//玩家的結構體
{
string name,mm;
bool awq[wqs+1];
long long bwq[wqs+1];
long long dj,jyz,xie,max_xie;
long long gj,fy,wq,qian;
long long sbl,zbbh[4];
void csh()
{
max_xie=xie=100;
gj=25;
fy=5;
sbl=5;
qian=0;
dj=0;
jyz=0;
for(long long i=1;i<=3;i++)
{
zbbh[i]=0;
}
for(long long i=0;i<=wqs;i++)
{
awq[i]=0;
bwq[i]=0;
}
return ;
}
}wj;
struct cd//存檔結構體
{
void out()
{
ofstream a("玩家屬性.binggan");
a<<wj.name<<"\n";
a<<wj.mm<<"\n";
a<<wj.dj<<"\n";
a<<wj.jyz<<"\n";
a<<wj.max_xie<<"\n";
a<<wj.xie<<"\n";
a<<wj.gj<<"\n";
a<<wj.fy<<"\n";
a<<wj.sbl<<"\n";
a<<wj.qian<<"\n";
a.close();
ofstream b("裝備.binggan");
b<<wj.zbbh[1]<<"\n"<<wj.zbbh[2]<<"\n"<<wj.zbbh[3]<<"\n\n";
for(long long i=0;i<=wqs;i++)
{
b<<wj.awq[i]<<"\n";
}
b<<"\n";
for(long long i=0;i<=wqs;i++)
{
b<<wj.bwq[i]<<"\n";
}
b.close();
return ;
}
void in()
{
ifstream a("玩家屬性.binggan");
a>>wj.name;
a>>wj.mm;
a>>wj.dj;
a>>wj.jyz;
a>>wj.max_xie;
a>>wj.xie;
a>>wj.gj;
a>>wj.fy;
a>>wj.sbl;
a>>wj.qian;
a.close();
ifstream b("裝備.binggan");
b>>wj.zbbh[1]>>wj.zbbh[2]>>wj.zbbh[3];
for(long long i=0;i<=wqs;i++)
{
a>>wj.bwq[i];
}
for(long long i=0;i<=wqs;i++)
{
b>>wj.bwq[i];
}
b.close();
return ;
}
}cd;
struct wq//武器結構體
{
string name;
long long gj;
long long fy;
long long sbl;
long long qian;
}wq[wqs+1]={
{"無",0,0,0,0},
{"匕首",10,0,20,0},
{"鐵劍",30,5,5,100},
{"盾",0,30,-5,20},
{"鐵甲",-5,40,-10,200},
{"大砍刀",45,0,5,0},
{"鎖甲",5,35,10,0},
{"矛",50,-3,-5,300},
{"斧子",50,0,-10,300},
{"流星錘",55,-15,-15,0},
{"刺傘",40,30,0,0},
{"刺扇",40,15,35,0}
};
struct gw//怪物結構體
{
string name;
long long xie;
long long gj,fy,sbl;
long long qian;
long long zbl,zbbh;
long long jy;
}gw,kl[6]={
{"\0",0,0,0,0,0,0,0,0},
{"骷髏士兵",80,20,5,5,50,1,50,30},
{"骷髏騎士",100,30,5,5,80,2,45,50},
{"幽靈骷髏",90,25,0,30,150,wqs,30,60},
{"骷髏暴君",180,70,10,5,300,6,55,100},
{"骷髏巨人",300,100,20,0,1000,9,75,200}
};
void kshm();
void zjm();
void zd();
void dz(long long);
void sd();
void bb();
void qk();
void rqk();
void wqqk();
void zwq();
void xwq();
void mwq();
void mwq(long long);
void sj();
void out(string,long long);
long long sj(long long);
int main()
{
kshm();
while(1)
{
system("cls");
cout<<"1.存檔 2.新建\n";
char n;
n=getch();
system("cls");
if(n=='1')
{
cd.in();
cout<<"用戶名:";
cin>>t;
if(t!=wj.name)
{
cout<<"用戶名錯誤!";
Sleep(1000);
system("cls");
continue;
}
cout<<"密碼:";
cin>>t;
if(t!=wj.mm)
{
cout<<"密碼錯誤!";
Sleep(1000);
system("cls");
continue;
}
cd.in();
break;
}
else
if(n=='2')
{
cout<<"用戶名:";
cin>>wj.name;
cout<<"密碼:";
cin>>wj.mm;
wj.csh();
break;
}
else
{
cout<<"不要亂輸入!!!";
}
system("cls");
}
system("cls");
while(f)
{
zjm();
}
cd.out();
return 0;
}
void kshm()
{
system("color f0");
cout<<"按任意鍵開始游戲";
getch();
system("cls");
for(long long i=1;i<=3;i++)
{
system("color 07");
system("color 10");
system("color 20");
system("color 30");
system("color 40");
system("color 50");
system("color 60");
system("color 70");
system("color 80");
system("color 90");
system("color a0");
system("color b0");
system("color c0");
system("color d0");
system("color e0");
system("color f0");
}
cout<<"\n\n\n\n\n\n\n\n\n\n\n ";
out("戰斗",300);
cout<<"\n";
cout<<" ";
out("出品:餅干",30);
Sleep(1500);
return ;
}
void out(string n,long long s)
{
for(long long i=0;i<n.size();i++)
{
cout<<n[i];
Sleep(s);
}
return ;
}
void zjm()
{
system("cls");
cout<<"1.戰斗\n2.商店\n3.背包\n4.退出";
char s;
s=getch();
switch(s)
{
case '1':
zd();
break;
case '2':
sd();
break;
case '3':
bb();
break;
case '4':
f=0;
break;
default:
system("cls");
cout<<"不要亂輸入!!!";
Sleep(1000);
break;
}
return ;
}
void zd()
{
long long s=sj(100);
if(s<=40)dz(1);
else
if(s<=65)dz(2);
else
if(s<=75)dz(3);
else
if(s<=90)dz(4);
else
dz(5);
return ;
}
void dz(long long bh)
{
long long t=wj.sbl>80?80:wj.sbl;
bool f=0;
char s;
system("cls");
cout<<"你面對的是"<<kl[bh].name<<"\n";
cout<<"血量:"<<kl[bh].xie<<"\n";
cout<<"攻擊:"<<kl[bh].gj<<"\n";
cout<<"防御:"<<kl[bh].fy<<"\n";
cout<<"閃避率:"<<kl[bh].sbl<<"%\n";
cout<<"1.迎戰 2.逃跑";
s=getch();
while(s!='1'&&s!='2')s=getch();
if(s=='2')
{
if(sj(100)<=50)
{
system("cls");
cout<<"逃跑成功!";
Sleep(1500);
return ;
}
else
{
system("cls");
cout<<"逃跑失敗!";
Sleep(1500);
}
}
gw=kl[bh];
system("cls");
for(long long i=1;1;i++)
{
cout<<"第"<<i<<"回合\n\n\n";
cout<<"你的血量:"<<wj.xie<<"\n";
cout<<gw.name<<"的血量"<<gw.xie<<"\n";
cout<<"1.攻擊 2.治療\n";
s=getch();
while(s!='1'&&s!='2')s=getch();
if(s=='1')
{
if(gw.sbl>=sj(100))
{
cout<<gw.name<<"閃避了你的攻擊\n";
}
else
if(gw.fy>=wj.gj)
{
cout<<gw.name<<"防御下了你的攻擊\n";
}
else
{
cout<<gw.name<<"的血量-"<<wj.gj-gw.fy<<"\n";
gw.xie-=wj.gj-gw.fy;
}
}
else
{
if(wj.xie+20>=wj.max_xie)
{
cout<<"已回滿!\n";
wj.xie=wj.max_xie;
}
else
{
cout<<"你的血量+20\n";
wj.xie+=20;
}
}
if(gw.xie<=0)
{
system("cls");
cout<<"勝利!\n";
cout<<"你獲得了"<<gw.qian<<"金幣\n";
cout<<"你獲得了"<<gw.jy<<"經驗值\n\n";
wj.qian+=gw.qian;
wj.jyz+=gw.jy;
cout<<"按空格鍵繼續";
while(getch()!=' ');
sj();
return ;
}
if(t>=sj(100))
{
cout<<"你閃避了"<<gw.name<<"的攻擊\n";
}
else
if(wj.fy>=gw.gj)
{
cout<<"你防御下了"<<gw.name<<"的攻擊\n";
}
else
{
cout<<"你的血量-"<<gw.gj-wj.fy<<"\n";
wj.xie-=gw.gj-wj.fy;
}
if(wj.xie<=0)
{
system("cls");
cout<<"你戰死了!\n";
wj.xie=0;
Sleep(1000);
return ;
}
Sleep(1000);
system("cls");
}
return ;
}
void sj()
{
while(wj.jyz>=100&&wj.dj!=10)
{
system("cls");
wj.gj+=2;
wj.fy+=1;
wj.dj++;
wj.jyz-=100;
wj.max_xie+=10;
wj.xie=wj.max_xie;
wj.sbl+=1;
out("你升級了!\n",30);
out("血量上限+10\n",30);
out("傷害+2\n",30);
out("防御+1\n",30);
out("閃避率+1\n\n",30);
cout<<"按空格繼續";
while(getch()!=' ');
}
return ;
}
void sd()
{
long long t;
while(1)
{
system("cls");
cout<<"歡迎來到本【餅干】商店!\n\n";
cout<<"你有"<<wj.qian<<"金幣\n";
cout<<"1.武器 2.藥品(30元/個,每個補50血量) 3.退出";
char s;
s=getch();
while(s!='1'&&s!='2'&&s!='3')s=getch();
if(s=='1')
{
mwq();
}
else
if(s=='2')
{
system("cls");
cout<<"要不要幫你補滿血量?(y/n)";
s=getch();
while(s!='y'&&s!='n')s=getch();
if(s=='y')
{
if((wj.max_xie-wj.xie)%50==0)
{
if((wj.max_xie-wj.xie)/50*30<=wj.qian)
{
system("cls");
cout<<"已回滿!";
wj.qian-=(wj.max_xie-wj.xie)/50*30;
wj.xie=wj.max_xie;
Sleep(1000);
}
else
{
system("cls");
cout<<"錢不夠!";
Sleep(1000);
system("cls");
}
}
else
{
if(((wj.max_xie-wj.xie)/50+1)*30<=wj.qian)
{
system("cls");
cout<<"已回滿!";
wj.qian-=((wj.max_xie-wj.xie)/50+1)*30;
wj.xie=wj.max_xie;
Sleep(1000);
}
else
{
system("cls");
cout<<"錢不夠!";
Sleep(1000);
system("cls");
}
}
}
else
{
system("cls");
cout<<"金幣"<<wj.qian<<"\n";
cout<<"血量:"<<wj.xie<<"/"<<wj.max_xie<<"\n";
cout<<"你要買幾個?\n";
cin>>t;
if(t*30<=wj.qian)
{
system("cls");
wj.xie+=t*30;
if(wj.xie>wj.max_xie)wj.xie=wj.max_xie;
cout<<"夠買成功!";
Sleep(1000);
system("cls");
}
else
{
system("cls");
cout<<"錢不夠!";
Sleep(1000);
system("cls");
}
}
}
else
{
system("cls");
cout<<"歡迎下次光臨!";
Sleep(1000);
system("cls");
return ;
}
}
return ;
}
void mwq()
{
system("cls");
cout<<"金幣:"<<wj.qian<<"\n\n";
cout<<"0.退出\n";
cout<<"1.盾(20金幣)\n";
cout<<"2.鐵劍(100金幣)\n";
cout<<"3.矛(300金幣)\n";
cout<<"4.斧子(300金幣)\n";
cout<<"5.鐵甲(200金幣)\n";
char s;
s=getch();
while(s!='1'&&s!='2'&&s!='3'&&s!='4'&&s!='5'&&s!='0')s=getch();
if(s=='0')
{
system("cls");
return ;
}
switch(s)
{
case '1':
mwq(3);
break;
case '2':
mwq(2);
break;
case '3':
mwq(7);
break;
case '4':
mwq(8);
break;
case '5':
mwq(4);
}
return ;
}
void mwq(long long n)
{
system("cls");
if(wj.qian>=wq[n].qian)
{
cout<<"購買成功!\n";
wj.bwq[n]++;
wj.awq[n]=1;
wj.qian-=wq[n].qian;
Sleep(1000);
system("cls");
}
else
{
cout<<"錢不夠!\n";
Sleep(1000);
system("cls");
}
return ;
}
void bb()
{
while(1)
{
system("cls");
cout<<"1.查看情況\n2.裝上裝備\n3.卸下裝備\n4.退出";
char s;
s=getch();
while(s!='1'&&s!='2'&&s!='3'&&s!='4')s=getch();
switch(s)
{
case '1':
qk();
break;
case '2':
zwq();
break;
case '3':
xwq();
break;
case '4':
system("cls");
return ;
}
}
return ;
}
void qk()
{
while(1)
{
system("cls");
cout<<"1.玩家情況 2.武器情況 3.退出";
char s;
s=getch();
while(s!='1'&&s!='2'&&s!='3')s=getch();
switch(s)
{
case '1':
rqk();
break;
case '2':
wqqk();
break;
case '3':
system("cls");
return ;
}
}
return ;
}
void rqk()
{
system("cls");
cout<<"用戶名:"<<wj.name<<"\n";
cout<<"等級:"<<wj.dj;
if(wj.dj==10)cout<<"(max)";
cout<<"\n";
if(wj.dj!=10)
cout<<"經驗值:"<<wj.jyz<<"/100";
cout<<"\n";
cout<<"血量:"<<wj.xie<<"/"<<wj.max_xie<<"\n";
cout<<"攻擊:"<<wj.gj<<"\n";
cout<<"防御:"<<wj.fy<<"\n";
cout<<"閃避率:";
if(wj.sbl>=80)cout<<"80";
else
if(wj.sbl<=0)cout<<"0";
else
cout<<wj.sbl;
cout<<"%\n";
cout<<"金幣:"<<wj.qian<<"\n";
cout<<"裝備:"<<"|"<<wq[wj.zbbh[1]].name<<"|"<<wq[wj.zbbh[2]].name<<"|"<<wq[wj.zbbh[3]].name<<"|"<<"\n";
cout<<"其他裝備:\n";
bool f=1;
for(long long i=1;i<=wqs;i++)
{
if(wj.bwq[i]>=1)
{
f=0;
cout<<wq[i].name<<"*"<<wj.bwq[i]<<"\n";
}
}
if(f)cout<<"無";
cout<<"\n\n按空格繼續...\n";
char s;
s=getch();
while(s!=' ')s=getch();
return ;
}
void wqqk()
{
while(1)
{
system("cls");
long long s;
do
{
system("cls");
cout<<"0.退出\n";
for(long long i=1;i<=wqs;i++)
{
cout<<i<<"."<<wq[i].name<<"\n";
}
cin>>s;
}
while(0>s||s>wqs);
if(s==0)return ;
system("cls");
cout<<"裝備名:"<<wq[s].name<<"\n";
cout<<"傷害:"<<wq[s].gj<<"\n";
cout<<"防御:"<<wq[s].fy<<"\n";
cout<<"閃避率:"<<wq[s].sbl<<"%\n";
cout<<"\n\n按空格繼續\n";
char t;
t=getch();
while(t!=' ')t=getch();
}
return ;
}
void zwq()
{
long long s,n;
char t;
while(1)
{
system("cls");
cout<<"0.退出\n";
for(long long i=1;i<=wqs;i++)
{
if(wj.bwq[i]>=1)
{
cout<<i<<"."<<wq[i].name<<"*"<<wj.bwq[i]<<"\n";
}
}
cin>>s;
while(0>s||s>wqs)
{
system("cls");
cout<<"0.退出\n";
for(long long i=1;i<=wqs;i++)
{
if(wj.bwq[i]>=1)
{
cout<<i<<"."<<wq[i].name<<"*"<<wj.bwq[i]<<"\n";
}
}
cin>>s;
}
if(s==0)return ;
n=s;
if(wj.bwq[s]>=1)
{
system("cls");
cout<<"你要裝在哪個格子里?\n";
cout<<"|"<<wq[wj.zbbh[1]].name<<"|"<<wq[wj.zbbh[2]].name<<"|"<<wq[wj.zbbh[3]].name<<"|";
t=getch();
while(t!='1'&&t!='2'&&t!='3')t=getch();
s=t-'0';
if(wq[wj.zbbh[s]].name!="無")
{
system("cls");
cout<<"這個格子已經有武器了!\n";
cout<<"是否替換?(y/n)";
t=getch();
while(t!='y'&&t!='n')t=getch();
if(t=='y')
{
wj.gj-=wq[wj.zbbh[s]].gj;
wj.fy-=wq[wj.zbbh[s]].fy;
wj.sbl-=wq[wj.zbbh[s]].sbl;
wj.bwq[wj.zbbh[s]]++;
wj.zbbh[s]=n;
wj.bwq[n]--;
wj.gj+=wq[n].gj;
wj.fy+=wq[n].fy;
wj.sbl+=wq[n].sbl;
system("cls");
out("成功替換!",30);
Sleep(1000);
}
else
{
system("cls");
continue;
}
}
else
{
wj.gj+=wq[n].gj;
wj.fy+=wq[n].fy;
wj.sbl+=wq[n].sbl;
wj.zbbh[s]=n;
wj.bwq[n]--;
system("cls");
out("成功裝備!",30);
Sleep(1000);
}
}
else
{
system("cls");
cout<<"你沒有這個裝備!";
}
}
return ;
}
void xwq()
{
char s;
while(1)
{
system("cls");
cout<<"你要卸下哪個格子里的裝備?\n";
cout<<"|"<<wq[wj.zbbh[1]].name<<"|"<<wq[wj.zbbh[2]].name<<"|"<<wq[wj.zbbh[3]].name<<"|";
s=getch();
while(s!='1'&&s!='2'&&s!='3')s=getch();
if(wj.zbbh[s]==0)
{
system("cls");
cout<<"此格子內無裝備!";
Sleep(1000);
continue;
}
wj.gj-=wq[wj.zbbh[s]].gj;
wj.fy-=wq[wj.zbbh[s]].fy;
wj.sbl-=wq[wj.zbbh[s]].sbl;
wj.bwq[wj.zbbh[s]]++;
wj.zbbh[s]=0;
system("cls");
out("成功卸下!",30);
}
return ;
}
long long sj(long long s)
{
srand(time(0));
return rand()%s+1;
}
第一次寫那么多代碼,手都酸死了!
大家如果覺得我寫得好
請點贊、收藏、關注我哦!
宣告:
以上是我原創的代碼,請勿抄襲,轉載請標明作者!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295749.html
標籤:其他
下一篇:關于團隊、競賽、作業,一點感觸