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();}});}
}

( 到底啦~  )

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

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

相关文章

MQTTX连接华为云IoTDA

目录 华为IoTDA平台 MQTTX连接参数的设置 物模型的构建 属性上报 基本数据格式 时戳 我以前上课都是用巴法云服务器来演示MQTT的&#xff0c;前几天因为测试工业互联网关使用了华为的IoTDA&#xff0c;觉得也不算太复杂&#xff0c;今天尝试用MQTTX连接华为云&#xff0c…

Python读取grib数据获取变量推荐姿势

前情提要 最近使用的EC和GFS预报数据给的都是grib2格式的&#xff0c;之前用惯nc格式的&#xff0c;python读取grib2数据的时候还走了些弯路&#xff0c;看到很多博客上给的教程其实不能满足我的需求&#xff0c;现在搞明白了分享一下 pygrib安装 第一个问题就是我电脑上pyg…

HTTPS 的加密过程 详解

HTTP 由于是明文传输&#xff0c;所以安全上存在以下三个风险&#xff1a; 窃听风险&#xff0c;比如通信链路上可以获取通信内容。篡改风险&#xff0c;比如通信内容被篡改。冒充风险&#xff0c;比如冒充网站。 HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议&#xff0c…

1 go语言环境的搭建

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;由浅入深讲解Go语言&#xff0c;希望大家都能够从中有所收获&#xff0c;也请大家多多支持。 查看相关资料与知识库 专栏地址:Go专栏 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;大家一起学习&#xff0c;…

腾讯云k8s相关

1.某个服务腾讯云内网地址&#xff1f; 比如&#xff1a;spiderflow-web正式环境&#xff1a;http://spiderflow-web.sd-backend:30001 试一试&#xff1a;

Linux shell实现执行任务进度条动态显示(回旋镖)-3

process_bar.sh #!/bin/bash #display boomerangwhile : doclearfor i in {1..20}doecho -e "\033[2;${i}H*"sleep 0.1doneclearfor i in {20..1}doecho -e "\033[2;${i}H*"sleep 0.1doneclear done验证&#xff1a;

机器学习笔记-01-初识基础(问题-解答自查版)

前言 以下问题以Q&A形式记录&#xff0c;基本上都是笔者在初学一轮后&#xff0c;掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系&#xff0c;也适合做查漏补缺和复盘。 本文对读者可以用作自查&#xff0c;答案在后面&#xff0…

(35)远程识别(又称无人机识别)(二)

文章目录 前言 4 ArduRemoteID 5 终端用户数据的设置和使用 6 测试 7 为OEMs添加远程ID到ArduPilot系统的视频教程 前言 在一些国家&#xff0c;远程 ID 正在成为一项法律要求。以下是与 ArduPilot 兼容的设备列表。这里(here)有一个关于远程 ID 的很好解释和常见问题列表…

ubuntu那些ppa源在哪

Ubuntu中的 PPA 终极指南 - UBUNTU粉丝之家 什么是PPA PPA 代表个人包存档。 PPA 允许应用程序开发人员和 Linux 用户创建自己的存储库来分发软件。 使用 PPA&#xff0c;您可以轻松获取较新的软件版本或官方 Ubuntu 存储库无法提供的软件。 为什么使用PPA&#xff1f; 正如…

VLC输出NDI媒体流

目录 1. 下载安装VLC Play 2. 首先在电脑上安装NDI Tools 3. 运行VLC进行输出配置 4. 播放视频 5. 验证 (1)用Studio Monitor验证 (2)用OBS验证 NDI(Network Device Interface)即网络设备接口,是由美国 NewTek 公司开发的免费标准,它可使兼容的视频产品以高质量…

视图、存储过程、触发器

一、视图 视图是从一个或者几个基本表&#xff08;或视图&#xff09;导出的表。它与基 本表不同&#xff0c;是一个虚表&#xff0c;视图只能用来从查询&#xff0c;不能做增删改(虚拟的表) 1.创建视图 创建视图的语法&#xff1a; create view 视图名【view_xxx / v_xxx】 a…

基于CALMET诊断模型的高时空分辨率精细化风场模拟

原文链接&#xff1a;基于CALMET诊断模型的高时空分辨率精细化风场模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247610033&idx7&sn999fb0fa3a0e57acebdfe209587ce7f3&chksmfa826f56cdf5e640f7dba429a9213a38d1222415eccd8660f4cf9fb46fa1a5ab3c5…

Netty:基于NIO的 Java 网络应用编程框架

Netty 是一个被广泛使用的&#xff0c;基于NIO的 Java 网络应用编程框架&#xff0c;Netty框架可以帮助开发者快速、简单的实现客户端和服务端的网络应用程序。“快速”和“简单”并不用产生维护性或性能上的问题。Netty 利用 Java 语言的NIO网络编程的能力&#xff0c;并隐藏其…

JavaWeb笔记_JSPEL

一.JSP相关技术 1.1 JSP由来 当我们需要向页面输出大量的HTML代码的时候,我们需要通过response对象写多次来输出HTML代码 response.getWriter().write("<font>文本</font>"); 页面的展示和servlet密不可分,不利于后期代码维护,因此推出一种可以…

记录一仿真错误,波形缩放有脉冲高信号,放大看不到信号了

是因为信号拉高的时间太短&#xff0c;拉高之后又把它拉低了&#xff0c;需要仔细看一下信号生成的代码。 错误代码与正确代码##正确代码always (posedge clk or negedge rst_n)begin if(!rst_n)beginwr_en < 1d0;wr_data < 8h0;endelse if(state_c DATASEND …

前端JS特效第52波:鼠标经过文字标题百叶窗动画特效风格切换图片轮播js效果

鼠标经过文字标题百叶窗动画特效风格切换图片轮播js效果&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <html><head><meta charset"utf-8"><title>鼠标经过文字标题百叶窗动画特效风格切换图片轮播js效果</titl…

electron 网页TodoList应用打包win桌面软件数据持久化

参考&#xff1a; electron 网页TodoList工具打包成win桌面应用exe https://blog.csdn.net/weixin_42357472/article/details/140648621 electron直接打包exe应用&#xff0c;打开网页上面添加的task在重启后为空&#xff0c;历史没有被保存&#xff0c;需要持久化工具保存之前…

【Unity国产化信创平台】麒麟银河V10系统虚拟机创建

目录 一、麒麟V10系统镜像下载 二、虚拟机创建流程 三、麒麟银河系统安装流程 一、麒麟V10系统镜像下载 https://www.kylinos.cn/# 官方访问还是会有问题&#xff0c;如果有需要麒麟银河Kylin系统V10的镜像文件&#xff0c;可以留下邮箱或者私信博主获取。 二、虚拟机创…

【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(上)

【Gin】架构的精妙编织&#xff1a;Gin框架中组合模式的革新实践与技术深度解析(上) 大家好 我是寸铁&#x1f44a; 【Gin】架构的精妙编织&#xff1a;Gin框架中组合模式的革新实践与技术深度解析(上)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分…

MySQL练手 --- 1251. 平均售价

题目链接&#xff1a;1251. 平均售价 思路&#xff1a; 由题意可知&#xff0c;Prices表和UnitsSold表&#xff0c;表的连接关系为一对一&#xff0c;连接字段&#xff08;匹配字段&#xff09;为product_id 要求&#xff1a;查找每种产品的平均售价。而Prices表含有价格还有…