【GUI】-- 11 贪吃蛇小游戏之绘制静态的小蛇

GUI编程

04 贪吃蛇小游戏

4.2 第二步:绘制静态的小蛇

现在绘制静态的小蛇(即小蛇初始位置),并且完善游戏默认初始状态。这一步还在GamePanel类中实现。

首先,定义了小蛇的数据结构,

	//定义蛇的数据结构int length;  //小蛇总长int[] snakeX = new int[600];  //蛇的X坐标 25*25int[] snakeY = new int[500];  //蛇的Y坐标 25*25String direction;  //蛇头方向boolean isStart = false;  //默认未开始游戏

下面用一初始化方法来对小蛇初始状态进行定义:

//初始化方法public void init() {length = 3;snakeX[0] = 100; snakeY[0] = 100;  //脑袋的坐标snakeX[1] = 75; snakeY[1] = 100;  //第一节身体的坐标snakeX[2] = 50; snakeY[2] = 100;  //第二节身体的坐标direction = "R";  //蛇头初始向右}

然后,在绘制静态面板方法protected void paintComponent(Graphics g){}中,将小蛇(包括蛇头与蛇身)画入面板中的游戏区域,并绘制当前游戏状态。

此时GamePanel类中代码如下:

package com.duo.snake;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;//游戏的面板
public class GamePanel extends JPanel implements KeyListener {//定义蛇的数据结构int length;  //小蛇总长int[] snakeX = new int[600];  //蛇的X坐标 25*25int[] snakeY = new int[500];  //蛇的Y坐标 25*25String direction;  //蛇头方向boolean isStart = false;  //默认未开始游戏//构造器public GamePanel() {init();}//初始化方法public void init() {length = 3;snakeX[0] = 100; snakeY[0] = 100;  //脑袋的坐标snakeX[1] = 75; snakeY[1] = 100;  //第一节身体的坐标snakeX[2] = 50; snakeY[2] = 100;  //第二节身体的坐标direction = "R";  //蛇头初始向右}//绘制静态面板@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);  //起到清屏的作用Data.header.paintIcon(this, g, 25, 11);  //将广告栏画入面板g.fillRect(25, 75, 850, 600);  //默认的游戏界面(黑色区域)this.setBackground(Color.white);//将小蛇画入面板中的游戏区域,且蛇头部分需要判断方向switch (direction) {case "R":Data.right.paintIcon(this, g, snakeX[0], snakeY[0]);break;case "L":Data.left.paintIcon(this, g, snakeX[0], snakeY[0]);break;case "U":Data.up.paintIcon(this, g, snakeX[0], snakeY[0]);break;case "D":Data.down.paintIcon(this, g, snakeX[0], snakeY[0]);break;}//画小蛇的身体部分for (int i = 1; i < length; i++) {Data.body.paintIcon(this, g, snakeX[i], snakeY[i]);}//绘制当前游戏状态if (!isStart) {g.setColor(Color.white);g.setFont(new Font("宋体", Font.BOLD, 40));g.drawString("按下空格开始游戏", 300, 300);}}
}

运行结果如下:

图1

至此,游戏及小蛇初始状态已绘制完毕。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM中的 -Xms参数 设置 JVM 的初始堆大小

在 Java 虚拟机&#xff08;JVM&#xff09;的配置中&#xff0c;-Xms 是一个启动参数&#xff0c;用于设置 JVM 的初始堆大小&#xff08;Initial Heap Size&#xff09;。这个参数对于优化 Java 应用程序的性能非常重要&#xff0c;特别是在处理需要大量内存的应用程序时。 …

azkaban二次开发

springboot封装azkaban的api&#xff0c;提供可调用azkaban任务流的接口 流程如下&#xff1a; springboot接口->azkaban api->azkaban project(flow tasks)->shell脚本->spark tasks Api测试 curl -k -X POST --data "actionlogin&usernameazkaban&am…

yolo系列模型训练数据集全流程制作方法(附数据增强代码)

yolo系列的模型在目标检测领域里面受众非常广&#xff0c;也十分流行&#xff0c;但是在使用yolo进行目标检测训练的时候&#xff0c;往往要将VOC格式的数据集转化为yolo专属的数据集&#xff0c;而yolo的训练数据集制作方法呢&#xff0c;最常见的也是有两种&#xff0c;下面我…

开源与闭源:大模型发展的双重走向

目录 前言开源和闭源的优劣势比较开源的优势闭源的优势 开源和闭源对大模型技术发展的影响对技术发展的影响对数据共享的影响对业务拓展的影响 开源与闭源的商业模式比较开源的商业模式闭源的商业模式 处在大模型洪流中&#xff0c;向何处去&#xff1f;结语 前言 随着人工智能…

YoloV8改进策略:动态蛇形卷积,解决管状结构问题

文章目录 摘要论文《DSCNet:基于拓扑几何约束的动态蛇形卷积管状结构分割》1、简介2、相关研究2.1、基于网络设计的方法2.2、基于特征融合的方法2.3、基于损失函数的方法3、方法3.1、动态蛇形卷积(Dynamic Snake Convolution)3.2、多视图特征融合策略3.3、拓扑连续性约束损失…

C++11 模板参数包(Parameter pack)

做个小笔记 Template parameter pack&#xff08;模板参数包&#xff09;是C中用于接受零个或多个模板参数的一种机制。 语法&#xff1a;typename|class... pack-name 示例&#xff1a;模板参数只有一个参数包的情况 这个例子演示了一个可变参数的类模板&#xff08;variad…

python利用matplotlib画实验图

import matplotlib.pyplot as plt import seaborn as sns import numpy as np from matplotlib.font_manager import FontProperties#coding:utf-8 # plt.rcParams[font.sans-serif] [SimHei] #用来正常显示中文标签 # plt.rcParams[axes.unicode_minus] False #用来正常显示…

中国智能音箱市场销量下降,百度稳居第一 /中国即评出10个大模型创新案例 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; 中国智能音箱市场销量下降&#xff0c;百度稳居第一 中国即将评选出10个最具代表性的大模型创新案例…

【Typroa使用】Typroa+PicGo-Core(command line)+gitee免费图片上传配置

TyproaPicGo-Core(command line)gitee免费图片上传配置 本文是在win10系统下配置typroapicGo-Core(command line)gitee图片上传的教程。需要的环境和工具有&#xff1a; gitee账号&#xff0c;新建仓库及token令牌&#xff1b;已经安装了的typroa&#xff0c;需要0.9.98版本以上…

2023最全的性能测试种类介绍,这6个种类特别重要!

系统的性能是一个很大的概念&#xff0c;覆盖面非常广泛&#xff0c;包括执行效率、资源占用、系统稳定性、安全性、兼容性、可靠性、可扩展性等&#xff0c;性能测试就是描述测试对象与性能相关的特征并对其进行评价而实施的一类测试。 性能测试是一个统称&#xff0c;它其实包…

Ubuntu22上安装cuda-12-3

说明 最近在运行通义千问模型的的时候&#xff0c;报错&#xff0c;提示使用Ubuntu22.04默认的cuda11.5不支持&#xff0c;之前是使用apt安装的&#xff0c;版本比较老。 CUDA官网下载&#xff1a;https://developer.nvidia.com/downloads 安装步骤 安装支持Ubuntu22的源 …

大数据Doris(二十五):Stream Load数据导入演示和其他导入案例

文章目录 数据导入演示和其他导入案例 一、数据导入演示

【Leetcode合集】9. 回文数

9. 回文数 9. 回文数 代码仓库地址&#xff1a; https://github.com/slience-me/Leetcode 个人博客 &#xff1a;https://slienceme.xyz 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序…

【Web】Ctfshow SSRF刷题记录1

核心代码解读 <?php $url$_POST[url]; $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); ?> curl_init()&#xff1a;初始curl会话 curl_setopt()&#xff1a;会…

水质测定仪的优势特点有哪些?

水质测定仪&#xff1a;水环境保护的得力助手 随着人们环保意识的不断提高&#xff0c;水质问题逐渐引起了大家的关注。为了保护水环境&#xff0c;必须加强对污水排放的监测&#xff0c;而水质测定仪在这个过程中扮演着重要的角色。 水质测定仪是一种专业的仪表&#xff0c;主…

旋极携手西班牙SoC-e公司,为中国客户提供高效可靠TSN通讯解决方案

2023年2月&#xff0c;旋极信息与西班牙SoC-e公司正式签订战略合作协议&#xff0c;成为其在中国区重要合作伙伴。 SoC-e是一家世界领先的基于FPGA技术的以太网通讯解决方案供应商&#xff0c;是一系列IP核开发领域的先锋&#xff0c;为关键任务实施网络化、同步性和安全性提供…

如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?

在数据科学领域&#xff0c;Jupyter Notebook 已成为处理数据的必备工具。 其用途包括数据清理和探索、可视化、机器学习和大数据分析。Jupyter Notebook的安装非常简单&#xff0c;如果你是小白&#xff0c;那么建议你通过安装Anaconda来解决Jupyter Notebook的安装问题&#…

【23真题】超难985!做完感觉没学过!

本套试卷难度分析&#xff1a;22年西北工业大学827考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&#xff01;本套试题内容有难度&#xff0c;题目考察全为大题&#xff0c;题目不多&#xff01;但是题目都很新颖&#xff0c;状态方程的题目考察较…

Qt给控件添加图片

双击qrc文件&#xff0c;选择下面的addFiles&#xff0c;将图片添加进来&#xff0c;然后选中图片右键Select All 设置控件字符&#xff1a; ui.btnSet->setText(""); 设置资源&#xff1a; ui.btnSet->setStyleSheet("QPushButton{background-image:…