Java之GUI实战--贪吃蛇
贪吃蛇,相信大家都玩过吧!
今天,分享给大家的是一个由跟麦叔学习的一个Java版的GUI小游戏——贪吃蛇。我在此基础上添加了撞墙会死,Space键控制暂停、开始和死亡后重新开始两个功能。有兴趣的同学,可以对其功能进行扩展,比如:
①游戏途中会产生一些有毒的食物
②或者是内部每隔一段时间产生围墙增加游戏难度
③又或者是添加时间限制(在指定的时间内吃到规定的食物数量)
④又或者是可以添加两条蛇让好友和你在指定的时间内一起争夺食物
……
下面是项目要用到的知识点:
用JFrame写一个简单的窗口,还要知道ActionEvent事件、FocusEvent事件和KeyEvent事件,及多态的相关知识等等
游戏效果图展示:
1、开始或暂停界面
2、结束界面
代码实现如下:
Msnake.java
package Snake;
import javax.swing.*;
import java.awt.*;
public class Msnake {
public static void main(String[] args) {
JFrame frame = new JFrame("Lencamo's 贪吃蛇 program");
frame.setBounds(10,10,915,720); //大小和位置
//---------------------------------
Mpanel Lencamo = new Mpanel();
frame.add(Lencamo);
frame.setResizable(false); //大小不能变
frame.setVisible(true); //设为组件可见窗口,😭【❤必须放在.add()后❤】
//frame.getContentPane().setBackground(Color.RED);
frame.setBackground(new Color(49, 121, 74));
//----------------------------------
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点×的时候,JVM随之关闭
}
}
Mpanel.java
package Snake;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
//this: 指向当前的类,类需要作为【监听事件】接口的实现类
public class Mpanel extends JPanel implements KeyListener, ActionListener {
public Mpanel() {
initDate(); //初始化蛇长、食物数据
//获取焦点(键盘事件)、处理(监听)事件
this.setFocusable(true);
this.addKeyListener(this);
//启动时钟
timer.start();
}
//重写KeyListener接口方法
@Override
public void keyTyped(KeyEvent e) { //准备敲
}
@Override
public void keyPressed(KeyEvent e) { //敲的过程
int keyCode = e.getKeyCode(); //获得键盘上按键对应的编码数字
if(keyCode == KeyEvent.VK_SPACE) {//VK_SPACE ==32 即空格键
if(isFailed) {
isFailed = false;
initDate();
}else {
isStarted = !isStarted;
}
repaint(); //新的数据状态
}else if(keyCode == KeyEvent.VK_LEFT) { //定义键盘按键与蛇头部事件
dir = "L";
}else if(keyCode == KeyEvent.VK_RIGHT) { //定义键盘按键与蛇头部事件
dir = "R";
}else if(keyCode == KeyEvent.VK_UP) { //定义键盘按键与蛇头部事件
dir = "U";
}else if(keyCode == KeyEvent.VK_DOWN) { //定义键盘按键与蛇头部事件
dir = "D";
}
}
@Override
public void keyReleased(KeyEvent e) { //结束
}
//----------------------------------------------------------------------------------------
//-----------此处省略-------------------完整代码请到在我的GitHub项目中下载-----------------------------
//----------------------------------------------------------------------------------------
想要获得完整版【Java贪吃蛇】的最新源码,可以点击页面右上角的GitHub图标即可下载完整源码。