Java实现简单版贪吃蛇游戏

 更新时间:2021年09月26日 16:13:53   作者:情念ω  
这篇文章主要为大家详细介绍了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 JFrame();
  win.setVisible(true);
  win.setSize(WIDTH, HEIGHT);
  win.setDefaultCloseOperation(3);
  win.setLocationRelativeTo(null);
  
  SnakePanel panle =new SnakePanel();
  win.add(panle);
  SnakePanel.Key l = panle.new Key();
  win.addKeyListener(l);
  panle.addKeyListener(l);
  panle.run();
 }

}

2、其次是定义食物类,食物有长和宽,还有在窗口中的位置

import java.util.Random;
public class Cell {
 protected int x;
 protected int y;
 protected int width;
 protected int height;
 Random ran=new Random();
 public Cell(){
  Random ran=new Random();
  this.x=ran.nextInt(25)*15+60;
  this.y=ran.nextInt(25)*15+50;
  this.width=15;
  this.height=15;
 }
 public Cell(int x,int y){
  this();
  this.x=x;
  this.y=y;
 }
 public int getX() {
  return x;
 }
 public void setX(int x) {
  this.x = x;
 }
 public int getY() {
  return y;
 }
 public void setY(int y) {
  this.y = y;
 }
 public int getWidth() {
  return width;
 }
 public void setWidth(int width) {
  this.width = width;
 }
 public int getHeight() {
  return height;
 }
 public void setHeight(int height) {
  this.height = height;
 }
}

3、最后是蛇类

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JPanel;
public class SnakePanel extends JPanel {
 final int RIGHT=1;
 final int LEFT=2;
 final int UP=3;
 final int DOWN=4;
 int moved=1;
 Cell food;
 Cell[] snake;
 public SnakePanel(){
  food=new Cell();
  snake=new Cell[5];
  for(int i=0;i<snake.length;i++){
   snake[i]=new Cell(210+i*15,50);
  }
 }
 class Key extends KeyAdapter{
  @Override
  public void keyPressed(KeyEvent e){
   int code=e.getKeyCode();
   //System.out.println(code);
   if(code==37&&moved!=RIGHT){
    moved=LEFT;
   }
   if(code==39&&moved!=LEFT){
    moved=RIGHT;
   }
   if(code==38&&moved!=DOWN){
    moved=UP;
   }
   if(code==40&&moved!=UP){
    moved=DOWN;
   }
  }
 }
 public void paint(Graphics g){
  super.paint(g);
  g.setFont(new Font(Font.SERIF,Font.BOLD,28));
  g.drawRect(60, 50, 450, 450);
  for(int i=15;i<=450;i+=15){
   g.drawLine(60+i, 50, 60+i, 500);
  }
  for(int i=15;i<=450;i+=15){
   g.drawLine(60, 50+i, 510, 50+i);
  }
  g.setColor(Color.BLUE);
  g.drawString("欢迎来到贪吃蛇大战", 140, 40);
  g.fillRect(food.x, food.y, food.width, food.height);
  for(int i=0;i<snake.length;i++){
   g.fillRect(snake[i].x, snake[i].y, snake[i].width, snake[i].height);
  }
 }
 int speed = 250;
 public void run(){
  Timer timer=new Timer();
  TimerTask task=new TimerTask(){
   @Override
   public void run() {
    step();
    repaint();
   }
  }; 
  if(snake.length>=10){
   speed=125;
  }else if(snake.length>=20){
   speed=60;
  }else if(snake.length>=30){
   speed=30;
  }else if(snake.length>=40){
   speed=15;                                             
  }
  timer.schedule(task, 1000, speed);
 }
 public void step(){
  for(int i=1;i<snake.length;i++){
   snake[i-1] = snake[i]; 
  }
  Cell c = new Cell(snake[snake.length-1].getX(),snake[snake.length-1].getY());
  if(moved == RIGHT){
   c.setX(c.getX()+15);
  }
  if(moved == UP){
   c.setY(c.getY()-15);
  }
  if(moved == DOWN){
   c.setY(c.getY()+15);
  }
  if(moved == LEFT){
   c.setX(c.getX()-15);
  }
  snake[snake.length-1] = c;
  //System.out.println(c.getX()+","+c.getY());
  if(snake[snake.length-1].getX()>510||
    snake[snake.length-1].getX()<60||
    snake[snake.length-1].getY()>500||
    snake[snake.length-1].getY()<50){
     System.exit(0);
    }
  if(snake[snake.length-1].x==food.x &&snake[snake.length-1].y==food.y){
   snake=Arrays.copyOf(snake,snake.length+1);
   snake[snake.length-1]=food;
   food=new Cell();
  } 
 }
}

至此,一个简单的贪吃蛇小游戏就完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java锁机制ReentrantLock源码实例分析

    java锁机制ReentrantLock源码实例分析

    这篇文章主要为大家介绍了java锁机制ReentrantLock源码实例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java中使用正则检查有效日期的实现

    Java中使用正则检查有效日期的实现

    要判断一个字符串是否符合时间格式,可以使用正则表达式,本文主要介绍了Java中使用正则检查有效日期的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Java动态代理语法Proxy类原理详解

    Java动态代理语法Proxy类原理详解

    这篇文章主要介绍了Java动态代理语法Proxy类原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 浅谈Java StringBuilder为什么线程不安全

    浅谈Java StringBuilder为什么线程不安全

    这篇文章主要介绍了浅谈Java StringBuilder为什么线程不安全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • SpringBoot构建Restful service完成Get和Post请求

    SpringBoot构建Restful service完成Get和Post请求

    这篇文章主要介绍了SpringBoot构建Restful service完成Get和Post请求的示例代码,感兴趣的朋友一起看看吧
    2017-08-08
  • Redis内存数据库示例分析

    Redis内存数据库示例分析

    Redis本身的内容比较复杂。如果你上来,你应该研究一个细节点,比如连接池和数据结构。虽然可以直接了解某一点的详细来源内容,甚至尽快解决一些意外,但是容易淹没在失眠的细节中,整体控制不了Redis
    2022-12-12
  • Spring Cloud接口突然变慢的解决方案

    Spring Cloud接口突然变慢的解决方案

    在Spring Cloud项目中,接口突然变慢可能是由多种原因造成的,本文给大家介绍了一些可能的原因以及相应的解决方案,通过代码示例给大家讲解的非常详细,需要的朋友可以参考下
    2024-01-01
  • java.lang.NullPointerException出现的几种原因及解决方案

    java.lang.NullPointerException出现的几种原因及解决方案

    这篇文章主要介绍了java.lang.NullPointerException出现的几种原因及解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 详解spring mvc 请求转发和重定向

    详解spring mvc 请求转发和重定向

    这篇文章主要介绍了详解spring mvc 请求转发和重定向,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • spring中时间格式化的两种方法示例讲解

    spring中时间格式化的两种方法示例讲解

    这篇文章主要介绍了spring中时间格式化的两种方法,方法一自己格式化,方法二通过配置,结合实例代码讲解的非常详细,文中补充介绍了Spring项目中时间格式化的方法,需要的朋友可以参考下
    2023-08-08

最新评论