【C++游戏】2048的实现和简单AI

一个命令行下简单的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--)
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值