• <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。
            貼下我自己寫的代碼,現(xiàn)在只能是將倒著的順過來,還不知道如何初始化任意的可解的棋局及如何自動破解,歡迎大蝦能提點下。
            /***************************************************************************
             * 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 志華 閱讀(1473) 評論(1)  編輯 收藏 引用 所屬分類: C/C++

            評論

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

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

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

            <2014年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            91精品国产91久久综合| 精品国产一区二区三区久久蜜臀| 久久精品国产欧美日韩99热| 国产成人精品久久| 久久综合狠狠色综合伊人| 久久久精品国产| 精品一区二区久久久久久久网站| 色综合合久久天天给综看| 九九久久自然熟的香蕉图片| 99久久人人爽亚洲精品美女| 亚洲欧美伊人久久综合一区二区| 国产精品久久久久久久久久免费| 久久久久人妻一区二区三区| 一本伊大人香蕉久久网手机| 亚洲精品乱码久久久久久久久久久久 | 久久国产香蕉视频| 精品熟女少妇a∨免费久久| 欧美黑人激情性久久| 国产高潮国产高潮久久久91| 精品免费久久久久久久| 新狼窝色AV性久久久久久| 亚洲国产精品无码久久久久久曰| 99久久免费国产精品| 久久香蕉国产线看观看乱码| av午夜福利一片免费看久久| 久久久久久国产精品无码超碰| 久久久SS麻豆欧美国产日韩| 四虎久久影院| 久久久久亚洲av毛片大| 久久婷婷色综合一区二区| 久久精品国产99久久丝袜| 久久久青草青青国产亚洲免观| 狠狠精品久久久无码中文字幕| 久久国产一区二区| 国产精品狼人久久久久影院| 久久综合丝袜日本网| 久久精品国内一区二区三区| 青青草国产精品久久久久| 国产精品成人久久久久三级午夜电影 | 波多野结衣AV无码久久一区| 久久这里有精品|