首页 > 编程 > C > 正文

简单实现C语言2048游戏

2020-01-26 13:43:03
字体:
来源:转载
供稿:网友

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

/*2048*/ #include<stdio.h>  #include<conio.h>  #include<stdlib.h>  #include<time.h>       //全局变量 int x[4][4]={0}; int score=0;  int can_move;   int empty()  {    int i,j;   int n=0;   for(i=0;i<4;i++)    {     for(j=0;j<4;j++)     {        if(x[i][j]==0)       n++;      }    }   return n; }   int check() {   int i,j;   int a,b;   if(empty() == 0)   {     a=b=0;     for(i=0;i<4;i++)      {       for(j=0;j<3;j++)       {          if(x[i][j]==x[i][j+1])         a=1;       }      }     for(j=0;j<4;j++)      {       for(i=0;i<3;i++)       {          if(x[i][j]==x[i+1][j])         b=1;       }      }     if(a==0 && b==0)       return 0;     else       return 1;     }   else     return 1;  }   int win() {   int i,j;   int a=0;   if(check())   {     for(i=0;i<4;i++)      {       for(j=0;j<4;j++)       {          if(x[i][j]==2048)         a=1;        }      }   }   return a; }  void add()  {    int i,j;   int n=0;   if(empty() > 0)   {     while(n<16)     {       i=rand()%4;       j=rand()%4;       if(x[i][j] == 0)       {         if(rand()%100 < 80)         {           x[i][j]=2;         }         else         {           x[i][j]=4;          }         break;       }       n++;     }   }    }    void move_up() {   int i,j,k;   can_move=0;   for(j=0;j<4;j++)   {     for(i=0;i<4;i++)     {       if(x[i][j] == 0)       {         for(k=i+1;k<4;k++)         {           if(x[k][j] != 0)           {             x[i][j]=x[k][j];             x[k][j]=0;             can_move=1;             break;           }         }       }     }       for(i=0;i<3;i++)     {       if(x[i][j] == x[i+1][j] && x[i][j] != 0)       {         x[i][j] *= 2;         x[i+1][j]=0;         can_move=1;         score += x[i][j];       }     }      for(i=0;i<4;i++)     {       if(x[i][j] == 0)       {         for(k=i+1;k<4;k++)         {           if(x[k][j] != 0)           {             x[i][j]=x[k][j];             x[k][j]=0;             break;           }         }       }     }   }   if(can_move == 1)   {     add();   } }     void move_down() {   int i,j,k;   can_move=0;   for(j=0;j<4;j++)   {     for(i=3;i>=0;i--)     {       if(x[i][j] == 0)       {         for(k=i-1;k>=0;k--)         {           if(x[k][j] != 0)           {             x[i][j]=x[k][j];             x[k][j]=0;             can_move=1;             break;           }         }       }     }       for(i=3;i>0;i--)     {       if(x[i][j] == x[i-1][j] && x[i][j] != 0)       {         x[i][j] *= 2;         x[i-1][j]=0;         can_move=1;         score += x[i][j];       }     }      for(i=3;i>=0;i--)     {       if(x[i][j] == 0)       {         for(k=i-1;k>=0;k--)         {           if(x[k][j] != 0)           {             x[i][j]=x[k][j];             x[k][j]=0;             break;           }         }       }     }   }   if(can_move == 1)   {     add();   }  }    void move_left() {   int i,j,k;   can_move=0;   for(i=0;i<4;i++)   {     for(j=0;j<4;j++)     {       if(x[i][j] == 0)       {         for(k=j+1;k<4;k++)         {           if(x[i][k] != 0)           {             x[i][j]=x[i][k];             x[i][k]=0;             can_move=1;             break;           }         }       }     }       for(j=0;j<3;j++)     {       if(x[i][j] == x[i][j+1] && x[i][j] != 0)       {         x[i][j] *= 2;         x[i][j+1]=0;         can_move=1;         score += x[i][j];       }     }      for(j=0;j<3;j++)     {       if(x[i][j] == 0)       {         for(k=j+1;k<4;k++)         {           if(x[i][k] != 0)           {             x[i][j]=x[i][k];             x[i][k]=0;             break;           }         }       }     }   }   if(can_move == 1)   {     add();   } }    void move_right() {   int i,j,k;   can_move=0;   for(i=0;i<4;i++)   {     for(j=3;j>=0;j--)     {       if(x[i][j] == 0)       {         for(k=j-1;k>=0;k--)         {           if(x[i][k] != 0)           {             x[i][j]=x[i][k];             x[i][k]=0;             can_move=1;             break;           }         }       }     }       for(j=3;j>0;j--)     {       if(x[i][j] == x[i][j-1] && x[i][j] != 0)       {         x[i][j] *= 2;         x[i][j-1]=0;         can_move=1;         score += x[i][j];       }     }      for(j=3;j>=0;j--)     {       if(x[i][j] == 0)       {         for(k=j-1;k>=0;k--)         {           if(x[i][k] != 0)           {             x[i][j]=x[i][k];             x[i][k]=0;             break;           }         }       }     }   }   if(can_move == 1)   {     add();   } }       void out()  {    int i,j;   system("cls");    for(i=0;i<10;i++)    {      if(i==0)printf("┏━━┳━━┳━━┳━━┓/n┃  ┃  ┃  ┃  ┃/n┃");      else if(i==8)printf("┗━━┻━━┻━━┻━━┛/n");      else if(i==9)printf(" SCORE:%d/n",score);      else if(i%2==0)printf("┣━━╋━━╋━━╋━━┫/n┃  ┃  ┃  ┃  ┃/n┃");      else      {        for(j=0;j<4;j++)        {          if(x[i/2][j]!=0)printf("%4d",x[i/2][j]); else printf("  ");          printf("┃");        }        printf("/n");      }          }   if(win())   {printf("You are win!");}   if(!check())   {printf("Game over!");} }     int main()  {        unsigned char key;    add();   add();   out();       while(1)    {      key = getch();            switch(key)      {        case 'w': move_up();    break;        case 'a': move_left();   break;        case 's': move_down();   break;        case 'd': move_right();  break;      }      out();    }    return 0;  }  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选