連連看C語(yǔ)言課程設(shè)計(jì)報(bào)告_第1頁(yè)
連連看C語(yǔ)言課程設(shè)計(jì)報(bào)告_第2頁(yè)
連連看C語(yǔ)言課程設(shè)計(jì)報(bào)告_第3頁(yè)
連連看C語(yǔ)言課程設(shè)計(jì)報(bào)告_第4頁(yè)
連連看C語(yǔ)言課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、目錄問(wèn)題描述連連看是一款簡(jiǎn)單有趣的小游戲,曾經(jīng)風(fēng)靡一時(shí),玩家要將相同的兩張牌用三根以內(nèi)的直線連在一起就可以消除,規(guī)則簡(jiǎn)單容易上手,游戲速度節(jié)奏快,畫面清晰可愛(ài),適合細(xì)心的玩家。游戲勝利條件的判定:將棋盤上面的格子全部消除掉;失敗的判定:規(guī)定的時(shí)間內(nèi)格子沒(méi)有消除。問(wèn)題分析 連連看需要解決的問(wèn)題包括: (1)整個(gè)游戲界面和各種圖案的圖形顯示; (2)如何判斷鼠標(biāo)所點(diǎn)的兩個(gè)圖像能否相消; (3)如何判斷是否消除完全; (4)如何判斷游戲的結(jié)束及如何終止游戲; (5)游戲難度的設(shè)計(jì)和得分規(guī)則游戲總的流程可以描述如下:首先出現(xiàn)游戲界面,一幅由10*6的小圖片的構(gòu)成的畫面,玩家需要點(diǎn)擊 2 個(gè)相同圖案的對(duì)

2、子,其連接線不多于 3 根直線,也就是說(shuō)連接相同圖案時(shí),直線只能有兩個(gè)折點(diǎn),就可以成功將對(duì)子消除。此外,需要重點(diǎn)考慮的是游戲面板和各種形狀的方塊的數(shù)據(jù)結(jié)構(gòu)表示。格子面板可以用一個(gè)二維數(shù)組來(lái)表示。1、 開(kāi)發(fā)工具的介紹【 VS2008 】VS2008引入了250多個(gè)新特性,整合了對(duì)象、關(guān)系型數(shù)據(jù)、XML的訪問(wèn)方式,語(yǔ)言更加簡(jiǎn)潔。使用Visual Studio 2008可以高效開(kāi)發(fā)Windows應(yīng)用程序。設(shè)計(jì)器中可以實(shí)時(shí)反映變更,XAML中智能感知功能可以提高開(kāi)發(fā)效率。同時(shí)Visual Studio 2008支持項(xiàng)目模板、調(diào)試器和部署程序。Visual Studio 2008可以高效開(kāi)發(fā)Web應(yīng)用,

3、集成了AJAX 1.0,包含AJAX項(xiàng)目模板,它還可以高效開(kāi)發(fā)Office應(yīng)用和Mobile應(yīng)用。VS的開(kāi)發(fā)界面分為兩個(gè)版本:整合模式和孤立模式,分別對(duì)基于語(yǔ)言的開(kāi)發(fā)和基于特別工具的開(kāi)發(fā)作了優(yōu)化?!?EasyX 】 EasyX 是針對(duì) C+ 的圖形庫(kù),可以幫助 C 語(yǔ)言初學(xué)者快速上手圖形和游戲編程。許多學(xué)編程的都是從 C 語(yǔ)言開(kāi)始入門的,而目前的現(xiàn)狀是:1. 有些學(xué)校以 Turbo C 為環(huán)境講 C 語(yǔ)言,只是 Turbo C 的環(huán)境實(shí)在太老了,復(fù)制粘貼都很不方便。2. 有些學(xué)校直接拿 VC 來(lái)講 C 語(yǔ)言,因?yàn)?VC 的編輯和調(diào)試環(huán)境都很優(yōu)秀,并且 VC 有適合教學(xué)的免費(fèi)版本??上г?VC

4、下只能做一些文字性的練習(xí)題,想畫條直線畫個(gè)圓都很難,還要注冊(cè)窗口類、建消息循環(huán)等等,初學(xué)者會(huì)受嚴(yán)重打擊的。初學(xué)編程想要繪圖就得用 TC,很是無(wú)奈。3. 還有計(jì)算機(jī)圖形學(xué),這門課程的重點(diǎn)是繪圖算法,而不是 Windows 編程。所以,許多老師不得不用 TC 教學(xué),因?yàn)?Windows 繪圖太復(fù)雜了,會(huì)偏離教學(xué)的重點(diǎn)。新的圖形學(xué)的書(shū)有不少是用的 OpenGL,可是門檻依然很高。所以,于是就有了EasyX 庫(kù)方便的開(kāi)發(fā)平臺(tái)和 TC 簡(jiǎn)單的繪圖功能。2、 設(shè)計(jì)【程序總體結(jié)構(gòu)】:進(jìn)入主函數(shù)Init()函數(shù)初始圖形初始化進(jìn)度條1讀取鼠標(biāo)狀態(tài)WM_MOUSEMOVEWM_LBUTTONDOWNBreak;l

5、eftbottondown()方塊全消除進(jìn)度條到頭插入成功圖片插入失敗圖片ifif【界面設(shè)計(jì)】:界面的設(shè)計(jì)通過(guò)插入背景圖片 beijing.bmp , 在對(duì)每一個(gè)格子的賦圖片,通過(guò)getimage( )從board.bmp中截下所需要的圖,再利用putimage( )放置每一個(gè)小圖。具體算法:loadimage(&beijing,"D:llkbeijing.bmp");/載入背景圖putimage(0,0,&beijing);/放置背景圖 for(int i = 0 ;i < ROW; i +)for(int j = 0 ;j < COL ; j

6、+)idy = i * 54 + board_Y ,idx = j * 48+ board_X;putimage(idx,idy,&imageboardi + 1j + 1);/根據(jù)賦的值放置每一個(gè)格子圖beijing.bmpboard.bmp【重要數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)】:struct BOARD /點(diǎn)擊的格子信息int tx,ty; /格子坐標(biāo)int xx,yy; /屏幕坐標(biāo)int data; /圖片類型;定義BOARD型的結(jié)構(gòu)體,里面包含的是鼠標(biāo)點(diǎn)擊以后,所讀取的點(diǎn)擊點(diǎn)在屏幕里的坐標(biāo)(xx,yy)在二維數(shù)組里的坐標(biāo)boardtxty,以及在給每一個(gè)二維數(shù)組元素賦的值data(用來(lái)判斷

7、兩個(gè)格子是否相等,相等以后賦值為0,以便判斷是否存在格子,為之后的尋找路徑鋪墊)int boardROW + 2COL + 2;二維數(shù)組,用來(lái)記錄格子的信息,其值是判定是否有方塊的標(biāo)志。MOUSEMSG mouse;鼠標(biāo)的記錄類型struct MOUSEMSG UINT uMsg; / 當(dāng)前鼠標(biāo)消息 bool mkCtrl; / Ctrl 鍵是否按下 bool mkShift; / Shift 鍵是否按下 bool mkLButton; / 鼠標(biāo)左鍵是否按下 bool mkMButton; / 鼠標(biāo)中鍵是否按下 bool mkRButton; / 鼠標(biāo)右鍵是否按下 int x; / 當(dāng)前鼠標(biāo)

8、x 坐標(biāo)(物理坐標(biāo)) int y; / 當(dāng)前鼠標(biāo) y 坐標(biāo)(物理坐標(biāo)) int wheel; / 鼠標(biāo)滾輪滾動(dòng)值;#define board_X 140 /格子區(qū)距左邊框距離#define board_Y 140 /格子呢區(qū)距上邊框距離#define COL 10 /格子區(qū)列數(shù)#define ROW 6 /格子區(qū)行數(shù)#define board_number 15 /游戲圖片數(shù)目【函數(shù)設(shè)計(jì)】:函數(shù)的功能列表:void Init();/初始化界面void load_picture (); /加載圖片void del(BOARD &rec);/每個(gè)格子賦值為void leftbottondo

9、wn (MOUSEMSG mouse);/實(shí)現(xiàn)鼠標(biāo)左擊效果void frame (int leftx,int lefty);/畫邊框bool judge_mouse(int leftx,int lefty);/判斷鼠標(biāo)是否在游戲區(qū)void select(int leftx,int lefty);/顯示選中效果void accurate(int& leftx,int& lefty);/使格子的坐標(biāo)都在邊緣void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); /覆蓋直線void line(int x

10、1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) ; /用直線連接void exchange(BOARD& pre,BOARD& cur);/交換格子信息bool click(int mousex,int mousey); /判斷單擊是否有效void record(int leftx,int lefty,BOARD &rec);/記錄選中的格子void mouse_to_board(int mousex,int mousey,int *idx,int *idy);/鼠標(biāo)的坐標(biāo)轉(zhuǎn)為格子的數(shù)組下標(biāo)int findpath

11、(BOARD &pre,BOARD &cur);/尋找路徑,判斷是否相等void progressbar();/畫進(jìn)度條void updateprogressbar(long t);/更新進(jìn)度條因?yàn)橛性S多的函數(shù)是執(zhí)行圖像處理以及坐標(biāo)轉(zhuǎn)化的簡(jiǎn)單操作,這里畫出包含關(guān)鍵算法的主要函數(shù)的流程圖,其他的函數(shù)只做文字的描述介紹。findpath(BOARD &pre,BOARD &cur)函數(shù)根據(jù)導(dǎo)入的pre,cur結(jié)構(gòu)體進(jìn)入函數(shù)兩值是否相等NflaseY記錄兩點(diǎn)的橫坐標(biāo),取其max和min在左或右格子為0的情況下,向左或右增max,減min如果最左min為0,則左邊界連線

12、,并覆蓋如果最右max為11,則右邊界連線,并覆蓋在左右的公共無(wú)阻礙區(qū)域里,從左往右,在兩個(gè)點(diǎn)的縱向查找是否沒(méi)有阻礙,無(wú)則根據(jù)拐點(diǎn)連線,并覆蓋記錄兩點(diǎn)的縱坐標(biāo),取其max和min在上或下格子為0的情況下,向上或下增max,減min如果最上min為0,則上邊界連線,并覆蓋如果最下max為7,則下邊界連線,并覆蓋在上下的公共無(wú)阻礙區(qū)域里,從上往下,在兩個(gè)點(diǎn)的橫向查找是否沒(méi)有阻礙,無(wú)則根據(jù)拐點(diǎn)連線,并覆蓋cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)函數(shù)導(dǎo)入4個(gè)點(diǎn)的坐標(biāo)(1234表示先后順序)如果x1=x2,否則y1=y2

13、x1=x2y1=y2從y1到y(tǒng)2的路徑覆蓋從x1到x2的路徑覆蓋如果x2=x3,否則y2=y3X2=x3Y2=y3從y2到y(tǒng)3的路徑覆蓋從x2到x3的路徑覆蓋如果x3=x4,否則y3=y4X3=x4Y3=y4從y3到y(tǒng)4的路徑覆蓋從x3到x4的路徑覆蓋Init()函數(shù)進(jìn)入函數(shù)利用雙重循環(huán)對(duì)二維數(shù)組賦值加載背景,放置背景圖片利用系統(tǒng)時(shí)間為種子,取隨機(jī)數(shù),打亂二維數(shù)組的值根據(jù)賦的值,給每個(gè)二維數(shù)組對(duì)應(yīng)區(qū)加圖片,所加圖片根據(jù)每一個(gè)點(diǎn)的值來(lái)賦imageboard_number里的相應(yīng)圖利用outtextxy函數(shù)在相應(yīng)位置畫計(jì)分板,設(shè)置相應(yīng)的格式以及初始的分?jǐn)?shù)000load_picture ()函數(shù):這

14、是一個(gè)類似于初始圖片的函數(shù),利用 loadimage ,SetWorkingImage,對(duì)含有格子圖片信息的圖進(jìn)行分割讀取,并存入image的IMAGE類型的數(shù)組里,同時(shí)還讀入了填充背景的圖(填充線條)。del(BOARD &rec)函數(shù):刪除函數(shù),將之前記錄的鼠標(biāo)信息全部賦值為0;leftbottondown (MOUSEMSG mouse)函數(shù):記錄鼠標(biāo)的信息,如果鼠標(biāo)是第一次點(diǎn)擊的話,將其信息存入pre里,如果鼠標(biāo)是第二次點(diǎn)擊的話,將其存入cur里,通過(guò)findpath()函數(shù)來(lái)相消與否,如果能相消,則將鼠標(biāo)點(diǎn)的兩塊區(qū)域覆蓋,同時(shí)調(diào)用del函數(shù),來(lái)清除信息,在此過(guò)程中,根據(jù)統(tǒng)計(jì)剩

15、余格子對(duì)數(shù)的變量counter,來(lái)給出分?jǐn)?shù)(用s數(shù)組來(lái)存儲(chǔ)分?jǐn)?shù)信息,并在相應(yīng)位置輸出)。frame (int leftx,int lefty)函數(shù):根據(jù)導(dǎo)入的參數(shù)畫一個(gè)格子邊框。judge_mouse(int leftx,int lefty)函數(shù):判斷鼠標(biāo)的點(diǎn)擊區(qū)域是否在規(guī)定的范圍里。 select(int leftx,int lefty)函數(shù):在鼠標(biāo)點(diǎn)擊選擇以后,顯示frame的效果,并記錄數(shù)據(jù)。accurate(int& leftx,int& lefty)函數(shù):規(guī)范坐標(biāo)的函數(shù),鼠標(biāo)點(diǎn)擊的區(qū)域是在一個(gè)范圍內(nèi)的,此函數(shù)能把屬于一個(gè)區(qū)域的坐標(biāo)歸整為統(tǒng)一的坐標(biāo)。line(int x

16、1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) 函數(shù):連線函數(shù),通過(guò)導(dǎo)入的點(diǎn)的坐標(biāo)來(lái)調(diào)用moveto,lineto函數(shù)畫線。exchange(BOARD& pre,BOARD& cur)函數(shù):交換格子信息的函數(shù),在點(diǎn)擊2次后,發(fā)現(xiàn)兩個(gè)格子并不能相消后,將pre取第二次點(diǎn)擊的格子信息。click(int mousex,int mousey)函數(shù):判斷點(diǎn)擊的地方是不是有效,即已經(jīng)被消去的格子,點(diǎn)擊時(shí),沒(méi)有像有格子的地方一樣會(huì)出現(xiàn)線框的情況。record(int leftx,int lefty,BOARD &rec)函數(shù)

17、:將鼠標(biāo)的屏幕坐標(biāo)轉(zhuǎn)化并記錄在BOARD類型的變量里。mouse_to_board(int mousex,int mousey,int *idx,int *idy)函數(shù):將鼠標(biāo)的坐標(biāo)轉(zhuǎn)化為格子信息。progressbar( )函數(shù):畫進(jìn)度條,作矩形,并填充相應(yīng)顏色。updateprogressbar(long t)函數(shù):進(jìn)度條的更新函數(shù),讀取當(dāng)前系統(tǒng)時(shí)間與游戲開(kāi)始時(shí)系統(tǒng)時(shí)間的差,來(lái)畫圖覆蓋進(jìn)度條,從而達(dá)到進(jìn)度條運(yùn)動(dòng)的效果?!境绦蜻\(yùn)行整體視圖】3、 源程序#include <stdio.h>#include <graphics.h>#include <conio.h

18、>#include <time.h>#include <windows.h>#include <mmsystem.h>/播放音樂(lè)用的庫(kù)#pragma comment(lib, "WINMM.LIB")/播放音樂(lè)用的庫(kù)#define ture 1#define flase 0#define board_X 140 /格子區(qū)距左邊框距離#define board_Y 140 /格子呢區(qū)距上邊框距離#define COL 10 /格子區(qū)列數(shù)#define ROW 6 /格子區(qū)行數(shù)#define board_number 15 /游戲圖片數(shù)

19、目#define W 48 /格子的長(zhǎng)#define H 54 /格子的寬#define N 555 /背景的寬#define M 797 /背景的長(zhǎng)#define max(a,b) a>b?a:b#define min(a,b) a<b?a:b#define DGREE 2 /時(shí)間條的運(yùn)動(dòng)速度struct BOARD /點(diǎn)擊的格子信息int tx,ty; /格子坐標(biāo)int xx,yy; /屏幕坐標(biāo)int data; /圖片類型pre,cur,dur;IMAGE imageboard_number+ 1; /圖片庫(kù)IMAGE tianchong; /填充圖片IMAGE tianch

20、ong1; /覆蓋分?jǐn)?shù)的圖片IMAGE tianchong2; /覆蓋分?jǐn)?shù)的圖片int boardROW + 2COL + 2; /游戲圖紙MOUSEMSG mouse;int counter=board_number*2;void Init();/初始化界面 void load_picture ();/加載圖片void del(BOARD &rec);/每個(gè)格子賦值為void leftbottondown (MOUSEMSG mouse);/實(shí)現(xiàn)鼠標(biāo)左擊效果void frame (int leftx,int lefty);/畫邊框bool judge_mouse(int leftx,

21、int lefty);/判斷鼠標(biāo)是否在游戲區(qū)void select(int leftx,int lefty);/顯示選中效果void accurate(int& leftx,int& lefty);/使格子的坐標(biāo)都在邊緣void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); /覆蓋直線void line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) ; /用直線連接void exchange(BOARD& pre,BOAR

22、D& cur);/交換格子信息bool click(int mousex,int mousey); /判斷單擊是否有效void record(int leftx,int lefty,BOARD &rec);/記錄選中的格子void mouse_to_board(int mousex,int mousey,int *idx,int *idy);/鼠標(biāo)的坐標(biāo)轉(zhuǎn)為格子的數(shù)組下標(biāo)int findpath(BOARD &pre,BOARD &cur);/尋找路徑,判斷是否相等void progressbar();/畫進(jìn)度條void updateprogressbar(lo

23、ng t);/更新進(jìn)度條int findpath(BOARD &pre,BOARD &cur) int i,j,path,min1,max1,min2,max2,left,right,top,bottom;int m,n;if (boardpre.typre.tx!= boardcur.tycur.tx) /判斷是否點(diǎn)中相同 return false;min1=max1=pre.tx;min2=max2=cur.tx;while (min1-1>=0 && boardpre.tymin1-1=0) min1-;/查找水平方向公共區(qū)域while (min2-

24、1>=0 && boardcur.tymin2-1=0) min2-; left=max(min1,min2); / 左邊界while (max1+1<=11 && boardpre.tymax1+1=0) max1+;while (max2+1<=11 && boardcur.tymax2+1=0) max2+; right=min(max1,max2); / 右邊界 if (left=0) line(pre.tx,pre.ty,0,pre.ty,0,cur.ty,cur.tx,cur.ty);/左邊緣連通 Sleep(300

25、); cover(pre.xx,pre.yy,board_X-48,pre.yy,board_X-48,cur.yy,cur.xx,cur.yy);/覆蓋線條 return true; if (right=11) line(pre.tx,pre.ty,11,pre.ty,11,cur.ty,cur.tx,cur.ty); Sleep(300); cover(pre.xx,pre.yy,board_X+480,pre.yy,board_X+480,cur.yy,cur.xx,cur.yy);/覆蓋線條 return true; for (i=left;i<=right;i+) path=0

26、;/記錄豎直方向上的長(zhǎng)度m=min(pre.ty,cur.ty);n=max(pre.ty,cur.ty);for (j=m+1;j<n;j+) path=path+boardji; if (path>0) break; if (path=0) line(pre.tx,pre.ty,i,pre.ty,i,cur.ty,cur.tx,cur.ty); Sleep(300); cover(pre.xx,pre.yy,board_X+(i-1)*48,pre.yy,board_X+(i-1)*48,cur.yy,cur.xx,cur.yy);/覆蓋線條 return true; min1

27、=max1=pre.ty;/查找垂直方向公共區(qū)域min2=max2=cur.ty;while (min1-1>=0 && boardmin1-1pre.tx=0) min1-;while (min2-1>=0 && boardmin2-1cur.tx=0) min2-; top=max(min1,min2);while (max1+1<=7 && boardmax1+1pre.tx=0) max1+;while (max2+1<=7 && boardmax2+1cur.tx=0) max2+; bottom

28、=min(max1,max2); if (top=0) line(pre.tx,pre.ty,pre.tx,0,cur.tx,0,cur.tx,cur.ty);/同在頂端消除 Sleep(300); cover(pre.xx,pre.yy,pre.xx,board_Y-54,cur.xx,board_Y-54,cur.xx,cur.yy);/覆蓋線條 return true; if (bottom=7) line(pre.tx,pre.ty,pre.tx,7,cur.tx,7,cur.tx,cur.ty); Sleep(300); cover(pre.xx,pre.yy,pre.xx,boar

29、d_Y+324,cur.xx,board_Y+324,cur.xx,cur.yy);/覆蓋線條 return true; for (j=top;j<=bottom;j+) path=0;/記錄水平方向的長(zhǎng)度m=min(pre.tx,cur.tx);n=max(pre.tx,cur.tx);for (i=m+1; i<n; i+) path+=boardji; if (path>0) break; if (path=0) line(pre.tx,pre.ty,pre.tx,j,cur.tx,j,cur.tx,cur.ty); Sleep(300); cover(pre.xx,p

30、re.yy,pre.xx,board_Y+(j-1)*54,cur.xx,board_Y+(j-1)*54,cur.xx,cur.yy);/覆蓋線條 return true; return false;void Init() /初始化int ix,iy,jx,jy,idx,idy,temp;srand(unsigned)time(NULL);load_picture();IMAGE beijing;for(int i= 0, x = 1; x <= ROW; +x )for( int y = 1; y <= COL; +y )boardxy = i+ % board_number

31、+ 1;loadimage(&beijing,"D:llkbeijing.bmp");/載入背景圖putimage(0,0,&beijing);/放置背景圖getimage(&tianchong,3 * 48,2 * 54,49,55);getimage(&tianchong1,3 * 48,2 * 54,70,55);getimage(&tianchong2,758,150,50,55); for( int k = 0; k <60; +k )ix = rand() % ROW + 1;iy = rand() % COL +

32、1;jx = rand() % ROW + 1; jy = rand() % COL + 1;if( boardixiy != boardjxjy) /使數(shù)據(jù)打亂temp= boardixiy;boardixiy = boardjxjy;boardjxjy =temp; for(int i = 0 ;i < ROW; i +)for(int j = 0 ;j < COL ; j+)idy = i * 54 + board_Y ,idx = j * 48+ board_X;putimage(idx,idy,&imageboardi + 1j + 1);/根據(jù)賦的值放置每一個(gè)格

33、子圖setbkmode(TRANSPARENT);setfont(35, 0,"華文琥珀");setcolor(YELLOW); outtextxy(700, 100,"分?jǐn)?shù)");outtextxy(700, 150,"000");void load_picture()IMAGE image1,background;loadimage(&image1,"D:llkboard.bmp"); SetWorkingImage(&image1);for(int i = 1 ;i <=board_num

34、ber;i +)getimage(&imagei,0,i * 54,48, 54);loadimage(&background,"IMAGE","bg");SetWorkingImage(&background);getimage(&tianchong,3 * 56,2 * 60,56,60);SetWorkingImage();putimage(0,0,&background);void leftbottondown (MOUSEMSG mouse) /單擊左鍵static int click1 = 0,x,y;

35、char s3;int number,i;click1+;select(mouse.x,mouse.y);/顯示選中效果if(click1 = 1)record(mouse.x,mouse.y,pre);if(click1 = 2) mouse_to_board(mouse.x,mouse.y,&x,&y);if(x != pre.tx|y != pre.ty)record(mouse.x,mouse.y,cur);if(findpath(pre,cur)boardpre.typre.tx = boardcur.tycur.tx =0;putimage(pre.xx,pre.y

36、y,&tianchong);putimage(cur.xx,cur.yy,&tianchong);del(pre); del(cur); click1 = 0;counter-;putimage(700,150,&tianchong1);number=20*(board_number*2-counter);for(i=2;i>=0;i-) si = number % 10 + '0' number/= 10; setbkmode(TRANSPARENT); setfont(35, 0,"華文琥珀"); setcolor(YELL

37、OW);outtextxy(700, 150,s);putimage(758,150,&tianchong2);elseexchange(dur,pre); exchange(pre,cur); del(cur);click1 = 1;putimage(dur.xx,dur.yy,&imageboarddur.tydur.tx);else click1= 1;void select (int leftx,int lefty)/選中時(shí)效果if(judge_mouse(leftx,lefty)int x,y;mouse_to_board(leftx,lefty,&x,&am

38、p;y);accurate(leftx,lefty); frame(leftx,lefty);bool judge_mouse(int leftx,int lefty) /判斷鼠標(biāo)是否在游戲區(qū)return leftx >board_X && leftx < board_X + W * COL && lefty >board_Y && lefty < board_Y+ H * ROW;void mouse_to_board(int mousex,int mousey ,int *x,int *y) /鼠標(biāo)坐標(biāo)轉(zhuǎn)化為圖紙坐標(biāo)i

39、f(judge_mouse(mousex,mousey)*x = (mousex -board_X) / 48 + 1;*y = (mousey -board_Y) / 54 + 1 ;void record(int leftx,int lefty,BOARD &rec)/記錄選中的信息mouse_to_board(leftx,lefty,&rec.tx,&rec.ty);rec.xx = (rec.tx - 1) * 48 +board_X;rec.yy = (rec.ty - 1) * 54 +board_Y;rec.data = boardrec.tyrec.tx

40、;bool click(int mousex,int mousey)/判斷單擊是否有效int x,y;mouse_to_board(mousex,mousey,&x,&y);/轉(zhuǎn)化為格子坐標(biāo)if(judge_mouse(mouse.x,mouse.y) && boardyx != 0)return true;return false;void frame(int leftx,int lefty)/畫方框setcolor(RGB(126,91,68);setlinestyle(PS_SOLID,3);rectangle(leftx,lefty,leftx+47,l

41、efty+53);rectangle(leftx + 2,lefty + 2,leftx+47,lefty+53);setcolor(RGB(250,230,169);rectangle(leftx + 1,lefty + 1,leftx+48,lefty+54);void accurate(int& leftx,int& lefty)leftx = (leftx -board_X) / 48) *48 +board_X;lefty = (lefty -board_Y) / 54) *54 +board_Y;void exchange(BOARD &pre,BOARD

42、&cur)/交換格子信息pre.data = cur.data;pre.tx = cur.tx;pre.ty = cur.ty;pre.xx= cur.xx;pre.yy = cur.yy;void del(BOARD &rec) /每個(gè)格子賦值為rec.data = 0;rec.tx= 0; rec.ty = 0;rec.xx = 0;rec.yy = 0;void line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) setlinestyle(PS_SOLID,NULL,3);setcolor(RGB(2

43、52,228,20); moveto(board_X+24+48*(x1-1),board_Y+27+54*(y1-1); lineto(board_X+24+48*(x2-1),board_Y+27+54*(y2-1); lineto(board_X+24+48*(x3-1),board_Y+27+54*(y3-1); lineto(board_X+24+48*(x4-1),board_Y+27+54*(y4-1);void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) int minx,miny,maxx,maxy;if(x1 = x2)maxy = y1 > y2? y1:y2;miny = y1 < y2? y1:y2;for(int i = miny; i <= maxy;i += 54)putimage(x1,i,&tianchong);else if(y1 = y2)maxx = x1 > x2? x1:x2;minx = x1 < x2? x1:x2;for(int j = minx; j <= maxx;j += 48)putimage(j,y1,&tianchong);if(x2 = x3)maxy = y2 >

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論