实验要求
- 实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,上下左右控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点。
- “蛇”碰到边界或蛇头与蛇身相撞,蛇死亡,游戏结束。
- 为游戏设计友好的交互界面;例如欢迎界面,游戏界面,游戏结束界面。要有开始键、暂停键和停止退出的选项。
- 对蛇吃到豆子进行分值计算,可以设置游戏速度,游戏音乐等拓展元素。
程序设计工具
1.使用JAVA语言,
2.开发环境:IntelliJ IDEA Community Edition 2021.2
实验代码部分
Food类
判断食物是否被吃,如果被吃了就重新随机生成一个食物,同时也要判断目标坐标是否在蛇身上。
package 贪吃蛇;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
//定义食物的类,显示和随机生成
public class Food {
private boolean iseat = false; //默认没有被吃
Location foodla = new Location(20,20); //食物的初始位置
public void drawFood(Graphics g,int rate) {
g.setColor(Color.RED);
g.fillRect(foodla.getY()*rate+10, foodla.getX()*rate+50, rate, rate);
}
//获取食物的坐标
public Location getFoodLocation() {
return foodla;
}
//设定食物坐标
public void setLocation(Location x) {
this.foodla = x;
}
//食物是否被吃
public boolean isEat() {
return iseat;
}
//设定食物是否被吃状态
public void setEat(boolean b) {
this.iseat = b;
}
//如果食物被吃了,就更新食物坐标,食物坐标在(90,60)的范围且不与蛇身重合
public void updateFood() {
Random am = new Random();
foodla = new Location(am.nextInt(51),am.nextInt(51));
}
}
GameFrame类
为游戏的主界面,设定界面大小。同时对键盘按键进行监视,用来控制蛇的移动。
package 贪吃蛇;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import 贪吃蛇.Snake.OritentionEum;
//游戏的主窗口
public class GameFrame {
private Frame f ; //其实GameFrame直接继承Frame窗口就好
private int fLocationX = 400;
private int fLocationY =120;
private int fWidth = 800; //窗口宽
private int fHeight=600; //窗口高
private StartPanel sp; //开始界面Panel
private GameCanvas gc; //贪吃蛇画布
private OerationList ol; //相关信息
private int rate =10 ;
private Snake sk ;
private Food fd;
//窗口初始化
public void frameinit() {
f = new Frame("启动器");
f.setLayout(null); //不使用布局管理,Panel用绝对定位
sp = new StartPanel(this).panelInit();
sp.setBounds(280, 180, 280, 300); //这个是相对于sp的上一级的component的
f.add(sp);
this.setAtt(fLocationX,