Java贪吃蛇大作战

这篇具有很好参考价值的文章主要介绍了Java贪吃蛇大作战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作为Java新手小白,渴望学习一些好玩有趣的java程序

废话不多说,接下来我会一步一步实现java小程序:贪吃蛇大作战哦! 

实现 Java贪吃蛇一共分四个步骤:

1、画出窗体对象
2、绘制静态ui
3、使用鼠标监听器事件和定时器事件让小蛇动起来
4、实现吃食物的功能

关于代码中的数值,因为小蛇的素材图片像素为25*25 ,游戏区域灰色方格为850*600

 1、绘制窗体对象

        使用JFrame这个类,分别设置界面标题、宽度、高度、位置、退出界面以及位置固定,最后将界面显示出来:

public class Main {
    public static void main(String[] args) {
	// write your code here
        JFrame frame = new JFrame("贪吃蛇大作战");//界面标题
        frame.setSize(900, 720);//设置宽高
        frame.setLocationRelativeTo(null);//布局正中间
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出
        frame.setResizable(false);//大小固定,不能变化
        frame.setVisible(true);//显示
    }
}

界面如下:

Java贪吃蛇大作战

 2、绘制静态Ui

         新建Panel.java文件,添加如下绘制标题代码,并在Main.java中调用显示:

public class Panel extends JPanel {           //由Panel继承JPanel,创建一个画布类

    @Override
    protected void paintComponent(Graphics g) {         //方法:绘制,Graphics g是画笔对象
        super.paintComponent(g);
        //绘制顶部标题
        //paintIcon()函数可将图片放到对应的容器中去:对象、画笔工具、位置坐标
        new ImageIcon("img/title.png").paintIcon(this,g,20,11);
    }
}


调用部分
frame.add(new Panel());   //显示顶部标题

绘制游戏区域,在Panel.java文件中protected void paintComponent(Graphics g)函数中继续添加绘制游戏区域代码:

//绘制游戏区域
g.fillRect(20,75,850,600);//参数为绘制矩形窗口的顶点x,y坐标,矩形的宽、高

 运行结果如下:

Java贪吃蛇大作战

3、鼠标监听时间与定时器

设置键盘监听事件以及定时器的启动,实现键盘与游戏界面的交互,定时器的作用是保证每隔一段时间刷新物体的坐标位置,以便实时更新游戏界面。具体代码在Panel.java文件中编辑如下:

游戏初始界面: 

Java贪吃蛇大作战

 当按下空格键开始游戏后,小蛇开始运动,我们可以通过键盘上的上下左右键对小蛇的运动方向进行控制!(注:实现图是动态的这里就不展示,你们可以自行试试,如果有问题可以重复检查一下代码是否敲错)

具体实现代码在Panel.java文件中编辑如下:

package com.company;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Panel extends JPanel implements KeyListener, ActionListener {           //由Panel继承JPanel,创建一个画布类,加入键盘监听
    int length;//小蛇长度
    int[] snakeX = new int[500];
    int[] snakeY = new int[500];
    String fx; //小蛇朝向
    boolean isStart = false;  //游戏开始或者暂停

    //定时器(保证每隔一段时间就调用paintComponent()方法,保证游戏时小蛇移动页面的刷新)
    Timer timer = new Timer(100,this);//定时器时间100ms,监听对象是

    public Panel(){
        init();
        //添加监听事件
        this.setFocusable(true);//使得一直聚焦在游戏区域
        this.addKeyListener(this);
    }

    //初始化方法
    public void init(){
        length = 3;
        fx = "r";
        //初始化小蛇位置
        snakeX[0] = 100; snakeY[0] = 100;
        snakeX[1] = 75; snakeY[1] = 100;
        snakeX[2] = 50; snakeY[2] = 100;
        timer.start();
    }
    @Override
    protected void paintComponent(Graphics g) {         //方法:绘制,Graphics g是画笔对象
        super.paintComponent(g);
        //绘制顶部标题
        //paintIcon()函数可将图片放到对应的容器中去:对象、画笔工具、位置坐标
        new ImageIcon("img/title.png").paintIcon(this,g,20,11);
        //绘制游戏区域
        g.fillRect(20,75,850,600);//参数为绘制矩形窗口的顶点x,y坐标,矩形的宽、高
        //绘制小蛇
        //蛇头
        if(fx.equals("r")){
            new ImageIcon("img/right.png").paintIcon(this,g,snakeX[0],snakeY[0]);
        }else if(fx.equals("l")){
            new ImageIcon("img/left.png").paintIcon(this,g,snakeX[0],snakeY[0]);
        }else if(fx.equals("u")){
            new ImageIcon("img/up.png").paintIcon(this,g,snakeX[0],snakeY[0]);
        }else if(fx.equals("d")) {
            new ImageIcon("img/down.png").paintIcon(this, g, snakeX[0], snakeY[0]);
        }
        //蛇身
        for(int i = 1; i < length; i++){
            new ImageIcon("img/body.png").paintIcon(this, g, snakeX[i], snakeY[i]);
        }
        //游戏的提示语
        if(isStart == false){
            g.setColor(Color.white);
            g.setFont(new Font("微软雅黑",Font.BOLD,40));
            g.drawString("按下空格键开始游戏",300,300);
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {    //点击

    }

    @Override
    public void keyPressed(KeyEvent e) {   //按压
        int KeyCode = e.getKeyCode();
        if(KeyCode == KeyEvent.VK_SPACE){   //监听空格键
            isStart = !isStart;
        }
        if(isStart){
            if(KeyCode == KeyEvent.VK_LEFT){
                fx = "l";
            }else if(KeyCode == KeyEvent.VK_RIGHT){
                fx = "r";
            }else if(KeyCode == KeyEvent.VK_UP){
                fx = "u";
            }else if(KeyCode == KeyEvent.VK_DOWN){
                fx = "d";
            }
        }


        repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {    //释放

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //改变蛇的位置坐标
        if(isStart){     //头部位置遍历
            for(int i = length-1;i > 0; i--){
                snakeX[i] = snakeX[i-1];
                snakeY[i] = snakeY[i-1];
            }
            if(fx.equals("l")){
                snakeX[0] = snakeX[0] - 25;
            }else if(fx.equals("r")){
                snakeX[0] = snakeX[0] + 25;
            }else if(fx.equals("u")){
                snakeY[0] = snakeY[0] - 25;
            }else if(fx.equals("d")){
                snakeY[0] = snakeY[0] + 25;
            }
            repaint();
        }
        timer.start();//启动定时器
    }
}

处理小蛇触及边界问题(小蛇在左边边界出去则从右边边界出来,上下同理),以小蛇的头部位置为基准判断小蛇的运动方向,在相应运行方向的判断函数中加入边界判断:

左边
//边界判断
if(snakeX[0] < 25){
   snakeX[0] = 850;
}

右边
//边界判断
if(snakeX[0] > 850){
   snakeX[0] = 25;
}

上面
//边界判断
if(snakeY[0] < 75){
   snakeY[0] = 658;
}

下面
 //边界判断
if(snakeY[0] > 650){
  snakeY[0] = 75;
}

初始化食物位置,在小蛇吃掉当前食物后小蛇身体长度+1,并再随机产生食物

在public class Panel extends JPanel implements KeyListener, ActionListener中定义食物变量
int foodx;
int foody;
Random random = new Random(); //生成随机位置


在public void init()初始化函数中加入
//初始化食物位置
 foodx = 25 + 25*random.nextInt(34);
 foody = 25 + 25*random.nextInt(75);


在画笔函数protected void paintComponent(Graphics g)中画出食物
 //画出食物的位置
 new ImageIcon("img/food.png").paintIcon(this, g, foodx, foody);


在小蛇运动actionPerformed(ActionEvent e) 函数中
//判断是否小蛇吃了食物(重合)
if(snakeX[0] == foodx && snakeY[0] == foody){
    length++;
    foodx = 25 + 25*random.nextInt(34);//食物被吃后重新产生随机食物
    foody = 75 + 25*random.nextInt(24);
 }

最后实现功能如下:

1、简单的贪吃蛇小游戏;

2、按下空格键开始游戏,小蛇开始运动,键盘的上下左右键控制小蛇的运动方向;

3、小蛇吃掉一个食物后随机产生下一个食物,同时小蛇的身体长度加1

4、再按下空格键游戏停止。

项目资源:Java实现贪吃蛇小游戏-Java文档类资源-CSDN下载文章来源地址https://www.toymoban.com/news/detail-464480.html

到了这里,关于Java贪吃蛇大作战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 作为代码小白,我是这样成为自动化大神的!

    robot是一款自动化测试的工具,能够实现接口自动化测试、UI自动化测试。 它的主要特色就是: 由 驱动来完成测试用例 测试用例格式可以为txt/html等, 非代码的形式,支持中文哦 。 由python实现,开源。 这里有2个重要的概念需要大家先掌握一下: 简单来说:

    2024年02月10日
    浏览(39)
  • 适合新手小白练习的pygame实战项目!

    PyGame是一个用于制作2D游戏的Python库。它提供了许多功能,如游戏开发、音频处理和图形渲染等。PyGame库可用于制作各种类型的游戏,从简单的休闲游戏到复杂的冒险游戏。 跨平台:pygame可以在Windows、Mac和Linux等操作系统上运行。 开源:pygame是一个开源库,开发者可以免费使

    2024年01月25日
    浏览(53)
  • 新手小白正确使用WhatsApp,不愁没客户

    做跨境外贸的朋友相必都知道WhatsApp吧,这是很多人开发海外客户的最常用工具,但却有很多新手苦于不知道怎么利用它去高效开发海外客户,所以龙哥今天就来教会大家用好 WhatsApp 这款工具。 一、通过快速搜索电话号码来开发WhatsApp客户 你可以注册安装并打开谷歌地图工

    2024年02月08日
    浏览(40)
  • 新手小白需要了解的 Go 基础细节杂谈

    Golang 基础知识一遍过 👈 今日记录一下 学习 golang 这门语言遇到的一些比较特殊的细节,供大家参考。        所以,在我们输出内容的时候,可以包含很多的非 ASCII 码字符。实际上,Go 是天生支持 UTF-8 的,任何字符都可以直接输出,甚至可以使用 UTF-8 中的任何字符作为标

    2023年04月09日
    浏览(46)
  • 新手小白做跨境电商有哪些注意的地方?

    近两年,受疫情刺激,线上电商出现前所未有的高速增长,中国品牌纷纷出海,跨境电商腾飞。此外,国内电商市场发展趋于平淡,市场需求不断萎缩,也让越来越多的大卖家和平台盯上了这块大蛋糕。不仅中小企业入驻亚马逊、全球速卖通等平台,国内几大电商巨头也纷纷

    2024年02月01日
    浏览(45)
  • 【零基础入门Docker】小白新手初识Docker

    ✍ 面向读者:所有人 ✍ 所属专栏:Docker零基础入门教程 目录 Docker容器和虚拟机的区别 Docker 中的重要术语  在 Ubuntu 上安装 Docker 在 Docker 中创建应用程序 将镜像推送到 Docker Hub 从 Docker Hub 获取并运行镜像 结论 Docker 是一组平台即服务 (PaaS) 产品,它使用操作系统级虚拟化以

    2024年02月08日
    浏览(47)
  • 新手小白如何搭建帕鲁/Palworld服务器?

    在深入讨论如何为幻兽帕鲁搭建服务器之前,我们需要了解这款游戏的基本特性。幻兽帕鲁是一款以丰富游戏元素著称的游戏,这些元素包括多样的角色、独特的技能系统、引人入胜的剧情线以及玩家间的交互等。这些丰富的游戏元素不仅为玩家提供了深度的游戏体验,同时

    2024年02月21日
    浏览(39)
  • 超详细FPGA新手小白入门点亮LED灯

    其实之前早已用过Vivado进行FPGA的开发学习,但由于每次都是浅尝辄止地学了一些时间,加上Vivado软件和FPGA开发流程的复杂性,长时间不用就会遗忘。因此今天还是简单地写个笔记记录一下Vivado软件的一些基本操作,实现一个“hello world工程”:控制LED灯的闪烁。 实验基于的

    2024年02月04日
    浏览(52)
  • 新手小白该如何真正起步做跨境电商独立站?

    跨境独立站是一个不依赖任何平台,卖家拥有绝对的自主权。 这也使得现在越来越多的卖家想做跨境电商独立站。然而,对很多跨境电商独立站的创业者来说,创建独立站、选品和引流,对决议您未来独立站跨境之路成功与否起到很大的作用。        下面跟随荣创出海一同

    2024年02月15日
    浏览(47)
  • 2023年lumion最全配置清单,新手小白必看

    在阅读这篇文章中的建议时,请记住强大的显卡是获得良好Lumion体验的最关键组成部分。CPU、内存和其他规格也有影响,但良好的体验始于显卡。  在不受外界影响的情况下展示硬件,我们知道在使用 Lumion 渲染时会给您带来惊人的体验。在购买之前检查每台台式电脑或笔记

    2024年02月09日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包