#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <time.h>
#include <cstring>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#define N 4
using namespace std;
/*
*一个简单的2048 dos版本
*作者:林煜
*版本:1.0
*时间:2015/10/7
*操作:wsad
*/
int Map[N][N]={0};
int Result[N][N]={0};
/*{{2,4,8,16},
{2,2,0,2},
{0,0,8,4},
{2,2,4,2}};
*/
int num=0;
int NewOne[2]={-1,-1};
void createOne()
{
srand((unsigned int)time(0));
int x,y;
if(num==N*N) return;
while(1){
x = rand()%N;
y = rand()%N;
if(Map[x][y]==0)
break;
}
int isfour = rand()%2;
Map[x][y] = isfour?4:2;
num++;
COORD pos;
pos.X = y*5;
pos.Y = x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
cout<<" ";
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
printf("%5d",Map[x][y]);
}
void Convert(char key)//根据wsad变换,这个地方四个方向代码都差不多一样。。本来想整合一下,一下子没有思路,就不管他了。。
{
memset(Result,0,sizeof(Result));
//往下
if(key=='s')
for(int i=0;i<N;i++){
int k=3;
bool flag = true;//代表该位置未被初始化
for(int j=3;j>=0;j--){
if(!flag && Map[j][i]==Result[k][i]){
Result[k][i]*=2;
k--;
flag = true;
continue;
}
if(!flag && Map[j][i]!=0 && Map[j][i]!=Result[k][i]){
Result[--k][i]=Map[j][i];
}
if(flag && Map[j][i]!=0){
Result[k][i] = Map[j][i];
flag = false;
}
}
}
//往上
if(key=='w')
for(int i=0;i<N;i++){
int k=0;
bool flag = true;
for(int j=0;j<N;j++){
if(!flag && Map[j][i]==Result[k][i]){
Result[k][i]*=2;
k++;
flag = true;
continue;
}
if(!flag && Map[j][i]!=0 && Map[j][i]!=Result[k][i]){
Result[++k][i]=Map[j][i];
}
if(flag && Map[j][i]!=0){
Result[k][i] = Map[j][i];
flag = false;
}
}
}
//往左
if(key=='a')
for(int i=0;i<N;i++){
int k = 0;
bool flag = true;
for(int j=0;j<N;j++){
if(!flag && Map[i][j]==Result[i][k]){
Result[i][k]*=2;
flag = true;
k++;
continue;
}
if(!flag && Map[i][j]!=0 && Map[i][j]!=Result[i][k]){
Result[i][++k]=Map[i][j];
}
if(flag && Map[i][j]!=0){
Result[i][k] = Map[i][j];
flag = false;
}
}
}
//往右
if(key=='d')
for(int i=0;i<N;i++){
int k = 3;
bool flag = true;
for(int j=3;j>=0;j--){
if(!flag && Map[i][j]==Result[i][k]){
Result[i][k]*=2;
flag = true;
k--;
continue;
}
if(!flag && Map[i][j]!=0 && Map[i][j]!=Result[i][k]){
Result[i][--k]=Map[i][j];
}
if(flag && Map[i][j]!=0){
Result[i][k] = Map[i][j];
flag = false;
}
}
}
}
void refresh()
{
bool flag = true;//代表变化前后是否一样
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(Map[i][j]!=Result[i][j]){
flag = false;
COORD pos;
pos.X = j*5;
pos.Y = i;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
cout<<" ";
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
printf("%5d",Result[i][j]);
Map[i][j] = Result[i][j];
}
}
}
if(flag) return;
int res_num = 0;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
if(Map[i][j])
res_num++;
num = res_num;
}
void draw()
{
for(int i=0;i<N;i++){
for(int j=0;j<N;j++)
printf("%5d",Map[i][j]);
cout<<endl;
}
}
void init()
{
draw();
createOne();
}
int main()
{
init();
while(1){
while(!kbhit());
char key = getch();
Convert(key);
refresh();
createOne();
}
return 0;
}
C++实现(基本就是c)简单的2048(dos版本)
5星 · 超过95%的资源 需积分: 10 21 浏览量
2015-10-07
15:43:34
上传
评论
收藏 215KB RAR 举报
qq_28414327
- 粉丝: 1
- 资源: 2
最新资源
- Wireshark-4.2.4-x64.zip
- 2022年11月软件设计师上
- 基于VB+ACCESS教学管理系统(参考文献+源代码).zip
- 一个工具的流程图 demo
- EMC3080的用于连接FogCloud的固件
- 基于VB+Access酒店客房管理系统(源代码+参考文献+报告).zip
- 应用笔记LAT1244+奇怪的NRST+管脚异常复位问题
- SEMI标准的解释说明
- tensorflow-2.8.2-cp37-cp37m-manylinux2010-x86-64.whl
- tensorflow-rocm-2.12.0.560-cp311-cp311-manylinux2014-x86-64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈