简易贪吃蛇(JAVA版)源代码

Java经典小游戏——贪吃蛇简单实现(附源码) 在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,这篇blog就介绍了一个经典而且好理解的小游戏-贪吃蛇。 文章目录一、使用知识二、使用工具三、开发过程3.1素材准备3.2 开发过程3.2.1 创建项目3.2.2 页面设计3.23 画蛇 一、使用知识 Jframe GUI 双向链表 线程 二、使用工具 IntelliJ IDEA jdk 1.8 三、开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以及一段优雅的音乐。 3.2 阅读详情
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;

import javax.swing.*;
class snakeModel extends JPanel implements Runnable{
	public snakeModel(){
		iniMap();
		createFood();
	}
	private int[][] map=new int[90][50];
	private LinkedList snakeBody=new LinkedList();//记录snake状态
	//private LinkedList rcrdSnake;//记录snake坐标值
	private LinkedList rcrdSnake;//记录snake坐标值
	private JButton startButton=new JButton("开始"),
					pauseButton=new JButton("暂停"),
					exitButton=new JButton("退出");
	private int foodLocationX,foodLocationY;
	private int direct=1,status=0;//1=右,2=左,5=上,6=下
	private int speedTime=100;//设置snake运动速度
	protected void iniMap(){//初始化游戏,没有实体部分全部设置为0
		for(int i=0;i<90;i++){
			for(int j=0;j<50;j++)
				map[i][j]=0;
		}
		/**初始化snake**/
		addSnakeBody(44,25);
		addSnakeBody(45,25);
		addSnakeBody(46,25);
	}
	protected void addSnakeBody(int x,int y){//记录snake状态
		rcrdSnake=new LinkedList();//记录snake坐标值
		rcrdSnake.add(x);
		rcrdSnake.addLast(y);
		map[x][y]=1;
		snakeBody.addFirst(rcrdSnake);
	}
	protected void removeSnakeBody(){
		int x,y;
		rcrdSnake=(LinkedList) snakeBody.getLast();
		x=(int)rcrdSnake.getFirst();
		y=(int)rcrdSnake.getLast();
		map[x][y]=0;
		snakeBody.removeLast();
	}
	protected boolean move(){
		int x,y;
		rcrdSnake=(LinkedList) snakeBody.getFirst();
		x=(int)rcrdSnake.getFirst();
		y=(int)rcrdSnake.getLast();
		switch(direct){
			case 1://向右运动
				x++;break;
			case 2://向左运动
				x--;break;
			case 5://向上运动
				y--;break;
			case 6://向下运动
				y++;break;
		}
		if(x>89||x<0||y<0||y>49){//碰到边界
			//drawString("Failed");
			status=1;
			return false;
		}
		else if(x==foodLocationX&&y==foodLocationY){//吃到食物
			addSnakeBody(x,y);
			createFood();
			//return true;
		}
		else {//普通移动
			if(map[x][y]==1){
				System.out.printf("\nfoodX%d foodY%d\n",foodLocationX,foodLocationY);
				System.out.printf("\nX%d Y%d\n",x,y);
				System.out.printf("\n蛇体%d\n",map[x][y]);
				return false;
			}
			else{//碰到自己
				System.out.printf("\nX%d Y%d\n",x,y);
				System.out.printf("\n蛇体%d\n",map[x][y]);
				addSnakeBody(x,y);
				//snakeBody.removeLast();
				removeSnakeBody();//移除snake最后一个点
				System.out.println(snakeBody.size());
				//return false;
			}
		}
		return true;
		
	}
	protected void changeDirect(int newDirect){
		if(Math.abs(newDirect-direct)!=1)
			direct=newDirect;
			
	}
	protected void createFood(){//生成食物
		int i,j;
		do{
			i=(int)Math.rint(Math.random()*89);
			j=(int)Math.rint(Math.random()*49);
		}while(map[i][j]==1);
		map[i][j]=1;
		foodLocationX=i;
		foodLocationY=j;
		System.out.println("createFooding....");
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(move()){
			try{
				System.out.println("running");
				repaint();
				Thread.sleep(speedTime);
			}catch(InterruptedException e){
				System.out.println(e);
			}
		}
		//move();
	}

	public void paintComponent(Graphics g){//绘制贪吃蛇并创建食物
		super.paintComponent(g);
		g.setColor(Color.RED);
		g.drawRect(10, 0, 544, 304);//绘制游戏边框
		int x,y;
		for(int i=0;i<snakeBody.size();i++){
			rcrdSnake= (LinkedList) snakeBody.get(i);
			x=(int) rcrdSnake.get(0);
			y=(int) rcrdSnake.get(1);
			g.fillRect(x*6+12, y*6+2, 6, 6);
			
		}
		Font font=new Font("",50,30);
		//System.out.println(status);
		if(status==1){
			g.setFont(font);
			g.drawString("Game over", 10, 10);
			}
		g.fillRect(foodLocationX*6+12, foodLocationY*6+2, 6, 6);
		//g.fillRect(50, 50, 6, 6);
	}
	
}
class gameWindow extends JFrame implements KeyListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	protected snakeModel panelActive=new snakeModel();
	protected JPanel panelMenu=new JPanel();
	private int newDirect;
	public gameWindow(){
		super("贪吃蛇");
		setLayout(null);
		panelActive.setBackground(Color.cyan);
		panelMenu.setBackground(Color.darkGray);
		panelMenu.setBounds(0, 325, 600, 50);
		panelActive.setBounds(10, 10, 580, 310);
		add(panelActive);
		add(panelMenu);
		addKeyListener(this);
		setSize(600,400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Thread moveThread=new Thread(panelActive);
		moveThread.start();
		//repaint();
	}
	@Override
	public void keyPressed(KeyEvent key) {
		// TODO Auto-generated method stub
		if(key.getKeyCode()==38){//向上
			newDirect=5;
			panelActive.changeDirect(newDirect);
		}
		else if(key.getKeyCode()==40){//向下
			newDirect=6;
			panelActive.changeDirect(newDirect);
		}
		else if(key.getKeyCode()==39){//向右
			newDirect=1;
			panelActive.changeDirect(newDirect);
		}
		else if(key.getKeyCode()==37){//向左
			newDirect=2;
			panelActive.changeDirect(newDirect);
		}
	}
	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
}
public class Snake {
	public static void main(String args[]){
		new gameWindow();
		//int i=(int)(Math.random()*10);
		System.out.println("hello world");
		//System.out.println(i);
	}
}

《Java小游戏实现》:贪吃蛇 《Java小游戏实现》:贪吃蛇在完成坦克大战之后,就想到了贪吃蛇这个小游戏,因为这两个游戏太像了,因此,就决定把这个游戏来尝试的写下。接下来的几篇博文就是来记录这个小游戏实现的全过程。突然,想起,一年前(时间是2015年7月3日),我刚学习Java的时候看过别人写的这个游戏源代码,还专门写了篇博文,连接如下:http://blog.youkuaiyun.com/u010412719/article/detail 阅读详情

相关推荐

Java贪吃蛇游戏源代码

JOptionPane.showMessageDialog(this, "孤独的野狼制作”+”\n\n”+” ”+"QQ号:2442701497”+"\n”);JOptionPane.showMessageDialog(this,”最高记录为”+fenshu+””);g.drawString(”当前已吃食物数"+this.foods,6,72);exitItem = new JMenuItem(”退出游戏”);fenShuMenu = new JMenu("积分排行");

m0_38073539的博客 1127

JAVA-贪吃蛇(源代码)

背景图片 蛇身 食物 蛇头 标题。

2301_81253185的博客 3190

JAVA贪吃蛇小游戏源代码系列

Java贪吃蛇小游戏元源代码

尚拙的博客 5万+

贪吃蛇游戏项目(Java版含源代码)

         这是一款经典小游戏,贪吃蛇,玩家操控小蛇从小吃到大,全方面的代码解析,适合新手第一款的项目实战 项目结构 源代码如下: 苹果类 import java.awt.*; import java.util.Random; /** * 小蛇吃的苹果 */ public class Apple { private static Color APPLE_COLOR=Color.RED;//

KJ.JK 7901

贪吃蛇java源代码

贪吃蛇Java源代码

DreamtaleL 7056

JAVA实现的贪吃蛇游戏源代码解读

源代码为一个单一的SnakeGame.java,见第二章节内容。以下是对该源代码中蛇的创建、移动、吃苹果、身体增长和碰撞检测部分的详细解读:蛇的创建主要通过数组和来实现,这两个数组分别存储蛇身体各部分的x和y坐标。变量表示蛇身体的长度(初始为6)。在的构造函数中,没有直接显示创建蛇的代码,但通过设置初始的(方向)和随机生成苹果的坐标,为游戏开始做好了准备。 蛇的初始长度(身体部分的数量)被设置为6。 2. 蛇的移动 蛇的移动在方法中实现。该方法通过循环将蛇身体的每一部分向前移动一个单位(),最前面的部分根据

1164

java贪吃蛇源代码_java贪吃蛇源代码详解

1、本代码主要功能为实现贪吃蛇游戏,GUI界面做到尽量简洁和原游戏相仿。目前版本包含计分,统计最高分,长度自动缩短计时功能。2、运行时请把.java文件放入default package 即可运行。a)文件位置b)进入游戏c) 游戏进行中JAVA实现代码ALL RIGHTS RESERVED 3 import java.awt.*;import java.awt.event.*;importsta...

weixin_32073537的博客 1121

JAVA贪吃蛇源代码

贪吃蛇小游戏,JAVA练习的好项目,大家可以下载下来看看

Java贪吃蛇源代码免费

Java贪吃蛇源代码 源代码地址;链接: https://pan.baidu.com/s/1QOkSZkEkaF0uXegxR-mX2w 提取码: ngg7 复制这段内容后打开百度网盘手机App,操作更方便哦 压缩包解压导入到到eclipse里就能直接运行,图片(注意图片的路径)和音频也都在里面 最终成果; 1.背景框架 package com.zzk.snake.constant; public class Constant { public static final ...

laoliusm的博客 1251

用ST25DV芯片+KiCad快速设计NFC标签天线:参数计算/脚本生成/实测优化全流程

本文详细介绍了使用ST25DV芯片和KiCad工具设计NFC标签天线的全流程,包括参数计算、脚本生成和实测优化。通过解析芯片等效工作原理和设计思路,帮助开发者避开常见陷阱,实现高效、可量产的天线设计。文章还提供了Python计算工具和KiCad自动化脚本,大幅提升设计效率和成功率。

jj890的博客 758

PLS-PM with R 偏最小二乘路径建模 (R语言)

1. 引入 1.1. 安装plspm包 plspm 是一个用于执行偏最小二乘路径建模分析的 r 程序包。 在 CRAN 上可以免费下载: Http://cran.r-project.org/web/packages/plspm/index.html. 此后,通过以下代码在r中安装并加载该程序包即可。 install.packages("plspm") library("plspm") 2. 一些简单概念 2.1. 潜变量和观测变量 不少变量如满意度、成功指数是无法通过观测得到

Wowlittlemoon的博客 1万+

java贪吃蛇源代码

java贪吃蛇源代码

hddyhg的博客 2860

Qt QChart实战:从零打造一个实时温度监控仪表盘(附完整源码)

本文详细介绍了如何使用Qt QChart模块从零构建一个工业级实时温度监控仪表盘。通过实战案例,展示了波形图的绘制、坐标轴配置、数据流模拟等关键技术,并提供了完整的源码实现,帮助开发者快速掌握Qt在数据可视化领域的应用。

weixin_42537919的博客 243

超简单的Java贪吃蛇实现(附源代码)

超简单的Java贪吃蛇实现(附源代码) 【下载地址】超简单的Java贪吃蛇实现附源代码 本项目是一个使用Java编写的经典贪吃蛇游戏,适合初学者学习和参考。项目包含了完整的源代码,可以帮助你理解如何使用Java实现一个简单的游戏 ...

gitblog_06583的博客 546

飞书日历同步Outlook翻车?我踩过的坑和最终用Google Calendar成功的完整配置记录

本文详细记录了从Outlook日历同步到飞书时遇到的常见问题及解决方案,特别是通过Google Calendar实现稳定同步的完整配置流程。文章揭示了Outlook同步方案易翻车的原因,并提供了Google Calendar的避坑指南、高级技巧和企业级部署建议,帮助用户高效实现日历同步。

weixin_33724046的博客 313

小波变换(深入浅出)

小波变换

weixin_46713695的博客 3万+

Java贪吃蛇小游戏源代码系列之辅助类

Java贪吃蛇小游戏之音乐类 package snakeGame; /* * 设置程序运行背景音乐,包括 点击按钮音乐,鼓励音,撞墙音乐,吃食物音乐等等, * 音乐类的设置可以在snakeGame类中实现,由于音乐太多,故而集中到一起,可以在需要添加的地方实例化即可。 */ import java.applet.AudioClip; import java.net.MalformedURL...

尚拙的博客 1188

Agent应用实践之三十六 - AgentScope高阶用法:AG-UI

AI 大模型飞速进化,不懂 AI、不会用 Agent 的程序员,正在慢慢被行业淘汰。现在 AI 新技术迭代快到离谱:RAG 还没学明白,MCP 接踵而来;工具刚上手,Skills、各类新 Agent 概念又轮番刷屏;Manus还没看懂,就出来OpenClaw,OpenClaw热度还没退,又出来Hermes。越追越乱、越学越焦虑,永远在被动跟风,陷入学不完、跟不上、用不上的内耗。其实焦虑的根本原因,不是新技术太多,而是不懂大模型 Agent 应用底层原理,只会零散跟风,没有通用方法论。为此我专门推出Agent

代码让AI扣 139

java贪吃蛇小程序源代码_贪吃蛇源代码Java_Applet小程序doc

贪吃蛇源代码Java_Applet小程序doc SnakeGame.java package SnakeGame; import javax.swing.*; public class SnakeGame { public static void main( String[] args ) { JDialog.setDefaultLookAndFeelDecorated( true ); Game...

weixin_39715290的博客 111

Python从0到100完整学习指南(必看导航)

想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者!

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 6万+

别再写XPath改DOM了!用OpenClaw零代码搞定爬虫全流程(抓取+清洗+存储)

免费版的大模型调用次数有限制(每天100次),但企业版是无限的,还能私有化部署;大模型分析DOM结构有时候会慢1-2秒,但比起节省的时间,完全可以接受;自定义Skill的文档还不够完善,但社区很活跃,有问题在Discord里问,很快就能得到回复。但总的来说,OpenClaw真的改变了我写爬虫的方式——以前我是“代码的奴隶”,现在我是“需求的提出者”,把时间花在更有价值的业务逻辑上,而不是重复繁琐的DOM调试上。如果你也在被传统爬虫折磨,强烈建议你试试OpenClaw,相信我,用了就回不去了。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1314

java简易贪吃蛇移动时的代码_简易贪吃蛇(JAVA版)源代码

import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Point;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util...

weixin_31367439的博客 340

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: java秒表/计时器实现
下一篇: 32位XP安装64位WIN7 SP1手记
idevcod
博客等级 码龄14年 15粉丝 20原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值