這篇文章主要為大家詳細介紹了C語言實現(xiàn)——《2048項目》文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下!
游戲介紹:
《2048》一款益智小游戲,游戲的規(guī)則十分簡單,是一款簡單易上手的數(shù)字小游戲。游戲的規(guī)則很簡單,你需要控制所有方塊向同一個方向運動,兩個相同數(shù)字方塊撞在一起之后合并成為他們的和,每次操作之后會隨機生成一個2或者4,最終得到一個“2048”的方塊就算勝利了!
玩法簡單,容易上手!所以這也成為了我們編程學習者C語言練習的一個非常好的小項目,如果你沒有玩過的話那么可以先去玩一下的,會玩的話對于項目邏輯的理解也是非常有幫助的!接下來就讓我們一起來看看吧!
插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關(guān)注文末領(lǐng)?。?/p>
源代碼示例:
enum Color //枚舉格子顏色{zero = RGB(205, 193, 180), //0的顏色twoTo1 = RGB(238, 228, 218), //2的顏色twoTo2 = RGB(237, 224, 200), //4的顏色twoTo3 = RGB(242, 177, 121), //8的顏色twoTo4 = RGB(245, 149, 99), //16的顏色twoTo5 = RGB(246, 124, 95), //32的顏色twoTo6 = RGB(246, 94, 59), //64的顏色twoTo7 = RGB(242, 177, 121), //128的顏色twoTo8 = RGB(237, 204, 97), //256的顏色twoTo9 = RGB(255, 0, 128), //512的顏色twoTo10 = RGB(145, 0, 72), //1024的顏色twoTo11 = RGB(242, 17, 158), //2048的顏色back = RGB(187, 173, 160), //背景顏色};Color arr[13] = { zero, twoTo1, twoTo2, twoTo3, twoTo4, twoTo5, twoTo6, twoTo7, twoTo8, twoTo9, twoTo10, twoTo11, back };//數(shù)據(jù) 二維數(shù)組int map[MAX_GRID][MAX_GRID];int createNum(){int num = 0;if (rand() % 10 == 0){num = 4;}else{num = 2;}return num;}void gameInit(){srand((unsigned)time(NULL));//隨機在空白的位置產(chǎn)生兩個整數(shù)for (int i = 0; i < 5; ){//隨機數(shù) rand() 隨機獲得一個整數(shù) 0~上萬int r = rand() % MAX_GRID; //0~3int c = rand() % MAX_GRID; //0~3if (map[r][c] == 0){map[r][c] = createNum();i++;}}}void gameDraw(){//繪制界面,設(shè)置背景顏色 187,173,160 三原色 set background colorsetbkcolor(RGB(187, 173, 160));//設(shè)置顏色之后需要,清屏(原本的顏色是黑色的,設(shè)置的顏色,被覆蓋了)cleardevice();//清楚繪圖設(shè)備for (int i = 0; i < MAX_GRID; i++)//->y{for (int k = 0; k < MAX_GRID; k++)//->x{//00 01 02 03//10 11 12 13//求出每一個格子的x,yint x = k*GRID_WIDTH + INTERVAL*(k + 1);int y = i*GRID_WIDTH + INTERVAL*(i + 1);//4->2//32->5//2^n=map[i][k]; ->log2map[i][k]=n;int index = (int)log2((float)map[i][k]);setfillcolor(arr[index]);//畫矩形:空心矩形,填充矩形,實心矩形,圓角矩形//solidrectangle(x, y, x + GRID_WIDTH, y + GRID_WIDTH);solidroundrect(x, y, x + GRID_WIDTH, y + GRID_WIDTH, 15, 15);if (map[i][k] != 0){//繪制數(shù)字//printf("%d", map[i][k]);//輸出到控制臺窗口//設(shè)置文字大小settextstyle(50, 0, "黑體");settextcolor(RGB(163, 73, 164));setbkmode(TRANSPARENT);//設(shè)置文字背景為透明//把數(shù)字轉(zhuǎn)成字符串 格式化字符串char str[10] = "";sprintf(str, "%d", map[i][k]);//為了文字居中在格子中間int textx = textwidth(str) / 2;int texty = textheight(str) / 2;int win = GRID_WIDTH / 2; //格子寬度一半outtextxy(x + win - textx, y + win - texty, str);}}}}void moveup(){for (int i = 0; i < MAX_GRID; i++){int temp = 0;for (int begin = 1; begin < MAX_GRID; begin++){if (map[begin][0] != 0){if (map[temp][i] == 0){map[temp][i] = map[begin][i];map[begin][i] = 0;}else if (map[temp][i] == map[begin][i]){map[temp][i] += map[begin][i];map[begin][i] = 0;temp++;}else{map[temp+1][i] = map[begin][i];if (temp + 1 != begin){map[begin][i] = 0;}temp++;}}}}}void moveDown(){for (int i = 0; i < MAX_GRID; i++){int temp = MAX_GRID-1;for (int begin = MAX_GRID-2; begin >=0; begin--){if (map[begin][0] != 0){if (map[temp][i] == 0){map[temp][i] = map[begin][i];map[begin][i] = 0;}else if (map[temp][i] == map[begin][i]){map[temp][i] += map[begin][i];map[begin][i] = 0;temp--;}else{map[temp - 1][i] = map[begin][i];if (temp - 1 != begin){map[begin][i] = 0;}temp--;}}}}}//獲取鍵盤按鍵 _getch(),它不需要按回車確認輸入void keyControl(){switch (_getch()){case 'w':case 'W':case 72:moveup();break;case 's':case 'S':case 80:moveDown();break;case 'a':case 'A':case 75:break;case 'd':case 'D':case 77:break;}printf("key ");}int main(){//不要控制臺窗口,我要圖形窗口 easyxinitgraph(WIN_SIZE,WIN_SIZE,SHOWCONSOLE);//第一個參數(shù)是寬度,二個高度gameInit();while (1){gameDraw();keyControl();}return 0;}
未完成的數(shù)字部分代碼,大家也可以自己先去想想試試,每一次的思考就是你進步的過程!
如果學習的過程中有什么問題,以及本項目有什么不懂的地方,都可以來找我交流,我來幫你!
那么今天的分享就到這里了,后續(xù)會更新更多精彩項目或者知識內(nèi)容的,大家要好好學C語言C++喲~
-
C語言
+關(guān)注
關(guān)注
183文章
7642瀏覽量
144525 -
代碼
+關(guān)注
關(guān)注
30文章
4940瀏覽量
73074
原文標題:C語言項目實戰(zhàn):《2048》零基礎(chǔ)項目!208 行源代碼示例
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
VSCode + ESP-IDF環(huán)境下給ESP32-S3項目添加頭文件
海微科技智能倉庫2.0項目正式啟動
運行自己編寫的C語言項目的E203軟件仿真環(huán)境的搭建
rt-thread studio中創(chuàng)建不了gd32項目是怎么回事?
湃睿科技助力金源自動化PLM2.0項目圓滿驗收
STM32項目分享:礦井環(huán)境監(jiān)測系統(tǒng)
單片機C語言實例(350+例)
限時免積分下載:增量式與位置式PID算法的C語言實現(xiàn)分享
粵芯半導體三期通線,162.5億項目背后的產(chǎn)業(yè)鏈新機遇
基于FPGA實現(xiàn)圖像直方圖設(shè)計

如何用C語言實現(xiàn)2048項目
評論