c++沙盒小游戏正式版2.0.0

引子

我们的沙盒游戏也是更新正式版了,来看看我们的游戏的性能吧!

本游戏2.0.0版本删除了从最开始的0.01(1代1.0)到1.9.5版本都一直存在的闪屏BUG,在完善更新过程中,增加了各种方块元素。同时,在1.8版本更新了大地图和地形等元素,在1.7和1.9、2.0版本均有树木元素,在1.9及后续版本的csh函数模块中含有树木刷新大小模块等系统。

运行效果

代码展示

以下是游戏代码:

#include <bits/stdc++.h>//dev专属  VC不用
#include <windows.h>
using namespace std;
bool axj(long long key);//侦测按键
void yanse(long long n);//颜色
const long long ESC = 27,
Enter = 13,
Tab = 9,//tab
Shang = 38,Xia = 40,Zuo = 37,You = 39,
Kong = ' ',//空格
z_sb = VK_LBUTTON,//鼠标左键
y_sb = VK_RBUTTON,//鼠标右键
Shift = VK_SHIFT,z_Shift = VK_LSHIFT,y_Shift = VK_RSHIFT,//SHIFT
Ctrl = VK_CONTROL,z_Ctrl = VK_LCONTROL,y_Ctrl = VK_RCONTROL,//Ctrl
Alt = VK_MENU,z_Alt = VK_LMENU,y_Alt = VK_RMENU,//alt
A = 'A',B = 'B',C = 'C',D = 'D',E = 'E',F = 'F',G = 'G',H = 'H',I = 'I',J = 'J',K = 'K',L = 'L',M = 'M',N = 'N',O = 'O',P = 'P',Q = 'Q',R = 'R',S = 'S',T = 'T',U = 'U',V = 'V',W = 'W',X = 'X',Y = 'Y',Z = 'Z';
bool axj(long long key){return (GetKeyState(key) < 0);}
void yanse(long long n){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n);return;}
string name;/*名字*/
long long sj,die,hp,dt[8000][256],sdf1 = 8,sdf2 = 8,fx,bag[100],szt,gzt,slsh,bjx,bjy,R_hand = 0,scc,sck;
void color(long long a){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
struct MOB{string u1,u2,d1,d2;long long hp,u1c,u2c,d1c,d2c;};
struct BLOCK{string u1,u2,d1,d2;long long ph,u1c,u2c,d1c,d2c;string name;};
BLOCK block[] ={//方块数据{第一像素,第二像素,第三像素,第四像素,碰撞箱,颜色号}
	{"  ","  ","  ","  ",0,0,0,0,0,"   空   "},//空气0
	{"■","■","■","■",1,120,120,120,120,"  石头  "},//石头1
	{"▓","▓","▓","▓",0,25,25,25,25," 水方块 "},//水2
	{"■","■","■","■",1,15,15,15,15,"  圆石  "},//圆石3
	{"■","■","■","■",1,162,162,102,102,"  草块  "},//草4
	{"■","■","■","■",1,102,102,102,102,"  土块  "},//土5
	{"■","■","■","■",0,68,68,68,68,"岩浆方块"},//岩浆6
	{"▓","▓","▓","▓",1,110,110,110,110,"松树原木"},//木头7
	{"▓","▓","▓","▓",0,147,147,147,147,"松树树叶"},//树叶8
	{"■","■","■","■",1,248,143,143,248," 深板岩 "},//深板岩9
	{"▓","▓","▓","▓",0,15,15,15,15," 细雪块 "},//雪10
	{"▓","▓","▓","▓",1,120,120,120,120,"基岩方块"},//基岩11
	{"  ","  ","__","__",0,15,15,15,15,"  薄雪  "},//雪12
	{"▓","▓","▓","▓",1,110,110,110,110,"果树原木"},//木头13
	{"▓","▓","▓","▓",0,162,162,162,162,"果树树叶"},//树叶14
};
void muzic_die(){ //死亡画面
	cout << "   你死了\n" << "   " << name << "死于:";
	if(die == 1){cout << "岩浆\n";}else if(die == 4){cout << name<<"从高空一跃而下\n";}else{cout << "死了\n";}
	Sleep(1000); hp = 10;dt[sdf1][sdf2] = 0;}
void gotoxy(int y,int x){  COORD pos;  pos.X=x;  pos.Y=y;  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } //?行?列
void sc(){ //输出
	int flag1 = -1,flag2;
	for(long long i = sdf1 - 7; i < sdf1 + 7; i++){
		flag1 ++;
		flag2 = -2;
		for(long long j = sdf2 - 7; j < sdf2 + 7; j++){
			flag2 += 2;
			gotoxy(flag1 * 2 - 1,flag2);
			if(i == sdf1&&j == sdf2){
				color(15);
				if(fx == 'w'){cout << "上";flag2 += 2;gotoxy(flag1 * 2 - 1,flag2);cout << "玩";
				}else if(fx == 's'){cout << "下";flag2 += 2;gotoxy(flag1 * 2 - 1,flag2);cout << "玩";
				}else if(fx == 'a'){cout << "左";flag2 += 2;gotoxy(flag1 * 2 - 1,flag2);cout << "玩";
				}else if(fx == 'd'){cout << "右";flag2 += 2;gotoxy(flag1 * 2 - 1,flag2);cout << "玩";}
			}else{
				if(dt[i][j] == 4 && dt[i - 1][j] == 12){
					color(127);
					cout << block[dt[i][j]].u1;flag2 += 2;gotoxy(flag1 * 2 - 1,flag2);
					color(127);
					cout << block[dt[i][j]].u2;
				}else{
					color(block[dt[i][j]].u1c);
					cout << block[dt[i][j]].u1;flag2 += 2;gotoxy(flag1 * 2 - 1,flag2);
					color(block[dt[i][j]].u2c);
					cout << block[dt[i][j]].u2;
				}}}cout << endl;flag2 = -2;
		for(long long j = sdf2 - 7; j < sdf2 + 7; j++){
		flag2 += 2;
		gotoxy(flag1 * 2,flag2);
			if(i == sdf1 && j == sdf2){color(15);
				if(fx == 'w'){cout << "↑";flag2 += 2;gotoxy(flag1 * 2,flag2);cout << "家";
				}else if(fx == 's'){cout << "↓";flag2 += 2;gotoxy(flag1 * 2,flag2);cout << "家";
				}else if(fx == 'a'){cout << "←";flag2 += 2;gotoxy(flag1 * 2,flag2);cout << "家";
				}else if(fx == 'd'){cout << "→";flag2 += 2;gotoxy(flag1 * 2,flag2);cout << "家";}
			}else{
				color(block[dt[i][j]].d1c);
				cout << block[dt[i][j]].d1;flag2 += 2;gotoxy(flag1 * 2,flag2);
				color(block[dt[i][j]].d2c);
				cout<< block[dt[i][j]].d2;
			}}cout << endl;}
	if(hp < 1){muzic_die();}
	for(long long i = 0; i <= hp; i++){gotoxy(flag1 * 2 + 1,i * 2);color(4);cout << "▓";}
	for(long long i = hp + 1; i < 10; i++){gotoxy(flag1 * 2 + 1,i * 2);color(8);cout << "▓";}
	color(15);cout << endl;
	for(long long bag_i = 0; bag_i < 100; bag_i++){
		if(bag[bag_i] > 0){
			cout << block[bag_i].name << 'x' << bag[bag_i];
		}
	}
}
void dz(){
	if(axj(W)){
		if(block[dt[sdf1 - 1][sdf2]].ph == 0 && sdf1 != 0){
			if(block[dt[sdf1 + 1][sdf2]].ph == 0){
				fx = 'w';
				sdf1 ++;
				sc();
			}else{
			sdf1 -= 2;
			fx = 'w';slsh = 0;sc();	
			}
		}else if(fx != 'w'){
			fx = 'w';
			sc();}
	}else if(axj(S)){
		if(block[dt[sdf1 + 1][sdf2]].ph == 0 && sdf1 != 256){
			sdf1++; sc();}
		if(fx != 's'){
			fx = 's'; sc();}
	}else if(axj(A)){
		if(block[dt[sdf1][sdf2 - 1]].ph == 0 && sdf2 != 0){
			sdf2--;
			fx = 'a';
			sc();
			if(block[dt[sdf1 + 1][sdf2]].ph == 0){sdf1 ++;sc();}
		}else if(fx != 'a'){
			fx = 'a';
			sc();}
	}else if(axj(D)){
		if(block[dt[sdf1][sdf2 + 1]].ph == 0 && sdf2 != 8000){
			sdf2++;
			fx = 'd';
			sc();
			if(block[dt[sdf1 + 1][sdf2]].ph == 0){sdf1 ++;sc();}
		}else if(fx != 'd'){
			fx = 'd'; sc();}
	}else if(axj(z_sb)){
		if(fx == 'w'){
			bjx = sdf1 - 1;
			bjy = sdf2;
		}else if(fx == 's'){
			bjx = sdf1 + 1;
			bjy = sdf2;
		}else if(fx == 'a'){
			bjx = sdf1;
			bjy = sdf2 - 1;
		}else if(fx == 'd'){
			bjx = sdf1;
			bjy = sdf2 + 1;
		}
		if(dt[bjx][bjy] != 0&&dt[bjx][bjy] != 2&&dt[bjx][bjy]!=6&&bjx!=14&&bjx!=-1&&bjy!=-1&&bjy!=31&&dt[bjx][bjy]!=11){
			if(fx=='s'){
				bag[dt[bjx][bjy]]++;
				dt[bjx][bjy]=0;
				 sc();
			}else if(fx=='w'){
				bag[dt[bjx][bjy]]++;
				dt[bjx][bjy]=0;
				 
				sc();
			}else if(fx=='a'){
				bag[dt[bjx][bjy]]++;
				dt[bjx][bjy]=0;
				 sc();
			}else if(fx=='d'){
				bag[dt[bjx][bjy]]++;
				dt[bjx][bjy]=0;
				 sc();
			}
		}else{
			for(long long i=1; i<=4; i++){
				if(fx=='w'){
					bjx--;
				}else if(fx=='s'){
					bjx++;
				}else if(fx=='a'){
					bjy--;
				}else if(fx=='d'){
					bjy++;
				}
				if(dt[bjx][bjy]!=0&&dt[bjx][bjy]!=2&&dt[bjx][bjy]!=6){
					bag[dt[bjx][bjy]]++;
					dt[bjx][bjy]=0;
					 sc();break;
				}}}if(block[dt[sdf1 + 1][sdf2]].ph == 0){sdf1 ++;sc();}
	}else if(axj(y_sb)){
		if(fx=='w'){
			dt[sdf1-1][sdf2]=3;
		}else if(fx=='s'){
			dt[sdf1+1][sdf2]=3;
		}else if(fx=='a'){
			dt[sdf1][sdf2-1]=3;
		}else if(fx=='d'){
			dt[sdf1][sdf2+1]=3;
		}
		 sc();}}
long long suiji(long long start, long long end){
	long long dis = end - start;
	return start + dis * (rand() / (RAND_MAX + 1.0));
}
void csh(){
	system("mode con cols=120 lines=46");system("title YUTU制作——沙盒游戏");
	 long long flag, flag2,lflag;
	flag = suiji(40,100);
	for(long long i = 0;i < 8000;i++){for(long long j = 0;j < 256;j++){dt[j][i] = 0;}}
	for(long long i = 0;i < 8000;i++){
		for(long long j = 0;j < 256;j++){if(dt[j][i] != 8 || j < lflag - 6)dt[j][i] = 0;}
		dt[flag][i] = 4;
		if(flag < 55){dt[flag - 1][i] = 12;}
		if(suiji(1,30) == 1){
			if(flag < 54){
				dt[flag - 1][i] = 7;dt[flag - 1 - 1][i] = 7;dt[flag - 1 - 2][i] = 7;dt[flag - 1 - 3][i] = 7;dt[flag - 1 - 2][i - 1] = 8;dt[flag - 1 - 2][i + 1] = 8;dt[flag - 1 - 2][i + 2] = 8;dt[flag - 1 - 2][i - 2] = 8;dt[flag - 1 - 3][i - 1] = 8;dt[flag - 1 - 3][i + 1] = 8;dt[flag - 1 - 4][i] = 8;
			}else{
				dt[flag - 1][i] = 13;dt[flag - 1 - 1][i] = 13;dt[flag - 1 - 2][i] = 13;dt[flag - 1 - 3][i] = 13;dt[flag - 1 - 2][i - 1] = 14;dt[flag - 1 - 2][i + 1] = 14;dt[flag - 1 - 2][i + 2] = 14;dt[flag - 1 - 2][i - 2] = 14;dt[flag - 1 - 3][i - 1] = 14;dt[flag - 1 - 3][i + 1] = 14;dt[flag - 1 - 4][i] = 14;
			}
		}else if(suiji(1,20) == 1){
			if(flag < 54){dt[flag - 1][i] = 7;dt[flag - 1 - 1][i] = 7;dt[flag - 1 - 1][i - 1] = 8;dt[flag - 1 - 1][i + 1] = 8;dt[flag - 1 - 2][i] = 8;
			}else{
				dt[flag - 1][i] = 13;dt[flag - 1 - 1][i] = 13;dt[flag - 1 - 1][i - 1] = 14;dt[flag - 1 - 1][i + 1] = 14;dt[flag - 1 - 2][i] = 14;}}
		if(i == 4000){sdf1 = 62 ;sdf2 = 4000;}
		flag2 = suiji(0,5) + suiji(1,3);
		for(long long j = 1;j < flag2;j++){dt[flag + j][i] = 5;}
		for(long long j = flag2;j < 256;j++){
			if(suiji(0,50) == 0){dt[flag + j][i] = 6;
			}else if(suiji(0,25) == 0){dt[flag + j][i] = 2;
			}else{dt[flag + j][i] = 1;}}
		lflag = flag;
		flag += suiji(0,5) - 2;
		if(flag > 100){
			flag -= 4;}
		if(flag < 40){
			flag += 4;}
	}
}
int main(){
	CONSOLE_CURSOR_INFO cursor;
	cursor.bVisible = FALSE;
	cursor.dwSize = sizeof(cursor);
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorInfo(handle, &cursor);
	HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
	DWORD mode;
	GetConsoleMode(hStdin, &mode);
	mode &= ~ENABLE_QUICK_EDIT_MODE;
	SetConsoleMode(hStdin, mode); 
	yanse(15);cout<<"你的名字叫什么?\n";cin>>name;
	 
	sck = 7;
	csh();
	gotoxy(31,0);
	cout<<"按下W向上移动,按下A向左移动,按下S向下移动,按下D向右移动,";
	sc();
	while(1){
		if(hp==0)muzic_die();
		dz();
		if(gzt==15-1){
			if(dt[sdf1][sdf2] == 6){
				hp-=0.1;
				if(hp == hp / 1 * 1){
					sc();
				}
			}
			if(block[dt[sdf1 + 1][sdf2]].ph == 0){
				sdf1++;
				slsh++;
				if(dt[sdf1 + 1][sdf2] == 2||dt[sdf1 + 1][sdf2] == 6){
					slsh = 0;
				}
				 sc();
			}else{
				if(slsh > 2){
					hp -= slsh - 2;
					slsh = 0;
					die = 4;
					if(hp == hp / 1 * 1){
						 sc();}
				}else{
					slsh = 0;
				}}}
		gotoxy(32,0);cout << "x=" << sdf1 << ",y=" << sdf2; 
		sj++;sj %= 240;gzt++;gzt %= 125;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值