项目地址

Java图形库实现游戏开发

贪吃蛇游戏规则

绘制思路:

直接上代码

代码解析

数据结构抽象

事件处理

UI绘制

总结

交流

高难度 100行Java代码实现贪吃蛇游戏,不需要第三方依赖

本文发表于入职啦(公众号: ruzhila) 大家可以访问入职啦学习更多的编程实战。

🎉 ‼️ Java要实现精简的100行代码难度极大‼️ 但是还是完成了!👏 🎉

用100行代码实现了一个贪吃蛇游戏,不需要任何第三方依赖,只需要Java的标准库就可以运行,图形化版本!

项目地址

代码已经开源, snake-java 👏 欢迎Star

代码运行效果:
贪吃蛇

所有的项目都在github上开源:100-line-code 欢迎Star 👏

用100行代码的不同语言(Java、Python、Go、Javascript、Rust)实现项目,通过讲解项目的实现,帮助大家学习编程

我们会定期在群里分享最新的项目实战代码,包括不同语言的实现

老师还会详细讲解代码优化的思路,扫码加入实战群:

入群学习

Java图形库实现游戏开发

整个代码的思路:
思路

贪吃蛇游戏规则

贪吃蛇相比较其他游戏,规则比较简单,主要规则如下:

  • 贪吃蛇是一个由一条蛇和食物组成的游戏
  • 蛇可以通过键盘控制上下左右移动
  • 吃到食物后,重新生成食物
  • 蛇碰到墙壁或者自己的身体,游戏结束

绘制思路:

  • 使用JFrame绘制游戏窗口
  • 蛇是一个数组组成身体,设置一个移动方向,让身体的每个元素都移动到前一个元素的位置
  • 创建一个Timer, 用来检查游戏状态和移动蛇的身体
  • 每次移动,判断是否吃到食物,如果吃到食物,重新生成食物

直接上代码

code

代码解析

SnameGame.java 是一个独立的文件,主要是依赖了Java的图形库Swing来实现游戏的绘制

数据结构抽象

整个游戏的绘制仍然是按照Grid的方式绘制,每个格子的大小是25x25,蛇和食物都是一个Rectangle对象,通过Graphics对象来绘制

其中蛇是一个x,y坐标的数组,每次移动都是将蛇的身体的每个元素移动到前一个元素的位置 data

而苹果是一个随机生成的appleX,appleY坐标,每次吃到苹果后重新生成

事件处理

这个游戏只需要处理方向移动即可,不同于俄罗斯方块,贪吃蛇每次修改方向之后,会保持运动方向,直到碰到墙壁或者自己的身体

所以我们需要设置一个direction变量,来记录当前的方向: move

并且在绘制的过程中修改蛇身体每个元素的坐标,来实现蛇的移动

UI绘制

游戏的主要逻辑就是通过Timer来不断的绘制游戏的UI,每次的间隔150毫秒

  • 代码43行: 蛇的每个每个元素移动到前一个元素的位置,是从后往前移动
  • 47-55行: 然后第0个元素根据direction来计算新的位置
  • 代码76行: 蛇的头部(x[0])appleX,appleY是否碰撞就能判断是否吃到苹果
  • 81-85行: 头部不能碰到身体的任何一个元素,否则游戏结束
  • 代码86行: 不能碰到墙壁,否则游戏结束 paint

总结

一开始写了将近200行的代码,按照Java的面向对象实现了基本的功能

然后在保证可阅读的情况下开始精简代码,发现在往下可能就要牺牲功能和可阅读,但是仍然达到了100行的目标

过程中我们的老师也互相挑战,代码是否还能持续优化,发现结对编程的优势:能让人更快的找到解法

对比PythonJavascript而言,Java代码更加让人容易懂,因为没有特别复杂的语法,一切都非常的直观,但是缺少语法糖让一些简单的遍历、赋值等操作略显繁琐(相比Python

Java还是非常适合初学者的,因为它的语法非常的直观,而且有很多的库可以使用,但是对于一些高级的功能,可能就需要更多的代码量了

交流

我们构建了一个100行代码项目的实战群,大家可以扫码加入,一起学习编程

入群学习

也可以访问入职啦学习更多的编程实战

所有的代码都在github上开源:100-line-code 欢迎Star 👏

入职啦

心仪的工作马上入职啦

友情链接:

Copyright© 2024 杭州园中葵科技有限公司 版权所有