Java贪吃蛇游戏,基于java的贪吃蛇游戏的设计与实现
本文详细介绍了Java实现贪吃蛇游戏的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
如何解决写爬虫IP受阻的问题?立即使用。
1. 程序结构
程序结构图如下图所示:
2. 程序设计思路
2.1 Data类
功能:连接Statistics文件夹,将statics资源包中的图片变成图标在面板上绘制。实现:使用class.getResource(字符串路径)方法。代码如下:
包com.snake导入javax . swing . *;导入Java . net . URL;公共类数据{
//蛇头
公共静态URL upUrl=data . class . get resource(/statics/up . png );
public static image icon up=new image icon(upUrl);
公共静态URL down URL=data . class . get resource(/statics/down . png );
public static image icon down=new image icon(down URL);
公共静态URL left URL=data . class . get resource(/statics/left . png );
public static image icon left=new image icon(left URL);
公共静态URL right URL=data . class . get resource(/statics/right . png );
public static image icon right=new image icon(right URL);
//饕餮蛇身
公共静态URL body URL=data . class . get resource(/statics/body . png );
public静态image icon body=new image icon(body URL);
//食物
公共静态URL foodUrl=data . class . get resource(/statics/food . png );
public静态image icon food=new image icon(foodUrl);}
2.2 StartGame类
功能:创建游戏窗口,在窗口中添加游戏面板。实现:用JFrame类创建一个游戏窗口,用它的add()方法添加一个GamePanel类实例化对象。代码如下:
包com.snake导入javax . swing . *;导入Java . awt . *;公共类StartGame {
公共静态void main(String[] args){
//建立一个游戏窗口
JFrame=New JFrame( Java-Snakes Games );//标题
frame.setSize(900,720);//窗口大小
frame . setlocationrelativeto(null);//窗口显示屏幕的中间
frame . setresizable(false);//固定窗口大小
frame . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);//设置窗体关闭事件
frame . add(new game panel());//添加游戏内容
frame . set visible(true);//将窗体设置为可见
}}
2.3 GamePanel类
功能:实现游戏的动态页面。实现:(1)init()方法:初始化蛇位置;
(2)eat()方法:用随机种子随机定位食物,判断食物位置不能与蛇位置重合;
(3)继承JPanel类,重写paintComponent(Graphics g)方法,方法中绘制标题栏、蛇位置(根据方向蛇头方向变量绘制蛇头)、蛇身、积分栏、游戏提醒项、失败判断项;
(4)在KeyListener接口中实现key pressed (key event)方法,获取键盘输入,根据键盘输入改变游戏状态或蛇头的方向变量;
(5)在ActionListener接口中实现actionPerformed(ActionEvent e)方法,根据游戏状态和方向变量移动蛇(注意禁止直接折返操作),判断是吃食物还是死亡。使用Timer timer使游戏动态变化,使用repaint()方法实时更新界面。
代码如下:包com.snake导入javax . swing . *;导入Java . awt . *;导入Java . awt . event . action event;导入Java . awt . event . action listener;导入Java . awt . event . key event;导入Java . awt . event . key listener;导入Java . util . random;公共类GamePanel扩展JPanel实现KeyListener,ActionListener {
int[]snakeX=new int[500];//感恩蛇横坐标
int[]snakeY=new int[500];//蛇形纵坐标
int foodX//食物横坐标
int foodY//食蛇纵坐标
int长度;//贪吃蛇的长度
弦方向;//蛇头方向
int分数;//整数
Random r=new Random();
Timer timer=新定时器(100,这个);
布尔isStart
布尔isFail
//构造函数
公共游戏面板(){
init();
这个。setfocusable(true);
这个。addkey监听器(this);
计时器。start();
}
私有void init(){
长度=3;
snakeX[0]=100;snakeY[0]=100;
snakeX[1]=75;snakeY[1]=100;
snakeX[2]=50;snakeY[2]=100;
方向= R
吃(foodX,foodY);
isStart=false
isFail=false
得分=0;
}
私有void eat(int x,int y){
x=25 25 * r . nextint(34);
y=75 25 * r . nextint(24);
for(int I=0;我长度;i ) {
if(snakeX[i]==xsnakeY[i]==y){
x=25 25 * r . nextint(34);
y=75 25 * r . nextint(24);
}
}
foodX=x;foodY=y;
}
受保护的空白油漆组件(图形g) {
超级棒。油漆组分(g);
这个。设置背景(颜色。白色);//设置背景板为白色
//画标题
g.setColor(颜色。绿色);
g.setFont(新字体(幼圆,字体。粗体,50));
g。拉绳(贪吃蛇游戏,300,60);
//绘制游戏区域
g.setColor(颜色。灰色);
g。填写rect(2575850600);
//画贪吃蛇头部
if(direction==R){
Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);
}
else if(direction==L){
Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);
}
if(direction==U){
Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);
}
else if(direction==D){
Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);
}
//画身体
for(int I=1;我长度;i ) {
Data.body.paintIcon(this,g,snakeX[i],snakeY[I]);
}
//画食物
Data.food.paintIcon(this,g,foodX,foodY);
//绘制积分栏
g.setColor(颜色。黑色);
g.setFont(新字体(幼圆,字体。粗体,20));
g。拉绳(长度:长度,730,30);
g。拉绳(得分:分数,730,60);
//游戏开始提醒
if(isStart==false){
g.setColor(颜色。黑色);
g.setFont(新字体(幼圆,字体。粗体,40));
g。拉绳(按空格键开始游戏,300,300);
}
//失败判断
如果(失败){
g.setColor(颜色。红色);
g.setFont(新字体(幼圆,字体。粗体,40));
g。拉绳(游戏失败,按空格键重新开始,300,300);
}
}
@覆盖
公共空的按键(按键事件e) {
int键码=e . get键码();//获取按下的按键
//判断空格
if(keyCode==KeyEvent .VK _空间){
如果(失败){
isFail=false
init();
}
否则{
isStart=!isStart
}
repaint();
}
//判断方向
if(keyCode==KeyEvent .维生素k向左!=R){
方向= L
}
else if(keyCode==KeyEvent .维生素k方向正确!=L){
方向= R
}
else if(keyCode==KeyEvent .维生素k方向!=D){
方向= U
}
else if(keyCode==KeyEvent .维生素k向下!=U){
方向= D
}
}
@覆盖
公开无效密钥已释放(关键事件e){
}
@覆盖
公共空的键入的(按键事件e) {
}
@覆盖
已执行公共无效操作(操作事件e){
//判断游戏状态
如果(isStart!isFail){
//移动身体
for(int I=length-1;I 0;我- ) {
snakeX[I]=snakeX[I-1];
snakeY[I]=snakeY[I-1];
}
//移动头部
if(direction==R){
snakeX[0]=25;
if(snakeX[0]850){
snakeX[0]=25;
}
}
else if(direction==L){
snakeX[0]-=25;
if(snakeX[0]25){
snakeX[0]=850;
}
}
else if(direction==U){
snakeY[0]-=25;
if(snakeY[0]75){
snakeY[0]=650;
}
}
else if(direction==D){
snakeY[0]=25;
if(snakeY[0]650){
snakeY[0]=75;
}
}
//吃食物
if(snakeX[0]==foodXsnakeY[0]==foodY){
长度;
得分=10;
吃(foodX,foodY);
}
//死亡判定
for(int I=1;我长度;i ) {
if(snakeX[0]==snakeX[I]snakeY[0]==snakeY[I]){
isFail=true
}
}
repaint();
}
计时器。start();
}}
3. 游戏展示
推荐: 《java视频教程》 以上就是爪哇如何实现贪吃蛇小游戏的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。