【c++】战斗1.1

修改了买药不扣钱的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;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值