Java+swing实现经典贪吃蛇游戏

目录
  • 前言
  • 主要设计
  • 功能截图
  • 代码实现
  • 总结

前言

贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃东西,从而使得蛇变得越来越长。

本程序是通过java的swing来实现《贪吃蛇大作战》这款游戏。

主要需求

1、通过上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,蛇的身体会变长

2、蛇头碰到自己的身体,则算失败

主要设计

1、设置swing的窗体大小

2、随机初始化蛇的位置和食物的位置,且食物不能落在蛇的身体上。

4、添加键盘监听器,监听上下左右的方向键,来控制蛇的上下左右运动

5、蛇运行时,头向前走一步,增加一个头部节点,去掉尾部节点。

6、蛇吃了一个食物后,蛇的尾部节点添加一个节点,食物消失。

7、食物每次被蛇吃掉后,要随机再次生成一个新的食物节点。

8、有个计数器,统计蛇的长度和积分,吃一个食物,蛇的长度+1,积分+10

9、通过按空格开始/暂停游戏

功能截图

代码实现

启动类

​
public class StartGame {
​
    public static void main(String[] args) {
        JFrame jf=new JFrame("贪吃蛇大作战");
        jf.setBounds(100, 100, 905, 720);
        jf.setResizable(false);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.add(new GamePanel());
        jf.setVisible(true);
    }
​
}

游戏核心类

public class GamePanel extends JPanel implements KeyListener,ActionListener{
	//蛇的数据结构
	static int i=0;
	int length;
	int[] snakex=new int[600];
	int[] snakey=new int[600];
	String fx;
	boolean isStart=false;
	boolean isfail=false;
	int lx,ly;//吃食物后多出来一个的坐标
	//目标的数据结构
	int foodx,foody;
	//随机数
	Random random =new Random();
	//计时器
	Timer timer=new Timer(100, this);

	int score;

	public GamePanel(){
		init();
		//添加键盘监听器
		this.addKeyListener(this);
		//必须设置可以获得焦点才能监听到键盘事件
		this.setFocusable(true);
		timer.start();
	}
	public void init(){
		score=0;
		length=3;
		snakex[0]=100;snakey[0]=100;
		snakex[1]=75;snakey[1]=100;
		snakex[2]=50;snakey[2]=100;
		fx="R";
		foodx=25+25*random.nextInt(850/25);
		foody=75+25*random.nextInt(600/25);
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);//清屏,这样不会闪烁
		this.setBackground(Color.white);
		Data.headicno.paintIcon(this, g, 25, 11);
		g.setColor(new Color(104,197,107));
		g.fillRect(25, 75, 850, 600);
		//蛇头的绘制
		if(fx.equals("U")){
			Data.upicno.paintIcon(this, g, snakex[0], snakey[0]);
		}else if(fx.equals("D")){
			Data.downicno.paintIcon(this, g, snakex[0], snakey[0]);
		}else if(fx.equals("L")){
			Data.lefticno.paintIcon(this, g, snakex[0], snakey[0]);
		}else if(fx.equals("R")){
			Data.righticno.paintIcon(this, g, snakex[0], snakey[0]);
		}
		//蛇身体绘制
		for(int i=1;i<length;++i){
			Data.bodyicno.paintIcon(this, g, snakex[i], snakey[i]);
		}
		//食物的绘制
		Data.foodicon.paintIcon(this, g, foodx, foody);
		//暂停开始状态的绘制
		if(isStart==false){
			g.setFont(new Font("微软雅黑",Font.BOLD,40));
			g.setColor(Color.WHITE);
			g.drawString("按空格开始/暂停游戏", 275, 350);
		}
		//失败情况的绘制
		if(isfail==true){
			g.setFont(new Font("微软雅黑",Font.BOLD,40));
			g.setColor(Color.red);
			g.drawString("失败!按空格重新开始", 275, 350);
		}
		//积分的绘制
		g.setColor(Color.PINK);
		g.setFont(new Font("微软雅黑", Font.ITALIC, 15));
		g.drawString("长度: "+length, 800, 30);
		g.drawString("积分: "+score, 800, 55);
	}
	//实现键盘监听的接口方法
	@Override
	public void keyPressed(KeyEvent e) {
		int keycode=e.getKeyCode();
		//空格键暂停或者重开
		if(keycode==KeyEvent.VK_SPACE){
			if(isfail==true){
				System.out.println(1);
				init();
				isfail=false;
			}
			else{
				System.out.println(2);
				isStart=!isStart;
				repaint();
			}
		}
		//上下左右
		if(keycode==KeyEvent.VK_UP){
			fx="U";
		}else if(keycode==KeyEvent.VK_DOWN){
			fx="D";
			//System.out.println("down");
		}else if(keycode==KeyEvent.VK_LEFT){
			fx="L";
		}else if(keycode==KeyEvent.VK_RIGHT){
			fx="R";
		}
	}
	@Override
	public void keyReleased(KeyEvent e) {}
	@Override
	public void keyTyped(KeyEvent e){}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(isStart==true&&isfail==false){

			//身体移动
			lx=snakex[length-1];
			ly=snakey[length-1];
			for(int i=length-1;i>0;--i){
				snakex[i]=snakex[i-1];
				snakey[i]=snakey[i-1];
			}
			//头移动
			if(fx=="U"){
				snakey[0]-=25;
				if(snakey[0]<75)snakey[0]=650;
			}else if(fx=="D"){
				snakey[0]+=25;
				if(snakey[0]>650)snakey[0]=75;
			}else if(fx=="L"){
				snakex[0]-=25;
				if(snakex[0]<25)snakex[0]=850;
			}else if(fx=="R"){
				snakex[0]+=25;
				if(snakex[0]>850)snakex[0]=25;
			}
			//失败判定
			for(int i=1;i<length;++i){
				if(snakex[i]==snakex[0]&&snakey[i]==snakey[0]){
					isfail=true;
				}
			}
			//吃食物
			if(snakex[0]==foodx&&snakey[0]==foody){
				length++;
				score+=10;
				snakex[length-1]=lx;
				snakey[length-1]=ly;
				foodx=25+25*random.nextInt(850/25);
				foody=75+25*random.nextInt(600/25);
			}
			repaint();
		}

	}

}

总结

通过此次的《贪吃蛇大作战》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。

以上就是Java+swing实现经典贪吃蛇游戏的详细内容,更多关于Java swing贪吃蛇的资料请关注我们其它相关文章!

(0)

相关推荐

  • java swing实现贪吃蛇双人游戏

    本文实例为大家分享了java swing实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 游戏截图 代码 Java14写的哦低版本会报错 文件列表 package Sys; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.LinkedList; import java.util.Timer; import java.util.TimerTask; public class Ma

  • Java swing框架实现的贪吃蛇游戏完整示例

    本文实例讲述了Java swing框架实现的贪吃蛇游戏.分享给大家供大家参考,具体如下: java是门高级语言,做游戏时适合做后台,但是用它也可以做游戏.闲来无事做的时候可以用来写点小游戏,练习练习预防早衰哈哈! 闲话不说了 下面是以前练习的作品,不怕大家笑话,那个时候用了一个礼拜才做出来的. 源码如下供大家学习. 使用的是java的 swing  Jframe Jpanel JButton   当然你也可以使用awt 先来看看运行效果: 具体代码: package Tcs; /** * * *

  • Java实现简单版贪吃蛇游戏

    本文实例为大家分享了Java实现简单版贪吃蛇游戏的具体代码,供大家参考,具体内容如下 这是一个比较简洁的小游戏,主要有三个类,一个主类,一个食物类,一个贪吃蛇类. 1.首先定义主类,主类中主要用来创建窗口 public class Main { public static final int WIDTH=600; public static final int HEIGHT=600; public static void main(String[] args) { JFrame win =new

  • Java实现简易GUI贪吃蛇小游戏

    本文实例为大家分享了Java实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 主启动类 import javax.swing.*; /** * @author The Setting sun * @create 2021-09-11 15:19 */ //主启动类 public class StartGame { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setResizable(f

  • Java实现简单的贪吃蛇游戏

    本文实例为大家分享了Java实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 代码 启动类 package snake; import javax.swing.*; //游戏的主启动类 public class StartGame { public static void main(String[] args) { JFrame frame = new JFrame("贪吃蛇"); frame.setBounds(10,10,900,720); frame.setResizabl

  • java实现简单贪吃蛇小游戏

    本文实例为大家分享了java实现贪吃蛇小游戏,供大家参考,具体内容如下 有两个类,放在同一文件下下即可,背景图片,标题,蛇尾可自行更改 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class MyJFrame extends JFrame{ public MyJFrame() { int x= Toolkit.getDefaultToolkit().getScreenSize().width;

  • java swing框架实现贪吃蛇游戏

    本文实例为大家分享了java swing实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 1.编写main方法 package game; import java.awt.Graphics; import javax.swing.*; public class snakeMain extends JFrame { public snakeMain() { snakeWin win = new snakeWin(); add(win); setTitle("̰贪吃蛇v1.0"); se

  • Java+swing实现经典贪吃蛇游戏

    目录 前言 主要设计 功能截图 代码实现 总结 前言 贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃东西,从而使得蛇变得越来越长. 本程序是通过java的swing来实现<贪吃蛇大作战>这款游戏. 主要需求 1.通过上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,蛇的身体会变长 2.蛇头碰到自己的身体,则算失败 主要设计 1.设置swing的窗体大小 2.随机初始化蛇的位置和食物的位置,且食物不能落在蛇的身体上.

  • Java使用GUI实现贪吃蛇游戏详解

    最近在学GUI,然后又有读者希望我写一下相关的实战.刚好我又在B站上找到了一个关于GUI的学习视频,然后里面又刚好有这个实战,我便写了下来.注:代码来源为B站的一个up主:狂神. 游戏主启动类: import javax.swing.*; //游戏主启动类 public class startGame { public static void main(String[] args) { JFrame frame=new JFrame(); frame.setBounds(10,10,900,72

  • Java GUI编程之贪吃蛇游戏简单实现方法【附demo源码下载】

    本文实例讲述了Java GUI编程之贪吃蛇游戏简单实现方法.分享给大家供大家参考,具体如下: 例子简单,界面简陋 请见谅 项目结构如下 Constant.jvava 代码如下: package snake; /** * * @author hjn * */ public class Constant { /** * 蛇方移动方向:左边 */ public static final int LEFT = 0; /** * 蛇方移动方向:右边 */ public static final int R

  • JavaScript实现经典贪吃蛇游戏

    本文实例为大家分享了JavaScript实现经典贪吃蛇游戏的具体代码,供大家参考,具体内容如下 主要使用单例模式,所有元素动态创建: 1.创建地图 var Map; function map(){ this.mapp=null; this.makemap=function(){ this.mapp=document.createElement ("div"); this.mapp.className ="mymap"; document.body.appendChi

  • java使用GUI实现贪吃蛇游戏

    本文实例为大家分享了java使用GUI实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 整个代码分为三部分 1.游戏开始界面2.data基本图片的添加3.面板,将小蛇画到面板上 这是游戏完整界面 1. 游戏开始界面 public class StartGame {     public static void main(String[] args) {         JFrame frame = new JFrame();         frame.setBounds(10,10,900,

  • 利用Flutter制作经典贪吃蛇游戏

    目录 前言 使用 Flutter 作为游戏引擎 画蛇 2D 渲染的基础 创建蛇 填写列表 将蛇移动到下一个位置 添加运动和速度 添加控件 改变方向 吃东西和提高速度 在屏幕上显示食物 消耗和再生食物 检测碰撞并显示游戏结束对话框 添加一些收尾工作 重启游戏 显示分数 前言 Flutter (Channel stable, 2.10.3, on Microsoft Windows [Version 10.0.19044.1586], locale zh-CN) Android toolchain

随机推荐