• <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>

            BillyYu

            Puzzle Fifteen練習 CS50

            關于什么是PuzzleFifteen,參看WIKIPEDIA。
            貼下我自己寫的代碼,現在只能是將倒著的順過來,還不知道如何初始化任意的可解的棋局及如何自動破解,歡迎大蝦能提點下。
            /***************************************************************************
             * fifteen.c
             *
             * Computer Science 50
             * Problem Set 3
             *
             * Implements The Game of Fifteen (generalized to d x d).
             *
             * Usage: fifteen d
             *
             * whereby the board's dimensions are to be d x d,
             * where d must be in [DIM_MIN,DIM_MAX]
             *
             * Note that usleep is obsolete, but it offers more granularity than
             * sleep and is simpler to use than nanosleep; `man usleep` for more.
             **************************************************************************
            */
             
            #define _XOPEN_SOURCE 500

            #include 
            <cs50.h>
            #include 
            <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <time.h>
            #include 
            <unistd.h>


            // constants
            #define DIM_MIN 3
            #define DIM_MAX 9


            // global board
            int board[DIM_MAX][DIM_MAX];
            int d;


            // prototypes
            void clear();
            void greet();
            void init();
            void draw();
            bool move();
            bool won();


            int
            main(
            int argc, char *argv[])
            {
                
            // ensure proper usage
                if (argc != 2)
                {
                    printf(
            "Usage: %s d\n", argv[0]);
                    
            return 1;
                }

                
            // greet user with instructions
                greet();

                
            // ensure valid dimensions
                d = atoi(argv[1]);
                
            if (d < DIM_MIN || d > DIM_MAX)
                {
                    printf(
            "Board must be between %d x %d and %d x %d, inclusive.\n",
                           DIM_MIN, DIM_MIN, DIM_MAX, DIM_MAX);
                    
            return 2;
                }

                
            // initialize the board
                init();

                
            // accept moves until game is won
                while (true)
                {
                    
            // clear the screen
                    clear();

                    
            // draw the current state of the board
                    draw();

                    
            // check for win
                    if (won())
                    {
                        printf(
            "ftw!\n");
                        
            break;
                    }

                    
            // prompt for move
                    printf("Tile to move: ");
                    
            int tile = GetInt();

                    
            // move if possible, else report illegality
                    if (!move(tile))
                    {
                        printf(
            "\nIllegal move.\n");
                        usleep(
            500000);
                    }

                    
            // sleep thread for animation's sake
                    usleep(500000);
                }

                
            // that's all folks
                return 0;
            }


            /*
             * void
             * clear()
             *
             * Clears screen using ANSI escape sequences.
             
            */

            void
            clear()
            {
                printf(
            "\033[2J");
                printf(
            "\033[%d;%dH"00);
            }


            /*
             * void
             * greet()
             *
             * Greets player.
             
            */

            void
            greet()
            {
                clear();
                printf(
            "WELCOME TO THE GAME OF FIFTEEN\n");
                usleep(
            2000000);
            }


            /*
             * void
             * init()
             *
             * Initializes the game's board with tiles numbered 1 through d*d - 1
             * (i.e., fills 2D array with values but does not actually print them).  
             
            */

            void
            init()
            {
                
            // TODO
                for(int i = 0; i < d; i++)
                    
            for(int j = 0; j < d; j++)    
                        
            // do NOT initialize board[d-1][d-1]
                        if((i != d - 1|| (j != d - 1))
                            board[i][j] 
            = (d - i) * d - j - 1;
                        
            if(d % 2 == 0)
                        {
                            board[d
            -1][d-2= 2;
                            board[d
            -1][d-3= 1;
                        }
            }


            /* 
             * void
             * draw()
             *
             * Prints the board in its current state.
             
            */

            void
            draw()
            {
                
            // TODO
                for(int i = 0; i < d; i++)
                {
                    
            for(int j = 0; j < d; j++)
                    {
                        
            if((board[i][j] == 0))
                            printf(
            "  \t");
                        
            else
                            printf(
            "%2d\t",board[i][j]);
                    }
                    printf(
            "\n");
                }
            }


            /* 
             * bool
             * move(int tile)
             *
             * If tile borders empty space, moves tile and returns true, else
             * returns false. 
             
            */

            bool
            move(
            int tile)
            {
                
            // TODO
                
            //First found the 'tile'
                for(int i = 0; i < d; i++)
                    
            for(int j = 0; j < d; j++)
                        
            if(board[i][j] == tile)
                        {
                            
            //validity check
                            
            //Check up
                            if(i - 1 >= 0)
                                
            if(board[i-1][j] == 0)
                                {
                                    board[i
            -1][j] = board[i][j];
                                    board[i][j] 
            = 0;
                                    
            return true;
                                }

                            
            //Check down
                            if(i + 1 < d)
                                
            if(board[i+1][j] == 0)
                                {
                                    board[i
            +1][j] = board[i][j];
                                    board[i][j] 
            = 0;
                                    
            return true;
                                }

                            
            //Check left
                            if(j - 1 >= 0)
                                
            if(board[i][j-1== 0)
                                {
                                    board[i][j
            -1= board[i][j];
                                    board[i][j] 
            = 0;
                                    
            return true;
                                }

                            
            //Check right
                            if(j + 1 < d)
                                
            if(board[i][j+1== 0)
                                {
                                    board[i][j
            +1= board[i][j];
                                    board[i][j] 
            = 0;
                                    
            return true;
                                }
                        }
                
            return false;
            }


            /*
             * bool
             * won()
             *
             * Returns true if game is won (i.e., board is in winning configuration), 
             * else false.
             
            */

            bool
            won()
            {
                
            // TODO
                static int solved[DIM_MAX][DIM_MAX];
                
            static int once = 0;
                
            if(once == 0)
                {
                    
            for(int i = 0; i < d; i++)
                           
            for(int j = 0; j < d; j++)
                               
            // do NOT initialize board[d-1][d-1]
                            if((i != d - 1|| (j != d - 1))
                                   solved[i][j] 
            = i * d + j + 1;
                    once 
            ++;
                }

                
            for(int i = 0; i < d; i++)
                    
            for(int j = 0; j < d; j++)
                        
            if(board[i][j] != solved[i][j])
                            
            return false;
                
            return true;
            }


            posted on 2011-01-26 00:24 志華 閱讀(1469) 評論(1)  編輯 收藏 引用 所屬分類: C/C++

            評論

            # re: Puzzle Fifteen練習 CS50[未登錄] 2014-05-04 14:41 kris

            學CS50的時候學到week3 做習題的時候頓覺得好難

            包括即使在做init的時候都一直出錯,google了一下看到你的答案覺得很好,還在研究測試中,感謝!  回復  更多評論   

            <2011年1月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            91久久精品国产免费直播| 亚洲中文精品久久久久久不卡| 国产人久久人人人人爽| 91精品婷婷国产综合久久| 国产一区二区精品久久岳| 一本色综合久久| 国产精品久久永久免费| 四虎影视久久久免费| 人妻精品久久久久中文字幕一冢本| 日本免费一区二区久久人人澡| 久久性精品| 欧美久久精品一级c片片| 亚洲午夜精品久久久久久app| 国产精品无码久久久久久| 人妻丰满?V无码久久不卡| 777米奇久久最新地址| 狠狠色丁香婷婷久久综合五月| 久久91精品久久91综合| 国产成人久久精品一区二区三区 | 久久综合亚洲欧美成人| 久久久久亚洲精品中文字幕| 少妇久久久久久被弄高潮| 综合久久精品色| 色诱久久av| 久久免费国产精品| 久久久久国色AV免费观看| 国产午夜精品理论片久久 | 精品国产日韩久久亚洲| 久久久久久亚洲精品无码| 亚洲综合久久综合激情久久| 久久精品国产亚洲AV麻豆网站 | 99精品国产99久久久久久97| 国内精品久久久久影院网站| 久久国产精品国产自线拍免费| 热re99久久6国产精品免费| 中文字幕无码精品亚洲资源网久久| 久久有码中文字幕| 天天做夜夜做久久做狠狠| 午夜福利91久久福利| 色8激情欧美成人久久综合电| 久久久噜噜噜久久中文字幕色伊伊|