最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言代碼實(shí)現(xiàn)2048游戲

 更新時(shí)間:2020年02月08日 07:26:00   作者:我是zcy啊  
這篇文章主要為大家詳細(xì)介紹了C語言代碼實(shí)現(xiàn)2048游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<curses.h>
/*頭文件*/
int i,j,a[4][4]={};/*二維數(shù)組a[4][4]全為0*/
void kaishi()/*生成開始界面*/
{
  printf("Welcome to 2048\n");
  printf("  1).新游戲\n");
  printf("  2).幫助\n");
}
int defen(int a[][4])/*計(jì)分函數(shù)*/
{
  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;/*以最大數(shù)的累加作為得分*/
}
void jiemian(int a[][4])
{
  int b[2]={2,4},c[4]={0,1,2,3},sum,n,m;
  do
  {
    srand((int)time(NULL));/*以時(shí)間作為隨機(jī)數(shù)種子*/
    m=c[rand()%4];
    n=c[rand()%4];
    /*隨機(jī)生成坐標(biāo)*/
    if(a[m][n]==0)/*判斷是否為空格*/
    {
      a[m][n]=b[rand()%2];/*隨機(jī)生成2或4*/
      break;/*跳出循環(huán)*/
    }
  }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]);/*輸出隨機(jī)生成的2或4*/
        else
        {
          if(a[i][j]>0)
            printf("| %d ",a[i][j]);/*如果a[i][j]有數(shù)字,則輸出數(shù)字*/
          else
            printf("|   ");/*如果a[i][j]無數(shù)字則輸出空格*/
        }
      }
    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則進(jìn)行判斷,否則直接跳到下一項(xiàng)*/
        if(a[i][j]==a[i+1][j]&&a[i][j]!=0)/*判讀相鄰兩項(xiàng)是否相等*/
        {
          a[i][j]=2*a[i][j];/*上面一項(xiàng)變成兩倍*/
          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;
            }
          /*將下面的數(shù)整體上移,再循環(huán)*/
        }
}
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為循環(huán)次數(shù),m替代i使循環(huán)繼續(xù)*/
          {
            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;/*如果棋盤中存在一個(gè)空格,則跳出判斷,繼續(xù)生成隨機(jī)數(shù)*/
          }
          else
            flag=0;
        }
       end:;
    }
  }
  if(k=='2')
  {
    do
    {
      printf("游戲規(guī)則:通過點(diǎn)擊<w>,<s>,<a>,<d>鍵來實(shí)現(xiàn)數(shù)字的上下左右的移動(dòng),使相同的數(shù)字相加,每個(gè)格子中的數(shù)的累加將作為得分,當(dāng)格子填滿且無法移動(dòng)時(shí),游戲結(jié)束。\n");
      printf("  3).返回\n");
      k=getchar();
    }while(k!=3);
    goto outloop;/*跳到開始界面*/
  }
  printf("     游戲結(jié)束\n");
  return 0;
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++網(wǎng)絡(luò)編程詳細(xì)講解

    C++網(wǎng)絡(luò)編程詳細(xì)講解

    計(jì)算機(jī)是通過TCP/IP協(xié)議進(jìn)行互聯(lián)從而進(jìn)行通信的,為了把復(fù)雜的TCP/IP協(xié)議隱藏起來,更方便的實(shí)現(xiàn)計(jì)算機(jī)中兩個(gè)程序進(jìn)行通信,引出了socket這個(gè)概念
    2022-10-10
  • C++?TCP網(wǎng)絡(luò)編程詳細(xì)講解

    C++?TCP網(wǎng)絡(luò)編程詳細(xì)講解

    TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會(huì)保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission?Control?Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層
    2022-09-09
  • C語言形參和實(shí)參的區(qū)別詳解

    C語言形參和實(shí)參的區(qū)別詳解

    在函數(shù)定義和調(diào)用過程中,形參和實(shí)參是非常重要的概念,本文主要介紹了C語言形參和實(shí)參的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • OpenCV+Qt實(shí)現(xiàn)圖像處理操作工具的示例代碼

    OpenCV+Qt實(shí)現(xiàn)圖像處理操作工具的示例代碼

    這篇文章主要介紹了利用OpenCV+Qt實(shí)現(xiàn)圖像處理操作工具,可以實(shí)現(xiàn)雪花屏、高斯模糊、中值濾波、毛玻璃等操作,感興趣的可以了解一下
    2022-08-08
  • QT網(wǎng)絡(luò)通信TCP客戶端實(shí)現(xiàn)詳解

    QT網(wǎng)絡(luò)通信TCP客戶端實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了QT網(wǎng)絡(luò)通信TCP客戶端實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • opencv實(shí)現(xiàn)角點(diǎn)檢測

    opencv實(shí)現(xiàn)角點(diǎn)檢測

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)角點(diǎn)檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言用遞歸函數(shù)實(shí)現(xiàn)漢諾塔

    C語言用遞歸函數(shù)實(shí)現(xiàn)漢諾塔

    大家好,本篇文章主要講的是C語言用遞歸函數(shù)實(shí)現(xiàn)漢諾塔,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Qt使用windeployqt工具實(shí)現(xiàn)程序打包發(fā)布方法

    Qt使用windeployqt工具實(shí)現(xiàn)程序打包發(fā)布方法

    本文主要介紹了Qt使用windeployqt工具實(shí)現(xiàn)程序打包發(fā)布方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 基于C++編寫一個(gè)Json解析器

    基于C++編寫一個(gè)Json解析器

    這篇文章主要為大家詳細(xì)介紹了如何基于C++編寫一個(gè)Json解析器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C語言實(shí)現(xiàn)快速排序的方法及優(yōu)化

    C語言實(shí)現(xiàn)快速排序的方法及優(yōu)化

    這篇文章主要介紹了C語言實(shí)現(xiàn)快速排序的方法及優(yōu)化,快速排序是Hoare于1962年提出的一種二叉樹結(jié)構(gòu)的交換排序方法,下面我們來看一看傳說中的快速排序的特點(diǎn)與效率怎么樣,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

微博| 尼勒克县| 文山县| 惠水县| 盘锦市| 大同县| 内丘县| 开化县| 鸡西市| 沿河| 洛浦县| 化州市| 陆川县| 溧水县| 海晏县| 西华县| 济南市| 双鸭山市| 大连市| 全州县| 商丘市| 齐齐哈尔市| 西华县| 中宁县| 涡阳县| 鄂温| 太和县| 乐至县| 缙云县| 汨罗市| 云林县| 南乐县| 宜兰市| 雅江县| 武安市| 龙南县| 德庆县| 大姚县| 聊城市| 乌鲁木齐县| 内江市|