用C++实现2048

编程入门 行业动态 更新时间:2024-10-09 21:24:44

用C++实现2048

用C++实现2048

没事做了一个小程序2048游戏,可以试一下 作者博客
#include<iostream>
#include<cstdio>
#include<conio.h>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;
int mp[4][4],score;
bool map[4][4];
bool cal[4][4];
void DeBug()
{for(int i=0;i<4;++i){for(int j=0;j<4;++j)cout<<map[i][j]<<" ";cout<<endl;}cout<<endl;for(int i=0;i<4;++i){for(int j=0;j<4;++j)cout<<mp[i][j]<<" ";cout<<endl;}
}
void print()
{for(int j=0;j<4;++j)printf("----");printf("\n");for(int i=0;i<4;++i){for(int j=0;j<4;++j){printf("|");if(map[i][j]){if(score<mp[i][j])score=mp[i][j];printf("%3d",mp[i][j]);}elseprintf("   ");}printf("|\n");for(int j=0;j<4;++j)printf("----");printf("\n");}printf("w : up  s : down  a : left  d : right\n");printf("push 'r' to start a new game\npush 'e' to exit game\n");
}
void MoveUp()
{bool flag;for(int i=1;i<4;++i){for(int j=0;j<4;++j){if(!map[i][j])continue;flag=false;int pos=i;for(int k=i-1;k>=0;--k){if(!map[k][j]){pos=k;continue;}if((mp[k][j]==mp[i][j])&&(!cal[k][j])){mp[k][j]+=mp[i][j];cal[k][j]=true;flag=true;map[i][j]=false;}elsebreak;}if(!flag){mp[pos][j]=mp[i][j];map[i][j]=false;map[pos][j]=true;}}}
}
void MoveDown()
{bool flag;for(int i=2;i>=0;--i){for(int j=0;j<4;++j){if(!map[i][j])continue;flag=false;int pos=i;for(int k=i+1;k<4;++k){if(!map[k][j]){pos=k;continue;}if((mp[k][j]==mp[i][j])&&(!cal[k][j])){mp[k][j]+=mp[i][j];cal[k][j]=true;flag=true;map[i][j]=false;}elsebreak;}if(!flag){mp[pos][j]=mp[i][j];map[i][j]=false;map[pos][j]=true;}}}
}
void MoveRight()
{bool flag;for(int i=0;i<4;++i){for(int j=2;j>=0;--j){if(!map[i][j])continue;flag=false;int pos=j;for(int k=j+1;k<4;++k){if(!map[i][k]){pos=k;continue;}if((mp[i][k]==mp[i][j])&&(!cal[i][k])){mp[i][k]+=mp[i][j];cal[i][k]=true;flag=true;map[i][j]=false;}elsebreak;}if(!flag){mp[i][pos]=mp[i][j];map[i][j]=false;map[i][pos]=true;}}}
}
void MoveLeft()
{bool flag;for(int i=0;i<4;++i){for(int j=1;j<4;++j){if(!map[i][j])continue;flag=false;int pos=j;for(int k=j-1;k>=0;--k){if(!map[i][k]){pos=k;continue;}if((mp[i][k]==mp[i][j])&&(!cal[i][k])){mp[i][k]+=mp[i][j];cal[i][k]=true;flag=true;map[i][j]=false;}elsebreak;}if(!flag){mp[i][pos]=mp[i][j];map[i][j]=false;map[i][pos]=true;}}}
}
void Init()
{srand(time(NULL));int x,y,v,now=0;for(int i=0;i<4;++i)for(int j=0;j<4;++j)if(!map[i][j])now++;if(now==0)return;int cnt=rand()%now,n=0;bool flag=false;for(int i=0;i<4;++i){flag=false;for(int j=0;j<4;++j)if(!map[i][j]){if(cnt==n){x=i;y=j;flag=true;break;}elsen++;}if(flag)break;}v=rand()%2;if(v)v=4;elsev=2;mp[x][y]=v;map[x][y]=true;
}
bool gameover()
{for(int i=0;i<4;++i){for(int j=0;j<4;++j){if(!map[i][j])return false;if(i>0){if(mp[i-1][j]==mp[i][j])return false;}if(j>0)if(mp[i][j-1]==mp[i][j])return false;}}return true;
}
void Lose()
{char ch;system("cls");printf("*******************\n");printf("**** GAME OVER ****\n");printf("**** SCORE:%3d ****\n",score);printf("*******************\n\n");printf("Push any button to continue\n");ch=getch();return ;
}
void Win()
{char ch;system("cls");printf("*******************\n");printf("**** YOU  WIN! ****\n");printf("*******************\n\n");printf("Push any button to continue\n");ch=getch();return ;
}
void start()
{system("cls");printf("********************\n");printf("* game start glhf~ *\n");printf("********************\n");int x=5e8;bool flag=false;while(x--);memset(mp,0,sizeof(mp));memset(map,false,sizeof(map));score=0;char ch;while(!gameover()){memset(cal,false,sizeof(cal));int cnt=0;system("cls");Init();print();// DeBug();ch=getch();switch (ch){case 'w':MoveUp();break;case 's':MoveDown();break;case 'a':MoveLeft();break;case 'd':MoveRight();break;case 'e':exit(0);case 'r':return ;}if(score>=2048){flag=true;break;}}if(flag)Win();elseLose();return ;
}int main()
{system("title yourname");char ch;while(1){system("cls");printf("push ENTER to start game\nESC to exit\n");ch=getch();if(ch==13)start();else if(ch==27)break;}return 0;
}

更多推荐

用C++实现2048

本文发布于:2024-02-19 15:19:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764546.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!