2048 C语言实现游戏代码

  

本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下
  

  

<>强效果图:

  

 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 + 1

2048 C语言实现游戏代码