本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下
<>强效果图:强>
使用文本界面的屏幕绘图库。
<强>设计思路:强>
-
<李>在满足条件情况下消除方块李>
<李>允许在游戏主界面(16宫格)中任意一格输出数据
李>
实现代码:
# include & lt; stdio.h> # include & lt; stdlib.h> # include & lt; curses.h> # include & lt; unistd.h> # include & lt; signal.h> # include & lt; time.h> 空白画();//用于绘制游戏界面 空打();//游戏运行的逻辑主体 无效的init ();//初始化函数,用于完成一些必要的初始化操作 空白draw_one (int y, int x);//绘制单个数字 空白cnt_value (int * new_y, int * new_x);//统计(y, x)对应的格子周围一圈的空格的个数 int game_over ();//结束游戏 int cnt_one (int y, int x);//统计(y, x)对应的格子周围一圈的空格的个数//游戏主界面是一个4 * 4的16宫格,使用二维数组进行表示,用0表示空格 int [4] [4]={0};//16宫格中空格的个数 int空; int old_y old_x; int main () { init (); 玩(); endwin (); 返回0; } 无效的init () { int x, y; initscr ();//开启诅咒模式 cbreak ();//开启cbreak模式,除删除或CTRL等仍被视为特殊控制字元外一切输入的字元将立刻被一一读取 noecho ();//echo()和noecho():此函式用来控制从键盘输入字元时是否将字元显示在终端机上 curs_set (0);//设置光标模式 空=15; 将srand(时间(0)); x=rand () % 4; y=rand () % 4; [y] [x]=2; 画(); } 空白画() { 整数n, m, x, y; 字符c [4]={' 0 ', ' 0 ', ' 0 ', ' 0 '}; 明确的();//清除终端屏幕 (n=0;n & lt;9;n +=2) { (m=0;m & lt;21;m + +) { 移动(n, m);//将游标移动至x, y的位置 addch(“-”);//在当前位置画字符“-” refresh();//将做清除萤幕的工作 } } (m=0;m & lt;22;m +=5) { (n=1;n & lt;8;n + +) { 移动(n, m); addch (“|”); refresh (); } } (y=0;y & lt;4;y + +) { 为(x=0;x & lt;4;x + +) { draw_one (y、x); } } } 空白draw_one (int y, int x) { int i, m, k, j。 字符c [5]={0 x00}; i=[y] [x]; m=0; (我在0) { j=我% 10; c [m + +]=j + ' 0 '; 我=/10; } m=0; k=(x + 1) * 5 - 1; 而(c [m] !=0 x00) { 移动(2 * y + 1, k); addch (c [m + +)); k,; } } 空打() { int x, y,我new_x new_y,温度; int old_empty移动; char ch; 而(1) { 移动=0; old_empty=空; ch=getch (); 开关(ch) { 案例97://左移 案例104://h 案例68://左移方向键 (y=0;y & lt;4;y + +) 为(x=0;x & lt;4,) { 如果([y] [x]==0) { x + +; 继续; } 其他的 { (i=x + 1;我& lt;4;我+ +) { 如果([y][我]==0) { 继续; } 其他的 { 如果([y] [x]==[y][我]) { [y] [x] +=[y][我]; [y][我]=0; 空+ +; 打破; } 其他的 { 打破; } } } x=我; } } (y=0;y & lt;4;y + +) 为(x=0;x & lt;4;x + +) { 如果([y] [x]==0) { 继续; } 其他的 { (我=x;(我在0),,([y] [i - 1]==0);我——) { [y] [i - 1]=[y][我]; [y][我]=0;=1; } } } 打破; 案例100://右移d 案例108://l 案例67://右移方向键 (y=0;y & lt;4;y + +) (x=3;x在=0,) { 如果([y] [x]==0) { x -; 继续; } 其他的 { (i=x - 1;我在=0;我——) { 如果([y][我]==0) { 继续; } else if ([y] [x]==[y][我]) { [y] [x] +=[y][我]; [y][我]=0; 空+ +; 打破; } 其他的 { 打破; } } x=我; } } (y=0;y & lt;4;y + +) (x=3;x在=0;x——) { 如果([y] [x]==0) { 继续; } 其他的 { (我=x;(我& lt;3),,(一个[y] (i + 1)==0);我+ +) { [y] [i + 1]=[y][我]; [y][我]=0;=1; } } } 打破; 案例119://上移w 107://k 案例65://上移方向键 为(x=0;x & lt;4;x + +) (y=0;y & lt;4,) { 如果([y] [x]==0) { y + +; 继续; } 其他的 { (i=y + 1;我& lt;4;我+ +) { 如果([我][x]==0) { 继续; } else if ([y] [x]==[我][x]) { [y] [x] +=[我][x]; [我][x]=0; 空+ +; 打破; } 其他的 { 打破; } } y=我; } } 为(x=0;x & lt;4;x + +) (y=0;y & lt;4;y + +) { 如果([y] [x]==0) { 继续; } 其他的 { (我=y;(我在0),,((i - 1] [x]==0);我——) { (i - 1] [x]=[我][x]; [我][x]=0;=1; } } } 打破; 案例115://下移 案例106://j 案例66://下移方向键 为(x=0;x & lt;4;x + +) (y=3;y祝辞=0,) { 如果([y] [x]==0) { y -; 继续; } 其他的 { (i=y - 1;我在=0;我——) { 如果([我][x]==0) { 继续; } else if ([y] [x]==[我][x]) { [y] [x] +=[我][x]; [我][x]=0; 空+ +; 打破; } 其他的 { 打破; } } y=我; } } 为(x=0;x & lt;4;x + +) (y=3;y祝辞=0;y——) { 如果([y] [x]==0) { 继续; } 其他的 { (我=y;(我& lt;3),,((i + 1) (x)==0);我+ +) { (i + 1) [x]=[我][x]; [我][x]=0;=1; } } } 打破; 例“问”: 例“问”: game_over (); 打破; 默认值: 继续; 打破; } 如果(空& lt;=0) game_over (); 如果((空!=old_empty) | |(移动==1)) { 做 { new_x=rand () % 4; new_y=rand () % 4; },([new_y] [new_x] !=0); cnt_value(及new_y, new_x); 做 { temp=rand () % 4; },(temp==0 | | temp==2); [new_y] [new_x]=temp + 1; 空的, } 画(); } } int cnt_one (int, int x) { int值=https://www.yisu.com/zixun/1; 如果(y - 1> 0) (y - 1] [x]吗?0:价值+ +; 如果(y + 12048 C语言实现游戏代码