一.前言
某日,看见隔壁家的小朋友在玩一款网络爆款贪吃蛇游戏,感觉很好玩。自己刚好正在学习JAVA编程,也想实现一个类似功能的游戏Demo练手,在网上查看了不少源码案例,全都是很古老的方块式贪吃蛇游戏案例,没有想要的实现,因此自己动手实现一个JAVA版的贪吃蛇游戏。
我的另一篇博客有Androd版本的游戏介绍:蛇王传说1.0Android版发布_hawkol的专栏-CSDN博客
https://blog.csdn.net/hawkol/article/details/90608813
二、实现效果
1.启动界面 蛇头会左右摆动,动态效果
2、游戏主界面 地图上有不同的食物,用键盘控制蛇在地图上行走,每吃掉一个食物,蛇会自动生长一节
三、按键功能说明 左右键蛇转向,上键蛇加速行走。
四、美工准备
因自己不会美工,很多图都是从网上找的,然后用photoshop抠图,按自己的设计思路,做成以下样式。做片做的比较丑,就不放原图了。
1、images 文件夹
2、foolds文件夹
3、snake文件夹
4、在s0,s1,s2,s3,s4文件夹分别放以下5张图,可以做成不同颜色和样式(也就是蛇的皮肤)
五、打开Eclipse新建HawkRetroSnaker 项目,目录文件结构如下图:
从目录结构可以看出,此游戏有5个JAVA类,分别是
Foods.java (食物),
Snake.java (蛇),
SnakePlayer.java (游戏主程),
Tools.java (工具类),
UIGameStart.java (启动时的Ui).
六、游戏代码:关键代码地方都有注释,我就不多啰嗦了,代码写的比较烂,只是为了实现功能,有很多地方可以优化,大家也可提出自己的见解。
1.Foods.java
package com.hawkonline.retorsnaker;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Foods {
private int imgID;//食物图片D 以foodsX
private int drawX;// 图块显示中心的X位置
private int drawY;// 图块显示中心的Y位置
private int generateEnergy;//产生能量
private int offsetX;// 图块块显示的X位置偏移值-自动计算
private int offsetY;// 图块块显示的X位置偏移值-自动计算
private BufferedImage imgFoods;//
public Foods(int imgID, int drawX, int drawY, int generateEnergy) {
super();
this.imgID = imgID;
this.drawX = drawX;
this.drawY = drawY;
this.generateEnergy = generateEnergy;
//加载食物图片
try {
imgFoods= ImageIO.read(new FileInputStream("images\\foods\\foods"+imgID+".png"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.offsetX = imgFoods.getWidth()/2;
this.offsetY = imgFoods.getHeight()/2;
}
//画食物
public void drawFoods(Graphics cg,int x,int y ){
cg.drawImage(imgFoods, drawX-offsetX+x, drawY-offsetY+y, null);
cg.setColor(Color.WHITE);
//参照线-------------------
cg.fillRect(drawX-1+x, drawY-1+y, 2, 2);
}
public Foods() {
super();
}
public int getImgID() {
return imgID;
}
public void setImgID(int imgID) {
this.imgID = imgID;
}
public int getDrawX() {
return drawX;
}
public void setDrawX(int drawX) {
this.drawX = drawX;
}
public int getDrawY() {
return drawY;
}
public void setDrawY(int drawY) {
this.drawY = drawY;
}
public int getGenerateEnergy() {
return generateEnergy;
}
public void setGenerateEnergy(int generateEnergy) {
this.generateEnergy = generateEnergy;
}
public int getOffsetX() {
return offsetX;
}
public void setOffsetX(int offsetX) {
this.offsetX = offsetX;
}
public int getOffsetY() {
return offsetY;


4万+

被折叠的 条评论
为什么被折叠?



