//D_________d(Wei_wei_)
#include<bits/stdc++.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
#include<fstream>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
using namespace std;
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
void locate(int x,int y)
{
coord.X=y;
coord.Y=x;
SetConsoleCursorPosition(hout,coord);
};
void hide()
{
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(hout, &cursor_info);
}
void show()
{
CONSOLE_CURSOR_INFO cursor_info={1,1};
SetConsoleCursorInfo(hout, &cursor_info);
}
int main();
int mp[30][30];
bool mpadd[30][30];
int direct[5][2]={{0,-1},{-1,0},{0,1},{1,0},{0,0}};
bool ifadd;
int divideone;
void ADD(){
bool addd=0;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(mp[i*4-2][j*6-3]<=0){addd=1;break;}
}
}
int land_x=rand()%4+1,land_y=rand()%4+1;
int deci24=(rand()%2+1);
while(mp[land_x*4-2][land_y*6-3]!=0&&addd==1)
{
land_x=rand()%4+1,land_y=rand()%4+1;
}
if(mp[land_x*4-2][land_y*6-3]==0)
{
mp[land_x*4-2][land_y*6-3]=deci24;
locate(land_x*4-2,land_y*6-3),printf("%d",deci24);
}
}
void MOVE(){
rein:
int lshx=getch(),dir;
if(lshx==224)
{
lshx=getch();
switch(lshx)
{
case 72:dir=0;break;
case 75:dir=1;break;
case 80:dir=2;break;
case 77:dir=3;break;
}
}
else goto rein;
bool ifrun=1;
int runtime2=0;
while(ifrun==1)
{
ifrun=0;
runtime2++;
for(int i=2;i<=14;i++){
for(int j=3;j<=21;j++){
if(mpadd[i][j]==0){
int k=mp[i+4*direct[dir][1]][j+6*direct[dir][0]];
bool canornot=1;
if(i+4*direct[dir][1]>=0&&j+6*direct[dir][0]>=0){
if(k>0)canornot=0;
}
if(canornot==1&&mp[i][j]!=-1&&mp[i][j]!=0&&i+direct[dir][1]>=2&&i+direct[dir][1]<=14&&j+direct[dir][0]>=3&&j+direct[dir][0]<=21){
ifrun=1;
mp[i+direct[dir][1]][j+direct[dir][0]]=mp[i][j];
mp[i][j]=0;
locate(i,j),putchar(' ');
locate(i+direct[dir][1],j+direct[dir][0]),printf("%d",mp[i+direct[dir][1]][j+direct[dir][0]]%10);
if(dir>=2)mpadd[i+direct[dir][1]][j+direct[dir][0]]=1;
}
if(i+4*direct[dir][1]>=0&&j+6*direct[dir][0]>=0&&mp[i][j]>0&&k==mp[i][j]){
ifrun=1;
mp[i+4*direct[dir][1]][j+6*direct[dir][0]]++;
mp[i+4*direct[dir][1]][j+6*direct[dir][0]]+=divideone;
divideone+=10;
mp[i][j]=0;
locate(i,j),putchar(' ');
locate(i+4*direct[dir][1],j+6*direct[dir][0]),printf("%d",mp[i+4*direct[dir][1]][j+6*direct[dir][0]]%10);
}
}
else{
mpadd[i][j]=0;
}
}
}
if(ifrun==1)
Sleep(20);
}
if(runtime2==1&&ifrun==0)
{
ifadd=0;
}
}
void JUDGE(){
bool failure=1;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
if(mp[i*4-2][j*6-3]<=0){failure=0;}
if(i>1)
if(mp[i*4-2][j*6-3]==mp[(i-1)*4-2][j*6-3]){failure=0;}
if(j>1)
if(mp[i*4-2][j*6-3]==mp[i*4-2][(j-1)*6-3]){failure=0;}
if(i<4)
if(mp[i*4-2][j*6-3]==mp[(i+1)*4-2][j*6-3]){failure=0;}
if(j<4)
if(mp[i*4-2][j*6-3]==mp[i*4-2][(j+1)*6-3]){failure=0;}
if(mp[i*4-2][j*6-3]>0&&mp[i*4-2][j*6-3]%10==0)
{
locate(17,0),printf("win");
int lsh=getch();
while(lsh!=' '){
lsh=getch();
}
main();
}
if(mp[i*4-2][j*6-3]>10)
{
mp[i*4-2][j*6-3]%=10;
}
}
}
if(failure==1){
locate(17,0),printf("failure");
getch();
main();
}
}
void main1(){
while(1){
divideone=10;
if(ifadd==1)
ADD();
else ifadd=1;
MOVE();
JUDGE();
}
}
int main(){
system("mode con cols=25 lines=18");
system("cls");
srand(time(0));
hide();
ifadd=1;
for(int i=0;i<=16;i++){
for(int j=0;j<=24;j++){
if(i%4==0&&j%6!=3||j%6==0&&i%4!=2||i==0||j==0||i==16||j==24)mp[i][j]=-1,locate(i,j),putchar('+');
else mp[i][j]=0;
}
}
locate(17,0),printf(" ");
main1();
return 0;
}
对不起,这才是2048(持续更新)
于 2024-04-06 23:05:25 首次发布