修改了买药不扣钱的BUG
使《战斗》可以在任意编译器上编译
#include<iostream>
#include<stdio.h>
#include<ctime>
#include<windows.h>
#include<conio.h>
#include<cstdlib>
#include<fstream>
#include<iomanip>
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 = 1; i <= wqs; i++)
{
b << wj.awq[i] << "\n";
}
b << "\n";
for (long long i = 1; 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 = 1; i <= wqs; i++)
{
b >> wj.awq[i];
}
for (long long i = 1; 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 << "用户名(0.退出):";
cin >> wj.name;
if (wj.name == "0")
{
continue;
system("cls");
}
system("cls");
cout << "密码(0.退出):";
cin >> wj.mm;
if (wj.mm == "0")
{
continue;
system("cls");
}
system("cls");
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 * 50;
if (wj.xie > wj.max_xie)wj.xie = wj.max_xie;
wj.qian -= t * 30;
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 << "你没有这个装备!";
Sleep(1000);
system("cls");
}
}
return;
}
void xwq()
{
long long t;
char s;
while (1)
{
system("cls");
cout << "你要卸下哪个格子里的装备?\n";
cout << "0.退出\n";
cout << "|" << wq[wj.zbbh[1]].name << "|" << wq[wj.zbbh[2]].name << "|" << wq[wj.zbbh[3]].name << "|";
s = _getch();
while (s != '0' && s != '1' && s != '2' && s != '3')s = _getch();
if (s == '0')
{
system("cls");
return;
}
t = s - '0';
if (wj.zbbh[t] == 0)
{
system("cls");
cout << "此格子内无装备!";
Sleep(1000);
continue;
}
wj.gj -= wq[wj.zbbh[t]].gj;
wj.fy -= wq[wj.zbbh[t]].fy;
wj.sbl -= wq[wj.zbbh[t]].sbl;
wj.bwq[wj.zbbh[t]]++;
wj.zbbh[t] = 0;
system("cls");
out("成功卸下!", 30);
Sleep(1000);
}
return;
}
long long sj(long long s)
{
srand(time(0));
return rand() % s + 1;
}