<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            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

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看