您的位置:首页精文荟萃破解文章 → 贪吃蛇的算法分析(4)

贪吃蛇的算法分析(4)

时间:2004/10/15 0:59:00来源:本站整理作者:蓝点我要评论(0)

 WormPit类

WormPit类中包括了WormWormFood。贪吃蛇将会在画面中移动寻找食物。如果它吃到食物它将会长一格。如果它碰到边界或者吃到自己将Game Over


下面介绍几个重要的函数:



l         private void paintPitContents(Graphics g)


重绘屏幕上的所有元素






// 更新贪吃蛇的状态


        myWorm.update(g);  


        // 头部的位置和食物的位置重合就吃到食物


        if (myFood.isAt(myWorm.getX(), myWorm.getY())) {


        myWorm.eat();


        score += level;


        foodEaten++;


        if (foodEaten > (level << 1)) {


            /* 增加游戏难度 */


            forceRedraw = true;


            foodEaten = 0;


            level++;


            if (tonePlayer != null) {


            try {


                tonePlayer.setMediaTime(0);


                tonePlayer.start();


            } catch (MediaException me) { }         }


        } else {


            if (audioPlayer != null) {


            try {


                Manager.playTone(69, 50, 100);   // Play audio


            } catch (MediaException me) { }         }        }


        g.setColor(WormPit.ERASE_COLOUR);


        // 填充长方形(三个字的宽度)


        g.fillRect((width - (SCORE_CHAR_WIDTH * 3))-START_POS,


               height-START_POS,


               (SCORE_CHAR_WIDTH * 3),


               SCORE_CHAR_HEIGHT);


        g.setColor(WormPit.DRAW_COLOUR);


        // 显示新的分数


        g.drawString("" + score,


                 width - (SCORE_CHAR_WIDTH * 3) - START_POS,


                 height - START_POS, Graphics.TOP|Graphics.LEFT);


        // 重新生成食物


        myFood.regenerate();


        int x = myFood.getX();


        int y = myFood.getY();


        while (myWorm.contains(x, y)) {


        // 如果食物和贪吃蛇的身体重复就重新生成


            myFood.regenerate();


            x = myFood.getX();  y = myFood.getY();       }       }


        // 画出食物


        myFood.paint(g);


    } catch (WormException se) {    gameOver = true; }


 l         public void run()


主循环体:






while (!gameDestroyed) { // 游戏不终止就一直循环执行


        try {


        synchronized (myWorm) { // 多线程中要进行同步


            // 如果游戏结束


            if (gameOver) {


            if (WormScore.getHighScore(level) < score) {


                // 把最高分保存


                WormScore.setHighScore(level, score, "me");          }


            if ((audioPlayer != null) &&


                (audioPlayer.getState() == Player.STARTED)) {


                try {


                audioPlayer.stop();


                Manager.playTone(60, 400, 100);


                } catch (Exception ex) { }           }


            // 重绘


            repaint();


            // 游戏结束时等待用户重新开始


            myWorm.wait();  


            } else if (gamePaused) {


            //重绘


            repaint();


            // 游戏暂停时等待用户重新开始


            myWorm.wait();


            } else {


            // 游戏继续


            myWorm.moveOnUpdate();


            repaint();


            // 这里的等待时间决定了游戏难度!!!


            myWorm.wait(DEFAULT_WAIT-(level*40));


            }


        }


        } catch (java.lang.InterruptedException ie) {


        }


    }


    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程