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

C語言實現(xiàn)數(shù)字連連看

 更新時間:2021年09月08日 15:29:18   作者:weixin_45662694  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)數(shù)字連連看游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)數(shù)字連連看的具體代碼,供大家參考,具體內(nèi)容如下

要求

連連看小游戲開發(fā),使用二維數(shù)組來保存游戲地圖的數(shù)據(jù),實現(xiàn)連連看的核心功能。歡樂連連看的功能有:主界面、開始游戲、消子、判斷勝負、提示、重排、計時、游戲模式。

主界面

游戲主界面就是進行各項操作的入口。

開始游戲

玩家選擇開始游戲模式,進入游戲后,選擇開始游戲,系統(tǒng)根據(jù)設置隨機生成數(shù)字,以供玩家點擊消除。

消子

對玩家選中的兩張圖片進行判斷,判斷是否符合消除規(guī)則。只有符合以下規(guī)則的圖片對才能被消除:

  • 一條直線連通
  • 兩條直線連通
  • 三條直線連通

如果可以消除,兩個數(shù)字變?yōu)?。如果不能消除,則保持原來的游戲地圖。

判斷勝負

當游戲完成后,需要判斷游戲勝負。不同模式下判斷勝負的規(guī)則不同。

  • 基本模式時,如果在五分鐘內(nèi)將游戲地圖的所有圖片都消除,則提示玩家勝利。
  • 休閑模式時,如果游戲地圖中所有圖片都被消除,則提示玩家獲勝。

提示

可以提示界面上能夠消除的一對圖片。

計時

設定一定時間來輔助游戲是否結束。

游戲模式

游戲模式有:基本模式、休閑模式和關卡模式三種,可以根據(jù)是否定時等規(guī)則進行設置。

代碼

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WIDTH 10
#define HEIGHT 12
int datas[HEIGHT][WIDTH] = {0};

int Choose_type ();
void Creat_datas (int fol);
bool IsHLinked(int x1,int y1,int x2,int y2);
bool IsVLinked(int x1,int y1,int x2,int y2);
bool IsZeroTurnLinked(int x1,int y1,int x2, int y2);  //一條線 
bool IsOneTurnLinked(int x1, int y1, int x2,int y2);  //二條線  
bool IsTwoTurnLinked(int x1,int y1,int x2,int y2);  //三條線 
bool Judge_Answer (int x1,int y1,int x2,int y2);  //判斷是否可消去 
void Print_datas ();
bool Play_Game (int Flo);
bool Isblank ();
bool Help_ans ();
bool Basic_Play ();//基礎 
bool Relax_Play ();//休閑 
bool Win_Play ();//闖關 

int main()
{
 int Flo;
 Flo = Choose_type ();  // choose the type
 if (Flo == 0) return 0;
 srand(unsigned(time(NULL)));
 Creat_datas(Flo);  //creat the graph
 Print_datas ();
 bool ov;
 ov = Play_Game (Flo);
 if (ov == true){
  printf ("VICTORY");
 }
 else{
  printf ("FAILED");
 }
 return 0;
 }
 
 bool Basic_Play ()
 {
  long int t1 ,t2 = 0 ;
  int op = 1;
  int x1,y1,x2,y2;
  bool ANS;
  printf ("五分鐘計時開始\n");
  t1 = clock();
  while (t2 < 300000 && !Isblank() && op != 0 )
  {
   if (op == 1)
   {
    Print_datas ();
    printf("請輸入兩者的坐標[x1 y1 x2 y2]:");   //從上到下,從左到右,先行后列 
    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    if (Judge_Answer (x1, y1, x2,y2))
    {
     datas[x1][y1] = datas[x2][y2] = 0;
     Print_datas ();
   }
    else{
    printf("錯誤");
    }
  }
  if (op == 2)
  { 
    ANS = Help_ans ();
    Print_datas ();
    if (ANS == false)  
    {
     printf ("已沒有可以消去的\n");
     return true;
    }
   }
  printf("是否繼續(xù)游戲 1、YES 0、NO 2、HELP:");
  scanf ("%d",&op);
  t2 = clock() - t1;
 }
 if (t2 > 299)
 {
  printf ("超時\n");
  return false;
 }
 if (Isblank()) return true;
 else return false;
}

bool Help_ans ()
{
 int k;
 for (int i = 1; i < 11;i++)
 {
  for (int j = 1; j < 9;j++)
  {
   if (datas[i][j] != 0)
   {
    k = j+1;
    for (int m = i; m < 11;m++)
    {
     for (int n = k; n < 9;n++)
     {
      if (datas[i][j] == datas[m][n])
      {
       if (Judge_Answer(i,j,m,n))
        {
         printf ("(%d,%d)  (%d,%d)\n",i,j,m,n);
         datas[i][j] = datas[m][n] = 0;
         return true;
        }
      }
     }
     k = 1;
    }
   }
  }
 }
 return false;
}

 
  bool Relax_Play ()
 {
  int op = 1;
  int x1,y1,x2,y2;
  bool ANS;
  while (!Isblank() && op != 0)   //G isn't blank
  {
   if (op == 1)
   {
    Print_datas ();
    printf("請輸入兩者的坐標[x1 y1 x2 y2]:");
    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    if (Judge_Answer (x1, y1, x2,y2))
    {
     datas[x1][y1] = datas[x2][y2] = 0;
     Print_datas ();
    }
    else{
     printf("錯誤");
    }
   }
   if (op == 2)
   { 
    ANS = Help_ans ();
    Print_datas ();
    if (ANS == false)  
    {
     printf ("已沒有可以消去的\n");
     return true;
    }
   }
   printf("是否繼續(xù)游戲 1、YES 0、NO 2、HELP:");
   scanf ("%d",&op);
  }
  if (!Isblank()) return false;
  else  return true;
 }
 
  bool Win_Play ()
 {
  int op = 1;
  int x1,y1,x2,y2;
  bool ANS;
  while (!Isblank() && op != 0)   //G isn't blank
  {
   if (op == 1)
   {
    Print_datas ();
    printf("請輸入兩者的坐標[x1 y1 x2 y2]:");
    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    if (Judge_Answer (x1, y1, x2,y2))
    {
     datas[x1][y1] = datas[x2][y2] = 0;
     Print_datas ();
    }
    else{
     printf("錯誤");
    }
   }
   printf("是否繼續(xù)游戲 1、YES 0、NO :");
   scanf ("%d",&op);
  }
  if (!Isblank() && Help_ans) return false;
  else 
   return true ;
 }
 
 bool Isblank ()
 {
  for(int j=1; j < 10 ; j++)
 {
  for (int i= 1; i< 8 ; i++)
  {
   if (datas[j][i] != 0)  return false;
  }
 }
 return true;
 }
 
bool Play_Game (int Flo)
 {
  bool Ans;
  if (Flo == 1)    //the basic type
  {
   printf ("基本模式:\n");
   Ans = Basic_Play ();
   return Ans;
  }
  if (Flo == 2)    //the relax type
  {
   printf ("休閑模式:\n");
   Ans = Relax_Play ();
   return Ans;
  }
  else    //the win type
  {
   printf ("第%d關游戲:\n",Flo - 2);
   Ans = Win_Play ();
   return Ans;
  }
 }
 
 void Print_datas ()
 {
  for(int j=1; j < 11 ; j++)
 {
  printf("\t\t");
  for (int i= 1; i< 9 ; i++)
  {
   printf("%d\t",datas[j][i]);
  }
  printf("\n");
 }
 }
 
 bool Judge_Answer (int x1,int y1,int x2,int y2)
 {
  if (datas [x1][y1] != datas[x2][y2] || datas [x1][y1] == 0 || datas [x2][y2] == 0 ) return false;
  if (x1 == x2  &&  y1 == y2)   return false;
  if (x1 > 11 || x2 > 11 || y1> 9 || y2 > 9) return false;
  if (x1 == x2 || y1 == y2)
  {
   if (IsZeroTurnLinked(x1,y1,x2,y2) || IsTwoTurnLinked(x1,y1,x2,y2))  return true;
  }
 else{
  if (IsOneTurnLinked(x1,y1,x2,y2) || IsTwoTurnLinked(x1,y1,x2,y2))  return true;
 }
 return false;
 }
 
 int Choose_type ()
 {
  printf("請選擇你要進行的操作:1,開始游戲  2,結束游戲\n");
  int op;
  scanf("%d",&op);
  if (op == 1)
  {
   printf("\n請選擇游戲模式:1、基本模式  2、休閑模式  3、關卡模式\n");
  int ops;
  scanf ("%d",&ops);
  if (ops == 1) return 1;
  if (ops == 2) return 2;
  if (ops == 3)
  {
   printf("\n請選擇你選擇的關卡3-16:");
   int opsd;
   scanf ("%d",&opsd);
   return opsd;
  }
  }
  if (op == 2) return 0;
 }
 
void Creat_datas (int fol)
 {
  int tmpDatas[80] = {0}; // 定義一個臨時數(shù)組用于存放
  int PicNum[] = {3,4,5,1,2,7,9,6,8,44,78,12,90,33,34};
 int Count = 0,i, j, d = 0,Pic,tem,t;
 Pic = 8 * 10 / (fol + 9 );
 for(j=0; j < 80 ; j++)
 {
  tmpDatas[j] = PicNum[d];
  Count++;
  if (Count == Pic )
  {
   d++; 
   Count = 0; 
  }
 }
 d = 80;
 for(j=1;j < HEIGHT - 1;j++)
  for (i = 1;i < WIDTH - 1; i++)
  {
   t = rand() % d;   //Fisher-Yates Shuffle 
   tem = tmpDatas[t];
   tmpDatas[t] = tmpDatas[d -1];
   tmpDatas[d - 1] = tem;
   datas[j][i] = tmpDatas[d -1];
   d--;
  }
}



bool IsHLinked(int x1,int y1,int x2,int y2) //橫向是否連接
{
 int minY,maxY;
 if (x1 != x2)  return false;
 if (y1 < y2){
  minY = y1;
  maxY = y2;
 }
 else{
  minY = y2;
  maxY = y1;
 } 
 if (maxY - minY == 1) return true;
 for ( int i = minY +1; i < maxY ; i++) //從左到右檢查中間的點是不是空的
 {
  if (datas[x1][i] != 0)  return false;
 }
 return true;
}

bool IsVLinked(int x1,int y1,int x2,int y2) //縱向是否連接
{
 int minX,maxX;
 if (y1 != y2)  return false;
 if (x1 < x2){
  minX = x1;
  maxX = x2;
 }
 else{
  minX = x2;
  maxX = x1;
 }
 if (maxX - minX == 1) return true; 
 for ( int i = minX +1; i < maxX ; i++) 
 {
  if (datas[i][y1] != 0) return false;
 }
 return true;
}



bool IsZeroTurnLinked(int x1,int y1,int x2, int y2)  //不轉折時判斷
{
 if (IsHLinked(x1, y1, x2,y2))
 {
  return true ;
 }
 if (IsVLinked(x1, y1, x2, y2))
 {
  return true ;
 }
 return false;
}



bool IsOneTurnLinked(int x1, int y1, int x2,int y2) //轉折一次
{
 int tmpX[2] = { x1, x2 };
 int tmpY[2] = { y2, y1 };
 for (int i = 0; i < 2; i++)
  {
   if (datas[tmpX[i]][tmpY[i]] != 0) continue;
   if (IsZeroTurnLinked( tmpX[i], tmpY[i], x1, y1) && IsZeroTurnLinked( tmpX[i], tmpY[i], x2,y2))
   {
    return true;
   }
  }
 return false;
}


bool IsTwoTurnLinked(int x1,int y1,int x2,int y2)
{
 int j, tmpX1,tmpY1,tmpX2,tmpY2;
 //縱向遍歷所有點
 tmpX1 = x1;
 for ( j = 0; j < WIDTH; j++)
 {
  tmpY1 = j;
  if (j == y1)  continue; 
  if (tmpX1 == x2 && tmpY1 == y2) continue; //重合
  tmpX2 = x2;
  tmpY2 = tmpY1;
  if (datas[tmpX1][tmpY1] != 0 || datas[tmpX2][tmpY2] != 0) continue;
  if (IsZeroTurnLinked(tmpX1, tmpY1, tmpX2, tmpY2) && IsZeroTurnLinked(tmpX1, tmpY1, x1, y1) && IsZeroTurnLinked(tmpX2, tmpY2, x2, y2))
   return true;
 }
 //橫向遍歷所有點
 tmpY1 = y1;
 for ( j = 0; j < HEIGHT; j++)
 {
  tmpX1 = j;
  if (j == x1)  continue; 
  if (tmpY1 == y2 && tmpX1 == x2) continue; //重合
  tmpY2 = y2;
  tmpX2 = tmpX1;
  if (datas[tmpX1][tmpY1] != 0 || datas[tmpX2][tmpY2] != 0) continue;
  if (IsZeroTurnLinked(tmpX1, tmpY1, tmpX2, tmpY2) && IsZeroTurnLinked(tmpX1, tmpY1, x1, y1) && IsZeroTurnLinked(tmpX2, tmpY2, x2, y2))
  {
   return true;
  }
 }
 return false;
 }

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

相關文章

  • 基于C++實現(xiàn)三種不同版本的通訊錄

    基于C++實現(xiàn)三種不同版本的通訊錄

    這篇文章主要為大家詳細介紹了如何通過C++實現(xiàn)三種不同版本的通訊錄(動態(tài)版本、靜態(tài)版本、文件版本),文中的示例代碼講解詳細,希望對大家有所幫助
    2022-11-11
  • C++ 靜態(tài)成員的類內(nèi)初始化詳解及實例代碼

    C++ 靜態(tài)成員的類內(nèi)初始化詳解及實例代碼

    這篇文章主要介紹了C++ 靜態(tài)成員的類內(nèi)初始化詳解及實例代碼的相關資料,需要的朋友可以參考下
    2017-02-02
  • C++封裝遠程注入類CreateRemoteThreadEx實例

    C++封裝遠程注入類CreateRemoteThreadEx實例

    這篇文章主要介紹了C++封裝遠程注入類CreateRemoteThreadEx實例,詳細講述了注入DLL到指定的地址空間以及從指定的地址空間卸載DLL的方法,需要的朋友可以參考下
    2014-10-10
  • C/C++的內(nèi)存管理你了解嘛

    C/C++的內(nèi)存管理你了解嘛

    這篇文章主要為大家介紹了C/C++的內(nèi)存管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 深度揭秘C++面向對象編程中繼承的核心概念

    深度揭秘C++面向對象編程中繼承的核心概念

    我們知道C語言是面向過程的編程語言,C++在C語言的基礎上進化出了面向對象的模型,而繼承就是面向對象的重要屬性,下面就讓小編來和大家詳細講講吧
    2023-07-07
  • C++用winapi?socket實現(xiàn)局域網(wǎng)語音通話功能

    C++用winapi?socket實現(xiàn)局域網(wǎng)語音通話功能

    這篇文章主要介紹了socket實現(xiàn)局域網(wǎng)語音通話?c++?winapi,功能介紹支持錄音設備查找以及播放設備查找,支持局域網(wǎng)語音通話,通話包含語音來電提醒和掛斷電話的提示信息,還能實時的獲取在線用戶的數(shù)量以及對應的id,需要的的朋友一起看看
    2022-06-06
  • C語言結構體(struct)的詳細講解

    C語言結構體(struct)的詳細講解

    C語言中,結構體類型屬于一種構造類型(其他的構造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關于C語言結構體(struct)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • c++11中std::move函數(shù)的使用

    c++11中std::move函數(shù)的使用

    本文主要介紹了c++11中std::move函數(shù)的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言矩陣連乘 (動態(tài)規(guī)劃)詳解

    C語言矩陣連乘 (動態(tài)規(guī)劃)詳解

    這篇文章主要介紹了C語言矩陣連乘 (動態(tài)規(guī)劃)詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • C++實現(xiàn)簡單學生管理系統(tǒng)

    C++實現(xiàn)簡單學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

阳原县| 玛纳斯县| 迭部县| 望都县| 犍为县| 泸西县| 色达县| 双辽市| 辽阳县| 平乡县| 容城县| 迁安市| 车致| 临西县| 合水县| 托里县| 平遥县| 澄城县| 宜良县| 察哈| 仁寿县| 永城市| 庆安县| 西乡县| 永丰县| 饶阳县| 商城县| 久治县| 邓州市| 朔州市| 宜昌市| 岑巩县| 罗源县| 博客| 巢湖市| 新和县| 肥东县| 红河县| 台东市| 利津县| 托里县|