这篇文章主要为大家详细介绍了Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)实现贪吃蛇游戏,1小时学会贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
今天就来拿贪吃蛇小游戏来练练手吧!
贪吃蛇游戏规则:
1.按下空格键(游戏未结束)则游戏暂停或开始;
2.按下空格键(游戏结束后)则游戏重新开始;
3.当贪吃蛇的头部撞到身体时则贪吃蛇死亡(游戏结束);
4.当贪吃蛇的头部撞到墙时贪吃蛇死亡(游戏结束);
游戏界面效果:
我们可以看到自己的贪吃蛇吃了多少食物,以及游戏得分。下面是游戏效果图:
源码(注释超详细,注意图像日期类中的材料是一个包名,里面存放的是游戏素材图片):
包程序_代码;
导入Java。awt。颜色;
导入Java。awt。字体;
导入Java。awt。图形;
导入Java。awt。形象;
导入Java。awt。事件。动作事件;
导入Java。awt。事件。动作监听器;
导入Java。awt。事件。关键事件;
导入Java。awt。事件。关键听众;
导入Java。网。网址;
导入Java。RMI。服务器。skeletonmismatchexception
导入Java。util。随机;
导入Java。util。计时器;
导入javax。命名。初始上下文;
导入javax。命名。资源不足异常;
导入javax。命名。目录。目录上下文;
导入javax。挥棒。图像图标;
导入javax。挥棒。jframe
导入javax。挥棒。jpanel
导入javax。XML。密码。数据;
公共类主要{
公共静态void main(String[] args) {
//初始化贪吃蛇游戏界面
JFrame框架=新JFrame('贪吃蛇小游戏——宾公子');//创建一个窗体对象
frame.setSize(900,800);//设置窗体大小为900x800
框架。setlocationrelativeto(null);//设置窗体为居中格式
框架。setresizable(false);//设置窗体不可改变
框架。add(新游戏面板());//在窗体中添加一个面板
框架。设置可见(真);//设置窗体可见
框架。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);//结束窗口所在的应用程序
}
}
//存储图片
类别图像数据{
//面板徽标网址:定位图片的地址图像图标:根据全球资源定位器(统一资源定位器)获得图片
//ClassT中公共URL获取资源(字符串名称)查找带有给定名称的资源。
私有静态URL头URL=imagedata。班级。获取资源('/material/header。jpg’);
公共静态图像图标头=新图像图标(头URL);
//获取蛇头向上的图片
私有静态URL upurl=imagedata。班级。获取资源('/material/up。png’);
公共静态图像图标up=新图像图标(upurl);
//获取蛇头向右的图片
私有静态URL right URL=imagedata。班级。获取资源('/material/right。png’);
公共静态图像图标右=新图像图标(右URL);
//获取蛇头向下的图片
私有静态URL down URL=imagedata。班级。获取资源('/material/down。png’);
公共静态图像图标down=新图像图标(down URL);
//获取蛇头向左的图片
私有静态URL left URL=imagedata。班级。获取资源('/material/left。png’);
公共静态图像图标左=新图像图标(左URL);
//获取蛇身的图片
私有静态URL正文URL=imagedata。班级。获取资源('/material/body。png’);
公众的静态图像图标正文=新图像图标(正文URL);
//获取食物的图片
私有静态URL foodurl=图像图标。班级。获取资源('/材料/食物。png’);
公众的静态图像图标food=新图像图标(foodurl);
}
//用面板制作游戏界面
类游戏面板扩展JPanel实现KeyListener,ActionListener {
int len//定义贪吃蛇的长度
int[]snakeX=new int[35];//定义蛇的横坐标x
int[]snakeY=new int[28];//定义蛇的纵坐标y
String dir=' R//蛇头方向:R:向右,D:向下,L:向左,U:向上
boolean isStart=false//表示贪吃蛇游戏是否开始,初始化为还没开始
javax。挥棒。timer timer=new javax。挥棒。计时器(200,这个);//定时器,第一个参数:定时执行事件
int foodX//定义食物的横坐标
int foodY//定义食物的纵坐标
int分数;//定义游戏分数
Random Random=new Random();//创建一个随机数对象
布尔isOver=false//表示游戏是否失败。结束
//初始化上述变量数据
公共游戏面板(){
init();
this . setfocusable(true);//获取焦点事件
this . addkey listener(this);//添加键盘监听事件
timer . start();//时间开始
}
//初始化游戏数据
public void Init() {
len=3;//游戏开始前,将蛇头加入静态界面。有三段(蛇身两段),即蛇长3。
//初始化蛇头位置
snakeX[0]=200;
snakeY[0]=200;
//初始化第一个蛇体位置
snakeX[1]=175;
snakeY[1]=200;
//初始化第二个蛇体位置
snakeX[2]=150;
snakeY[2]=200;
dir=' R//初始化蛇头方向向右
//随机生成食物坐标
foodX=50 25 * random . nextint(32);
foodY=100 25 * random . nextint(25);
//游戏点数初始化为0
得分=0;
}
//图片板
@覆盖
受保护的空白油漆组件(图形g) {
//TODO自动生成的方法存根
super . paint component(g);//清屏效果
this . set background(color . white);//设置面板的背景颜色
imagedata . header . paint icon(this,g,25,10);//绘制面板头部的图片(徽标)
g.fillRect(25,75,850,675);//绘制游戏区域
//绘制游戏比分牌
g.setColor(颜色。红色);
G.setFont(新字体('?),字体。粗体,20));
g .拉带('长度:' len,680,30 ');
G.drawString('分数:'分数,680,55 ');
//控制蛇头的方向和位置
if(dir . equals(' R '){//蛇头向右时
ImageData.right.paintIcon(this,g,snakeX[0],snakeY[0]);
} else if(dir . equals(' D '){//蛇头朝下时
ImageData.down.paintIcon(this,g,snakeX[0],snakeY[0]);
} else if(dir . equals(' L '){//蛇头向左时
ImageData.left.paintIcon(this,g,snakeX[0],snakeY[0]);
} else if(dir . equals(' U '){//蛇头朝上时
ImageData.up.paintIcon(this,g,snakeX[0],snakeY[0]);
}
//绘制蛇的身体
for(int I=1;我leni ) {
ImageData.body.paintIcon(this,g,snakeX[i],snakeY[I]);
}
ImageData.food.paintIcon(this,g,foodX,foodY);//根据随机坐标绘制食物
//游戏开始前的提示
if (isStart==false) {
g . set color(color . white);
G.setFont(新字体('?),字体。粗体,40));
g . drawstring(‘按空格键开始游戏’,245,400);
g .拉带(“吃一种食物10分”,265,450);
}
//游戏失败,结束
如果(isOver) {
g.setColor(颜色。红色);
;
G.setFont(新字体('?),字体。粗体,40));
g . drawstring(‘游戏失败,按空格键重启游戏’,100,400);
g .拉带(“吃一种食物10分”,260,450);
}
}
//键盘监控事件:按键控制游戏是否开始。
@覆盖
公共void按键(按键事件e) {
//TODO自动生成的方法存根
//没有释放键盘按键
int key code=e . get key code();
if (keyCode==KeyEvent。VK _空间){
If (isOver) {//游戏失败时重启游戏
isOver=false
init();
//new game panel();//重新进入游戏
} else {//游戏结束,按空格键暂停游戏。
//如果按下了空格键
isStart=!isStart//控制游戏开关反转。
}
repaint();//重新绘制界面
}
//上下左右按键控制贪吃蛇的头部方向。
if (keyCode==KeyEvent。VK _右){
if (dir.equals('L')==false) {
dir=' R//如果蛇的当前移动方向不是左,可以向右移动。
}
} else if (keyCode==KeyEvent。VK_DOWN) {
if (dir.equals('U')==false) {
dir=' D//如果蛇的当前移动方向不是向上,可以向下移动。
}
} else if (keyCode==KeyEvent。VK _左){
if (dir.equals('R')==false) {
dir=' L//如果蛇当前的移动方向不对,可以向左移动。
}
} else if (keyCode==KeyEvent。VK_UP) {
if (dir.equals('D')==false) {
dir=' U//如果蛇当前的移动方向不对,可以向左移动。
}
}
}
@覆盖
公共void键入的(KeyEvent e) {
}
@覆盖
public void key released(key event e){
}
//计时器执行的操作
@覆盖
public void action performed(action event e){
//TODO自动生成的方法存根
//如果游戏处于开始状态且未结束,蛇可以移动
if(is start==true is over==false){
//右移:只让后者移动到前一个的位置。
for(int I=len-1;I 0;我- ) {
snakeX[I]=snakeX[I-1];
snakeY[I]=snakeY[I-1];
}
//蛇头向按键控制的方向移动。
if(dir . equals(' R '){
snakeX[0]=snakeX[0]25;//蛇头向右移动一个单位:25为一个单位
if (snakeX[0]=850) {
//snakeX[0]=50;//蛇头越界,贪吃的蛇从墙的左边出来。
isOver=true//贪吃蛇撞墙,游戏失败。
}
} else if(dir . equals(' D '){//蛇头下移一个单位
snakeY[0]=snakeY[0]25;
if (snakeY[0]=725) {
//snakeY[0]=100;//蛇头越界,贪蛇从墙顶出来。
isOver=true//贪吃蛇撞墙,游戏失败。
}
} else if(dir . equals(' L '){//蛇头向左移动一个单位
snakeX[0]=snakeX[0]-25;
if (snakeX[0]=25) {
//snakeX[0]=850;//如果蛇头超出边界,贪吃的蛇就从墙的右边出来。
isOver=true//贪吃蛇撞墙,游戏失败。
}
} else if(dir . equals(' U '){//蛇头上移一个单位
snakeY[0]=snakeY[0]-25;
if (snakeY[0]=75) {
//snakeY[0]=725;//蛇头超出边界,贪吃的蛇就会从墙底出来。
isOver=true//贪吃蛇撞墙,游戏失败。
}
}
//如果蛇头到达食物位置,就吃食物
if(snakeX[0]==foodX snakeY[0]==foodY){
len//蛇的长度加一
得分=10;//分数加10
//更新食物坐标
foodX=50 25 * random . nextint(32);
foodY=100 25 * random . nextint(24);
}
//循环判断蛇头是否击中蛇身。
for(int I=1;我leni ) {
if(snakeX[0]==snakeX[I]snakeY[0]==snakeY[I]){
isOver=true//如果蛇头撞到蛇身,游戏结束。
}
}
//repaint();
重画(25,0,850,745);//不断更新游戏区页面,实现动画效果。
timer . start();//启动计时器
}
}
}
游戏中使用的图片如下(蛇身、向下蛇头、食物、logo、左蛇头、右蛇头、向上蛇头):
更多精彩游戏请参考专题《java经典小游戏》。
更多有趣的经典小游戏实现话题,分享给大家:
经典游戏总结
经典python游戏总结
Python俄罗斯方块游戏合集
经典的JavaScript游戏不停地玩。
经典javascript游戏总结
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。