#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;
}

qq_28414327
- 粉丝: 1
最新资源
- 议员提议案vs国民大数据拟对奢华婚礼征税?.docx
- 区块链商业应用起步.docx
- 企业管理信息系统网络设计及实施.docx
- 工业自动化仪表及过程控制(单回路调节系统).ppt
- 大数据环境下档案信息资源整合的SWOTT分析.docx
- 配电自动化系统实用化运维技术探析.docx
- 宿舍管理系统--软件设计说明书.doc
- 测试### 教育技术基于Web的虚拟仿真实验平台系统需求规格说明书:高校实验教学综合管理系统设计
- 使用Python构建高效ETL管道
- Spring-Cloud重新定义Java云原生架构.pdf
- 电力电子基于滑模变结构的双向DC-DC变换器控制策略研究:实现高动态性能与抗干扰能力的系统设计(论文复现含详细代码及解释)
- 区块链与可信系统:第五届BlockSys国际会议论文集
- 通信技术基于混沌伪正交成型滤波器的高速率隐蔽通信系统设计与性能分析研究(论文复现含详细代码及解释)
- 【新能源技术】基于混合电解槽制氢系统的功率分配技术:光伏电解水制氢系统的优化设计与仿真验证(论文复现含详细代码及解释)
- 【光伏发电技术】基于混合算法的光伏多峰值MPPT优化研究:快速定位与精确跟踪的智能控制策略设计(论文复现含详细代码及解释)
- CMIS与Apache Chemistry实战指南
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


