这个贪吃蛇是我学完Java之后的课程设计作业,做了有挺久的,做完这个小游戏,自己对Java的一些知识也更了解了些。其中包括按完按钮后焦点的处理啊,还有就是图形的闪烁问题。我当时做的时候基本是在自己电脑上完成的,后来才放到学校机房测试的。说来也奇怪,这个代码开始在我自己电脑上运行的时候并没有闪烁,所以我也就没想过要处理闪烁的问题,可是后来在学校机房闪烁的十分严重,所以才又用双缓冲来处理闪烁。
双缓冲解决图形闪烁源代码:
@Override
public void update(Graphics g) {
// TODO Auto-generated method stub
ImageBuffer = createImage(this.getWidth(), this.getHeight());
GraImage = ImageBuffer.getGraphics(); // 获取图形缓冲区的图形上下文
paint(GraImage); // 用paint方法中编写的绘图过程对图形缓冲区绘图
GraImage.dispose(); // 释放图形上下文资源
g.drawImage(ImageBuffer, 0, 0, this); // 将图形缓冲区绘制到屏幕上
}
运行效果:
下面是贪吃蛇完整源代码:
SnakeBody.java
package com.java.snake;
import java.awt.Color;
public class SnakeBody {
private int x;
private int y;
private Color color;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
}
GameUi.java
package com.java.snake;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.LinkedList;
import java.util.Random;
import javax.swing.*;
public class GameUi extends JFrame {
int flag = 1;
JLabel jl = new JLabel();
JLabel fs = new JLabel();
JButton start =