【c++小游戏】谁与争锋1.0.0.1

代码如下: 

#include"bits/stdc++.h" //Devc++的,vsc++没有
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#define kd(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
#define sys system
#define cls system("cls")
#define pause sys("pause")
using namespace std;
double juli(double x1,double y1,double x2,double y2){
	int lsbl=pow(max(x1,x2)-min(x1,x2),2)+pow(max(y1,y2)-min(y1,y2),2);
	return sqrt(lsbl);
}
void print(){
	cerr<<"1.剑士 hp:100 att:7 1技能:劈砍\n";
	cerr<<"2.咒术师 hp:75 att:10 1技能:诅咒\n";
	cerr<<"3.链魂者 hp:75 att:7 1技能:链魂 2技能:魂破(使用1技能后再用一次发动)\n";
}
string shenying="关";
bool vip=0;
bool youxi(){
	cls;
	int hp=1,hp2=1,att=1,att2=1,bh,bh2,i=0,le=0,le2=0,liani=0;
	bool winter1=1,zhou=0,lian=0;
	int x1=5,y1=5,x2=6,y2=6;
	print();
	cerr<<"玩家1:";
	in:cin>>bh;
	switch(bh){
		case 1:
			hp=100,att=7;
			break;
		case 2:
			hp=75,att=10;
			break;
		case 3:
			hp=75,att=7;
			break;
		default:
			goto in;
			break;
	}
	cerr<<"玩家2:";
	in2:cin>>bh2;
	switch(bh){
		case 1:
			hp2=100,att2=7;
			break;
		case 2:
			hp2=75,att2=10;
			break;
		case 3:
			hp2=75,att2=7;
			break;
		default:
			goto in2;
			break;
	}
	while(1){
		if(hp<=0||hp2<=0){/*胜负*/
			if(hp<=0){
				winter1=0;
			}
			break;
		}
		/*正常*/
		if(zhou){
			i++;
		}
		if(i>=15){
			if(bh==2)
				hp2-=30;
			else 
				hp-=30;
			i=0;
			zhou=0;
		}
		if(lian){
			liani++;
		}
		if(liani>=100){
			lian=0,liani=0;
		}
		if(le){
			if(time(NULL)-le>=20){
				le=0;
			}
		}
		if(le2){
			if(time(NULL)-le2>=20){
				le2=0;
			}
		}
		for(int i=0;i<10;i++){
			for(int i1=0;i1<30;i1++){
				if(x1==i&&y1==i1){
					if(lian)cerr<<"①";
					else 	cerr<<"1 ";
				}else if(x2==i&&y2==i1){
					if(lian)cerr<<"②";
					else 	cerr<<"2 ";
				}else		cerr<<"  ";
			}
			cerr<<endl;
		}
		for(int i=0;i<30;i++){
			cerr<<"-";
		}
		cerr<<endl;
		cerr<<"玩家1:\n";
		cerr<<"hp="<<hp;
		cerr<<"\natt="<<att;
		cerr<<"\n英雄:";
		switch(bh){
			case 1:
				cerr<<"剑士\n";
				break;
			case 2:
				cerr<<"咒术师\n";
				break;
			case 3:
				cerr<<"链魂师\n";
				break;
			default:
				//TODO
				break;
		}
		cerr<<"技能:";
		switch(bh){
			case 1:
				cerr<<"劈砍\n";
				break;
			case 2:
				cerr<<"诅咒\n";
				break;
			case 3:
				cerr<<"1技能:链魂 2技能:魂破\n";
				break;
			default:
				//TODO
				break;
		}
		cerr<<"玩家2:\n";
		cerr<<"hp="<<hp2;
		cerr<<"\natt="<<att2;
		cerr<<"\n英雄:";
		switch(bh2){
			case 1:
				cerr<<"剑士\n";
				break;
			case 2:
				cerr<<"咒术师\n";
				break;
			case 3:
				cerr<<"链魂师\n";
				break;
			default:
				//TODO
				break;
		}
		cerr<<"技能:";
		switch(bh2){
			case 1:
				cerr<<"劈砍\n";
				break;
			case 2:
				cerr<<"诅咒\n";
				break;
			case 3:
				cerr<<"1技能:链魂 2技能:魂破\n";
				break;
			default:
				//TODO
				break;
		}
		if(le2){
			cerr<<"冷却中\n";
		}
		if(kd('W')){
			x1--;
		}
		if(kd('S')){
			x1++;
		}
		if(kd('A')){
			y1--;
		}
		if(kd('D')){
			y1++;
		}
		if(kd('1')){
			switch(bh){
				case 1:
					if(!le){
						if(juli(x1,y1,x2,y2)<=5){
							hp2-=25;
						if(juli(x1,y1,x2,y2)<=3){
								hp2-=25;
							}
						}
						le=time((NULL));
						}
					break;
				case 2:
					if(!le){
						zhou=1;
						le=time(NULL);
					}
					break;
				case 3:
					if(lian){
						lian=0;
						hp2-=30;
						le=time(NULL);
					}else{
						if(!le){
							lian=1;le=time(NULL);
							Sleep(500);
						}
					}
					break;
				default:
					//TODO
					break;
				}
		}
		if(kd('Q')){
			if(juli(x1,y1,x2,y2)<=5||(lian&&bh==3)){
				hp2-=att;
			}
		}
		if(kd(VK_UP)){
			x2--;
		}
		if(kd(VK_DOWN)){
			x2++;
		}
		if(kd(VK_LEFT)){
			y2--;
		}
		if(kd(VK_RIGHT)){
			y2++;
		}
		if(kd(VK_NUMPAD1)){
			switch(bh2){
				case 1:
					if(!le2){
						if(juli(x1,y1,x2,y2)<=5){
							hp-=25;
						if(juli(x1,y1,x2,y2)<=3){
								hp-=25;
							}
						}
						le2=time((NULL));
						}
					break;
				case 2:
					if(!le2){
						zhou=1;
						le2=time(NULL);
					}
					break;
				case 3:
					if(lian){
						lian=0;
						hp-=30;
						le2=time(NULL);
					}else{
						if(!le){
							lian=1;le2=time(NULL);
							Sleep(500);
						}
					}
					break;
				default:
					//TODO
					break;
				}
		}
		if(kd(VK_NUMPAD0)){
			if(juli(x1,y1,x2,y2)<=5||(lian&&bh2==3)){
				hp-=att2;
			}
		}
		if(shenying=="开"){
			Beep(1046,100);
		}
		cls;
	}
	Sleep(1000);
	return winter1;
}/*1.wasd赢 0.↑↓←→赢*/
int main(){
	string peise="黑白";
	while(1){
		if(vip){
			SetConsoleTextAttribute(GetStdHandle(STD_ERROR_HANDLE),14);
			cerr<<"您是尊贵的VIP用户\n";
			SetConsoleTextAttribute(GetStdHandle(STD_ERROR_HANDLE),7);
		}
		cerr<<"谁与争锋1.0.0.2版\n\n	";
		cerr<<"1.开始游戏\n	";
		cerr<<"2.游戏详情\n	";
		cerr<<"3.作者的话\n	";
		cerr<<"4.公告\n	";
		cerr<<"5.设置\n	";
		if(kd('1')||kd(VK_NUMPAD1)){
			Sleep(500);
			if(youxi()){
				cls;
				cerr<<"玩家1获胜!!!\n";
			}else{
				cls;
				cerr<<"玩家2获胜!!!\n";
			}
			pause;
		}
		if(kd('2')||kd(VK_NUMPAD2)){
			cls;
			Sleep(500);
			cerr<<"开始制作日期:2023.7.14\n";
			cerr<<"结束日期:2023.7.14\n";
			cerr<<"版本:1.0.0.1\n";
			cerr<<"作者:杨某一辰\n";
			pause;
			cls;
			cerr<<"玩家1:wasd移动\nq射击\n1放技能\n";
			cerr<<" 玩家2↑←↓→:移动\n数字0射击\n数字1放技能\n";
			pause;
		}
		if(kd('3')||kd(VK_NUMPAD3)){
			cls;
			Sleep(500);
			cerr<<"希望大家玩的开心!\n";
			cerr<<"作者:杨某一辰\n";
			cerr<<"1.进入作者主页 0.返回\n";
			int lsbl_kd_3;
			cin>>lsbl_kd_3;
			if(lsbl_kd_3){
				sys("start https://blog.csdn.net/langhat?type=lately");
			}
		}
		if(kd('4')||kd(VK_NUMPAD4)){
			cls;
			cerr<<"版本1.0.0.0(2023.7.11-2023.7.12)\n";
			cerr<<"无公告\n";
			cerr<<"版本1.0.0.1(2023.7.14)\n";
			cerr<<"更新主界面:公告,设置;更新 新角色:链魂师\n链魂师和咒术师一局只有一个人能用!!!(不然会出BUG!)\n";
			pause;
		}
		if(kd('5')||kd(VK_NUMPAD5)){
			cls;
			Sleep(500);
			cerr<<"1.配色:"<<peise<<"\n";
			cerr<<"2.声音:"<<shenying<<"\n";
			cerr<<"3.VIP设置"<<endl;
			int lsbl_kd5;
			cin>>lsbl_kd5;
			switch(lsbl_kd5){
				case 1:{
					cls;
					cerr<<"当前配色:"<<peise<<"\n";
					cerr<<"1.黑白 2.白黑 3.自定义\n";
					cin>>lsbl_kd5;
					switch(lsbl_kd5){
						case 1:
							sys("color 0f");
							peise="黑白";
							break;
						case 2:
							sys("color f0");
							peise="白黑";
							break;
						case 3:cls;{
							char th1,th2;
							bool th1b=0,th2b=0;
							cerr<<"0 = 黑色 8 = 灰色\n\
							1 = 蓝色 9 = 淡蓝色\n\
							2 = 绿色 A = 淡绿色\n\
							3 = 浅绿色 B = 淡浅绿色\
							4 = 红色 C = 淡红色\n\
							5 = 紫色 D = 淡紫色\n\
							6 = 黄色 E = 淡黄色\n\
							7 = 白色 F = 亮白色(大写!)\n";
							cerr<<"背景色:";
							cin>>lsbl_kd5;
							if(lsbl_kd5>='A'&&lsbl_kd5<='F'){
								th1=lsbl_kd5;
								th1b=1;
							}
							cerr<<"前景色:";
							int lsbl_kd5_case3;
							cin>>lsbl_kd5_case3;
							if(lsbl_kd5_case3>='A'&&lsbl_kd5_case3<='F'){
								th2=lsbl_kd5_case3;
								th2b=1;
							}
							char str[12]{};
							if(th1b){
								if(th2b){
									sprintf(str,"color %c%c",th1,th2);
								}else{
									sprintf(str,"color %c%d",th1,lsbl_kd5_case3);
								}
							}else{
								if(th2b){
									sprintf(str,"color %d%c",lsbl_kd5,th2);
								}else{
									sprintf(str,"color %d%d",lsbl_kd5,lsbl_kd5_case3);
								}
							}
							sys(str);
							peise="自定义";
							break;}
						default:
							//TODO
							break;
					}
					break;}
				case 2:{
					cerr<<"声音:"<<shenying<<endl;
					cerr<<"(y/n)";
					char ch=getch();
					if(ch=='y'||ch=='Y')
						shenying="开";
					else
						shenying="关";
					break;}
				case 3:{
					string name;
					cerr<<"你的名字:";
					cin>>name;
					if(name=="杨某一辰"||name=="留在记忆里的一抹残影"){
						cerr<<"您已开启VIP\n";
						vip=1;
					}
					break;}
				case 4:
					
					break;
				default:
					//TODO
					break;
			}
		}
		cls;
	}
}

更新主界面:公告,设置;更新 新角色:链魂师,

希望大家玩得开心!
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值