实验二、贪吃蛇的游戏开发
1、实验目的:
开发一个贪吃蛇游戏,吃到食物蛇身增长,蛇头撞到自身和四周墙壁死亡。
2、实验工具
通过Java运行输出。
3、实验内容
预习:
实验要求:实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,上下左右控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点,得分增加,“蛇”碰到边界或,蛇头与蛇身相撞,蛇死亡,游戏结束。为游戏设计初始欢迎界面,游戏界面,游戏结束界面。
思路:
1、游戏界面:设计出游戏界面,并同时在其中完成游戏界面的构造、蛇身的构造、食物的构造,同时还要设置定时器,由于画面是每一帧绘制进去的,所以这里用双缓存技术新定义个空图片,然后在其中添加所需的各种元素,然后将空图片添加到窗体中即可。同时,在判定游戏状态时,每次将窗体刷新。游戏界面显示即可完成。
2、游戏过程:在此过程中要定义蛇的运动方向、蛇的移动、蛇吃食物、以及蛇头碰墙及蛇碰到自身的检测。同时用started值得不同情况分别来定义游戏状态,用来判定执行蛇自身的运动。倘若蛇吃到食物,则蛇身长+1,继续运动。
3、游戏结束:此时通过started==2来判定游戏结束,同时公布游戏最终得分,倘若继续游戏,则按空格键重新开始游戏。
4、扩展功能:在窗口中添加提示;按下“空格键”开始游戏、当前分数为:、游戏结束-最终分数为:
来提醒玩家游戏状态。
重点:游戏过程中,要将食物设置在游戏区域内,同时不能出现在蛇身上;
蛇在运动过程中,检测是否撞到自身或者四周墙壁,若撞到,则死亡;
设置键盘监听,通过键盘的上下左右与蛇身的上下左右运动建立联系;
检测游戏区域内食物是否被吃;
重新游戏后,游戏区域内的所有内容重新初始化;
游戏开发思路:
我的做法是先建立一个Text软件包,里面放一个Snake类和一个Test类,在Snake类中将贪吃蛇所需的全部因素填好,在Test中进行运行。
运行结果如下:
!](https://img-blog.csdnimg.cn/86c820eb70c646a5abbd462646558212.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5byg5b2m5Lit,size_20,color_FFFFFF,t_70,g_se,x_16)
首先,Snake类:
//定义好蛇长、定时器、游戏背景、食物出现范围、食物出现位置、窗口、标题、蛇移动的方向及蛇运动中的各种问题,同时设置三种情况,startrd == 0, started == 1,started == 2//游戏信息 0-未开始 1-开始 2-结束,同时用监听器与键盘和游戏建立连接,通过上下左右空格键来控制蛇的运动。
运行结果如下:
```java
package Test;
import org.w3c.dom.css.Rect;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import java.awt.event.*;
public class Snake extends JFrame implements KeyListener, ActionListener, MouseListener {
int slong = 2;//蛇当前长度
//蛇坐标
Image offScreenImage=null;
int[] Snakex = new int[100];
int[] Snakey = new int[100];
int fx = 1;//蛇的方向 0-左 1-右 2-上 3-下
Timer timer = new Timer(150, this);//设置定时器,每100毫秒一次
//食物位置
int foodx;
int foody;
Random random = new Random();//随机数,随机位置生成食物
public static int started = 0;//游戏信息 0-未开始 1-开始 2-结束
//---------------------------------------------------------------------------------------------------------------------
//窗体
public void myJFrame() {
this.setTitle("贪吃蛇"); //标题
this.setSize(800, 600); //窗口大小
this.setResizable(false); //窗口是否可以改变大小=否
this.setDefaultCloseOperation(Snake.EXIT_ON_CLOSE); //窗口关闭方式为关闭窗口同时结束程序
int width = Toolkit.getDefaultToolkit().getScreenSize().width; //获取屏幕宽度
int height = Toolkit.getDefaultToolkit().getScreenSize().height; //获取屏幕高度
// System.out.println("宽度:"+width);//测试
// System.out.println("高度:"+height);//测试
this.setLocation((width - 800) / 2, (height - 600) / 2); //设置窗口默认位置以屏幕居中