,,Java实现贪吃蛇游戏(1小时学会)

,,Java实现贪吃蛇游戏(1小时学会)

这篇文章主要为大家详细介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: