目录

一.预习内容

项目分析:

实验目标:

二.算法设计

算法一:蛇头蛇身移动设计

算法二:食物设计

三.页面设计

四.成品展示


一.预习内容

项目分析:

       对于贪吃蛇,需要设计页面布局,在此基础上添加监听器,实现按键响应,然后根据键盘控制改变蛇的位置,设计随机出现的食物,在蛇吃掉食物的情况下改变蛇身长度,在蛇吃到自身或者撞墙的情况下死亡,重新开启游戏。
       

实验目标:

       实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,上下左右控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点,得分增加,“蛇”碰到边界或,蛇头与蛇身相撞,蛇死亡,游戏结束。为游戏设计初始欢迎界面,游戏界面,游戏结束界面。

运算符优先级认知

资料收集
//大致贪吃蛇设计思路

java贪吃蛇小游戏(详解)_u011622021的博客-CSDN博客_贪吃蛇代码java以及详细解释

二.算法设计

算法一:蛇头蛇身移动设计

算法需求:

①蛇身X坐标数组:用于存放蛇身的X坐标,第一位放的是蛇头X坐标。

②蛇身Y坐标数组:用于存放蛇身的X坐标,第一位放的是蛇头Y坐标。

if (forward.equals("up")) {
                for (int i = length - 1; i > 0; i--) {
                    stardustX[i] = stardustX[i - 1];
                    stardustY[i] = stardustY[i - 1];
                }
                stardustY[0] = stardustY[0] - 40;
                if (stardustY[0] < 50) {
                    isFalse = true;
                }
            } else if (forward == "down") {
                //身体下移
                for (int i = length - 1; i > 0; i--) {
                    stardustX[i] = stardustX[i - 1];
                    stardustY[i] = stardustY[i - 1];
                }
                //头部下移
                stardustY[0] = stardustY[0] + 40;

                //当蛇走到最下边则从最上边出来
                if (stardustY[0] > 800) {
                    isFalse = true;
                }
            } else if (forward == "left") {
                //身体左移
                for (int i = length - 1; i > 0; i--) {
                    stardustX[i] = stardustX[i - 1];
                    stardustY[i] = stardustY[i - 1];

                }
                //头部左移
                stardustX[0] = stardustX[0] - 40;

                //当蛇走到最左边则从最右边出来
                if (stardustX[0] < 0) {
                    isFalse = false;
                    stardustX[0]=880;
                    for (int i = length - 1; i > 0; i--) {
                        stardustX[i] = stardustX[i - 1];
                        stardustY[i] = stardustY[i - 1];

                    }
                }
            } else if (forward == "right") {
                //身体右移
                for (int i = length - 1; i > 0; i--) {
                    stardustX[i] = stardustX[i - 1];
                    stardustY[i] = stardustY[i - 1];

                }
                //头部右移
                stardustX[0] = stardustX[0] + 40;

                //当蛇走到最右边则从最左边出来
                if (stardustX[0] > 800) {
                    isFalse = true;
                }
            }

算法思路:

根据X Y作标,将蛇头以及蛇身的图片在页面上绘制出现,每次移动时,根据蛇头与蛇身的大小以及移动速度,将蛇身作标不停移到前一个数组下标对应位置中,最后在两数组第一下标放入蛇头的坐标,根据数组的坐标,绘制图像,不停重绘画面。

算法二:食物设计

算法需求:

①食物的X Y坐标值

foodX= 0 + 40 * random.nextInt(21);
        foodY = 50 + 40 * random.nextInt(17);
        // 让生成的食物不会和蛇重合
        for (int i = 0; i < length; i++) {
            if (foodX == stardustX[i] && foodY == stardustY[i]) {
                foodX = 0 + 40 * random.nextInt(20);
                foodY = 50 + 40 * random.nextInt(16);
                i = 0;
            }
        }

算法思路:

1、根据随机数以及整个游戏页面布局的设计,产生食物位置的摆放。

2、当蛇头的坐标和食物坐标相同时,产生新的食物。

3、当遍历完后缀表达式时,计算结果就保存在栈里了。

三.页面设计

页面组成:
①页面背景布局以及蛇头、蛇身、食物绘制

②游戏操作提示框以及响应机制

@Override
    public void keyPressed(KeyEvent e) {
        Keycode=e.getKeyCode();
        if (e.getKeyCode()==KeyEvent.VK_SPACE ||e.getKeyCode()==KeyEvent.VK_R){
            贪吃蛇.frame3.dispose();
            贪吃蛇.frame2.add(new GamePanel());
            贪吃蛇.frame2.setVisible(true);
        }
        else Keycode=0;
    }

页面功能:
       当用户开始游戏时,不间断重绘画面,产生蛇在移动的动态效果。当食物被吃时,重新产生食物,并且蛇身长度+1。当蛇吃到自己或者蛇撞墙时,游戏页面要暂停,同时弹出窗口供用户选择是否重新开启游戏。

注意事项:

每次重新开启游戏后,蛇身的长度需要重置。

当蛇在朝某一方向移动时,不可以向其相反的方向移动。

java贪吃蛇心得体会 贪吃蛇java实训报告原理_java贪吃蛇心得体会

四.成品展示

java贪吃蛇心得体会 贪吃蛇java实训报告原理_java贪吃蛇心得体会_02

java贪吃蛇心得体会 贪吃蛇java实训报告原理_java贪吃蛇心得体会_03

java贪吃蛇心得体会 贪吃蛇java实训报告原理_数组_04