tft每日頭條

 > 科技

 > c語言項目源代碼

c語言項目源代碼

科技 更新时间:2025-01-29 08:10:31

這篇文章主要為大家詳細介紹了C語言實現——《2048項目》文中示例代碼介紹得非常詳細,具有一定的參考價值,感興趣的小夥伴們可以參考一下!

c語言項目源代碼(C語言項目實戰2048零基礎項目)1

遊戲介紹:

《2048》一款益智小遊戲,遊戲的規則十分簡單,是一款簡單易上手的數字小遊戲。遊戲的規則很簡單,你需要控制所有方塊向同一個方向運動,兩個相同數字方塊撞在一起之後合并成為他們的和,每次操作之後會随機生成一個2或者4,最終得到一個“2048”的方塊就算勝利了!

玩法簡單,容易上手!所以這也成為了我們編程學習者C語言練習的一個非常好的小項目,如果你沒有玩過的話那麼可以先去玩一下的,會玩的話對于項目邏輯的理解也是非常有幫助的!接下來就讓我們一起來看看吧!

插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;

c語言項目源代碼(C語言項目實戰2048零基礎項目)2

效果圖展示:

c語言項目源代碼(C語言項目實戰2048零基礎項目)3

配套講解教程:2048遊戲教程——哔哩哔哩

源代碼示例:

#include<stdio.h> #include<time.h> #include<math.h> #include<conio.h> #include<graphics.h>//需要安裝之後,才有這個頭文件 #define MAX_GRID 4 //每行格子數 #define GRID_WIDTH 100 //格子寬度 #define INTERVAL 15 //間隔 #define WIN_SIZE (5*INTERVAL MAX_GRID*GRID_WIDTH)//窗口大小 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 }; //數據 二維數組 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)); //随機在空白的位置産生兩個整數 for (int i = 0; i < 5; ) { //随機數 rand() 随機獲得一個整數 0~上萬 int r = rand() % MAX_GRID; //0~3 int c = rand() % MAX_GRID; //0~3 if (map[r][c] == 0) { map[r][c] = createNum(); i ; } } } void gameDraw() { //繪制界面,設置背景顔色 187,173,160 三原色 set background color setbkcolor(RGB(187, 173, 160)); //設置顔色之後需要,清屏(原本的顔色是黑色的,設置的顔色,被覆蓋了) cleardevice();//清楚繪圖設備 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,y int 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) { //繪制數字 //printf("%d", map[i][k]);//輸出到控制台窗口 //設置文字大小 settextstyle(50, 0, "黑體"); settextcolor(RGB(163, 73, 164)); setbkmode(TRANSPARENT);//設置文字背景為透明 //把數字轉成字符串 格式化字符串 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\n"); } int main() { //不要控制台窗口,我要圖形窗口 easyx initgraph(WIN_SIZE,WIN_SIZE,SHOWCONSOLE);//第一個參數是寬度,二個高度 gameInit(); while (1) { gameDraw(); keyControl(); } return 0; }

未完成的數字部分代碼,大家也可以自己先去想想試試,每一次的思考就是你進步的過程!

如果學習的過程中有什麼問題,以及本項目有什麼不懂的地方,都可以來找我交流,我來幫你!

那麼今天的分享就到這裡了,後續會更新更多精彩項目或者知識内容的,大家要好好學C語言C 喲~

寫在最後:對于準備學習C/C 編程的小夥伴,如果你想更好地提升你的編程核心能力(内功)不妨從現在開始!

編程學習書籍分享:

c語言項目源代碼(C語言項目實戰2048零基礎項目)4

編程學習視頻分享:

c語言項目源代碼(C語言項目實戰2048零基礎項目)5

整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!

對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved