#include<iostream>
#include<queue>
#include <windows.h>
#include <conio.h>
#include <mmsystem.h>
#include<time.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
HANDLE hOut;
COORD pos= {0, 0};
struct Point
{
int x,y;
Point(int xx,int yy)
{
x=xx;
y=yy;
}
Point(){}
};
void drawFrame()
{
printf("┌───┬───┬───┬───┐\n");
printf("│ │ │ │ │\n");
printf("│ │ │ │ │\n");
printf("│ │ │ │ │\n");
printf("├───┼───┼───┼───┤\n");
printf("│ │ │ │ │\n");
printf("│ │ │ │ │\n");
printf("│ │ │ │ │\n");
printf("├───┼───┼───┼───┤\n");
printf("│ │ │ │ │\n");
printf("│ │ │ │ │\n");
printf("│ │ │ │ │\n");
printf("├───┼───┼───┼───┤\n");
printf("│ │ │ │ │\n");
printf("│ │ │ │ │\n");
printf("│ │ │ │ │\n");
printf("└───┴───┴───┴───┘\n");
printf("W--上\n");
printf("A--左\n");
printf("S--下\n");
printf("D--右\n");
}
void init(int map[][4])
{
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
map[i][j]=0;
}
void down(int map[][4],int& score)
{
// printf("down\n");
int i,j,k;
for(i=0;i<4;i++)
{
queue<int>qu;
for(j=3;j>=0;j--)
{
if(map[j][i]!=0)
{
qu.push(map[j][i]);
map[j][i]=0;
}
}
j=3;
while(!qu.empty())
{
map[j--][i]=qu.front();
qu.pop();
}
for(k=3;k>0;k--)
{
if(map[k][i]==map[k-1][i])
{
map[k][i]=map[k][i]*2;
map[k-1][i]=0;
score+=map[k][i];
}
}
for(k=3;k>=0;k--)
{
if(map[k][i]!=0)
{
qu.push(map[k][i]);
map[k][i]=0;
}
}
j=3;
while(!qu.empty())
{
map[j--][i]=qu.front();
qu.pop();
}
}
}
void up(int map[][4],int& score)
{// printf("up\n");
int i,j,k;
for( i=0;i<4;i++)
{
queue<int>qu;
for( j=0;j<4;j++)
{
if(map[j][i]!=0)
{
qu.push(map[j][i]);
map[j][i]=0;
}
}
j=0;
while(!qu.empty())
{
map[j++][i]=qu.front();
qu.pop();
}
for( k=0;k<3;k++)
{
if(map[k][i]==map[k+1][i])
{
map[k][i]=map[k][i]*2;
map[k+1][i]=0;
score+=map[k][i];
}
}
for( k=0;k<4;k++)
{
if(map[k][i]!=0)
{
qu.push(map[k][i]);
map[k][i]=0;
}
}
j=0;
while(!qu.empty())
{
map[j++][i]=qu.front();
qu.pop();
}
}
}
void right(int map[][4],int& score)
{// printf("right\n");
int i,j,k;
for( i=0;i<4;i++)
{
queue<int>qu;
for( j=3;j>=0;j--)
{
if(map[i][j]!=0)
{
qu.push(map[i][j]);
map[i][j]=0;
}
}
j=3;
while(!qu.empty())
{
map[i][j--]=qu.front();
qu.pop();
}
for( k=3;k>0;k--)
{
if(map[i][k]==map[i][k-1])
{
// score+=map[i][k];
map[i][k]=map[i][k]*2;
map[i][k-1]=0;
score+=map[i][k];
}
}
for( k=3;k>=0;k--)
{
if(map[i][k]!=0)
{
qu.push(map[i][k]);
map[i][k]=0;
}
}
j=3;
while(!qu.empty())
{
map[i][j--]=qu.front();
qu.pop();
}
}
}
void left(int map[][4],int& score)
{// printf("left\n");
int i,j,k;
for( i=0;i<4;i++)
{
queue<int>qu;
for( j=0;j<4;j++)
{
if(map[i][j]!=0)
{
qu.push(map[i][j]);
map[i][j]=0;
}
}
j=0;
while(!qu.empty())
{
map[i][j++]=qu.front();
qu.pop();
}
for( k=0;k<3;k++)
{
if(map[i][k]==map[i][k+1])
{
map[i][k]=map[i][k]*2;
map[i][k+1]=0;
score+=map[i][k];
}
}
for( k=0;k<4;k++)
{
if(map[i][k]!=0)
{
qu.push(map[i][k]);
map[i][k]=0;
}
}
j=0;
while(!qu.empty())
{
map[i][j++]=qu.front();
qu.pop();
}
}
}
bool addRandBox(int map[][4])
{
Point pointList[16];
int p=0;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(map[i][j]==0)
{
pointList[p++]=Point(i, j);
}
}
}
if(p==0)
{
return false;
}
int place=rand()%p;
Point point=pointList[place];
map[point.x][point.y]=2;
return true;
}
void show(int map[][4])
{
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
pos.X=j*8+2;
pos.Y=i*4+2;
SetConsoleCursorPosition(hOut, pos);
printf(" ");
if(map[i][j]==0)
{
continue;
}
SetConsoleCursorPosition(hOut, pos);
printf("%d",map[i][j]);
}
}
}
void flushScore(int score)
{
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
pos.X=35;
pos.Y=3;
SetConsoleCursorPosition(hOut, pos);
printf("Score: %d ",score);
}
int main()
{
int map[4][4];
srand(time(0));
while(1)
{
int score=0;
drawFrame();
init(map);
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
bool life=true;
while(life)
{
char ch=getch();
switch(ch)
{
case'a':;
case'A':left(map,score);break;
case'w':;
case'W':up(map,score);break;
case'd':;
case'D':right(map,score);break;
case's':;
case'S':down(map,score);break;
}
if(addRandBox(map)==false)
life=false;
show(map);
flushScore(score);
}
pos.X=0;
pos.Y=7;
SetConsoleCursorPosition(hOut, pos);
printf("GAME OVER PLEASE PUSH ANY KEY TO CONTINUE...");
getch();
system("cls");
}
}
控制台 2048
最新推荐文章于 2022-05-22 12:01:15 发布