一、实验内容1、实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,上下左右控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点,得分增加,“蛇”碰到边界或,蛇头与蛇身相撞,蛇死亡,游戏结束。为游戏设计初始欢迎界面,游戏界面,游戏 结束界面。
2、进行交互界面的设计,要有开始键、暂停键和停止退出的选项。对蛇吃到豆子进行分值计算,可以设置游戏速度,游戏音乐等拓展元素。
二、贪食蛇游戏逻辑架构
三、贪食蛇开发流程
1、准备开发环境(1)打开eclipse。
(2)新建SnakeGame项目,在该项目下新建Snake主类和Panel类;新建一个folder:resource存放资源,在该文件resource下再新建两个folder:sound和image,把游戏所需图片文件和音频文件放进去。
2、设计游戏图纸
3、画出白布窗口frame`JFrame frame = new JFrame();
frame.setBounds(200, 50, 800, 600);
frame.setResizable(false);// 设置窗口不可更改
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);// 使窗口可视`
4、在窗口上添加画布`frame.add(new Panel());`
5、在画布上添加标题`ImageIcon title;// 定义游戏界面开头栏图标
title.paintIcon(this, g, 5, 0);// 用画笔g画title图标`
6、在画布上添加黑色游戏框,添加游戏背景图(游戏区)`g.fillRect(5, 35, 775, 525);// 用画笔g画游戏界面黑框
g.drawImage(bj, 5, 35, this);// 添加游戏界面背景图片`
7、在游戏区放上静态的蛇`for (int i = 1; i < len; i++) {// 不能从0开始,0用来存放蛇头了
body.paintIcon(this, g, snakex[i], snakey[i]);
}`
8、初始化蛇`public void initSnake() {
len = 3;
snakex[0] = 55;//一定要注意初始坐标的选取,不能随意取,
snakey[0] = 35;
snakex[1] = 30;
snakey[1] = 35;
snakex[2] = 5;
snakey[2] = 35;
foodx = 5 + 25 * rand.nextInt(30);// 横坐标可容纳30个food调用rand方法随机生成
foody = 35 + 25 * rand.nextInt(21);// 纵坐标可容纳21个food
fx = "R";// 重新初始化蛇头方向,不然每次一重新开始又立马撞到自己然后over掉!
score = 0;
}`
9、控制蛇头的方向`if (fx == "R") {
right.paintIcon(this, g, snakex[0], snakey[0]);// 蛇头放在头节点,即第一个数组元素中
} else if (fx == "L") {
left.paintIcon(this, g, snakex[0], snakey[0]);
} else if (fx == "U") {
up.paintIcon(this, g, snakex[0], snakey[0]);
} else if (fx == "D") {
down.paintIcon(this, g, snakex[0], snakey[0]);
}`
10、放上游戏开始、游戏结束提示`// 画跳出的游戏开始提示字符
if (isStarted == false) {
g.setColor(Color.white);// 重新设置画笔字体颜色
g.setFont(new Font("arial", Font.BOLD + Font.ITALIC, 45));// 重新设置画笔字体类型,加粗,大小
g.drawString("Press Space to Your Show Time", 50, 475);// 画它,放在窗口中坐标为(75,300)的地方
g.setColor(Color.red);
begin.paintIcon(this, g, 250, 150);
}
// 画游戏结束界面
if (isFailed) {
g.setColor(Color.white);
g.setFont(new Font("arial", Font.BOLD, 40));
g.drawString("Press Space to Restart", 200, 360);
g.setColor(Color.red);
g.setFont(new Font("arial", Font.BOLD + Font.ITALIC, 73));// 同时设置粗体与斜体用加号
g.drawString("Game Over ! ", 200, 250);
fail.paintIcon(this, g, 0, 380);
}`
11、按空格键控制游戏开始
12、让蛇动起来`if (isStarted && !isFailed) {
// 递归方法,每间隔一个时钟周期,蛇移动一格,后一节身体的坐标变成前一节身体的坐标,蛇头直接向前移动一格,一直画一直画
for (int i = len - 1; i > 0; i--) {
snakex[i] = snakex[i - 1];