**參考:100 行**擼了乙個 2048 的小遊戲
規則就是 2084 遊戲的規則
j - 左
k - 下
l - 右
i - 上
相同數字移動過程中會合併
這裡我把按鍵修改成了方向鍵,並加了些注釋幫助理解
#include#include我的測試環境為 dev-c++ 5.11,親測有效,如果使用linux 下 gcc 編譯,需要解決 getch 問題,具體參考原部落格#include
#define game_size 4
static
void left(int *data)
else}}
while (j < game_size) data[j++] = 0;//
填充剩餘格
data += game_size;//
位址偏移4格 }}
static
void right(int *data)
else}}
while (j >= 0) data[j--] = 0
; data +=game_size;
}}static
void up(int *data)
else}}
while (j < game_size) data[(j++)*game_size] = 0
; data++;
}}static
void down(int *data)
else}}
while (j >= 0) data[(j--)*game_size] = 0
; data++;
}}static
int next(int *data)
max = max > data[i] ? max : data[i];//
保留最大值判斷是否遊戲已結束
}
if(empnum)
else
return -1;}
static
void output(int *data)
else
sum+=data[i-1
]; }
printf(
"+--------------------+\n\n");
printf(
"分數:%d\n\n
", sum);
}int
main();
int ret = 0
;
next(data);
next(data);
output(data);
while(1
) ret =next(data);
output(data);
if (ret == -1) printf("
game over !\n");
if (ret == 1) printf("
you win !\n");}}
演算法主要就是 left right up down 四個函式,這裡給出 left 函式的前兩位**
準確的說,i 代表當前遍歷格位址, j代表當前填充格位址(如果合併填充j-1格),f為合併標誌位(每一行(列)只能合併一次)
上、下、左、右鍵是二個位元組的,getch()唯讀乙個位元組,asc碼getch函式在讀取乙個功能鍵或者箭頭(方向)鍵盤時,函式會返回兩次,第一次呼叫返回0或者0xe0,第二次呼叫返回實際的鍵值,所以使用兩次getch()即可。想要用getch()得到上、下、左、右鍵的話,要呼叫二次getch():
可參考部落格:c語言使用getch()讀取方向鍵
C語言實現的2048小遊戲
給大一新生寫的乙個小遊戲。缺點 函式名稱和功能略微不對應,函式功能寫得比較亂,時間記錄有誤差,可擴充套件性弱。優點 通過幾個配置陣列,將單位方塊移動的函式縮短到30行以內。include include include include include 座標常量 const int squaresiz...
c語言小遊戲 精簡 C語言實現簡易2048小遊戲
一直很喜歡玩這個小遊戲,簡單的遊戲中包含運氣與思考與策略,喜歡這種簡約又不失內涵的遊戲風格。於是萌生了用c語言實現一下的想法。博主分析的都很到位,很多演算法技巧都值得借鑑,c語言實現2048的主要思想已經在那個部落格中詳細的分析了,但是我覺得在博主的 中還是有很多很好的思想是值得我借鑑學習的。比如這...
C 實現2048小遊戲
1 define crt secure no warnings 去掉編譯器內部擴增問題 2 include3 include4 include5 include 6 include7 include8 include 9 include10 include11 include12 using nam...