目录
一.预习内容
项目分析:
实验目标:
二.算法设计
算法一:蛇头蛇身移动设计
算法二:食物设计
三.页面设计
四.成品展示
一.预习内容
项目分析:
对于贪吃蛇,需要设计页面布局,在此基础上添加监听器,实现按键响应,然后根据键盘控制改变蛇的位置,设计随机出现的食物,在蛇吃掉食物的情况下改变蛇身长度,在蛇吃到自身或者撞墙的情况下死亡,重新开启游戏。
实验目标:
实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,上下左右控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点,得分增加,“蛇”碰到边界或,蛇头与蛇身相撞,蛇死亡,游戏结束。为游戏设计初始欢迎界面,游戏界面,游戏结束界面。
运算符优先级认知
资料收集
//大致贪吃蛇设计思路
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。当蛇吃到自己或者蛇撞墙时,游戏页面要暂停,同时弹出窗口供用户选择是否重新开启游戏。
注意事项:
每次重新开启游戏后,蛇身的长度需要重置。
当蛇在朝某一方向移动时,不可以向其相反的方向移动。
四.成品展示