91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言代碼如何實現2048游戲

發布時間:2021-05-27 14:24:33 來源:億速云 閱讀:539 作者:小新 欄目:編程語言

這篇文章主要介紹了C語言代碼如何實現2048游戲,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

我是大一新生,在寒假的實訓課上老師讓我們用c語言分組編程一個小游戲,我們組選的是“2048”。由于我們組上有一個大神,于是我們把大部分的工作交給了大神做,但是實訓完成之后我感覺到碌碌無為,什么也沒學到,自己對于c語言的理解也僅僅局限于書本之上,想到那些大神們已經基本可以自己編程一些小游戲了,心里就非常著急。于是利用這個寒假,我自己獨立完成了“2048”小游戲的編程。

游戲代碼我是用Xcode編的,我是IOS小白,有些頭文件在Xcode中不能使用而我又找不到可以替代的,所以一些功能就不能實現比如清屏功能和儲存數據的功能還有音樂功能,不僅如此還存在數字對不齊的問題。希望可以有大神能夠指導我,萬分感激!

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<curses.h>
/*頭文件*/
int i,j,a[4][4]={};/*二維數組a[4][4]全為0*/
void kaishi()/*生成開始界面*/
{
  printf("Welcome to 2048\n");
  printf("  1).新游戲\n");
  printf("  2).幫助\n");
}
int defen(int a[][4])/*計分函數*/
{
  int max=a[0][0];
  int static sum=0;
  for(i=0;i<4;i++)
    for(j=0;j<4;j++)
      if(a[i][j]>max)
        max=a[i][j];
  sum+=max;
  return sum;/*以最大數的累加作為得分*/
}
void jiemian(int a[][4])
{
  int b[2]={2,4},c[4]={0,1,2,3},sum,n,m;
  do
  {
    srand((int)time(NULL));/*以時間作為隨機數種子*/
    m=c[rand()%4];
    n=c[rand()%4];
    /*隨機生成坐標*/
    if(a[m][n]==0)/*判斷是否為空格*/
    {
      a[m][n]=b[rand()%2];/*隨機生成2或4*/
      break;/*跳出循環*/
    }
  }while(1);
  printf("%d %d %d\n",m,n,a[m][n]);
  for(i=0;i<4;i++)
  {
    printf("-------------------------\n");
    for(j=0;j<4;j++)
      {
        if((m==i)&&(n==j))
          printf("| %d ",a[m][n]);/*輸出隨機生成的2或4*/
        else
        {
          if(a[i][j]>0)
            printf("| %d ",a[i][j]);/*如果a[i][j]有數字,則輸出數字*/
          else
            printf("|   ");/*如果a[i][j]無數字則輸出空格*/
        }
      }
    printf("|\n");
  }
    printf("-------------------------\n");
    printf("     得分:%d\n",sum=defen(a));
}
void hebingup(int a[][4])/*向上合并*/
{
  int m;
  for(j=0;j<4;j++)
    for(i=0;i<3;i++)
      if(a[i][j]>0)/*若a[i][j]不為0則進行判斷,否則直接跳到下一項*/
        if(a[i][j]==a[i+1][j]&&a[i][j]!=0)/*判讀相鄰兩項是否相等*/
        {
          a[i][j]=2*a[i][j];/*上面一項變成兩倍*/
          if(i==2)
            a[i+1][j]=0;
          else
            for(m=i+1;m<3;m++)
            {
              a[m][j]=a[m+1][j];
              a[m+1][j]=0;
            }
          /*將下面的數整體上移,再循環*/
        }
}
void hebingdown(int a[][4])/*向下合并*/
{
  int m;
  for(j=0;j<4;j++)
    for(i=3;i>0;i--)
      if(a[i][j]>0)
        if(a[i][j]==a[i-1][j])
        {
          a[i][j]=2*a[i][j];
          if(i==1)
            a[i-1][j]=0;
          else
            for(m=i-1;m>0;m--)
            {
              a[m][j]=a[m-1][j];
              a[m-1][j]=0;
            }
        }
}
void hebingleft(int a[][4])/*向左合并*/
{
  int m;
  for(i=0;i<4;i++)
    for(j=0;j<3;j++)
      if(a[i][j]>0)
        if(a[i][j]==a[i][j+1])
        {
          a[i][j]=2*a[i][j];
          if(j==2)
            a[i][j+1]=0;
          else
            for(m=j+1;m<3;m++)
            {
              a[i][m]=a[i][m+1];
              a[i][m+1]=0;
            }
        }
}
void hebingright(int a[][4])/*向右合并*/
{
  int m;
  for(i=0;i<4;i++)
    for(j=3;j>0;j--)
      if(a[i][j]>0)
        if(a[i][j]==a[i][j-1])
        {
          a[i][j]=2*a[i][j];
          if(j==1)
            a[i][j-1]=0;
          else
            for(m=j-1;m>0;m--)
            {
              a[i][m]=a[i][m-1];
              a[i][m-1]=0;
            }
        }
}
void yidong(char b)
{
  int x,m;
  switch(b)
  {
    case 'w' :
      for(j=0;j<4;j++)
        for(i=1;i<=3;i++)
          for(x=i,m=i;x>0;x--,m--)/*x為循環次數,m替代i使循環繼續*/
          {
            if(a[m-1][j]>0)
              break;/*若上一位非0,則跳到下一位*/
            else
            {
              a[m-1][j]=a[m][j];
              a[m][j]=0;
            }
          }
      hebingup(a);
      break;
    case 's' :
      for(j=0;j<4;j++)
        for(i=2;i>=0;i--)
          for(x=3-i,m=i;x>0;x--,m++)
          {
            if(a[m+1][j]>0)
              break;
            else
            {
              a[m+1][j]=a[m][j];
              a[m][j]=0;
            }
          }
      hebingdown(a);
      break;
    case 'a' :
      for(i=0;i<4;i++)
        for(j=1;j<=3;j++)
          for(x=j,m=j;x>0;x--,m--)
          {
            if(a[i][m-1]>0)
              break;
            else
            {
              a[i][m-1]=a[i][m];
              a[i][m]=0;
            }
          }
      hebingleft(a);
      break;
    case 'd' :
      for(i=0;i<4;i++)
        for(j=2;j>=0;j--)
          for(x=3-j,m=j;x>0;x--,m++)
          {
            if(a[i][m+1]>0)
              break;
            else
            {
              a[i][m+1]=a[i][m];
              a[i][m]=0;
            }
          }
      hebingright(a);
      break;
  }
}
int main(int argc,char *argv[])
{
  int flag=1;
  char c,k;
  system("stty -icanon");
outloop:;
  kaishi();
  k=getchar();
  printf("\n");
  if(k=='1')
  {
    while(flag==1)
    {
      jiemian(a);
      c=getchar();
      printf("\n");
      yidong(c);
      for(i=0;i<4;i++)
        for(j=0;j<4;j++)
        {
          if(a[i][j]==0)
          {
            flag=1;
            goto end;/*如果棋盤中存在一個空格,則跳出判斷,繼續生成隨機數*/
          }
          else
            flag=0;
        }
       end:;
    }
  }
  if(k=='2')
  {
    do
    {
      printf("游戲規則:通過點擊<w>,<s>,<a>,<d>鍵來實現數字的上下左右的移動,使相同的數字相加,每個格子中的數的累加將作為得分,當格子填滿且無法移動時,游戲結束。\n");
      printf("  3).返回\n");
      k=getchar();
    }while(k!=3);
    goto outloop;/*跳到開始界面*/
  }
  printf("     游戲結束\n");
  return 0;
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C語言代碼如何實現2048游戲”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梅河口市| 鄂托克前旗| 黑河市| 阳信县| 乾安县| 榆树市| 长子县| 海原县| 宁强县| 诸暨市| 观塘区| 井研县| 邢台市| 攀枝花市| 丽水市| 旅游| 芜湖市| 台前县| 碌曲县| 宝丰县| 大关县| 体育| 商都县| 寻乌县| 重庆市| 景德镇市| 沙洋县| 东明县| 太仓市| 社旗县| 九江市| 虹口区| 阜平县| 壤塘县| 赤壁市| 盖州市| 高陵县| 华安县| 甘肃省| 建德市| 日照市|