学习Java的时候,我用swing写了一个贪吃蛇。运行效果如图:
下面给出程序完整源代码,可以直接复制粘贴到你的机子上运行(注意文件名要改成Main.java)。
关于代码有任何问题可以留言我,我会尽力解答。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class Main extends JFrame{
private static GamePanel p1 = new GamePanel();//创建游戏面板
private static InformationPanel p2 = new InformationPanel();//创建信息面板
public Main(){//配置框架的布局
setLayout(new BorderLayout());
add(p1,BorderLayout.CENTER);
add(p2,BorderLayout.EAST);
}
public static void main(String[] args){
JFrame frame = new Main();//新建框架
//配置框架
frame.setTitle("贪吃蛇");
frame.setSize(1100, 800);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
//新建线程
Thread thread1 = new Thread(p1);
thread1.start();
Thread thread2 = new Thread(p2);
thread2.start();
}
}
class GamePanel extends JPanel implements Runnable{
public static final int PER_UNIT_LENGTH = 20;//单位长度
public static final int MULTIPLE = 15;//倍数
public static final int HALF_SIDE = MULTIPLE * PER_UNIT_LENGTH;//游戏边框的一半长 = 倍数 * 单位长度
private boolean isFirstRun = true;//判断是否需要初始化
private boolean isStarted = false;//判断是否开始
private boolean isPaused = false;//判断是否暂停
private static int score = 0;//游戏分数
private static int information = 0;//传递游戏信息
private Snake snake = new Snake();//新建一条蛇
private Dot dessert = new Dot();//新建一个点心
protected void paintComponent(Graphics g){
super.paintComponent(g);
//获取中点坐标
int xCentre = getWidth() / 2;
int yCentre = getHeight() / 2;
//获取一个随机点坐标
int xRandom, yRandom;
if(isFirstRun){
isFirstRun = false;
//初始化游戏边框
g.drawRect(xCentre - HALF_SIDE, yCentre - HALF_SIDE, HALF_SIDE * 2, HALF_SIDE * 2);
//初始化蛇头
snake.getHead().setX(xCentre);