亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        連連看游戲的設(shè)計與實現(xiàn)

        2021-03-14 00:50:58呂橙萬珊珊
        現(xiàn)代計算機 2021年36期
        關(guān)鍵詞:引擎卡片界面

        呂橙,萬珊珊

        (北京建筑大學(xué)電氣與信息工程學(xué)院,北京 100044)

        0 引言

        “連連看”是一款風(fēng)靡很多年的單機版小游戲,游戲規(guī)則簡單,玩家可以將2 個相同圖案的圖片連接起來,連接線不多于3 根直線,即圖片間連線的轉(zhuǎn)角不超過2,就可以成功消除此對圖片。該游戲改造成網(wǎng)絡(luò)游戲后,一方面增強了該游戲的競技性和合作性,把單機版中在規(guī)定時間內(nèi)完成的游戲改變成了玩家之間的相互制約、相互競爭,也可以多人組隊合作完成游戲;另一方面增強了該游戲的趣味性,游戲的類型從簡單的寵物連連看拓展為多種形式,有果蔬連連看、奧特曼連連看、喜洋洋連連看、TWINS連連看、QQ連連看和植物大戰(zhàn)僵尸連連看等等。

        (1)勝利條件:消除全部圖片,按剩余圖片排名;其它玩家全部輸?shù)簟?/p>

        (2)失敗條件:30 秒內(nèi)未成功消除一對圖片;有玩家消除全部圖片。

        (3)名稱說明

        重排:將我方游戲池中的所有卡片重新排列一次。冰凍:禁止對手選擇游戲池中的卡片,時間限制為5 秒。炸彈:隨機炸掉一對符合消除條件的卡片。障礙:使對方游戲池中無卡片處隨機增加6 對卡片。墨鏡:使對方游戲池全部暗掉。反轉(zhuǎn):使對方游戲池里的卡片左右位置調(diào)換。

        文獻[1]著重闡述了基于Android 平臺的連連看游戲界面的設(shè)計。文獻[2]針對深度優(yōu)先搜索查找算法進行了詳細闡述。文獻[3]采用JDK7.0,和MyEclipse 10 完成了連連看游戲的設(shè)計與實現(xiàn)。文獻[4]則從人臉識別的角度講述了連連看游戲的開發(fā)方法和過程。文獻[5]則從課程思政角度講述了中國風(fēng)連連看游戲的設(shè)計與實現(xiàn)。

        連連看游戲常用于學(xué)生課設(shè)、實驗等實踐環(huán)節(jié),面向?qū)ο笸ǔJ怯嬎銠C或計算機相近專業(yè)的高年學(xué)生。而對于低年級學(xué)生或初學(xué)者來說,利用編程實現(xiàn)這類游戲存在著明顯的困難。本文利用Visual studio 2019 軟件的EasyX 圖形庫實現(xiàn)了連連看游戲。

        1 連連看游戲總體設(shè)計

        1.1 游戲功能分析

        1.1.1 初始化游戲界面

        該部分主要是數(shù)據(jù)的初始化、通過鼠標點擊事件選擇游戲類型,以及生成隨機數(shù),并通過隨機數(shù)加載圖片形成連連看初始的界面。

        1.1.2 圖片的選擇、判斷與消除

        該功能主要是通過鼠標點擊事件選取所要消除的兩個相同圖片,然后對選中的圖片進行判斷:如果兩張圖片的圖案相同,且連接線不多于3根直線,即圖片間連線的轉(zhuǎn)角不超過2,則消除此對圖片,否則,不能消除,并給出“嘟聲”警告。

        1.1.3 游戲的提示

        如果游戲界面中所有的圖片全部消除,則提示“游戲結(jié)束”信息。如果當前狀態(tài)沒有任何可連通的相同圖片時,則判斷當前是否可以重排,并給出相關(guān)提示信息。如果玩家點擊“提示”按鈕,則可以獲取系統(tǒng)幫助,繼續(xù)游戲。

        1.2 程序模塊劃分

        1.2.1 游戲初始化模塊

        該模塊是確定游戲運行的初始狀態(tài),主要包括進行游戲界面繪制、音樂和音效設(shè)置、難度設(shè)置、寵物類型設(shè)置、算法設(shè)置等等。

        1.2.2 游戲引擎模塊

        該模塊是程序運行的框架,主要包括連線消牌、炸彈函數(shù)、游戲重繪、最優(yōu)路徑提示、贈送時間、游戲循環(huán)設(shè)置等等。

        1.2.3 游戲控制模塊

        該模塊是游戲的執(zhí)行部分,主要由游戲執(zhí)行、游戲結(jié)束、當前界面是否有解、玩家時間是否耗盡、提示信息是否顯示、統(tǒng)計玩家積分等等。

        連連看游戲功能如圖1 所示。

        圖1 連連看游戲功能

        2 連連看游戲功能詳細設(shè)計與代碼實現(xiàn)

        2.1 初始化模塊

        該模塊是命名為Initial.h的頭文件,所用到的函數(shù)如表1所示。

        表1 初始化模塊用到的主要函數(shù)

        其中,初始化函數(shù)的主要功能是隨機加載圖片,核心代碼如下:

        void intial()

        srand((unsigned)time(NULL));

        int i,j;

        int sort;

        score=0;

        p1.x=BLANK_STATE;

        p1.y=BLANK_STATE;

        p2.x=BLANK_STATE;

        p2.y=BLANK_STATE;

        //p1,p2兩點設(shè)在畫面之外,看不見

        pen=::CreatePen(PS_SOLD,3,RGB(255,0,0));

        fram_sign=false;

        clue_sign=false;

        //清空map二維數(shù)組

        for(int i=0;i

        for(int j=0;j

        map[i][j]=0;

        //把中間全置成-1。-1 代表沒有圖,>0 代表有圖,圖的序號

        for(int i=0;i

        for(int j=0;j

        map[i+2][j+2]=-1;

        num++; //總共需要的圖片數(shù)量

        //初始化map二維數(shù)組

        int m_a[1000]={0};

        for(int i=1;i<=num/2;i++)//保 證 圖 片 成 對 出現(xiàn),所以取一半

        while(1)

        sort=rand()%39+1;

        if(sort_num[sort-1]<2) //每個圖片不超過2張,總共不超過4張

        m_a[i]=sort; //放進地圖中

        m_a[i+num/2]=m_a[i];

        sort_num[sort-1]++;//該圖片數(shù)量加1

        break;

        int sum=num;

        int k=0;

        for(int i=0;i

        for(int j=0;j

        if(map[i][j]==-1)

        k=rand()%sum+1; //隨機數(shù)產(chǎn)生下一個m_a的下標

        map[i][j]=m_a[k]; //放進地圖中

        //某張圖片賦值給map 后,就刪掉,后面的圖片依次前移

        for(int p=k;p<=sum-1;p++)

        m_a[p]=m_a[p+1];

        sum--;

        2.2 游戲引擎模塊

        該模塊是命名為GameEngine.h 的頭文件,主要包含游戲引擎類的設(shè)計和相關(guān)函數(shù)的設(shè)計。游戲引擎類的設(shè)計如下:

        class GameEngine

        private:

        protected:

        static GameEngine *m_pGameEngin;//指向自身的指針

        HINSTANCE m_hInstance;//實例句柄

        HWND m_hWnd;//窗口句柄

        TCHAR m_szWindowsClass[32];//窗口類名

        TCHAR m_szWndTitle[32];//窗口標題

        Int m_iWidth,m_iHeight;//窗口的寬和高

        int m_iFrameDelay;//游戲周期的間隔時間

        bool start_sign;//游戲開始標記

        public:

        GameEngine(HINSTANCE hInstance,LPTSTR sz?WindowClass,LPTSTR szTitle,int iWidth,int iHeight,int IDelay);

        virtual~GameEngine();

        //訪問方法

        static GameEngine * GetEngine(){return m_pGa?meEngine;}

        HINSTANCE GetInstance (){return m_hIn?stance;}

        HWND GetWnd(){return m_hWnd;}

        void SetWnd(HWND hWnd){ m_hWnd =hWnd;}

        LPTSTR GetTitle(){return m_szWndTitle;}

        int GetWidth(){return m_iWidth;}

        void SetWidth(){m_iWidth=iWidth;}

        int GetHeight(){return m_iHeight;}

        void SetHeight (int iHeight){m_iHeight =iHeight;}

        int GetDelay(){return m_iFrameDelay;}

        void SetDelay(int iDelay){m_iFrameDelay = iDe?lay;}

        void SetStart(bool sign){start_sign=sign;}

        bool getStart(){return start_sign;}

        //初始化函數(shù)

        BOOL initiallize(int cmdShow);

        //消息處理

        LRESULT HandleEvent(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam);

        };

        該模塊用到的函數(shù)如表2所示。

        表2 游戲引擎模塊用到的主要函數(shù)

        其中,WinMain 函數(shù)是游戲的主函數(shù),其核心代碼如下:

        int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hpreInstance,LPSTR lpcmdline,int iShowCmd)

        Msg msg;

        static int iticktrigger=0;//設(shè)置開始時間為0

        int itickcount;

        if(!GameInitial(hInstance))//創(chuàng)建GameEngine 類對象g_pGame

        return 0;

        if(! GameEngine:: GetEngine()->Initiallize(SW_SHOWNORMAL)) //對窗口類對象wndclass 進行賦值并注冊,創(chuàng)建窗口

        return 0;

        ::ZeroMemory(&msg,sizeof(msg));

        GameStartBg(); //繪制游戲背景

        while(msg.message!=WM_QUIT)

        if(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))

        ::TranslateMessage(&msg);

        ::DispatchMessage(&msg);

        else

        ::Sleep(1);

        itickcount = ::GetTickCount();//返回從程序開始到現(xiàn)在的執(zhí)行ms數(shù)

        if(itickcount-iticktrigger>0)

        if(GameEngine::GetEngine()->getStart()==true)//如果獲取到的start_sign為真,開始游戲

        GamePaint(); //游戲重繪

        GameCycle(); //游戲循環(huán)

        iticktrigger = itickcount + GameEngine::GetEn?gine()->GetDelav();

        //設(shè)置下一次重繪時間

        2.3 游戲控制模塊

        該模塊是Game.cpp 的C++文件,所用到函數(shù)如表3所示。

        表3 游戲控制模塊用到的主要函數(shù)

        其中,判斷是否連通是重點,其核心代碼如下:

        //判斷選中的兩個圖片是否可以連接

        bool IsLink(int xl,int yl,int x2,int y2)

        {

        //x直連

        if(x1==x2)

        {

        if(X1_Lin_X2(x1,y1,y2))

        return true;

        }

        //Y直連i(y1=y2)

        if(Y1_Link_Y2(x1,x2,y1))

        return true;

        //一個拐角

        if(0neCormerLink(x1,y1,x2,y2))

        return true:

        //兩個拐角

        if(TwoCornerLink(x1,yl,x2,y2))

        return true;

        retun false;

        }

        3 連連看游戲的測試與運行

        游戲?qū)崿F(xiàn)了連連看游戲的基本功能,可以通過鼠標點擊,實現(xiàn)連連看消牌操作,并統(tǒng)計積分。運行界面如圖2所示。

        圖2 連連看游戲的運行界面

        4 結(jié)語

        本文以連連看游戲為原型,利用C++語言和Visual Studio 2019 完成了游戲的基本運行,包括游戲的初始化設(shè)置、游戲引擎模塊和游戲控制模塊,游戲界面友好、操作簡單,基本上滿足了學(xué)生課設(shè)要求,提高學(xué)生的興趣,帶給學(xué)生具有挑戰(zhàn)性的游戲類編程體驗。

        猜你喜歡
        引擎卡片界面
        擺卡片
        倒過來的卡片
        國企黨委前置研究的“四個界面”
        當代陜西(2020年13期)2020-08-24 08:22:02
        一張卡片
        基于FANUC PICTURE的虛擬軸坐標顯示界面開發(fā)方法研究
        藍谷: “涉藍”新引擎
        商周刊(2017年22期)2017-11-09 05:08:31
        人機交互界面發(fā)展趨勢研究
        卡片
        手機界面中圖形符號的發(fā)展趨向
        新聞傳播(2015年11期)2015-07-18 11:15:04
        無形的引擎
        河南電力(2015年5期)2015-06-08 06:01:46
        中文人妻无码一区二区三区| 国产69精品久久久久9999| 亚洲一区二区三区中文字幕网| 精品人妻va一区二区三区| 五月天激情电影| 成年女人a毛片免费视频| 麻豆成人精品国产免费| 亚洲狠狠婷婷综合久久| 99热这里只有精品4| 在线亚洲AV不卡一区二区| 日韩熟女一区二区三区| 午夜一区二区三区免费观看| 亚洲不卡在线免费视频| 插上翅膀插上科学的翅膀飞| 亚洲精品色午夜无码专区日韩 | 国产精品国产三级农村妇女| 在线无码国产精品亚洲а∨| 久久久久AV成人无码网站| 亚洲最大视频一区二区三区| 国产亚洲综合另类色专区 | 国产色欲av一区二区三区| 天天鲁在视频在线观看| а√天堂资源8在线官网在线| 五月综合高清综合网| 在线视频日韩精品三区| 狼人精品剧情av在线观看| 亚洲熟妇av一区| 柠檬福利第一导航在线| 免费无码黄动漫在线观看| 亚洲av成人一区二区三区av | 精品少妇一区一区三区| 99久久国产一区二区三区| 国产毛片视频一区二区三区在线| 日本一二三区在线观看视频| 一本精品99久久精品77| 玩弄少妇高潮ⅹxxxyw| 国产精品欧美日韩在线一区| 精品久久久久久99人妻| 神马不卡影院在线播放| 青青草大香蕉视频在线观看| 国产丝袜在线精品丝袜|