Java swing写一个贪吃蛇

这篇博客介绍了作者在学习Java时使用Swing框架编写贪吃蛇游戏的过程。提供了程序的完整源代码,并鼓励读者尝试运行,遇到问题可以留言寻求帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习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);
			snake.getHead().setY(yCentre);
			g.setColor(Color.ORANGE);
			g.fillOval(snake.getHead().getX(), snake.getHead().getY(), PER_UNIT_LENGTH, PER_UNIT_LENGTH);

			//初始化点心
	
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值