专栏文章

easyx2048

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipyojle
此快照首次捕获于
2025/12/03 20:06
3 个月前
此快照最后确认于
2025/12/03 20:06
3 个月前
查看原文
CPP
#include<bits/stdc++.h>
#include<easyx.h>
#include<graphics.h>
#define int long long
using namespace std;
int a[6][6]={0};
bool p[6][6]={0};
int fx[8]={-1,1,0,0,0,0,-1,1};
int point=0,fx_=0,wx=0,wy=0;
void jz(int x,int y,LPCTSTR s,int daxiao);
void csh();
bool sx();
signed main(){
	srand(time(NULL));
	initgraph(600,600,1);
//	csh();
	sx();
	setbkmode(TRANSPARENT);
	while(1){
		TCHAR atchar[1000];
		_stprintf(atchar,_T("%d"),point);
		outtextxy(300-textwidth(atchar)/2,25,atchar);
		
		BeginBatchDraw();
		setlinestyle(PS_SOLID,5);
		for(int i=1;i<=5;i++){
			line(100,i*100,500,i*100);
		}
		for(int i=1;i<=5;i++){
			line(i*100,100,i*100,500);
		}
		for(int i=1;i<=4;i++){
			for(int j=1;j<=4;j++){
				switch(a[i][j]){
					case 1:{
						setfillcolor(RGB(255,150,150));
						break;
					}
					case 2:{
						setfillcolor(RGB(253,173,125));
						break;
					}
					case 4:{
						setfillcolor(RGB(252,239,126));
						break;
					}
					case 8:{
						setfillcolor(RGB(153,254,124));
						break;
					}
					case 16:{
						setfillcolor(RGB(172,253,226));
						break;
					}
					case 32:{
						setfillcolor(RGB(122,115,253));
						break;
					}
					case 64:{
						setfillcolor(RGB(193,122,245));
						break;
					}
					case 128:{
						setfillcolor(RGB(247,166,240));
						break;
					}
					case 256:{
						setfillcolor(RGB(0,128,64));
						break;
					}
					case 512:{
						setfillcolor(RGB(128,64,0));
						break;
					}
					case 1024:{
						setfillcolor(RGB(128,128,128));
						break;
					}
					case 2048:{
						setfillcolor(RGB(10,0,86));
						break;
					}
					case 4096:{
						setfillcolor(RGB(11,45,14));
						break;
					}
					case 8192:{
						setfillcolor(RGB(121,24,65));
						break;
					}
					case 16384:{
						setfillcolor(RGB(89,36,92));
						break;
					}
					case 32768:{
						setfillcolor(RGB(16,94,13));
						break;
					}
				}
				if(a[i][j]!=0){
					TCHAR tchar[1000];
					_stprintf(tchar,_T("%d"),a[i][j]);
					int td=a[i][j],w=0;
					while(td){
						td/=10;
						w++; 
					}
					solidrectangle(j*100+4,i*100+4,j*100+100-4,i*100+100-4);
					jz(j*100+2,i*100+2,tchar,65-6*w);
				}
			}
		}
		ExMessage msg={0};
		peekmessage(&msg,EX_KEY);
		if(msg.message==WM_KEYDOWN&&(msg.vkcode=='W'||msg.vkcode=='A'||msg.vkcode=='S'||msg.vkcode=='D')){
			memset(p,0,sizeof(p));
			switch(msg.vkcode){
				case 'W':{
					fx_=0;
					break;
				}
				case 'S':{
					fx_=1;
					break;
				}
				case 'A':{
					fx_=2;
					break;
				}
				case 'D':{
					fx_=3;
					break;
				}
			}
			for(int c=1;c<=4;c++){
				for(int i=1;i<=4;i++){
					for(int j=1;j<=4;j++){
						int u=i+fx[fx_],v=j+fx[4+fx_];
						if(a[u][v]==0&&u>=1&&u<=4&&v>=1&&v<=4){
							a[u][v]=a[i][j];
							a[i][j]=0;
						}
					}
				}
			}
			for(int i=1;i<=4;i++){
				for(int j=1;j<=4;j++){
					int u=i+fx[fx_],v=j+fx[4+fx_];
					if(a[u][v]==a[i][j]&&a[i][j]!=0&&p[i][j]==0){
						a[u][v]=a[i][j]*2;
						point+=a[i][j];
						a[i][j]=0;
						p[u][v]=1;
					}
				}
			}
			for(int c=1;c<=4;c++){
				for(int i=1;i<=4;i++){
					for(int j=1;j<=4;j++){
						int u=i+fx[fx_],v=j+fx[4+fx_];
						if(a[u][v]==0&&u>=1&&u<=4&&v>=1&&v<=4){
							a[u][v]=a[i][j];
							a[i][j]=0;
						}
					}
				}
			}
			if(sx()==0){
				EndBatchDraw();
				_sleep(3000);
				return 0;
			}
		}
		EndBatchDraw();
		cleardevice();
	} 
}
void jz(int x,int y,LPCTSTR jz_s,int daxiao){
	settextstyle(daxiao,0,"楷体");
	int w=textwidth(jz_s),h=textheight(jz_s);
	outtextxy(x-w/2+50,y-h/2+50,jz_s);
}
void csh(){
	int t=0;
	for(int i=1;i<=4;i++){
		for(int j=1;j<=4;j++){
			a[i][j]=pow(2,t++);
		}
	} 
}
bool sx(){
	bool p=0;
	for(int ii=1;ii<=4;ii++){
		for(int jj=1;jj<=4;jj++){
			if(a[ii][jj]==0){
				p=1;
				break;
			}
		}
	}
	if(p==0){
		return false;
	}
	wx=0,wy=0;
	while((wx==0&&wy==0)||a[wx][wy]!=0){
		wx=rand()%4+1,wy=rand()%4+1;
	}
	int xixi=1+rand()%100;
	if(xixi<=90){
		a[wx][wy]=1;
	}else if(xixi>=91&&xixi<=98){
		a[wx][wy]=2;
	}else{
		a[wx][wy]=4;
	}
	return true;
}
//原创:cyx1234 

评论

0 条评论,欢迎与作者交流。

正在加载评论...