利用c++編寫簡易版2048小游戲
別的不多說,先上效果圖

我們都知道2048是個4 4的方格,為了方便數(shù)組下表我們生成5 5的數(shù)組,只用到1~4的下標(biāo)。
初始化時候先隨便生成兩個目標(biāo)

1、程序初始化
// 程序初始化
void init()
{
score = 0;
memset(a, 0, sizeof(a));
int x1 = rand() % 4 + 1, y1 = rand() % 4 + 1, x2 = rand() % 4 + 1, y2 = rand() % 4 + 1; // 隨機生成兩個初始點
a[x1][y1] = a[x2][y2] = 2; // 初始點初始化為 2
}
2、畫圖操作
畫圖操作,就是把有數(shù)組都打印出來,數(shù)字為0的就打印空字符,數(shù)字不為0的,就打印數(shù)字。
void drawmap()
{
system("cls");
for (int i = 1; i <= 4; i++)
{
for (int j = 1; j <= 4; j++)
{
if (a[i][j]) // 如果該位置沒有數(shù)字,則不繪制
{
if(a[i][j]>1000)
cout<<a[i][j]<<" ";
else if(a[i][j]>100)
cout<<a[i][j]<<" ";
else if(a[i][j]>10)
cout<<" "<<a[i][j]<<" ";
else
cout<<" "<<a[i][j]<<" ";
}
else
{
cout<<" ";
}
}
cout<<"\n";
}
}
3、字符控制
然后就是移動了,我這里用輸入字符控制,用wsad,控制上下左右。
// 玩家操作
void move()
{
memcpy(b, a, sizeof(a)); // 將 a 備份至 b
memset(mov, false, sizeof(mov)); // 初始化 mov 為 false(所有點均未移動)
char c;
cin>>c;
if(c=='w') //向上
{
for (j = 1; j <= 4; j++)
for (i = 2; i <= 4; i++)
{
if (!a[i][j])continue;
int k = i;
while (!a[k - 1][j] && k >= 2)
{
a[k - 1][j] = a[k][j];
a[k][j] = 0;
k--;
}
if (a[k][j] == a[k - 1][j] && !mov[k - 1][j])
{
a[k - 1][j] = 2 * a[k][j];
a[k][j] = 0;
mov[k - 1][j] = true;
score += a[k - 1][j];
}
}
}
else if(c=='s') //向下
{
//。。。
}
else if(c=='a') //向左
{
//。。。
}
else if(c=='d')
{
}
}
4、判斷游戲結(jié)束和游戲勝利
// 判斷游戲結(jié)束,對于任意一個位置,該位置為空 或 四周有位置上的數(shù)字與該位置上數(shù)字相等,說明可繼續(xù)移動(游戲可繼續(xù)),否則游戲結(jié)束
// 判斷勝利,有任意一個位置達到 2048,則勝利
bool gameover()
{
for (i = 1; i <= 4; i++)
for ( j = 1; j <= 4; j++)
if (!a[i][j] || a[i][j] == a[i + 1][j] || a[i][j] == a[i - 1][j] || a[i][j] == a[i][j + 1] || a[i][j] == a[i][j - 1])return false;
return true;
}
bool win()
{
for ( i = 1; i <= 4; i++)
for ( j = 1; j <= 4; j++)
if (a[i][j] == 256)return true;
return false;
}
到此這篇關(guān)于利用c++編寫簡易版2048小游戲的文章就介紹到這了,更多相關(guān)c++編寫簡易版2048小游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配
C++ 不允許變量重名,但是允許多個函數(shù)取相同的名字,只要參數(shù)表不同即可,這叫作函數(shù)的重載,下面這篇文章主要給大家介紹了關(guān)于C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配的相關(guān)資料,需要的朋友可以參考下2019-01-01
visual?studio?2022一個不易發(fā)現(xiàn)的問題
本文主要介紹了visual?studio?2022一個不易發(fā)現(xiàn)的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
C++ 數(shù)據(jù)結(jié)構(gòu)實現(xiàn)兩個棧實現(xiàn)一個隊列
這篇文章主要介紹了詳解C++ 數(shù)據(jù)結(jié)構(gòu)實現(xiàn)兩個棧實現(xiàn)一個隊列的相關(guān)資料,需要的朋友可以參考下2017-03-03
基于C++語言實現(xiàn)機動車違章處罰管理系統(tǒng)
這篇文章主要介紹了基于C++語言實現(xiàn)機動車違章處罰管理系統(tǒng)的相關(guān)資料,需要的朋友可以參考下2016-07-07

