<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C++ 實現游戲

    時間:2025-07-26 08:35:41 C語言

    C++ 實現2048游戲范例

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

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

      最后,祝試玩愉快!

      界面丑陋,求不笑。

      以下是源代碼:

      復制代碼 代碼如下:

      /*By Reason*/

      #include

      #include

      #include

      #include

      #include

      #include/pic/p>

      #include

      using namespace std;

      /pic/pic/p>

      int pane[4][4];/pic/p>

      int N=1;/pic/p>

      void showpane()/pic/p>

      {

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

      {

      /pic/p>

      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()/pic/p>

      {

      N=1;

      for(int i=0;i<=3;i++)/pic/p>

      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)/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      int flag=0;

      if(panemax()==2048)

      {

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

      flag=1;

      }

      return flag;

      }

      int ifGameOver()/pic/p>

      {

      int flag=0;

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

      {

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

      flag=1;

      }

      return flag;

      }

      void addnewnumberup()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      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()/pic/p>

      {

      int ret = 0;

      do

      {

      int ch = _getch();

      if(isascii(ch))

      continue;

      ch = _getch();

      switch(ch)

      {

      case 72:

      ret = 2; /pic/p>

      break;

      case 75:

      ret = 1; /pic/p>

      break;

      case 77:

      ret = 3; /pic/p>

      break;

      case 80:

      ret = 4; /pic/p>

      break;

      default:

      break;

      }

      } while (ret == 0);

      return ret;

      }

      int main()/pic/p>

      {

      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++實現一維向量旋轉算法10-17

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

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

    c和c++中實現函數回調的方法01-18

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

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

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

    C++ this指針詳解08-28

    C++類的轉換02-11

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