迦瓦栈队 团队第五周项目总结

本周,根据项目计划完成模块代码组合与完善

一、优化界面

1.结合前几周的代码,考虑到贪吃蛇本身是一个游戏项目游戏,添加窗口界面,提高程序的可视化性。
2.改变贪吃蛇和食物的外观,使游戏运行界面更加美观。

二、完善程序

前几周的JAVA程序有些问题,本周针对这些问题重新做了修改,解决了蛇有时候不能移动的问题。
1.我们修改的贪吃蛇移动部分的代码如下:

    public void changeDirection(int newDirection) {
        // 改变的方向不能与原来方向同向或反向
        if (direction % 2 != newDirection % 2) {
            direction = newDirection;
        }
    }

   
    public boolean moveOn() {
        Node n = (Node) nodeArray.getFirst();
        int x = n.x;
        int y = n.y;

        // 根据方向增减坐标值
        switch (direction) {
            case UP:
                y--;
                break;
            case DOWN:
                y++;
                break;
            case LEFT:
                x--;
                break;
            case RIGHT:
                x++;
                break;
        }

        // 如果新坐标落在有效范围内,则进行处理
        if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) {
        
            if (matrix[x][y]) {        // 如果新坐标的点上有东西(蛇体或者食物)
                if (x == food.x && y == food.y) {       // 吃到食物,成功
                    nodeArray.addFirst(food);           // 从蛇头赠长

                    // 分数规则,与移动改变方向的次数和速度两个元素有关
                    int scoreGet = (10000 - 200 * countMove) / timeInterval;
                    score += scoreGet > 0 ? scoreGet : 10;
                    countMove = 0;

                    food = createFood();                // 创建新的食物
                    matrix[food.x][food.y] = true;      // 设置食物所在位置
                    return true;
                } else                                  // 吃到蛇体自身,失败
                    return false;
               
            } else {                 // 如果新坐标的点上没有东西(蛇体),移动蛇体
                nodeArray.addFirst(new Node(x, y));
                matrix[x][y] = true;
                n = (Node) nodeArray.removeLast();
                matrix[n.x][n.y] = false;
                countMove++;
                return true;
            }
        }
        return false;                                   // 触到边线,失败
    }

2.此外,为了更好的让用户进行游戏体验,我们对贪吃蛇食物出现的频率和蛇体移动的频率做了修改:


class SnakeModel extends Observable implements Runnable {
    boolean[][] matrix;                         // 指示位置上有没蛇体或食物
    LinkedList nodeArray = new LinkedList();    // 蛇体
    Node food;
    int maxX;
    int maxY;
    int direction = 2;                          // 蛇运行的方向
    boolean running = false;                    // 运行状态

    int timeInterval = 200;                     // 时间间隔,毫秒
    double speedChangeRate = 0.75;              // 每次得速度变化率
    boolean paused = false;                     // 暂停标志

    int score = 0;                              // 得分
    int countMove = 0;                          // 吃到食物前移动的次数

    // UP and DOWN should be even
    // RIGHT and LEFT should be odd
    public static final int UP = 2;
    public static final int DOWN = 4;
    public static final int LEFT = 1;
    public static final int RIGHT = 3;

    public SnakeModel( int maxX, int maxY) {
        this.maxX = maxX;
        this.maxY = maxY;

        reset();
    }
posted @ 2016-06-12 20:09  迦瓦栈队  阅读(283)  评论(0编辑  收藏  举报