自己做了个贪吃蛇,效果图如下”

素材和图片是网上找的,在做这游戏的过程中其实最麻烦的是像素的调整,需要一点点去试。。。。所以大家做的时候像素方面自己试就行了,根据自己的实际情况判断。

先说一下思路:

  1. java中导入图片的方法好像既可以用io流,也可以使用GUI编程的方式,这里我选择的是后者了。然后就是基本的创建窗体,窗体大小根据自己的电脑大小来判断。

图片类代码如下,注意,读取图片路径时,斜杠“/”表示的路径是当前模块下的src目录,这点要搞清楚。

public class imges {//将图片的路径封装为一个对象public static URL bodyURL =imges.class.getResource("/body.png");//将图片封装为程序中一个对象public static  ImageIcon bodyImg =new ImageIcon(bodyURL);//将图片的路径封装为一个对象public static URL downURL =imges.class.getResource("/down.png");//将图片封装为程序中一个对象public static  ImageIcon downImg =new ImageIcon(downURL);//将图片的路径封装为一个对象public static URL foodURL =imges.class.getResource("/food.png");//将图片封装为程序中一个对象public static  ImageIcon foodImg =new ImageIcon(foodURL);//将图片的路径封装为一个对象public static URL headerURL =imges.class.getResource("/header.png");//将图片封装为程序中一个对象public static  ImageIcon headerImg =new ImageIcon(headerURL);//将图片的路径封装为一个对象public static URL leftURL =imges.class.getResource("/left.png");//将图片封装为程序中一个对象public static ImageIcon leftImg =new ImageIcon(leftURL);//将图片的路径封装为一个对象public static URL rightURL =imges.class.getResource("/right.png");//将图片封装为程序中一个对象public static  ImageIcon rightImg =new ImageIcon(rightURL);//将图片的路径封装为一个对象public static URL upURL =imges.class.getResource("/up.png");//将图片封装为程序中一个对象public static  ImageIcon upImg =new ImageIcon(upURL);
}


这个是窗体类:

package 月夜空之星;import javax.swing.*;
import java.awt.*;/*月夜空之星
月夜空之星
2021/2/13 9:22
*/
public class startGames {private JFrame jFrame;private drawJpanel drawJpanel;public startGames(){//实例化窗体jFrame=new JFrame();//实例化面板drawJpanel=new drawJpanel();init();}//初始化窗体private void init() {jFrame.setTitle("我的贪吃蛇");jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//计算窗体大小int width= Toolkit.getDefaultToolkit().getScreenSize().width;int height=Toolkit.getDefaultToolkit().getScreenSize().height;jFrame.setBounds((width-800)/2,(height-800)/2,800,800);//固定窗体jFrame.setResizable(false);//将面板压入窗体内jFrame.add(drawJpanel);//设置窗体可见jFrame.setVisible(true);}public static void main(String[] args) {new startGames();}
}

注意窗体大小的计算方式

  1. 当能够获取图片,窗体类加载好以后,就可以开始写面板类,即容器了。画好面板以后,思考如何开始画小蛇。这里建议可以以Excel为背景,了解小蛇在面板中会是怎样的,会怎样运动。

    3:按下空格时游戏暂停,小蛇撞到自身或者往返走时,死亡,这种功能如何实现?小蛇吃掉食物后,食物出现的新位置如何确定?
    面板类代码如下:
package 月夜空之星;import javax.swing.*;
import javax.swing.plaf.ColorUIResource;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;/*月夜空之星
月夜空之星
2021/2/13 9:31    面板类
*/
public class drawJpanel extends JPanel {//设置数组表示小蛇每节身子的位置int[] snakeX=new int[300];int[] snakeY=new int[300];//设置小蛇头的方向String direction;//设置小蛇长度int length;//设置变量,判断游戏是否开始boolean isStart=false;//默认暂停//定义一个定时器Timer timer;//设置食物的变量,设置其坐标int foodX;int foodY;//设置积分int score=0;//判断小蛇死亡的方法boolean isDie=false;//初始化面板的方法public drawJpanel(){init1();//将当前焦点定位在面板上this.setFocusable(true);//设置键盘监听事件this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {super.keyPressed(e);//对应键盘上的每一个键,要用到ASCII码表//设置一个变量用来记录对应的数int keyCode =e.getKeyCode();System.out.println(keyCode);if (keyCode==KeyEvent.VK_SPACE){if (isDie){//小蛇死亡了//恢复初始化init1();isDie=!isDie;score=0;}else{//小蛇没死亡isStart=!isStart;repaint();}}//监听按下的方向键,对应小蛇头的运动//向上运动if (keyCode==KeyEvent.VK_UP){direction="up";}//向下运动if (keyCode==KeyEvent.VK_DOWN){direction="down";}//向左运动if (keyCode==KeyEvent.VK_LEFT){direction="left";}//向右运动if (keyCode==KeyEvent.VK_RIGHT){direction="right";}}});timer=new Timer(300, new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//小蛇身子的动作if (isStart==true&&isDie==false){for (int i=length-1;i>0;i--){snakeX[i]=snakeX[i-1];snakeY[i]=snakeY[i-1];}//小蛇头的动作if (direction=="up"){snakeY[0]-=25;}if (direction=="down"){snakeY[0]+=25;}if (direction=="right"){snakeX[0]+=25;}if (direction=="left"){snakeX[0]-=25;}//设置小蛇超出边界后的行为//从左到右超出边界if(snakeX[0] > 750){snakeX[0] = 25;}if(snakeX[0] <25){snakeX[0] = 750;}if(snakeY[0] < 100){snakeY[0] = 725;}if(snakeY[0] > 725){snakeY[0] = 100;}//当小蛇吃到食物时的行为,即蛇头和食物碰撞if (snakeX[0]==foodX&&snakeY[0]==foodY){length++;//小蛇长度增加/*食物的横坐标纵坐标发生改变矩形面积为 770,685。由于图片的像素,所以必须是25的倍数[25,725]之间被25整除的数横坐标[25,725]/25 = [1,29]*25 = [25,725][1,29]:Math.random - [0.0,1.0)Math.random*29 - [0.0,29.0)(int)(Math.random*29) - [0,28](int)(Math.random*29) + 1 - [1,29]((int)(Math.random*29) + 1)*25 - [25,725]*/foodX = ((int)(Math.random()*29) + 1)*25;foodY = ((int)(Math.random()*26) + 4)*25; //[100,725]/25 = [4,29]*25   -- ([1,26]+3)*25score+=10;}for (int i=1;i<length;i++){if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){isDie=true;}}repaint();}}});timer.start();}//初始化小蛇的方法private void init1() {//初始化小蛇长度length=3;//初始化小蛇头的坐标snakeX[0]=175;snakeY[0]=275;// 初始化小蛇第一节身子的长度snakeX[1]=150;snakeY[1]=275;// 初始化小蛇第二节身子的长度snakeX[2]=125;snakeY[2]=275;//初始化小蛇头的方向direction="right";//初始化食物的坐标foodX=275;foodY=125;}@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);//设置面板的背景颜色:this.setBackground(new Color(209, 237, 239));//插入一个头部图片:imges.headerImg.paintIcon(this,g,10,10);//画一个矩形区域://将画笔的颜色改变一下:g.setColor(new Color(239, 219, 218));g.fillRect(5,60,770,685);//画小蛇头if (direction=="right"){imges.rightImg.paintIcon(this,g,snakeX[0],snakeY[0]);}if (direction=="left"){imges.leftImg.paintIcon(this,g,snakeX[0],snakeY[0]);}if (direction=="up"){imges.upImg.paintIcon(this,g,snakeX[0],snakeY[0]);}if (direction=="down"){imges.downImg.paintIcon(this,g,snakeX[0],snakeY[0]);}//画小蛇身子for (int i=1;i<length;i++){imges.bodyImg.paintIcon(this,g,snakeX[i],snakeY[i]);}//画游戏暂停时的提示if (isStart==false){g.setColor(new Color(39, 185, 255));g.setFont(new Font("微软雅黑",Font.BOLD,40));g.drawString("按下空格键开始游戏",250,250);}//画食物imges.foodImg.paintIcon(this,g,foodX,foodY);//画积分g.setColor(new ColorUIResource(255, 255, 255));g.setFont(new Font("微软雅黑",Font.BOLD,20));g.drawString("积分"+score,620,40);//小蛇死亡时的判定if (isDie){g.setColor(new Color(39, 185, 255));g.setFont(new Font("微软雅黑",Font.BOLD,40));g.drawString("小蛇死亡,按下空格键开始游戏",250,250);}}
}

总共也不多,三百多行代码吧。了解清楚如何实现后,还是很简单了。
我把我自己做的分享如下,包括使用到的素材等。

提取码:koz8

如何用java语言编写小游戏?(贪吃蛇)相关推荐

  1. 【从入门到入土系列】C语言制作小游戏-贪吃蛇:Copy+运行即可另附注释

    系列文章 本系列持续更新中,欢迎您的访问! 系列简介 本系列由唐文疏撰写,负责记录博主的学习生涯中的一点一滴.独乐乐不如众乐乐,故此分享给大家.欢迎大家一起讨论.学习和批评指点. 博主只是一个普普通通 ...

  2. Java语言编写小游戏

    贪吃蛇游戏 https://download.csdn.net/download/qq_43909539/10841380 躲避球小游戏 https://download.csdn.net/downl ...

  3. c语言入门级小游戏 · 贪吃蛇 | 激发你的编程兴趣

    目录 前言 拓展知识 介绍system("pause") First:制作可控移动的小蛇 Second:添加食物 Third:如何Game Over 完整代码 前言 声明:本游戏参 ...

  4. C语言实战小游戏:贪吃蛇大战

    代码如下: #include<easyx.h> #include<stdio.h> #include<conio.h> // 需要使用_kbhit和_getch函数 ...

  5. go语言编程小游戏--贪吃蛇

    前提准备条件:安装gcc环境,可以百度也 可以安装这个链接:https://pan.baidu.com/s/1BbXFcBZywK-k-eIkWqY3Ug 提取码:04wp 复制这段内容后打开百度网盘 ...

  6. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

  7. 如何用c语言编写军旗游戏

    今天教大家如何用C语言编写军旗游戏 ~ 1.效果图: 2.主要代码: #include <graphics.h> #include <time.h>#define CHESIZ ...

  8. 用c语言编写的打字母游戏,用C语言编写小游戏——“井字棋”

    原标题:用C语言编写小游戏--"井字棋" 作者:Milo Yip 来源:知乎 原文链接:https://zhuanlan.zhihu.com/p/39581573 在 Milo Y ...

  9. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

最新文章

  1. 【干货】Github标星1.2K,Visual Transformer 最全最新资源,包含期刊、顶会论文
  2. 第1关:学习-用循环和数组实现输入某年某月某日,判断这一天一年的第几天
  3. 406. Queue Reconstruction by Height
  4. 通讯录排序 (20分)_算法入门篇:简单的排序算法
  5. 利用Group Conv在单个CNN中实现集成学习
  6. JAVA学习 02Day
  7. idea允许多实例运行
  8. 导航系统辅助设备行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. qtcreator 代码格式化工具使用
  10. 接口测试神奇APIPOST
  11. 如何快速将MKV格式转换成MP4高清电影格式?
  12. python编程阶乘_Python阶乘实现的三种方法
  13. 元宇宙虚拟数字人系统
  14. tif文件转换为CAD编辑操作
  15. Oracle字符集讨论(转)
  16. firefly游戏服务器学习笔记 6———— db模块
  17. 数据库外键级联修改删除
  18. 【厚积薄发系列】C++项目总结15—字符集不同导致第三方库接口无法解析问题分析
  19. IDEA中maven使用tomcat插件,tomcat并没有启动,无tomcat日志信息
  20. 不用找,你想要的横版人物,角色游戏素材素材都在这里

热门文章

  1. 图片如何缩小不降低清晰度?
  2. zfoo中的providers和consumers标签
  3. HaaS-Python实现智能水族生态控制器
  4. 很不错的刷Alexa排名的网站(转)
  5. 【报告分享】中国互联网经济白皮书3.0-BCG阿里研究院(附下载)
  6. 重庆智能停车场的无线wifi网络覆盖解决方案
  7. 镜头选型——景深计算
  8. 磁场强度和磁感应强度区别
  9. debugx5.qq.com清除微信浏览器缓存
  10. 25个即将上线Coming soon网页创意设计