贪吃蛇(超级粗糙)
  • 板块灌水区
  • 楼主zhouhaotian
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/7/29 08:07
  • 上次更新2023/10/27 17:55:56
查看原帖
贪吃蛇(超级粗糙)
587236
zhouhaotian楼主2022/7/29 08:07

我尝试复刻贪吃蛇,但...... 有比较完美代码的,可以告诉我一下吗?

我的超级烂Code:

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
#define getkey(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000)?1:0)
int ti(float a) {return ((int)(a*10+5))/10;}
void Setpos(float x,float y){COORD pos;pos.X=ti(y*4)/2;pos.Y=ti(x);SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}
void Color(int a){if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE);if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE);if(a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);if(a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);if(a==13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);if(a==14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);}
int a[35][35];
int m[100][2]={0,0,1,1,1,2,1,3},f=1,snl=3,fa=1;
int fx[5]={0,0,1,-1,0};
int fy[5]={0,1,0,0,-1};
int h1=1,h2=3;
int main(){
	int n,i,j,k;
	system("mode con cols=60 lines=30");
	a[1][1]=1;
	a[1][2]=1;
	a[1][3]=1;
	srand(time(0));
	while(1){
		Setpos(0,0);
		for(i=1;i<=30;i++)
		for(j=1;j<=30;j++)if(a[i][j]==1)Color(2),cout<<"■";else if(a[i][j]==2)Color(8),cout<<"■";else Color(0),cout<<"  ";
		int X=rand()%(27-3+1)+3,Y=rand()%(27-3+1)+3;
		if(fa){
			a[X][Y]=2;
		}
		
		h1+=fx[f];
		h2+=fy[f];
		if(h1>30||h1<1||h2>30||h2<1)break;
		if(a[h1][h2]==1)break;
		if(a[h1][h2]==2){
			snl++;
			fa=1;
			m[snl][0]=h1;
			m[snl][1]=h2;
		}else fa=0;
		a[m[1][0]][m[1][1]]=0;
		for(i=1;i<snl;i++){
			m[i][0]=m[i+1][0];
			m[i][1]=m[i+1][1];
		}
		m[i][0]=h1;
		m[i][1]=h2;
		for(i=1;i<=snl;i++){
			a[m[i][0]][m[i][1]]=1;
		}
		if(getkey('W')){
			if(f!=2)
			f=3;
		}else if(getkey('A')){
			if(f!=1)
			f=4;
		}else if(getkey('S')){
			if(f!=3)
			f=2;
		}else if(getkey('D')){
			if(f!=4)
			f=1;
		}
		Sleep(10);
	}
	string f="Game Over!";
	system("cls");
	Setpos(13,17-f.size()/2);
	Color(8);
	for(i=0;i<f.size();i++){
		cout<<f[i];
		Sleep(300);
	}
	while(1);
	return 0;
}

2022/7/29 08:07
加载中...