C/C++項(xiàng)目源碼——2048小游戲

C/C++項(xiàng)目源碼——2048小游戲

這是小編自己做的一個2048的小游戲琳猫,然后圖片素材需要大家自己找尋凫海,也可以在下方評論處評論找我要素材

```cpp

/************************************************

* stdio.h 標(biāo)準(zhǔn)C語言庫?

* #include 包含庫

*

************************************************/

#define _CRT_SECURE_NO_WARNINGS //去掉編譯器內(nèi)擴(kuò)增問題

#include <stdio.h>

#include <stdlib.h>

#include <graphics.h>? //報錯--->baby 圖形庫插件安裝就可以了

#include <conio.h>

#include <time.h>

/************************************************

* 數(shù)據(jù)成員

* 變量的聲明

************************************************/

IMAGE img[12]; //存儲12張照片

//圖片的的名字的序號

//imgIndex[x].bmp;

int imgIndex[12] = { 0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 };

int i, j; //循環(huán)變量的遍歷

int? map[4][4] = { 0 };

/************************************************

* 子函數(shù)

* 加載資源

************************************************/

void loadResource()

{

for (i = 0; i < 12; i++)

{

//批量加載

char fileName[20] = "";

sprintf(fileName, "%d.bmp", imgIndex[i]);

loadimage(img + i, fileName);

//0 1 2

}

}

/************************************************

* 畫地圖

* 根據(jù)二維數(shù)組中的值去畫地圖

************************************************/

void drawMap()

{

setbkcolor(RGB(244, 215, 215));

cleardevice();

settextcolor(WHITE); //設(shè)置文字顏色

settextstyle(35, 0, "楷體"); //設(shè)置文字格式

outtextxy(50, 10, "2048游戲");

//根據(jù)二維數(shù)組中值去畫圖

int x, y, k;

for (i = 0; i < 4; i++)

{

for (j = 0; j < 4; j++)

{

x = 60 * j;

y = 60 * i + 50;

for (k = 0; k < 12; k++)

{

//求出當(dāng)前元素對應(yīng)的圖片序號

//賦值語句不要寫成等于號

if (imgIndex[k]== map[i][j])

break;

}

//貼相應(yīng)序號的圖片

putimage(x, y, img + k);

}

}

}

/************************************************

* 隨機(jī)產(chǎn)生2或者4 或者0

* 隨機(jī)函數(shù)

************************************************/

int? randIntNum()

{

srand((unsigned int)time(NULL)); //隨機(jī)函數(shù)種子

for (i = 0; i < 4; i++)

{

for (j = 0; j < 4; j++)

{

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

{

//0,2,4

//(0,1,2)*2

map[i][j] = (rand() % 3) * 2;

//產(chǎn)生0的話狭握,該次產(chǎn)生的值不算

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

continue;

return 0;

}

}

}

return 0;

}

//做移動,一定要想清楚什么時候能動

/************************************************

* 根據(jù):上,下,左欢搜,右 鍵做不同合并

* 以右鍵為例:

* [2 2 4 4]--->[0 4 0 8]

* [0 2 0 8]--->[0 0 2 8]

************************************************/

int moveRight()

{

int flag = 0; //游戲結(jié)束標(biāo)記

for (i = 0; i < 4; i++)

{

for (j = 4 - 1; j >= 0; j--)

{

int curKey = map[i][j]; //當(dāng)前元素的值

if (curKey != 0)

{

int curKey = map[i][j]; //當(dāng)前元素的值

int k = j + 1;

while (k >= 0)

{

//當(dāng)前元素的下一個

int curKeyNext = map[i][k];

if (curKeyNext != 0)

{

//如果相鄰的是相同,那么我們就合并

if (curKey == curKeyNext)

{

//[2 2 4 4]--->[0 4 0 8]

flag = 1;

map[i][j] += map[i][k];

map[i][k] = 0;

}

k = 4; //退出循環(huán)

break;

}

k++; //判斷其他的位置

}

}

}

}

//[0 2 0 8]--->[0 0 2 8]

for (i = 0; i < 4; i++)

{

for (j = 4 - 1; j >= 0; j--)

{

int curKey = map[i][j];

if (curKey == 0)

{

int k = j - 1;

while (k >= 0)

{

int curKeyNext = map[i][k];

if (curKeyNext != 0)

{

flag = 1;

map[i][j] = curKeyNext; //把非0元素移到0的位置

map[i][k] = 0; //移動后變?yōu)?

k = -1;

}

k--; //其他位置也需要判斷

}

}

}

}

if (flag)

return 0;

else

return 4;

}

//往左走

int moveLeft()

{

int flag = 0; //游戲結(jié)束標(biāo)記

for (i = 0; i < 4; i++)

{

for (j =0; j<4; j++)

{

int curKey = map[i][j]; //當(dāng)前元素的值

if (curKey != 0)

{

int k = j + 1;

while (k < 4)

{

//當(dāng)前元素的下一個

int curKeyNext = map[i][k];

if (curKeyNext != 0)

{

//如果相鄰的是相同谴轮,那么我們就合并

if (curKey == curKeyNext)

{

//[2 2 4 4]--->[0 4 0 8]

flag = 1;

map[i][j] += map[i][k];

map[i][k] = 0;

}

k = 4; //退出循環(huán)

break;

}

k++; //判斷其他的位置

}

}

}

}

//[0 2 0 8]--->[0 0 2 8]

for (i = 0; i < 4; i++)

{

for (j =0; j <4; j++)

{

int curKey = map[i][j];

if (curKey == 0)

{

int k = j + 1;

while (k < 4)

{

int curKeyNext = map[i][k];

if (curKeyNext != 0)

{

flag = 1;

map[i][j] = curKeyNext; //把非0元素移到0的位置

map[i][k] = 0; //移動后變?yōu)?

k = 4;

}

k++; //其他位置也需要判斷

}

}

}

}

if (flag)

return 0;

else

return 4;

}

//往上走

int? moveUp()

{

int flag = 0;

for (i = 0; i <4; i++)

{

for (j = 0; j < 4; j++)

{

int curKey = map[i][j];

if (curKey != 0)

{

int k = i + 1;

while (k <4)

{

int curKeyNext = map[k][j];

if (curKeyNext != 0)

{

if (curKey== curKeyNext)

{

flag = 1;

map[i][j] += map[k][j];

map[k][j] = 0;

}

k = 4;

break;

}

k++;

}

}

}

}

for (i = 0; i <4-1; i++)

{

for (j = 0; j < 4; j++)

{

int curKey = map[i][j];

if (curKey == 0)

{

int k = i + 1;

while (k <4)

{

int curKeyNext = map[k][j];

if (curKeyNext != 0)

{

flag = 1;

map[i][j] = curKeyNext;

map[k][j] = 0;

k = 4;

}

k++;

}

}

}

}

if (flag)

return 0;

else

return 4;

}

//往下走

int? moveDown()

{

int flag = 0;

for (i = 4 - 1; i >= 0; i--)

{

for (j = 0; j < 4; j++)

{

int curKey = map[i][j];

if (curKey != 0)

{

int k = i - 1;

while (k >= 0)

{

int curKeyNext = map[k][j];

if (curKeyNext != 0)

{

if (map[i][j] == map[k][j])

{

flag = 1;

map[i][j] += map[k][j];

map[k][j] = 0;

}

k = 0;

break;

}

k--;

}

}

}

}

for (i = 4 - 1; i > 0; i--)

{

for (j = 0; j < 4; j++)

{

int curKey = map[i][j];

if (curKey == 0)

{

int k = i - 1;

while (k >= 0)

{

int curKeyNext = map[k][j];

if (curKeyNext != 0)

{

flag = 1;

map[i][j] = curKeyNext;

map[k][j] = 0;

k = 0;

}

k--;

}

}

}

}

if (flag)

return 0;

else

return 4;

}

/************************************************

* 按鍵響應(yīng)

* 上炒瘟,下,左第步,右

************************************************/

void keyDown()

{

char key=_getch(); //用來接收用戶按鍵

switch (key)

{

case 'w':

case 'W':

case 72: //小鍵盤

randIntNum();

moveUp();

break;

case 'S':

case 's':

case 80:

randIntNum();

moveDown();

break;

case 'a':

case 'A':

case 75:

randIntNum();

moveLeft();

break;

case 'd':

case 'D':

case 77:

randIntNum();

//drawMap();

moveRight();

break;

}

}

/************************************************

* 主函數(shù)

* 唯一的一個入口函數(shù)

************************************************/

int main()

{

//程序如何顯示圖片

loadResource();

initgraph(60 * 4, 60 * 4 + 60);

drawMap();

while (1)

{

keyDown();

drawMap();

}

////1.聲明圖片變量

//IMAGE background;

////2.加載資源到變量 loadimage加載

//loadimage(&background, "class.jpg", 800, 400);

//3.顯示圖片 putimage顯示圖片

//putimage(0, 0, img+1);

getchar(); //防止閃屏

closegraph();

system("pause");

return 0;

}

```

這個小游戲希望對大家有幫助疮装,自己在家沒事的時候也可以寫出來玩一下,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粘都,一起剝皮案震驚了整個濱河市廓推,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驯杜,老刑警劉巖受啥,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸽心,居然都是意外死亡滚局,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進(jìn)店門顽频,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藤肢,“玉大人,你說我怎么就攤上這事糯景∴胰Γ” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵蟀淮,是天一觀的道長最住。 經(jīng)常有香客問我,道長怠惶,這世上最難降的妖魔是什么涨缚? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮策治,結(jié)果婚禮上脓魏,老公的妹妹穿的比我還像新娘兰吟。我一直安慰自己,他們只是感情好茂翔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布混蔼。 她就那樣靜靜地躺著,像睡著了一般珊燎。 火紅的嫁衣襯著肌膚如雪惭嚣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天俐末,我揣著相機(jī)與錄音料按,去河邊找鬼奄侠。 笑死卓箫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的垄潮。 我是一名探鬼主播烹卒,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弯洗!你這毒婦竟也來了旅急?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤牡整,失蹤者是張志新(化名)和其女友劉穎藐吮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逃贝,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谣辞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沐扳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泥从。...
    茶點(diǎn)故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沪摄,靈堂內(nèi)的尸體忽然破棺而出躯嫉,到底是詐尸還是另有隱情,我是刑警寧澤杨拐,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布祈餐,位于F島的核電站,受9級特大地震影響哄陶,放射性物質(zhì)發(fā)生泄漏帆阳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一奕筐、第九天 我趴在偏房一處隱蔽的房頂上張望舱痘。 院中可真熱鬧变骡,春花似錦、人聲如沸芭逝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旬盯。三九已至台妆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胖翰,已是汗流浹背接剩。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萨咳,地道東北人懊缺。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像培他,于是被迫代替她去往敵國和親鹃两。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評論 2 348