利用c++編寫(xiě)簡(jiǎn)易版2048小游戲
別的不多說(shuō),先上效果圖

我們都知道2048是個(gè)4 4的方格,為了方便數(shù)組下表我們生成5 5的數(shù)組,只用到1~4的下標(biāo)。
初始化時(shí)候先隨便生成兩個(gè)目標(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; // 隨機(jī)生成兩個(gè)初始點(diǎn)
a[x1][y1] = a[x2][y2] = 2; // 初始點(diǎn)初始化為 2
}
2、畫(huà)圖操作
畫(huà)圖操作,就是把有數(shù)組都打印出來(lái),數(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]) // 如果該位置沒(méi)有數(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、字符控制
然后就是移動(dòng)了,我這里用輸入字符控制,用wsad,控制上下左右。
// 玩家操作
void move()
{
memcpy(b, a, sizeof(a)); // 將 a 備份至 b
memset(mov, false, sizeof(mov)); // 初始化 mov 為 false(所有點(diǎn)均未移動(dòng))
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é)束,對(duì)于任意一個(gè)位置,該位置為空 或 四周有位置上的數(shù)字與該位置上數(shù)字相等,說(shuō)明可繼續(xù)移動(dòng)(游戲可繼續(xù)),否則游戲結(jié)束
// 判斷勝利,有任意一個(gè)位置達(dá)到 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++編寫(xiě)簡(jiǎn)易版2048小游戲的文章就介紹到這了,更多相關(guān)c++編寫(xiě)簡(jiǎn)易版2048小游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配
C++ 不允許變量重名,但是允許多個(gè)函數(shù)取相同的名字,只要參數(shù)表不同即可,這叫作函數(shù)的重載,下面這篇文章主要給大家介紹了關(guān)于C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配的相關(guān)資料,需要的朋友可以參考下2019-01-01
一篇文章帶你了解C語(yǔ)言的選擇結(jié)構(gòu)
這篇文章主要為大家介紹了C語(yǔ)言的選擇結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01
詳細(xì)解析C語(yǔ)言中的開(kāi)方實(shí)現(xiàn)
這篇文章主要介紹了詳細(xì)解析C語(yǔ)言中的開(kāi)方實(shí)現(xiàn),包括一道要求精度的整數(shù)開(kāi)方的題目,需要的朋友可以參考下2015-08-08
Qt實(shí)現(xiàn)TCP網(wǎng)絡(luò)編程
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)TCP網(wǎng)絡(luò)編程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
visual?studio?2022一個(gè)不易發(fā)現(xiàn)的問(wèn)題
本文主要介紹了visual?studio?2022一個(gè)不易發(fā)現(xiàn)的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
這篇文章主要介紹了詳解C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的相關(guān)資料,需要的朋友可以參考下2017-03-03
基于C++語(yǔ)言實(shí)現(xiàn)機(jī)動(dòng)車(chē)違章處罰管理系統(tǒng)
這篇文章主要介紹了基于C++語(yǔ)言實(shí)現(xiàn)機(jī)動(dòng)車(chē)違章處罰管理系統(tǒng)的相關(guān)資料,需要的朋友可以參考下2016-07-07

