Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解)

Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解)分享一个我刚刚写的贪吃蛇小游戏,非常简短的代码实现方法。这可能是全网最简单实现方法,效果图如下:有多简短呢?上代码!!一共四个类!Food类packagecom.snake;importjava.awt.Color;importjava.awt.Graphics;importjava.awt.Point;publicclassFoo…

大家好,又见面了,我是你们的朋友全栈君。

  分享一个我刚刚写的贪吃蛇小游戏,非常简短的代码实现方法。这可能是全网最简单实现方法Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解),效果图如下:

ps 最新贪吃蛇源码+教学视频+论文下载 java贪吃蛇

Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解)Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解)

 有多简短呢 ? 上代码!!

  一共四个类!

Food类

package com.snake;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;

public class Food {//食物也是一个长宽各为20的小格子
	
	public Point point=null;	
	public final int width=20;
	public final int height=20;
	
	public Food(Point p) {
		this.point=p;
	}
	
	public void drawFood(Graphics g) {
		g.setColor(Color.RED);
		g.fillRect(this.point.x, this.point.y, this.width, this.height);
	}

}

Snake类

package com.snake;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;

public class Snake {
	
	
	public Point point=null; //一直蛇其实就是一个小格子
	
	public  final int width=20;
	public  final int height=20;
	
	public Snake(Point p) {
		this.point=p;
	}
	
	public void drawSnake(Graphics g) {
		g.setColor(Color.black);
		g.fillRect(this.point.x,this.point.y, this.width,this.height);
	
	}

}

面板

Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解)

【面板就四个方法,下面会附完整代码,这里缩进代码看的更直观!】

主类是一个窗口

package com.snake;

import java.awt.Graphics;

import javax.swing.JFrame;

public class Game_Frame extends JFrame {
	public final static int  width=400;
	public  final static int  height=400;	
	Game_Panel myPanel=null;
	
	public static void main(String[] args) {
		new	Game_Frame();
	     
	}

	  public Game_Frame() {
		  this.setTitle("贪吃蛇---作者:See---qq:3492625357");
		  this.setSize(width, height);
		  this.setVisible(true);
		  this.setLocationRelativeTo(null);
		  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		  Game_Panel myPanel=new Game_Panel();
		  this.add(myPanel);
		  new Thread(myPanel).start();
	  }
}

什么 !? 没了?  

对,没了。 

解释一下代码实现,Snake 和 Food  其实就是一个长宽各为20像素的小正方形。窗口大小为400*400,相当于400个小正方形。

面板里用上下左右控制小蛇的移动(黑色格子),移动效果(加头,去尾)当小蛇和Food(红色格子)相撞时,则增加一个长度。(前面加,后面不去尾)。当蛇头与身子相撞(最前面的黑色小格子与其他黑色小格子相撞)则宣布游戏结束。

再听我这么一解释,是不是觉得So TMD easy!  

写程序就是要想到什么就写什么,写错了大不了删除再来嘛,只要你敢写,就没有实现不了的方法。

下面附面板完整代码

package com.snake;

import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Game_Panel extends JPanel implements Runnable,KeyListener{
	
	
	
	 public int DRIECTION=38;//刚开始的时候 让小蛇向上移动
	 public boolean alive=true;//判断小蛇是否死亡的
	 Random ran=new Random();//用来产生Food 的随机坐标 
	 
	
	
	 LinkedList<Snake> snake=new LinkedList<Snake>();
	Food food=new Food(new Point(ran.nextInt(Game_Frame.width/20)*20,ran.nextInt(Game_Frame.height/20)*20));
	

	 public Game_Panel() {
		 
	    snake.add(new Snake(new Point(180,180)));//初始化一个蛇头
		this.addKeyListener(this);
		this.setFocusable(true);
		
		
}
	
	
	public void  paint(Graphics g) {
		for(int i=0;i<this.snake.size();i++) {
			this.snake.get(i).drawSnake(g);
		}
		this.food.drawFood(g);
		
		validate();
	}
	
      public void Snake_Move() { //控制蛇的移动
    	  
    	  
    	if(alive)  { //当小蛇活着的时候 移动  死了就不动了
    		
    		switch(this.DRIECTION) {
    	
    	  case 37:  
    		   snake.add(new Snake(new Point(snake.getLast().point.x-20,snake.getLast().point.y)));
    		   if(snake.getLast().point.x<0) //当小蛇超过窗口范围则从另一边出来,下面同理
    			   snake.getLast().point.x=Game_Frame.width-snake.getLast().width;
    		   break;
    	  case 39:  
    		  snake.add(new Snake(new Point(snake.getLast().point.x+20,snake.getLast().point.y)));
   		   if(snake.getLast().point.x==Game_Frame.width) 
   			   snake.getLast().point.x=0;
   		   break;
    	  case 38:
    		  snake.add(new Snake(new Point(snake.getLast().point.x,snake.getLast().point.y-20)));
    		  if(snake.getLast().point.y<0)
    			  snake.getLast().point.y=Game_Frame.height-snake.getLast().height;
    	  break;
    	  case 40:
    		  snake.add(new Snake(new Point(snake.getLast().point.x,snake.getLast().point.y+20)));
    		  if(snake.getLast().point.y==Game_Frame.height)
    			  snake.getLast().point.y=0;
    	  break;
    	  
    	default: ;  
    	
    	  }
    		if(changeSize()) snake.removeFirst();	//如果遇到食物,则不删除第一个结点
    	
      }
    	
}
	
	
	public boolean changeSize() {//当蛇的格子和食物相撞时 ,为false
		if(snake.getLast().point.equals(food.point)){
			food.point.x=ran.nextInt(Game_Frame.width/20)*20;
			food.point.y=ran.nextInt(Game_Frame.height/20)*20;
			return false;
		}
		else return true;
	
	}
  

	public void dead() { //小蛇死亡的条件   当头与身相撞的时候宣布死亡
		for(int i=0;i<this.snake.size()-1;i++) {
		if(this.snake.getLast().point.equals(this.snake.get(i).point)) {
		  alive=false;//终止线程
		//如果小蛇死了,则弹出对话框	
	JOptionPane.showMessageDialog(this, "oh,I'm sorry,you dead!!", "GAME--OVER", JOptionPane.WARNING_MESSAGE);
	//Thread.currentThread().stop();//当小蛇死了线程终止  //stop(),不用这个方法
	}
}
}
	
	
	public void run() {//调用这些方法
		
		while(alive) {//如果小蛇活着则循环,否则终止循环即结束线程
		// dead();
		//changeSize();
		Snake_Move();
		//changeSize();
		 dead();
		repaint();
		
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	 
	}
	}


public void keyPressed(KeyEvent e) {//键盘控制上下左右移动
		//System.out.println(e.getKeyCode());   //经过测试 37 38 39 40  65 87 68 83分别为键盘的左上右下 awds
		switch (e.getKeyCode()) {
		
		case 37:
			this.DRIECTION=37; //左
		
		break;
        case 38:
        	this.DRIECTION=38;//上
        
		break;
        case 39:
        	this.DRIECTION=39;//右

        break;
         case 40:
        	 this.DRIECTION=40;	//下

        break;
     /*  case 65://本来准备用wsad和上下左右一起控制小蛇的移动的,但是徒增麻烦没有必要
 			this.DRIECTION=37; //左
 		
 		break;
         case 87:
         	this.DRIECTION=38;//上
         
 		break;
         case 68:
         	this.DRIECTION=39;//右

         break;
          case 83:
         	 this.DRIECTION=40;	//下
         	 break;
         	 
*/
        default: ;	
		
	}
	}


	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

}

【因为代码简短所以视觉上感觉一般,你可以再此基础上加一些元素,比如 蛇的图片,音乐,颜色效果等等。总之核心部分就是这么简单!  If you feel nice,call me!】q:3492625357

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150244.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 哨兵2号(Sentinel-2)介绍、下载、预处理及批处理

    哨兵2号是高分辨率多光谱成像卫星,携带一枚多光谱成像仪(MSI),用于陆地监测,可提供植被、土壤和水覆盖、内陆水路及海岸区域等图像,还可用于紧急救援服务。分为2A和2B两颗卫星。第一颗卫星哨兵2号A于2015年6月23日01:52UTC以“织女星”运载火箭发射升空。6月29日,在轨运行4天的哨兵-2A卫星,传回了第一景数据,幅宽290km,卫星第一次扫描的范围是从瑞典开始,经过中欧和地中…

    2022年4月9日
    739
  • java运行环境_如何搭建Java运行环境?

    java运行环境_如何搭建Java运行环境?前言对于运行一个Java程序,我们首先需要有一个运行Java程序的平台程序,这个平台程序就是Java虚拟机。本篇文章将介绍如何在Windows系统上搭建一个Java程序的运行环境,主要分为两个步骤:安装JDK,配置环境变量。Windows系统Java运行环境配置下载JDK并安装首先我们需要下载java开发工具包JDK,JDK中包含了JRE(Java运行环境)和一些官方提供给我们的工具,在oracl…

    2022年7月7日
    21
  • 学习使用PSTools工具中的psping

    学习使用PSTools工具中的psping目录初识PsToolspsping1.使用ICMPping2.使用TCPping3.延迟测试4.带宽测试5.同功能的tcping工具总结初识PsTools    在工作中我们都会想探测某个IP是否能通,基本上都使用过ping命令,但是某些服务器禁用了ping,而且有些时候也想探测某个IP的某个端口是否能通。之前的我一般都是用“telnetipport”,但是我发现一个不好的体验就是没啥…

    2025年7月26日
    3
  • 一个贼简单的代码表白

    一个贼简单的代码表白前一阵网上挺火的各种表白代码,自己学着也做了一个记事本编写,后缀改为vbs就能运行了。(其中有一串代码会关机的呦,我是WIN10系统)setws=createobject(“wscript.shell”)ws.run”cmd.exe/cshutdown-s-f-t0″哈哈知道三号女生是什么梗吗?(来源于文松的一个小品,那个老弟啊姐给你爆灯的那个!!嗯哼)就是…

    2022年5月6日
    50
  • apache做负载均衡_apache负载均衡配置

    apache做负载均衡_apache负载均衡配置2019独角兽企业重金招聘Python工程师标准>>>…

    2025年9月8日
    6
  • Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]

    Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]随着大数据、人工智能的兴起,Python被带到了一个新的高度,但在使用Python过程中,很多人没搞清楚Python环境究竟是什么。当开发工程的时候,往往因为python环境的问题搞得一团糟。本文旨在说清楚什么是Python环境,什么是Python虚拟环境,并希望通过本文的学习掌握常用的Python环境管理工具的使用。

    2022年8月27日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号