• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            聚星亭

            吾笨笨且懶散兮 急須改之而奮進(jìn)
            posts - 74, comments - 166, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
                        到今天,函數(shù)學(xué)完了,數(shù)據(jù)也講到多維數(shù)組了,老師讓利用學(xué)到的東西,寫一個(gè)走迷宮的程序。
            在這里記錄一下:
            我要走的迷宮圖如下:
                        

                  OK,開(kāi)始定義迷宮地圖數(shù)組:
            /************************************************************************/
            // 迷宮地圖數(shù)據(jù)
            // 0表示墻
            // 1表示可以行走的路
            // 2表示已經(jīng)走過(guò)的路
            // 3表示返回的路
            /*
            ***********************************************************************/
            int g_MazeMapData[13][13= {
                {
            0000000000000},
                {
            0111001111011},
                {
            0101100001010},
                {
            0100111111010},
                {
            0111010010010},
                {
            0101010111010},
                {
            0101110100010},
                {
            0111010101110},
                {
            0010001111010},
                {
            0010001000010},
                {
            0110111111010},
                {
            0101100001110},
                {
            0100000000000}
            };

                        相關(guān)的宏定義及函數(shù)聲明:
            //////////////////////////////////////////////////////////////////////////
            #define IN_POS_X    1  // 入口點(diǎn)X坐標(biāo)
            #define IN_POS_Y    12   // 入口點(diǎn)Y坐標(biāo)
            #define OUT_POS_X   12   // 出口點(diǎn)X坐標(biāo)
            #define OUT_POS_Y   1  // 出口點(diǎn)Y坐標(biāo)

            #define UNKNOWN     1   // 從來(lái)沒(méi)走過(guò)的路
            #define PASS        2   // 經(jīng)過(guò)的標(biāo)記
            #define BACK        3   // 返回的標(biāo)記


            #define GO          0   // 前進(jìn)
            #define COMEBACK    1   // 后退
            //////////////////////////////////////////////////////////////////////////
            extern int g_MazeMapData[13][13];// 迷宮地圖數(shù)據(jù)
            extern int g_nCurPosX; // 當(dāng)前的X坐標(biāo)
            extern int g_nCurPosY; // 當(dāng)前的Y坐標(biāo)

            //////////////////////////////////////////////////////////////////////////
            int Start(); // 找到出口了, 返回1, 否則返回0, 如果程序異常中斷了,返回-1
            int MoveTo(int nFlag); // 具體走路的函數(shù)
                        先初始化當(dāng)前坐標(biāo)到入口坐標(biāo):
            int g_nCurPosX = IN_POS_X; // 當(dāng)前的X坐標(biāo)
            int g_nCurPosY = IN_POS_Y; // 當(dāng)前的Y坐標(biāo)

               
                        整體流程上,如果當(dāng)前的坐標(biāo)等于出口的坐標(biāo),那就可以確定已經(jīng)找到出口了,如果遇到死角,則原路返回到上一個(gè)岔口,走另一條路,如果退回到迷宮入口的坐標(biāo),那就認(rèn)為沒(méi)有找到出口……

            /************************************************************************/
            // 開(kāi)始走迷宮
            // 如果找到出口了,返回1,否則返回0
            // 如果程序異常中斷了,返回-1
            /*
            ***********************************************************************/
            int Start()
            {
                
            while (1)
                {
                    
            // 開(kāi)始走路
                    if (MoveTo(GO) == 0)
                    {
                        MoveTo(COMEBACK);
                    }

                    // 不停的刷新窗口,模擬動(dòng)態(tài)走路效果
                    
            for(int i=0; i<=OUT_POS_X; i++)
                    {
                        
            for(int j = 0; j <= IN_POS_Y; j++)
                        {
                            printf(
            "%d ", g_MazeMapData[i][j]);
                        }
                        printf(
            "\r\n");
                    }

                    Sleep(
            500);

                    system(
            "cls");

                    
            // 如果當(dāng)前的坐標(biāo)是出口坐標(biāo)表示找到出口了
                    if (g_nCurPosX == OUT_POS_X && g_nCurPosY == OUT_POS_Y)
                    {
                        
            return 1;
                    }

                    
            // 如果又退回入口位置了,表示沒(méi)有找到出口
                    if (g_nCurPosX == IN_POS_X && g_nCurPosY == IN_POS_Y)
                    {
                        
            return 0;
                    }
                }

                
            return -1;
            }

                     現(xiàn)在開(kāi)始寫具體的走路函數(shù)了,重點(diǎn)有兩點(diǎn),首先是遇到岔路得優(yōu)先選擇,再就是如果原路退回。

            關(guān)于第一個(gè)問(wèn)題,比較容易解決,我們寫if判斷的時(shí)候,按照 上、右、下、左的順序?qū)懀@樣它就可以優(yōu)先選擇方向了。

            對(duì)于第二個(gè)問(wèn)題,我們可以給函數(shù)加個(gè)參數(shù),來(lái)表明是前進(jìn)還是后退。

            代碼如下:

            /************************************************************************/
            // 按照 上、右、下、左的順序?qū)ぢ?br>// 參數(shù)含義:
            //     nFlag: GO 表示前進(jìn),COMEBACK表示返回
            // 返 回 值:
            //     1 : 向上走,2: 向右走, 3: 向下走, 4: 向左走, 0:異常(出地圖了,不移動(dòng))
            /*
            ***********************************************************************/
            int MoveTo(int nFlag)
            {
                
            if(nFlag == 0)
                {
                    
            // 上
                    if (g_MazeMapData[g_nCurPosX][g_nCurPosY-1== UNKNOWN)
                    {
                        g_MazeMapData[g_nCurPosX][g_nCurPosY] 
            = PASS;
                        g_nCurPosY
            --;
                        
            return 1;
                    }

                    
            // 右
                    if (g_MazeMapData[g_nCurPosX+1][g_nCurPosY] == UNKNOWN)
                    {
                        g_MazeMapData[g_nCurPosX][g_nCurPosY] 
            = PASS;
                        g_nCurPosX
            ++;
                        
            return 2;
                    }

                    
            // 下
                    if (g_MazeMapData[g_nCurPosX][g_nCurPosY+1== UNKNOWN)
                    {
                        g_MazeMapData[g_nCurPosX][g_nCurPosY] 
            = PASS;
                        g_nCurPosY
            ++;
                        
            return 3;
                    }

                    
            // 左
                    if (g_MazeMapData[g_nCurPosX-1][g_nCurPosY] == UNKNOWN)
                    {
                        g_MazeMapData[g_nCurPosX][g_nCurPosY] 
            = PASS;
                        g_nCurPosX
            --;
                        
            return 4;
                    }
                }
                
            else
                {
                    
            // 上
                    if (g_MazeMapData[g_nCurPosX][g_nCurPosY-1== PASS)
                    {
                        g_MazeMapData[g_nCurPosX][g_nCurPosY] 
            = BACK;
                        g_nCurPosY
            --;
                        
            return 1;
                    }

                    
            // 右
                    if (g_MazeMapData[g_nCurPosX+1][g_nCurPosY] == PASS)
                    {
                        g_MazeMapData[g_nCurPosX][g_nCurPosY] 
            = BACK;
                        g_nCurPosX
            ++;
                        
            return 2;
                    }

                    
            // 下
                    if (g_MazeMapData[g_nCurPosX][g_nCurPosY+1== PASS)
                    {
                        g_MazeMapData[g_nCurPosX][g_nCurPosY] 
            = BACK;
                        g_nCurPosY
            ++;
                        
            return 3;
                    }
                    
                    
            // 左
                    if (g_MazeMapData[g_nCurPosX-1][g_nCurPosY] == PASS)
                    {
                        g_MazeMapData[g_nCurPosX][g_nCurPosY] 
            = BACK;
                        g_nCurPosX
            --;
                        
            return 4;
                    }
                }

                
            return 0;
            }

                        現(xiàn)在貌似還有一個(gè)問(wèn)題,就是,在入口點(diǎn)的時(shí)候,我們需要它往左走,按照我們的優(yōu)先級(jí),是最后向左移動(dòng),我們的入口在最右邊……

                        不過(guò)這個(gè)也不是問(wèn)題,因?yàn)槲覀兊拿詫m周圍是用圍墻圍起來(lái)的,所以,向右就是墻,不會(huì)出現(xiàn)左邊進(jìn),迷宮右側(cè)出來(lái)的情況,好,先瞧瞧效果……


            Feedback

            # re: 寫了個(gè)很笨的走迷宮(效率很差……)  回復(fù)  更多評(píng)論   

            2009-12-20 02:59 by 你健哥
            你個(gè)小菜鳥,寫的太菜,花錢秀腿

            # re: 寫了個(gè)很笨的走迷宮(效率很差……)  回復(fù)  更多評(píng)論   

            2009-12-23 08:07 by 呵呵
            兄弟 好好學(xué),冬至問(wèn)候聲,現(xiàn)在天氣比較冷,多注意身體.
            -------廈門的哥們

            # re: 寫了個(gè)很笨的走迷宮(效率很差……)  回復(fù)  更多評(píng)論   

            2009-12-23 16:14 by besterChen
            @呵呵

            恩,謝謝,你也多保重哈
            久久人人青草97香蕉| 婷婷久久久亚洲欧洲日产国码AV| 亚洲αv久久久噜噜噜噜噜| 久久香蕉国产线看观看精品yw| 97热久久免费频精品99| 久久精品国产亚洲7777| 久久精品国产亚洲AV麻豆网站| 99久久精品国产毛片| 国产精品一区二区久久精品涩爱| 国产精品久久久亚洲| 亚洲午夜无码AV毛片久久| 99久久免费国产特黄| 亚洲精品乱码久久久久久蜜桃 | 久久99国产综合精品| 亚洲国产精品狼友中文久久久| 久久精品a亚洲国产v高清不卡| 久久久久亚洲精品天堂久久久久久 | 国产精品免费久久久久久久久| 99久久夜色精品国产网站| 精品久久久久久国产牛牛app| 久久99国产精品久久99| 久久综合给合久久狠狠狠97色| 亚洲精品NV久久久久久久久久| 久久国产一片免费观看| 亚洲国产天堂久久综合网站| 久久久久久久99精品免费观看| 人妻无码αv中文字幕久久 | 久久九九免费高清视频| 狠狠色丁香久久婷婷综| 国产麻豆精品久久一二三| 亚洲国产另类久久久精品小说| 亚洲欧美日韩久久精品| 午夜精品久久久内射近拍高清 | 97精品国产97久久久久久免费 | 九九久久精品国产| 久久99精品久久久久久水蜜桃| 色噜噜狠狠先锋影音久久| 亚洲国产精品人久久| 亚洲国产成人久久综合一区77| 无码精品久久一区二区三区| 久久久久久精品免费免费自慰|