Java 如何设计一款小游戏详细讲解(二)

news2024/11/17 11:36:52
继续上面(一), Java 如何设计一款小游戏详细讲解(一)

步骤

步骤一

接下来我们主要完成GameJFrame,就是拼图游戏的界面及代码。
这里接下来完成菜单的设置,将主界面的代码放到一个方法中,像下面这样,接下来我们书写菜单的代码
这里我们初始化JMenuBar对象,JMenu对象,然后将JMenuItem条目放到JMenu对象中,然后将JMenu对象添加到JMenuBar中,然后将JMenuBar添加到页面中,代码如下。
    private void initJMenuBar() {
        JMenuBar jMenuBar = new JMenuBar(); //初始化

        JMenu functionJMenu = new JMenu("功能"); //菜单中的功能
        JMenu aboutJMenu = new JMenu("关于"); //菜单中的关于

        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reLoginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭");
        JMenuItem accoutItem = new JMenuItem("博客");

        functionJMenu.add(replayItem); //把条目添加到菜单里面
        functionJMenu.add(reLoginItem);
        functionJMenu.add(closeItem);

        aboutJMenu.add(accoutItem);

        jMenuBar.add(functionJMenu); //将菜单中的东西,添加到菜单中
        jMenuBar.add(aboutJMenu);

        this.setJMenuBar(jMenuBar); //将菜单所有东西放到菜单,让可以显示出来
    }
这里我们运行一下Main,查看一下

步骤二

主界面大概是这样,接下来我们要完成图片布置,这里新生成一个初始化图片的类,这里我们使用一个管理容器的JLabel类来管理图片ImageIcon类,然后添加到页面中
这里我们先将素材里面的图片直接复制进来,这里我们ctrl+c复制img文件,然后选中game2,ctrl+v直接粘贴,这里面有很多图片是黑马已经整理好的,注意自己可以将每一个的文件夹里面的16.jpg删除
这里我们查看一张图片的大小105x105,这里的大小是像素。
代码如下,这里我们使用的是相对路径,而不是绝对路径,因为我还要给别人使用,使用绝对路径,那么别人图片的位置不一定是这个位置,所以我们使用相对路径就可以了。
    private void initImage() {
        JLabel jlabel = new JLabel(new ImageIcon("image\\animal\\animal1\\1.jpg"));
        jlabel.setBounds(0,0,105,105);
        this.getContentPane().add(jlabel);
    }
这里我们运行Main类,来查看GameJFrame现在的图形化。
这里看到是直接有图片的,然后我们还要生成14个图片进去,这里我们就可以使用for循环,这里看一下
    private void initImage() {

        int number = 0;
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                JLabel jlabel = new JLabel(new ImageIcon("image\\animal\\animal1\\"+number+".jpg"));
                jlabel.setBounds(105*j,105*i,105,105);
                this.getContentPane().add(jlabel);
                number++;
            }
        }
    }

步骤三

这里我们优化一下,因为肯定这个位置是不舒服的,而且还有背景图片我们是没有搞的,这里我们先设置背景图片。
    private void initImage() {

        int number = 0;
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                JLabel jlabel = new JLabel(new ImageIcon("image\\animal\\animal1\\"+number+".jpg"));
                jlabel.setBounds(105*j+80,105*i+134,105,105);
                jlabel.setBorder(new BevelBorder(BevelBorder.RAISED)); //设置边框
                this.getContentPane().add(jlabel);
                number++;
            }
        }

        JLabel background = new JLabel(new ImageIcon("image\\background.png"));
        background.setBounds(40,40,500,560);
        this.getContentPane().add(background);
    }

详细代码

Main.java,LoginJFram.java,RegisterFRrame.java不变,这里GameJFrame.java
package pulzzegame.ui;

import javax.swing.*;
import javax.swing.border.BevelBorder;

public class GameJFrame extends JFrame {
    public GameJFrame(){
        initJFame(); //初始化页面

        initJMenuBar(); //菜单初始化
        
        initImage(); //初始化图片
        
        this.setVisible(true); //将界面显示出来
    }

    //初始化图片
    private void initImage() {

        int number = 0;
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                JLabel jlabel = new JLabel(new ImageIcon("image\\animal\\animal1\\"+number+".jpg"));
                jlabel.setBounds(105*j+80,105*i+134,105,105);
                jlabel.setBorder(new BevelBorder(BevelBorder.RAISED));
                this.getContentPane().add(jlabel);
                number++;
            }
        }

        JLabel background = new JLabel(new ImageIcon("image\\background.png"));
        background.setBounds(40,40,500,560);
        this.getContentPane().add(background);
    }

    //初始化菜单
    private void initJMenuBar() {
        JMenuBar jMenuBar = new JMenuBar(); //初始化

        JMenu functionJMenu = new JMenu("功能"); //菜单中的功能
        JMenu aboutJMenu = new JMenu("关于"); //菜单中的关于

        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reLoginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭");
        JMenuItem accoutItem = new JMenuItem("博客");

        functionJMenu.add(replayItem); //把条目添加到菜单里面
        functionJMenu.add(reLoginItem);
        functionJMenu.add(closeItem);

        aboutJMenu.add(accoutItem);

        jMenuBar.add(functionJMenu); //将菜单中的东西,添加到菜单中
        jMenuBar.add(aboutJMenu);

        this.setJMenuBar(jMenuBar); //将菜单所有东西放到菜单,让可以显示出来
    }

    //初始化主界面
    private void initJFame() {
        this.setTitle("拼图 v1.0"); //设置标题
        this.setAlwaysOnTop(true); //设置置顶
        this.setLocationRelativeTo(null); //设置居中
        this.setDefaultCloseOperation(3); //设置关闭后,也停止运行
        this.setSize(600,680); //设置页面宽和高
        this.setLayout(null); //取消默认的居中
    }
}

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

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

相关文章

基于Python实现种差值方法(完整代码详细教程)

三种插值方法都是使用Python自己实现的。1.1 最近邻插值寻找每个中心点周围的八个点中有无未丢失的点&#xff0c;如果有的话就赋值为第一个找到的点&#xff0c;如果没有就扩大范围再次寻找&#xff0c;在最大范围内都找不到的话就跳过。1.2 双线性插值使用解方程的方法求解&a…

(十八)Threads异步和多线程(Thread、Threadpool、Task)-语言进阶2

Threads异步和多线程-语言进阶2一、Thread1. 线程启动2. 线程等待3.前台线程/后台线程4.扩展thread封装回调二、Threadpool1.线程池2.线程池使用3.ManualResetEvent 线程池等待三、Task1. Task启动方式2.waitall 、waitany1.waitall2.waitany3.WaitAll、waitany场景4. 应用&…

Spring为什么这么火 之 Spring的创建及存储、获取Bean对象

目录 1、创建Spring项目 1.1、创建一个Maven项目 1.2、添加Spring框架支持 1.3、添加启动类 2、存储Bean对象 2.1、创建Bean对象 2.2、将Bean对象注册到Spring容器中 3、获取、使用Bean对象 3.1、得到Spring上下文对象 使用ApplicationContext作为Spring的上下文 【更…

服务器相关命令(docker相关)

一:安装docker 之前安装过旧版本&#xff0c;使用以下命令可以卸载(整个copy过去): yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-e…

AOP面向切面编程

AOP 面向切面编程 AOP是什么 AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续&#xff0c;是软件开发中的一个热点&#xff0c;是 j…

【Linux】-- 环境变量

目录 环境变量 常见环境变量 HOME 和环境变量相关的命令 通过代码如何获取环境变量 环境变量参数 通过第三方变量environ获取 通过getenv函数来特定访问获取 通过setenv函数来特定访问获取 环境变量 命令&#xff1a;which ls 将命令ls的完整路径写入到标准输出。 #in…

用R语言理解洛必达法则

文章目录5 洛必达法则极限的种类洛必达法则作用于幂函数5 洛必达法则 极限的种类 令NNN为常数&#xff0c;则常规的极限运算大致有以下几种 ∞N∞∞⋇N∞(N̸0)N∔∞∞N−∞−∞N/∞0N/0∞N∞∞(N̸1)∞N∞(N̸0)\begin{matrix} &\infty\pm N\infty\quad&\infty\divi…

MySQL版本由5.7.37更新到5.7.39

一、前景 由于mysql5.7.37存在漏洞&#xff0c;影响系统安全&#xff0c;所以需要将mysql版本升级到5.7的最新版本5.7.39。 二、步骤 1、下载5.7.39的安装包&#xff1a; 下载链接如下&#xff1a; https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.39-1.el…

node基础知识

node基础知识 node在真实项目中的应用 webpack基于node环境 用nodejs的语法合并压缩打包 js放到客户端浏览器中执行 放到服务器端运行&#xff1a;java因为jdk php因为tomcat c#因为有.net framework 项目架构1&#xff1a;中小型项目-基于nodejs构建全栈 项目架构2&#xff1a…

mysql转DM达梦数据库+springboot兼容DM数据库+springboot兼容activity5.22.0

由于现在做的项目中需要针对数据库进行国产化操作&#xff0c;最终完成从mysql到达梦的迁移&#xff0c;记录整合迁移记录如下&#xff1a;安装初始化达梦数据库&#xff08;傻瓜式安装即可&#xff09;安装达梦数据库&#xff08;windows、linux&#xff09;初始化数据库实例关…

代码质量与安全 | 新时代:2023年商业软件开发的五大关键目标

进入2023年&#xff0c;技术趋势仍然聚焦于人工智能、边缘智能和气候变化领域&#xff0c;但供应链增速放缓和日益增长的消费者需求阻碍着创新的步伐。为了在行业中保持竞争力&#xff0c;并实现软件工程预定目标&#xff0c;软件开发领导者需要主动制定预算和时间管理计划&…

Java设计模式-模板模式Template

介绍 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式(Template Pattern)&#xff0c;z 在一个抽象类公开定义了执行。它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。简单说&#xff…

中移链合约常用开发介绍 (二)多索引表的使用

一、目的本文详细介绍了开发、部署和测试一个地址簿的智能合约的流程&#xff0c;适用于EOS的初学者了解如何使用智能合约实现本地区块链上数据的持久化和对持久化数据的增删改查。二、智能合约介绍区块链作为一种分布式可信计算平台&#xff0c;去中心化是其最本质的特征。每笔…

17.Isaac教程--机器学习流程

机器学习流程 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录机器学习流程模拟训练PC 和边缘设备上的推理使用 TensorRT 进行推理Torch推理使用 Tensorflow 进行推理示例PyCodelet配套代码Tensorflow 推理小码TensorRT 推理小码SampleAc…

23种设计模式(三)——模板方法模式【组件协作】

文章目录意图什么时候使用模板方法真实世界类比常说的钩子模板方法的实现模板方法模式的优缺点亦称&#xff1a; Template Method 意图 它的主要思想是&#xff0c;定义一个操作的一系列步骤&#xff0c;对于某些暂时确定不下来的步骤&#xff0c;就留给子类去实现好了&#x…

位图与矢量图的区别

相信大家在日常的工作过程中&#xff0c;经常会听到位图和矢量图&#xff0c;那么位图和矢量图的区别是什么呢&#xff1f; 1.定义 ①位图&#xff1a;称为点阵图像或栅格图像&#xff0c;是由称作像素&#xff08;图片元素&#xff09;的单个点组成的。这 些点可以进行不同的排…

测试用例设计方法有哪些?举例说明

众所周知&#xff0c;测试用例是编制的一组测试输入、执行条件及预期结果&#xff0c;专门为的是某个特殊目标&#xff0c;即测试某个程序路径&#xff0c;或是核实是否满足某个特定的需求。一般来讲&#xff0c;常用的测试用例设计方法有五种&#xff0c;分别是&#xff1a;正…

微信小程序中如何实现双向绑定

一、双向绑定 在微信小程序中如何实现双向绑定&#xff1f;在开始之前先介绍下什么是双向绑定&#xff0c;js中定义变量数据后&#xff0c;通过{{}}绑定到模板中&#xff0c;这个过程是单向绑定&#xff0c;即数据的更新只能是js中更新了数据&#xff0c;模板中跟着修改。但是如…

深度学习笔记:神经网络(3)

关于本章之前内容可以参考以下之前文章&#xff1a; 1 https://blog.csdn.net/Raine_Yang/article/details/128473486?spm1001.2014.3001.5501 2 https://blog.csdn.net/Raine_Yang/article/details/128584916?spm1001.2014.3001.5501 神经网络的输出层设计 机器学习问题一般…

2022年12月青少年软件编程(Python) 等级考试试卷(三级)

2022. 12 青少年软件编程&#xff08;Python&#xff09; 等级考试试卷&#xff08;三级&#xff09; 一、 单选题(共 25 题&#xff0c; 共 50 分) 1.列表 L1 中全是整数&#xff0c; 小明想将其中所有奇数都增加 1&#xff0c; 偶数不变&#xff0c; 于是编写了如下图 所示的…