gui简单实战——贪吃蛇(代码片段)

10134dz 10134dz     2022-12-06     347

关键词:

将前面学到的GUI基础知识完成实战,完成一个简单的贪吃蛇项目

项目功能

  • 用键盘上下左右实现贪吃蛇的自动移动

  • 贪吃蛇吃到食物后,长度加一,分数加一

  • 贪吃蛇吃到自己的身体,则游戏结束

  • 按空格键实现游戏的暂停和继续

效果截图

技术图片

逻辑分析

  • 需要Main.class中有public static void main(String[] args)来启动游戏

  • 需要写一个GameFrame extends JFrame界面

    • 注意:游戏的界面的大小,JFrame 显示大小与设置的不同。需要严格规定窗口的大小,因为小蛇的移动是固定一个格子的大小(比如:25)
    • 设置游戏的窗口不可拉伸
  • 定义一个贪吃蛇对象类,将小蛇划分成蛇头和蛇身两个部分,此外,小蛇的方向需要对应不同的蛇头图片

  • 定义一个食物对象类,食物每次被吃到后,需要随机再次出现位置

  • 定义一个数据类,专门来存放一些数据,比如说图片信息,窗口宽高

  • 游戏面板,重中之重。需要继承一个JPanel类,二个接口ActionListener(事件监听), KeyListener(键盘监听)

    • 在初始化函数中,需要获得焦点,添加键盘监听,开启定时器

    • 在画笔中需要画黑框,贪吃蛇,食物,提示

    • 在键盘监听中,空格键处理暂停和继续,方向键处理蛇头和方向

    • 在事件监听中需要对得分进行判断,蛇头和蛇身移动处理,蛇头穿过边界的处理,游戏结束判断处理

    • repaint 重画页面

代码分析

已经在代码上传到github上面注释很详细

踩坑

JFrame的窗口大小

窗口宽度= 输入宽度+窗口左边框+窗口右边框

窗口高度= 输入高度+窗口上边框+窗口下边框

jframe.setSize(Datas.GameWidth+3+3,Datas.GameHeight+32+3);

需要加上窗口左边框+窗口右边框和窗口上边框+窗口下边框,但是每一个项目的边框大小都是不一样的。所以需要先去测试边框大小

package com.greedy_snake;
import java.awt.*;
public class Main 
    public static void main(String[] args) 
        //创建一个窗口
        GameFrame gameFrame = new GameFrame();
        Dimension di = gameFrame.getContentPane().getSize();
        System.out.println("内容面板宽度"+di.width);//宽
        System.out.println("内容面板的高度"+di.height);//高
    

package com.greedy_snake;

import javax.swing.*;
import java.awt.*;

public class GameFrame extends JFrame 
    public GameFrame()
        //1 设置标题
        this.setTitle("贪吃蛇");
        //2 设置宽高 6 35是通过insets得到的
        this.setSize(Datas.GameWidth+3+3,Datas.GameHeight+32+3);
        //3 设置窗口居中
        this.setLocationRelativeTo(null);
        //4 设置点击窗口的×关闭
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //5 设置游戏窗口大小不可拉伸
        this.setResizable(false);
        //6 设置可见
        this.setVisible(true);
        /*7 得到窗口的边界区域
        需要放在setVisible下面输出的4个结果才不是0*/
        Insets insets = getInsets();
        System.out.println("窗口边框上"+insets.top);//上
        System.out.println("窗口边框下"+insets.bottom);//下
        System.out.println("窗口边框左"+insets.left);//左
        System.out.println("窗口边框右"+insets.right);//右
    

技术图片

得到窗口的边界区域,需要放在setVisible下面输出的4个结果才不是0,不能在setSize中直接Datas.GameWidth+insets.left+insets.right

ImageDemo.class.getResource路径问题

两个例子给你就很理解了

技术图片

技术图片

javagui实现贪吃蛇(代码片段)

...c;得确保自己的AWT和Swing有一定的基础,并且会写一些简单的逻辑操作。这些都会在后面写的时候体现出来。狂神老师从这里开始讲贪吃蛇的我们在看视频的时候都知道,视频是一帧一帧播放的,一般我们看动画的帧... 查看详情

c语言项目实战:《贪吃蛇》零基础项目,源码+注释解析(代码片段)

...,结构体,枚举,联合,文件操作,简单的数据结构,并且对逻辑也是有一定 查看详情

c语言项目实战:《自动版贪吃蛇》零基础项目(代码片段)

这篇文章主要为大家详细介绍了C语言实现——《进化版贪吃蛇项目》,也就是在我们上一个发布的文章项目分享的基础上,实现贪吃蛇的自动行动,你可以按键也可以不按键,让蛇自己找食物!还是挺好玩的&... 查看详情

贪吃蛇项目的制作(代码片段)

...细的学习课程可以参考狂神说老师的GUI课程:一小时开发贪吃蛇。以下仅仅为简要说一下逻辑,源码放在最后。实现该项目总共用到三个类:Data数据类,用于存放静态数据;Snake实现类,用于运行;GamePanel核心类,用于具体实现... 查看详情

js实战面向对象-贪吃蛇(代码片段)

目录思考一、贪吃蛇效果图二、贪吃蛇分析2.1开始游戏功能2.2运动功能2.2.1蛇的不同方向的运动2.2.2键盘控制方向运动功能2.3吃食物功能2.3.1食物的产生2.3.2吃食物的过程2.4死亡判定功能2.4.1触边死亡判断(撞墙了)2.4.2 自... 查看详情

c语言之贪吃蛇(ncurses)(代码片段)

...些读者不适,请小心阅读.有些内容并没有详细介绍,可能简单理解也是错误的,但是这都是为了尽量简单。前言:代码是很久之前写的,属于边想边写的那种,很混乱。推荐材料:NCURSESProgrammingHOWTO贪吃蛇应该是我们这代人都玩过的... 查看详情

pygame实战这游戏有毒,刷爆朋友圈:小编已与病毒版贪吃蛇大战了三百回合,最高分339?(代码片段)

...出来回忆一下啦~(*^▽^*)💨项目2.7贪吃蛇小游戏Pygame实战:用Python写个贪吃蛇大冒险,保姆级教程。项目6.1《贪吃蛇大作战》系列一【Pygame小游戏】刷爆朋友圈的《贪吃蛇大作战》附上史上最强攻略,请查收~(... 查看详情

如何用pygame制作简单的贪吃蛇游戏(代码片段)

...薅羊毛原则,换个赛道,这次就使用pygame库写个简单的贪吃蛇吧,当做熟悉python练手也是不错的。2.安装与导入使用pipinstallpygame进入安装,安装成功后导入所需模块:importpygame,sys,rando 查看详情

如何用pygame制作简单的贪吃蛇游戏(代码片段)

...薅羊毛原则,换个赛道,这次就使用pygame库写个简单的贪吃蛇吧,当做熟悉python练手也是不错的。2.安装与导入使用pipinstallpygame进入安装,安装成功后导入所需模块:importpygame,sys,rando 查看详情

javascript实现简单贪吃蛇小游戏

  之前上Web课,学到JavaScript的时候,老师要求写几个静态页面,要用到JavaScript。想了想就写个贪吃蛇吧。其实之前用pygame写过一次GUI的贪吃蛇,素材都是自己拿画图画的,其丑无比。所以这次还是老老实实用字符吧。  ... 查看详情

面向对象案例——贪吃蛇游戏(代码片段)

...博了,今天来写一个经典的游戏案例——贪吃蛇。在这个简单的案例里可以体会javaScript面向对象开发相关模式,学习使用面向对象的方式分析问题。1.功能实现1.1搭建页面:放一个容器盛放游戏场景div#map,设置样式<divclass="map... 查看详情

c语言实现《贪吃蛇》小游戏,代码分享+思路注释(代码片段)

...一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。 [1]贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式、赏金模式、挑战模式等多种玩... 查看详情

qt实现贪吃蛇简单示例

目录Qt实现贪吃蛇简单示例说明开发工具示例效果 代码地址Qt实现贪吃蛇简单示例说明    实现一个贪吃蛇示例,还有问题需要修改,简单运行没有问题    已测试window10/mac/linux,均可运行开发工具    Clion2021.2,... 查看详情

qt实现贪吃蛇简单示例

目录Qt实现贪吃蛇简单示例说明开发工具示例效果 代码地址Qt实现贪吃蛇简单示例说明    示例实现一个贪吃蛇示例,还有需要问题需要修改,简单运行没有问题    已测试window10/mac/linux,均可运行开发工具    ... 查看详情

用c语言写个最简单的贪吃蛇(代码片段)

一、思路定义二维数组window表示窗口;定义BLANK、BORDER、SNAKE、FOOD分别表示:空白、边框、蛇身、食物;定义并初始化:蛇头,蛇尾,食物;显示初始窗口;循环getchar,确定move方向,并使用fifo保... 查看详情

用c语言写个最简单的贪吃蛇(代码片段)

一、思路定义二维数组window表示窗口;定义BLANK、BORDER、SNAKE、FOOD分别表示:空白、边框、蛇身、食物;定义并初始化:蛇头,蛇尾,食物;显示初始窗口;循环getchar,确定move方向,并使用fifo保... 查看详情

用c语言写个最简单的贪吃蛇(代码片段)

一、思路定义二维数组window表示窗口;定义BLANK、BORDER、SNAKE、FOOD分别表示:空白、边框、蛇身、食物;定义并初始化:蛇头,蛇尾,食物;显示初始窗口;循环getchar,确定move方向,并使用fifo保... 查看详情

我的编辑器能玩贪吃蛇,一起玩不?(代码片段)

...的API插入自定义内容第一步:自定义工具栏按钮这个非常简单:constTOOLBAR_CONFIG=[[ 查看详情