欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

C語言

C++ 實現(xiàn)游戲

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

C++ 實現(xiàn)2048游戲范例

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

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

  最后,祝試玩愉快!

  界面丑陋,求不笑。

  以下是源代碼:

  復制代碼 代碼如下:

  /*By Reason*/

  #include

  #include

  #include

  #include

  #include

  #include//為了讀取方向鍵

  #include

  using namespace std;

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

  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()//棋盤最大數(shù)

  {

  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()//上移后添加新數(shù)

  {

  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()//下移后添加新數(shù)

  {

  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()//左移后添加新數(shù)

  {

  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()//右移后添加新數(shù)

  {

  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()//主函數(shù)

  {

  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)<<"你的最后成績?yōu)椋?quot;<<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++ 實現(xiàn)游戲】相關文章:

C++實現(xiàn)一維向量旋轉算法07-31

c++利用windows函數(shù)實現(xiàn)計時范例11-03

C++實現(xiàn)自底向上的歸并排序算法09-09

c和c++中實現(xiàn)函數(shù)回調的方法08-30

C++實現(xiàn)自頂向下的歸并排序算法09-14

堆排序算法及用C++實現(xiàn)基于最大堆的堆09-19

C++如何實現(xiàn)二叉樹葉子節(jié)點個數(shù)計算09-16

C++ this指針詳解07-04

C++類的轉換10-17