国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++實(shí)現(xiàn)連連看游戲核心代碼

2020-05-23 13:21:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這兩天研究了一下連連看游戲的源代碼,感覺(jué)它挺簡(jiǎn)單的,主要就是判斷選中的兩張圖片能否消去。我參考了網(wǎng)上的源代碼(抱歉的是,不記得當(dāng)時(shí)下載的網(wǎng)址了,在此對(duì)原作者表示深深的歉意!),然后自己把核心代碼整理如下,與大家共享。需要說(shuō)明的是,這只是核心算法的代碼,界面設(shè)計(jì)和操作的代碼均已略去。

#include <stdlib.h>#include <time.h>//圖片類class picture{public: int type;//圖片的編號(hào),共有n種,從0到n-1 bool visible;//圖片是否可見(jiàn) int x;//圖片位置的橫坐標(biāo) int y;//圖片位置的綜坐標(biāo)};//整個(gè)圖由8行10列組成,每個(gè)單元格是一張小圖片const int pNum = 10;const int pType = 8;static picture p[pType][pNum];//進(jìn)入新一關(guān)void newStage(){ srand(time(0)); int i,j; for(i = 0;i < pType;++i) for(j = 0;j < pNum;j++)  p[i][j].visible = false; int x,y; for (i = 0;i < pType - 1;++i) for(j = 0;j < pNum;++j) {  bool re = true;  while (re)  {  x = rand() % pType;  y = rand() % pNum;  if (p[x][y].visible == false)  {   p[x][y].type = i;   p[x][y].visible = true;   p[x][y].x = x;   p[x][y].y = y;   re = false;  }  } } //處理剩余的最后一種圖片 for (i = 0;i < pType;++i)  for(j = 0;j < pNum;++j)  {  if (p[i][j].visible == false)  {   p[i][j].type = pType - 1;   p[i][j].visible = true;   p[i][j].x = i;   p[i][j].y = j;  }  }} //在a、b兩點(diǎn)之間畫(huà)線void drawLine(picture a,picture b){ }//判斷圖片a和b之間能否通過(guò)一條直線相連(a和b之間有0個(gè)轉(zhuǎn)角)bool matchDirect(picture a,picture b){ if(!(a.x == b.x || a.y == b.y)) return false; //a、b的橫坐標(biāo)相同時(shí) bool yMatch = true; if(a.x == b.x) { if(a.y > b.y) {  for(int i = b.y + 1;i < a.y;++i)  {  if(p[a.x][i].visible == true)   yMatch = false;  } } if(b.y > a.y) {  for(int i = a.y + 1;i < b.y;++i)  {  if(p[a.x][i].visible == true)   yMatch = false;  } } } //a、b的縱坐標(biāo)相同時(shí) bool xMatch = true; if(a.y == b.y) { if(a.x > b.x) {  for(int i = b.x + 1;i < a.x;++i)  {  if(p[i][a.y].visible == true)   xMatch = false;  } } if(b.x > a.x) {  for(int i = a.x + 1;i < b.x;++i)  {  if(p[i][a.y].visible == true)   xMatch = false;  } } } return (xMatch && yMatch);}//判斷圖片a和b之間是否可以通過(guò)一個(gè)轉(zhuǎn)角的折線相連bool matchOneCorner(picture a,picture b){ if (p[a.x][b.y].visible == false && matchDirect(a,p[a.x][b.y]) && matchDirect(p[a.x][b.y],b)) { drawLine(a,p[a.x][b.y]); drawLine(p[a.x][b.y],b); return true; } if (p[b.x][a.y].visible == false && matchDirect(a,p[b.x][a.y]) && matchDirect(p[b.x][a.y],b)) { drawLine(a,p[b.x][a.y]); drawLine(p[b.x][a.y],b); return true; } return false;}//判斷圖片a和b之間是否可以通過(guò)兩個(gè)轉(zhuǎn)角的折線相連bool matchTwoCorner(picture a,picture b){ int i,j; for(i = a.x - 1,j = a.y;i >= 0;--i) { if(p[i][j].visible == true)  break; else if(matchOneCorner(b,p[i][j])) {  drawLine(a,p[i][j]);  return true; } } for (i = a.x + 1,j = a.y;i < pNum;++i) { if(p[i][j].visible == true)  break; else if(matchOneCorner(b,p[i][j])) {  drawLine(a,p[i][j]);  return true; } } for(i = a.x,j = a.y - 1;j >= 0;--j) { if(p[i][j].visible == true)  break; else if(matchOneCorner(b,p[i][j])) {  drawLine(a,p[i][j]);  return true; } } for(i = b.x,j = b.y + 1;j < pType;++j) { if(p[i][j].visible == true)  break; else if(matchOneCorner(b,p[i][j])) {  drawLine(a,p[i][j]);  return true; } } return false;}//判斷a和b能否相連,條件是a和b的類型相同,且a和b之間的連線拐角數(shù)<=2個(gè)bool match(picture a,picture b){ if(a.type != b.type) return false; if(matchDirect(a,b)) { drawLine(a,b); return true; } else if(matchOneCorner(a,b)) return true; else if(matchTwoCorner(a,b)) return true; return false;}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 溧水县| 阿巴嘎旗| 江津市| 凉城县| 青阳县| 文安县| 泉州市| 台南县| 通海县| 洞口县| 偏关县| 志丹县| 安仁县| 遵化市| 维西| 伽师县| 独山县| 红河县| 庄浪县| 轮台县| 苍山县| 连江县| 麟游县| 龙口市| 八宿县| 墨竹工卡县| 庆元县| 廉江市| 和平区| 康保县| 察隅县| 南澳县| 岳池县| 田阳县| 湘乡市| 宿松县| 邵阳市| 平顶山市| 乾安县| 宜章县| 明光市|