C 遊戲 2048的實現和簡單AI

2021-07-24 04:04:28 字數 3743 閱讀 4730

乙個命令列下簡單的2048遊戲

我想到的實現方式是判斷每乙個格仔裡的數字是否可移動,不過需要判斷的比較多,加了很多for迴圈導致時間複雜度很高,因此遊戲執行到一定程度會出現卡頓,所以我加入了多執行緒,可是實際效果並不盡如人意,有的移動依舊是會卡頓下。vs2010不支援amp並行運算,等我將編譯器更新到2015後再嘗試使用gpu,看可不可以去除卡頓。

ai部分很簡單,能下就向下移動,否則左或右或上。

chessboard.h

#pragma once

#include

#include

#include

#include

#include

#include

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)

void randomboard()

while(board[a[0]][a[1]]!=0)

}board[a[0]][a[1]] = 2;

}void moveup()

}void threadup(lpvoid lpparamter)

if(board[i][j]==0)

for(int m=i-1;m>=0;m--)

else

if(board[m][j] != board[m+1][j])

else

if(board[m][j] == board[m+1][j])

else

}break;}}

} }void movedown()

}void threaddown(lpvoid lpparamter)

if(board[i][j]==0)

for(int m=i+1;mif(board[m][j]==0)

else

if(board[m][j] == board[m-1][j])

else

}break;

}else

if(board[m][j] != board[m-1][j])}}

}void moveleft()

}void threadleft(lpvoid lpparamter)

if(board[i][j]==0)

for(int m=j-1;m>=0;m--)

else

if(board[i][m] == board[i][m+1])

else

}break;

}else

if(board[i][m] != board[i][m+1])}}

}void moveright()

}void threadright(lpvoid lpparamter)

if(board[i][j]==0)

for(int m=j+1;mif(board[i][m]==0)

else

if(board[i][m] == board[i][m-1])

else

}break;

}else

if(board[i][m] != board[i][m-1])}}

}void getgoal(int getgoal)

void control()

}sleep(250);

if(ismove)

printboard();

}}void aicontrol(void)

sleep(250);

if(ismove)

printboard();

}}void printboard(void)

cout

<< endl;

}cout

<

else

if(testleft())

else

if(testright())

else

if(testup())

else

}bool testup()

int temp=i-1;

if(board[temp][j]==0)

if(board[temp][j]==board[i][j])}}

return

false;

}bool testdown()

int temp=i+1;

if(board[temp][j]==0)

if(board[temp][j]==board[i][j])}}

return

false;

}bool testleft()

int temp=j-1;

if(board[i][temp]==0)

if(board[i][temp]==board[i][j])}}

return

false;

}bool testright()

int temp=j+1;

if(board[i][temp]==0)

if(board[i][temp]==board[i][j])}}

return

false;

}void start()

else

if(ch=='2')

}randomboard();

printboard();

if(ch=='1')

else

if(ch=='2')

}

遊戲截圖

在main函式中呼叫start();函式就可以執行遊戲了。

C 實現2048小遊戲

1 define crt secure no warnings 去掉編譯器內部擴增問題 2 include3 include4 include5 include 6 include7 include8 include 9 include10 include11 include12 using nam...

C 實現2048遊戲示例

這遊戲前一段時間傳的很火,前幾天早上實在太無聊了,就決定把這遊戲自己也寫乙個。前後寫了乙個多小時吧,大概300行左右,沒什麼複雜演算法,不過實在懶得去優化了,但估計優化完能控制在200行以下,有興趣的朋友可以自己優化一下。說明 我一開始玩的是ios app版的trhees,後來才玩的2048,兩者在...

C 自實現2048小遊戲

include include using namespace std const int n 5 地圖為4 4 int map n n 存圖 inline void generate rand 在隨機位置產生2或4 map x y rand 2?2 4 inline void build star...