乙個命令列下簡單的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...