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贪吃蛇游戏源代码
JOptionPane.showMessageDialog(this, "孤独的野狼制作”+”\n\n”+” ”+"QQ号:2442701497”+"\n”);JOptionPane.showMessageDialog(this,”最高记录为”+fenshu+””);g.drawString(”当前已吃食物数"+this.foods,6,72);exitItem = new JMenuItem(”退出游戏”);fenShuMenu = new JMenu("积分排行");
JAVA-贪吃蛇(源代码)
背景图片 蛇身 食物 蛇头 标题。
JAVA贪吃蛇小游戏源代码系列
Java贪吃蛇小游戏元源代码
贪吃蛇游戏项目(Java版含源代码)
这是一款经典小游戏,贪吃蛇,玩家操控小蛇从小吃到大,全方面的代码解析,适合新手第一款的项目实战 项目结构 源代码如下: 苹果类 import java.awt.*; import java.util.Random; /** * 小蛇吃的苹果 */ public class Apple { private static Color APPLE_COLOR=Color.RED;//
贪吃蛇java源代码
贪吃蛇Java源代码
JAVA实现的贪吃蛇游戏源代码解读
源代码为一个单一的SnakeGame.java,见第二章节内容。以下是对该源代码中蛇的创建、移动、吃苹果、身体增长和碰撞检测部分的详细解读:蛇的创建主要通过数组和来实现,这两个数组分别存储蛇身体各部分的x和y坐标。变量表示蛇身体的长度(初始为6)。在的构造函数中,没有直接显示创建蛇的代码,但通过设置初始的(方向)和随机生成苹果的坐标,为游戏开始做好了准备。 蛇的初始长度(身体部分的数量)被设置为6。 2. 蛇的移动 蛇的移动在方法中实现。该方法通过循环将蛇身体的每一部分向前移动一个单位(),最前面的部分根据
java贪吃蛇源代码_java贪吃蛇源代码详解
1、本代码主要功能为实现贪吃蛇游戏,GUI界面做到尽量简洁和原游戏相仿。目前版本包含计分,统计最高分,长度自动缩短计时功能。2、运行时请把.java文件放入default package 即可运行。a)文件位置b)进入游戏c) 游戏进行中JAVA实现代码ALL RIGHTS RESERVED 3 import java.awt.*;import java.awt.event.*;importsta...
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 ...
用ST25DV芯片+KiCad快速设计NFC标签天线:参数计算/脚本生成/实测优化全流程
本文详细介绍了使用ST25DV芯片和KiCad工具设计NFC标签天线的全流程,包括参数计算、脚本生成和实测优化。通过解析芯片等效工作原理和设计思路,帮助开发者避开常见陷阱,实现高效、可量产的天线设计。文章还提供了Python计算工具和KiCad自动化脚本,大幅提升设计效率和成功率。
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. 潜变量和观测变量 不少变量如满意度、成功指数是无法通过观测得到
java贪吃蛇源代码
java贪吃蛇源代码
Qt QChart实战:从零打造一个实时温度监控仪表盘(附完整源码)
本文详细介绍了如何使用Qt QChart模块从零构建一个工业级实时温度监控仪表盘。通过实战案例,展示了波形图的绘制、坐标轴配置、数据流模拟等关键技术,并提供了完整的源码实现,帮助开发者快速掌握Qt在数据可视化领域的应用。
超简单的Java贪吃蛇实现(附源代码)
超简单的Java贪吃蛇实现(附源代码) 【下载地址】超简单的Java贪吃蛇实现附源代码 本项目是一个使用Java编写的经典贪吃蛇游戏,适合初学者学习和参考。项目包含了完整的源代码,可以帮助你理解如何使用Java实现一个简单的游戏 ...
飞书日历同步Outlook翻车?我踩过的坑和最终用Google Calendar成功的完整配置记录
本文详细记录了从Outlook日历同步到飞书时遇到的常见问题及解决方案,特别是通过Google Calendar实现稳定同步的完整配置流程。文章揭示了Outlook同步方案易翻车的原因,并提供了Google Calendar的避坑指南、高级技巧和企业级部署建议,帮助用户高效实现日历同步。
小波变换(深入浅出)
小波变换
Java贪吃蛇小游戏源代码系列之辅助类
Java贪吃蛇小游戏之音乐类 package snakeGame; /* * 设置程序运行背景音乐,包括 点击按钮音乐,鼓励音,撞墙音乐,吃食物音乐等等, * 音乐类的设置可以在snakeGame类中实现,由于音乐太多,故而集中到一起,可以在需要添加的地方实例化即可。 */ import java.applet.AudioClip; import java.net.MalformedURL...
Agent应用实践之三十六 - AgentScope高阶用法:AG-UI
AI 大模型飞速进化,不懂 AI、不会用 Agent 的程序员,正在慢慢被行业淘汰。现在 AI 新技术迭代快到离谱:RAG 还没学明白,MCP 接踵而来;工具刚上手,Skills、各类新 Agent 概念又轮番刷屏;Manus还没看懂,就出来OpenClaw,OpenClaw热度还没退,又出来Hermes。越追越乱、越学越焦虑,永远在被动跟风,陷入学不完、跟不上、用不上的内耗。其实焦虑的根本原因,不是新技术太多,而是不懂大模型 Agent 应用底层原理,只会零散跟风,没有通用方法论。为此我专门推出Agent
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...
Python从0到100完整学习指南(必看导航)
想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者!
别再写XPath改DOM了!用OpenClaw零代码搞定爬虫全流程(抓取+清洗+存储)
免费版的大模型调用次数有限制(每天100次),但企业版是无限的,还能私有化部署;大模型分析DOM结构有时候会慢1-2秒,但比起节省的时间,完全可以接受;自定义Skill的文档还不够完善,但社区很活跃,有问题在Discord里问,很快就能得到回复。但总的来说,OpenClaw真的改变了我写爬虫的方式——以前我是“代码的奴隶”,现在我是“需求的提出者”,把时间花在更有价值的业务逻辑上,而不是重复繁琐的DOM调试上。如果你也在被传统爬虫折磨,强烈建议你试试OpenClaw,相信我,用了就回不去了。
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...
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
1127



被折叠的 条评论
为什么被折叠?



