Java | 自制AWT单词猜一猜小游戏(测试版)
目录
游戏标题
开发过程
开发想法
技术栈
代码呈现
导包
核心代码
游戏标题
探索知识的迷宫,体验自制AWT单词猜一猜小游戏
在数字时代,学习可以是多彩的,游戏可以是智慧的。我们自豪地推出“单词猜猜猜”是一款结合了教育与娱乐的自制AWT小游戏。通过这款测试版游戏,我们旨在激发语言学习的热情,同时锻炼玩家的记忆力和反应速度。
开发过程
- 概念构思:我们从一个简单的问题出发——如何让单词学习变得更有趣?这引导我们构思了一款基于猜词的小游戏。
- 技术选型:选择Java作为开发语言,利用其强大的AWT库来构建图形用户界面。
- 界面设计:设计简洁直观的游戏界面,确保用户能够快速上手。
- 功能实现:开发了核心功能,包括单词生成、用户输入处理、结果校验等。
- 测试与优化:通过多轮测试,不断优化用户体验和程序性能。
开发想法
- 教育与娱乐结合:通过游戏化的方式,让玩家在轻松的环境中学习新单词。
- 用户交互:通过点击和输入,玩家可以直接与游戏互动,提高了参与感。
- 随机性与挑战性:每次游戏的单词随机生成,增加了游戏的可玩性和挑战性。
技术栈
- 编程语言:Java,一种成熟且广泛使用的编程语言,提供了丰富的库支持。
- 图形库:AWT(Abstract Window Toolkit),Java的原生图形库,用于构建跨平台的桌面应用程序。
- 事件处理:使用AWT的事件处理机制,响应用户的鼠标点击和键盘输入。
- 多线程管理:通过SwingUtilities.invokeLater确保GUI更新在事件分发线程上安全执行。
代码呈现
导包
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;
核心代码
public class GenerateWordBoardGUI extends JFrame {private static final String Word = "apple"; // 正确的单词private static final int BOARD_SIZE = Word.length(); // 大小private char[][] board; // private JTextArea boardTextArea; // 显示的文本区域private JButton generateButton; // 生成单词的按钮public GenerateWordBoardGUI() {setTitle("单词猜猜猜");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(new BorderLayout());setSize(400, 300);// 初始化和文本区域board = new char[BOARD_SIZE][BOARD_SIZE];initBoard();// 创建显示的文本区域boardTextArea = new JTextArea(BOARD_SIZE, 1); // 根据BOARD_SIZE设置列数boardTextArea.setFont(new Font("Monospaced", Font.PLAIN, 18));boardTextArea.setEditable(true);boardTextArea.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {if (SwingUtilities.isLeftMouseButton(e)) {// 获取点击位置的偏移量int offset = boardTextArea.viewToModel(e.getPoint());// 计算行和列int row = offset / boardTextArea.getColumns();int col = offset % boardTextArea.getColumns();// 检查索引是否有效if (row >= 0 && row < board.length && col >= 0 && col < board[0].length) {if (board[row][col] == '*') { // 空格允许填写JTextField textField = new JTextField();int result = JOptionPane.showConfirmDialog(null, textField, "请输入你所看到的单词:",JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);if (result == JOptionPane.OK_OPTION) {String input = textField.getText();if (input != null && input.length() == 1 && input.matches("[a-zA-Z]")) {// 更新和文本区域board[row][col] = input.toUpperCase().charAt(0);updateBoardTextArea();checkWord();}}}}}}});// 将boardTextArea添加到JScrollPane中,然后添加到JFrame中JScrollPane scrollPane = new JScrollPane(boardTextArea);add(scrollPane, BorderLayout.CENTER);// 创建生成单词的按钮generateButton = new JButton("开始游戏");generateButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {generateWordBoard(Word);}});add(generateButton, BorderLayout.SOUTH);// 确保所有组件都添加和初始化后再设置为可见SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {setVisible(true);}});}private void initBoard() {// 初始化for (int i = 0; i < BOARD_SIZE; i++) {for (int j = 0; j < BOARD_SIZE; j++) {board[i][j] = '*';}}// 在 EDT 上更新显示SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {updateBoardTextArea();}});}private void generateWordBoard(String word) {if (word.isEmpty()) {JOptionPane.showMessageDialog(this, "这个单词不能为空.");return;}Random random = new Random();for (int i = 0; i < board.length; i++) {for (int j = 0; j < board[i].length; j++) {if (random.nextBoolean()) { // 随机放置字母或空格board[i][j] = word.charAt(i) == ' ' ? ' ' : Word.charAt(i);} else {board[i][j] = '*';}}}updateBoardTextArea();}private void updateBoardTextArea() {// 确保在 EDT 上更新文本区域SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {StringBuilder sb = new StringBuilder();for (char[] row : board) {for (char c : row) {sb.append(c);}sb.append("\n");}boardTextArea.setText(sb.toString());}});}private void checkWord() {StringBuilder enteredWord = new StringBuilder();for (char[] row : board) {for (char c : row) {enteredWord.append(c);}}if (Word.equalsIgnoreCase(enteredWord.toString().replaceAll("\\s+", ""))) {JOptionPane.showMessageDialog(this, "Congratulations! You've spelled the word correctly: " + Word);}}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new GenerateWordBoardGUI();}});}
}

( 到底啦~ )
相关文章:
Java | 自制AWT单词猜一猜小游戏(测试版)
目录 游戏标题 开发过程 开发想法 技术栈 代码呈现 导包 核心代码 游戏标题 探索知识的迷宫,体验自制AWT单词猜一猜小游戏 在数字时代,学习可以是多彩的,游戏可以是智慧的。我们自豪地推出“单词猜猜猜”是一款结合了教育与娱乐的自制…...
docker搭建ES 8.14 集群
参考:【docker搭建es8集群kibana】_docker 安装生产级 es 8.14 集群-CSDN博客 1、之前已搭建一台单机版的dockerES集群 参见 Elasticsearch docker 安装_docker 安装es8.14.3-CSDN博客 2、现在需要重新搭建为docker ES集群 准备新搭建3个点 一、准备工作 提前开…...
自定义特征的智能演进:Mojo模型中的动态特征选择控制
自定义特征的智能演进:Mojo模型中的动态特征选择控制 在机器学习领域,特征选择是提升模型性能和泛化能力的关键步骤。Mojo模型,作为一种高效的模型部署方式,其对特征的动态选择和控制能力是实现高级机器学习应用的重要特性。本文…...
Git->Git生成patch和使用patch
生成patch git format-patch -1 HEAD -o "输出目录"format-patch:用于生成补丁文件-1:-1 表示最近一次提交,-2 表示生成最近两次提交的补丁。HEAD:HEAD 指向当前分支的最新提交-o:指定生成的补丁文件的输出…...
开发面试算法题求教
在《无尽的拉格朗日》中,有许多不同的星系建筑物。每个星系建筑物的等级不同,带来的影响力也不同。 已知宇宙可以抽象为一个无穷大的平面直角坐标系,现在给定了每个星系建筑物的所在坐标(xi,yi)和它的影响力ri,距离其切比雪夫距离…...
OpenStack中nova的架构
1.1 nova-api 负责接收和相应客户的API调用。 1.2 compute core nova-schedule 负责决定在哪个计算节点运行虚拟机。 nova-compute 通过调用Hypervisor实现虚拟机生命周期的管理。一般运行在计算节点。 hypervisor 对虚拟机进行硬件虚拟化的管理软件ÿ…...
力扣高频SQL 50题(基础版)第五题
文章目录 力扣高频SQL 50题(基础版)第五题1683. 无效的推文题目说明:思路分析:实现过程:结果截图: 力扣高频SQL 50题(基础版)第五题 1683. 无效的推文 题目说明: 表&a…...
Air780EP- AT开发-阿里云应用指南
简介 使用AT方式连接阿里云分为一机一密和一型一密两种方式,其中一机一密又包括HTTP认证二次连接和MQTT直连两种方式 关联文档和使用工具: AT固件获取在线加/解密工具阿里云平台 准备工作 Air780EP_全IO开发板一套,包括天线SIM卡࿰…...
【中项】系统集成项目管理工程师-第4章 信息系统架构-4.4数据架构
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…...
excel批量新建多个同类型的表格
背景引入 比如,一个企业有多个部门,现在需要按照某一个excel表模板收集各个部门的信息,需要创建数十个同类型表格,且标题要包含部门名称。 1.修改模板表格标题 在一个文件夹下面放入需要发放给各个部门的表格,将标题…...
React Native 与 Flutter:你的应用该如何选择?
Flutter 和 React Native 都被认为是混合应用程序开发中的热门技术。然而,当谈到为你的项目使用框架时,你必须考虑哪一个是最好的:Flutter 还是 React Native? 本篇文章包含 Flutter 和 React Native 在各个方面的差异。因此&…...
DP学习——状态模式
学而时习之,温故而知新。 状态模式 角色 2个角色,引用类,状态行为类。 和策略模式很相似 状态行为封装成很多独立的状态行为类——就是把不同的状态及其要执行的方法单独封装起来。 而策略模式类似,是不同的算法封装成一个个…...
前端性能优化面试题汇总
面试题 1. 简述如何对网站的文件和资源进行优化? 参考回答: 举列: 1.文件合并(目的是减少http请求):使用css sprites合并图片,一个网站经常使用小图标和小图片进行美化,但是很遗憾这些小图片…...
C#基于SkiaSharp实现印章管理(4)
前几篇文章实现了绘制不同外形印章的功能,印章内部一般包含圆形、线条等形状,有些印章内部还有五角星,然后就是各种样式的文字。本文实现在印章内部绘制圆形、线条、矩形、椭圆等四种形状。 定义FigureType枚举记录印章内部形状ÿ…...
Vue全家桶 - pinia 的理解和学习2(Pinia 核心概念的插件、组件外的 Store 和 服务器渲染(SSR))
Pinia(Vue 的专属状态管理库) Vue全家桶 - pinia 的理解和学习1(Pinia 核心概念的 Store、State、Getter、Action) https://blog.csdn.net/weixin_54092687/article/details/140520675 插件 由于有了底层 API 的支持,…...
数学建模(6)——预测类模型目录
预测模型是一类通过分析和建模历史数据来预测未来结果的算法或模型。这些模型广泛应用于各种领域,包括金融、医疗、市场营销、气象、制造业等。以下是一些常见的预测模型: 1. 回归模型 线性回归(Linear Regression):…...
安卓刷入系统证书
设备:Pixel XL 证书:reqable-ca.crt 刷入前需要手机已刷入Magisk 使用USB充电线连接手机,打开Windows终端面板手机打开Magisk,开启Shell的Root权限Windows终端输入su获取root权限查看SELinux状态并修改为Permissive修改system分…...
中科亿海微信号采集核心板在振动采集场景中的应用
在工业现场控制领域,对于旋转物体的速度我们通用的做法是测量旋转所产生的振动量来倒推设备的转速值。振动采集系统是一种广泛用于检测和记录系统振动的设备,整体包括传感器和数据采集两部分。传感器类型包括加速度传感器、速度传感器和位移传感器&#…...
`panic` 是 Go 语言中用来表示发生了严重错误的一种机制
目录 panic 是 Go 语言中用来表示发生了严重错误的一种机制案例goroutine空指针是什么栈展开是什么defer 语句会按照 LIFO(后进先出)的顺序执行 panic 是 Go 语言中用来表示发生了严重错误的一种机制 在 Go 程序中,panic 是一种运行时错误&a…...
【BUG】已解决:requests.exceptions.ProxyError: HTTPSConnectionPool
已解决:requests.exceptions.ProxyError: HTTPSConnectionPool 目录 已解决:requests.exceptions.ProxyError: HTTPSConnectionPool 【常见模块错误】 原因分析 解决方案 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&am…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
