<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言

    C++ 實現游戲

    時間:2024-12-18 05:27:59 C語言 我要投稿
    • 相關推薦

    C++ 實現2048游戲范例

      《2048》是一款比較流行的數字游戲,最早于2014年3月20日發行。下面是由小編為你精心編輯的C++ 實現2048游戲范例,歡迎閱讀!

      說明:我一開始玩的是IOS APP版的TRHEES,后來才玩的2048,兩者在滑動的規則上有些區別,本人這個版本是這兩者的結合。

      最后,祝試玩愉快!

      界面丑陋,求不笑。

      以下是源代碼:

      復制代碼 代碼如下:

      /*By Reason*/

      #include

      #include

      #include

      #include

      #include

      #include//為了讀取方向鍵

      #include

      using namespace std;

      //srand( (unsigned)time( NULL ) );//隨機數種子 不能用在這里

      int pane[4][4];//棋盤

      int N=1;//2的n次方

      void showpane()//顯示棋盤

      {

      cout<<setw(46)<<"X2048 by Reason"<<endl;

      cout<<setw(50)<<" |-----------------------|"<<endl;

      for(int i=0;i<=3;i++)

      {

      cout<<setw(24)<<"";

      for(int j=0;j<=3;j++)

      {

      //SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);

      if(pane[i][j]==0)

      cout<<setw(2)<<"|"<<setw(4)<<" ";

      else

      cout<<setw(2)<<"|"<<setw(4)<<pane[i][j];

      if(j==3)

      {

      cout<<setw(2)<<"|"<<endl;

      cout<<setw(50)<<" |-----------------------|"<<endl;

      }

      }

      }

      }

      void newgame()//開始游戲

      {

      N=1;

      for(int i=0;i<=3;i++)//初始化棋盤

      for(int j=0;j<=3;j++)

      pane[i][j]=0;

      srand( (unsigned)time( NULL ) );

      int m=rand()%4;

      int n=rand()%4;

      int p=rand()%4;

      int q=rand()%4;

      pane[m][n]=pane[p][q]=2;

      showpane();

      }

      int if2n(int x)//判斷x是否是2的n次方

      {

      int flag=0;

      for(int n=1;n<=11;n++)

      {

      if(x==pow(2,n))

      {

      flag=1;

      if(n>N)

      N=n;

      return flag;

      }

      }

      return flag;

      }

      int upmove()//上移

      {

      int flag=0;

      for(int j=0;j<=3;j++)

      for(int i=0;i<3;i++)

      {

      if(if2n(pane[i][j]+pane[i+1][j])==1)

      {

      pane[i][j]=pane[i][j]+pane[i+1][j];

      pane[i+1][j]=0;

      flag=1;

      }

      }

      return flag;

      }

      int downmove()//下移

      {

      int flag=0;

      for(int j=0;j<=3;j++)

      for(int i=3;i>0;i--)

      {

      if(if2n(pane[i][j]+pane[i-1][j])==1)

      {

      pane[i][j]=pane[i][j]+pane[i-1][j];

      pane[i-1][j]=0;

      flag=1;

      }

      }

      return flag;

      }

      int leftmove()//左移

      {

      int flag=0;

      for(int i=0;i<=3;i++)

      for(int j=0;j<3;j++)

      {

      if(if2n(pane[i][j]+pane[i][j+1])==1)

      {

      pane[i][j]=pane[i][j]+pane[i][j+1];

      pane[i][j+1]=0;

      flag=1;

      }

      }

      return flag;

      }

      int rightmove()//右移

      {

      int flag=0;

      for(int i=0;i<=3;i++)

      for(int j=3;j>0;j--)

      {

      if(if2n(pane[i][j]+pane[i][j-1])==1)

      {

      pane[i][j]=pane[i][j]+pane[i][j-1];

      pane[i][j-1]=0;

      flag=1;

      }

      }

      return flag;

      }

      int testup()//能否上移測試

      {

      int flag=0;

      for(int j=0;j<=3;j++)

      for(int i=0;i<3;i++)

      {

      if((if2n(pane[i][j]+pane[i+1][j])==1)&&pane[i+1][j])

      {

      flag=1;

      }

      }

      return flag;

      }

      int testdown()//測試能否下移

      {

      int flag=0;

      for(int j=0;j<=3;j++)

      for(int i=3;i>0;i--)

      {

      if((if2n(pane[i][j]+pane[i-1][j])==1)&&pane[i-1][j])

      {

      flag=1;

      }

      }

      return flag;

      }

      int testleft()//測試能否左移

      {

      int flag=0;

      for(int i=0;i<=3;i++)

      for(int j=0;j<3;j++)

      {

      if((if2n(pane[i][j]+pane[i][j+1])==1)&&pane[i][j+1])

      {

      flag=1;

      }

      }

      return flag;

      }

      int testright()//測試能否右移

      {

      int flag=0;

      for(int i=0;i<=3;i++)

      for(int j=3;j>0;j--)

      {

      if((if2n(pane[i][j]+pane[i][j-1])==1)&&pane[i][j-1])

      {

      flag=1;

      }

      }

      return flag;

      }

      int panemax()//棋盤最大數

      {

      int max=pane[0][0];

      for(int i=0;i<=3;i++)

      for(int j=0;j<=3;j++)

      if(pane[i][j]>max)

      max=pane[i][j];

      return max;

      }

      int ifwin()//判斷是否勝利

      {

      int flag=0;

      if(panemax()==2048)

      {

      cout<<setw(45)<<"You Win!"<<endl;

      flag=1;

      }

      return flag;

      }

      int ifGameOver()//判斷是否游戲結束

      {

      int flag=0;

      if(testup()+ testdown() + testleft() + testright() == 0)

      {

      cout<<setw(43)<<"Game Over!"<<endl;

      flag=1;

      }

      return flag;

      }

      void addnewnumberup()//上移后添加新數

      {

      srand( (unsigned)time( NULL ) );

      int n;

      if(N==1)

      n=1;

      else

      n=(rand()%(N)+1);

      int newnumber=pow(2,n);

      for(int i=3;i>=0;i--)

      for(int j=0;j<=3;j++)

      if(pane[i][j]==0)

      {

      pane[i][j]=newnumber;

      return;

      }

      }

      void addnewnumberdown()//下移后添加新數

      {

      srand( (unsigned)time( NULL ) );

      int n;

      if(N==1)

      n=1;

      else

      n=(rand()%(N)+1);

      int newnumber=pow(2,n);

      for(int i=0;i<=3;i++)

      for(int j=0;j<=3;j++)

      if(pane[i][j]==0)

      {

      pane[i][j]=newnumber;

      return;

      }

      }

      void addnewnumberleft()//左移后添加新數

      {

      srand( (unsigned)time( NULL ) );

      int n;

      if(N==1)

      n=1;

      else

      n=(rand()%(N)+1);

      int newnumber=pow(2,n);

      for(int j=3;j>=0;j--)

      for(int i=0;i<=3;i++)

      if(pane[i][j]==0)

      {

      pane[i][j]=newnumber;

      return;

      }

      }

      void addnewnumberright()//右移后添加新數

      {

      srand( (unsigned)time( NULL ) );

      int n;

      if(N==1)

      n=1;

      else

      n=(rand()%(N)+1);

      int newnumber=pow(2,n);

      for(int j=0;j<=3;j++)

      for(int i=0;i<=3;i++)

      if(pane[i][j]==0)

      {

      pane[i][j]=newnumber;

      return;

      }

      }

      int GetDirection()//讀取方向

      {

      int ret = 0;

      do

      {

      int ch = _getch();

      if(isascii(ch))

      continue;

      ch = _getch();

      switch(ch)

      {

      case 72:

      ret = 2; // top

      break;

      case 75:

      ret = 1; // left

      break;

      case 77:

      ret = 3; // right

      break;

      case 80:

      ret = 4; // down

      break;

      default:

      break;

      }

      } while (ret == 0);

      return ret;

      }

      int main()//主函數

      {

      system("color f9");

      int makesure=1;

      while(makesure)

      {

      system("cls");

      newgame();

      while(ifwin()+ifGameOver()==0)

      {

      int c=GetDirection();

      switch(c)

      {

      case 2:

      if(testup()==1)

      {upmove();

      addnewnumberup();

      system("cls");

      showpane();

      }

      break;

      case 4:

      if(testdown()==1)

      {

      downmove();

      addnewnumberdown();

      system("cls");

      showpane();

      }

      break;

      case 1:

      if(testleft()==1)

      {

      leftmove();

      addnewnumberleft();

      system("cls");

      showpane();

      }

      break;

      case 3:

      if(testright()==1)

      {

      rightmove();

      addnewnumberright();

      system("cls");

      showpane();

      }

      break;

      default:

      break;

      }

      }

      cout<<setw(43)<<"你的最后成績為:"<<panemax()<<endl;

      cout<<setw(60)<<"若要重新開始游戲請輸入1,若要結束請輸入0。"<<endl;

      cin>>makesure;

      while(makesure!=1&&makesure!=0)

      {

      cout<<"輸入不正確,請重新輸入!"<<endl;

      cin>>makesure;

      }

      }

      cout<<"再見!"<<endl;

      system("pause");

      return 0;

    【C++ 實現游戲】相關文章:

    C++實現一維向量旋轉算法07-31

    c++利用windows函數實現計時范例11-03

    C++實現自底向上的歸并排序算法09-09

    c和c++中實現函數回調的方法08-30

    C++實現自頂向下的歸并排序算法09-14

    堆排序算法及用C++實現基于最大堆的堆09-19

    C++如何實現二叉樹葉子節點個數計算09-16

    C++ this指針詳解07-04

    C++類的轉換10-17

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人