一个命令行下简单的2048游戏
我想到的实现方式是判断每一个格子里的数字是否可移动,不过需要判断的比较多,加了很多for循环导致时间复杂度很高,因此游戏运行到一定程度会出现卡顿,所以我加入了多线程,可是实际效果并不尽如人意,有的移动依旧是会卡顿下。vs2010不支持AMP并行运算,等我将编译器更新到2015后再尝试使用gpu,看可不可以去除卡顿。
AI部分很简单,能下就向下移动,否则左或右或上。
ChessBoard.h
#pragma once
#include <iostream>
#include<conio.h>
#include<windows.h>
#include <process.h>
#include <time.h>
#include <cstdlib>
using namespace std;
const int BoardLength = 4;
static int Board[BoardLength][BoardLength];
static bool IsMove=true;
static int goal=0;
int Sum(int,int);
void RandomBoard(void);
void Control(void);
void PrintBoard(void);
void GetGoal(int);
//移动部分
void MoveUp(void);
void ThreadUp(LPVOID lpParamter);
void MoveDown(void);
void ThreadDown(LPVOID lpParamter);
void MoveLeft(void);
void ThreadLeft(LPVOID lpParamter);
void MoveRight(void);
void ThreadRight(LPVOID lpParamter);
//AI部分
int AI1(void);
void AIcontrol(void);
bool TestUp();
bool TestDown();
bool TestLeft();
bool TestRight();
// 调用此函数运行游戏。
void Start(void);
ChessBoard.cpp
#include "ChessBoard.h"
int Sum(int a,int b)
{
GetGoal(a+b);
return a+b;
}
void RandomBoard()
{
srand((unsigned)time(NULL));
int a[4];
for(int i=0;i<4;i++)
{
a[i] = rand()%4;
}
while(Board[a[0]][a[1]]!=0)
{
srand((unsigned)time(NULL));
for(int i=0;i<2;i++)
{
a[i] = rand()%4;
}
}
Board[a[0]][a[1]] = 2;
}
void MoveUp()
{
IsMove = false;
for(int i=0;i<BoardLength;i++)
{
_beginthread(ThreadUp,0,(void*)i);
}
}
void ThreadUp(LPVOID lpParamter)
{
int i = (int)lpParamter;
for(int j=0;j<BoardLength;j++)
{
if(i==0)
{
break;
}
if(Board[i][j]==0)
{
continue;
}
for(int m=i-1;m>=0;m--)