通过一个游戏编程熟悉事件处理

c++ 游戏中事件触发逻辑处理 #include <iostream> #include <vector> #include <cstring> #include <cstdio> #include <cstdlib> #include <map> using namespace std; class Player; typedef void (*fun... 阅读详情

 

 

编程练习

 

       使用你熟悉的开发语言和开发方式,实现以下的编程目标(至少合理实现“编程目标一”才为合格):

编程目标一:根据下面的“游戏说明”,实现该游戏程序,完成响应用户的输入、显示游戏局面、判定游戏胜负等功能。

编程目标二:在“编程目标一”的基础上,顺序记录用户从游戏开始到游戏结束的所有输入,并在游戏结束时保存到游戏过程记录文件中。

编程目标三:在“编程目标二”的基础上,程序实现如下功能:从游戏过程记录文件中读取数据并回放游戏从开始到结束的整个过程。

 

 

【游戏说明】

有一种游戏,其规则如下:有一个 3×3 的方格,每个方格中只可画‘+’符号或‘-’符号,表示该方格的值。图 (a) 定义了各方格的位置,表 1 为每个方格位置定义了与其相关联的位置集,各方格的初值如图 (b) 所示。游戏开始后,每次可选一个值为‘+’的方格位置,然后根据表 1 将该位置所对应的每个相关联的位置上的符号重画成与其不同的符号,即将‘+’重画成‘-’,将‘-’重画成‘+’。重画操作可用所选的位置编号来描述。例如在图 (b) 所示的情况下,选择位置 4 时,重画结果如图 (c) 所示。经过连续的若干次这样的操作后,当 3×3 方格呈现出图 (d) 所示的图形时,表示获胜;当呈现出图 (e) 所示的图形时,表示失败。

0 1 2

- - -

- + -

+ + +

- - -

3 4 5

- + -

+ - +

+ - +

- - -

6 7 8

- - -

- + -

+ + +

- - -

图(a)

图(b)

图(c)

图(d)

图(e)

 

表1 方格位置及其相关位置集的对照表

0

0 1 3 4

1

0 1 2

2

1 2 4 5

3

0 3 6

4

1 3 4 5 7

5

2 5 8

6

3 4 6 7

7

6 7 8

8

4 5 7 8

 

因为我们还没有学习文件操作和多线程,所以目标二和目标三还不能实现它,这里我们实现目标一。

 

 

import java.awt.Color;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

 

class GameButton extends JButton

{

    GameButton(String str)

    {

       super(str);

       super.setSize(10, 10);

       super.setBackground(Color.WHITE);

       super.setFont(new java.awt.Font("Dialog",1,60));//设置字体

    }

}

public class MyGame extends JFrame implements  ActionListener

{

   private JFrame f = new JFrame("Game-Java 实现");

   private JPanel jp = new JPanel(new GridLayout(3,3,10,10));

   private GameButton [] gb = new GameButton[9];

   private int[][] relationShips = new int[9][];

  

   MyGame()

   { 

       f.setLocation(10,100);

       f.setSize(600,400);

       f.getContentPane().add(jp);

      

       for(int i=0;i<gb.length;i++)

       {

        gb[i]=new GameButton("-");

        jp.add(gb[i]);

        gb[i].addActionListener(this);  //添加按钮事件

       }

       gb[4].setText("+");

       f.setVisible(true); 

 

       relationShips[0] = new int[] { 0, 1, 3, 4 };

       relationShips[1] = new int[] { 0, 1, 2 };

       relationShips[2] = new int[] { 1, 2, 4, 5 };

       relationShips[3] = new int[] { 0, 3, 6 };

       relationShips[4] = new int[] { 1, 3, 4, 5, 7 };

       relationShips[5] = new int[] { 2, 5, 8 };

       relationShips[6] = new int[] { 3, 4, 6, 7 };

       relationShips[7] = new int[] { 6, 7, 8 };

       relationShips[8] = new int[] { 4, 5, 7, 8 };

   }

  

   public static void main(String[] args)

   {

       MyGame g=new MyGame();  

   }

 

    public void actionPerformed(ActionEvent e)

    {

       for(int i=0;i<9;i++)

       {

           if(e.getSource().equals(gb[i])) //如果点中第i个

           {

              if(gb[i].getText().equals("-"))

              {

                  JOptionPane.showMessageDialog(null,"你应该点“+”的");

                  return;

              }

              ButtonChange(i);

           }

       }

    }

 

    private void ButtonChange(int i)

    {

       for(int j=0;j<relationShips[i].length;j++)

       {

           if(gb[relationShips[i][j]].getText().equals("+"))

           {

              gb[relationShips[i][j]].setText("-");

           }

           else

           {

              gb[relationShips[i][j]].setText("+");

           }

       }

    }

}

 

 

 

PyGame游戏编程 pygame模块的使用,两个小游戏案例:跳跃的小球、Flappy Birds。 阅读详情

相关推荐

游戏编程中的逻辑与事件处理

本文探讨了游戏编程中的事件驱动逻辑和网络通信处理机制。通过分析特定的代码片段,揭示了如何通过定时器同步游戏状态、处理网络事件,并确保游戏循环的流畅性。文章还探讨了客户端与服务器间通信的重要性和实现细节。

weixin_42126677的博客 380

【大数据实践】游戏事件处理系统(2)——事件处理-logstash

前言 在之前的文章【大数据实践】游戏事件处理系统(1)——事件收集-filebeat中,对本系统的背景、目标及技术方案进行了概述,并利用filebeat收集到日志,发送到logstash。因此,本文章将对logstash如何接收、处理、输出事件进行介绍。 logstash根据配置文件****.conf(如game-score.conf)对...

weixin_33704591的博客 284

Scratch迷宫游戏项目实战:少儿编程教学资源

本文还有配套的精品资源,点击获取 简介:Scratch迷宫游戏是一个由MIT开发的图形化编程工具制作的经典教学作品,旨在通过益智游戏形式培养儿童的编程兴趣和逻辑思维。游戏通过拖拽编程块的方式教授编程基础,如事件处理、运动控制、条件判断、循环结构、变量、函数和交互设计。孩子们可以通过这个项目深入理解编程原理,同时提升创造力和问题解决能力。 1. Scratch编程工...

weixin_42103128的博客 1364

Java基础练习选择题(1)答案

JDK是( )   A、一种全新的程序语言   B、一种程序开发辅助工具   C、一种由Java写成的,并支持Java Applet的浏览器   D、一种游戏软件  2、Java语言中下面哪个可以用作正确的变量名称( )   A、3D       B、name      C、extends     D、implements 3、构造函数何时被调用( )      A

coding1994的博客 7万+

Java游戏编程实战教程

本文还有配套的精品资源,点击获取 简介:Java语言因其跨平台特性,在游戏开发领域颇受欢迎,尤其适合轻量级游戏开发。本教程提供了一个用Java编写的jar游戏实例,帮助学习者掌握Java游戏开发的关键技术点。本教程将涵盖Java基础、图形用户界面(GUI)开发、游戏循环实现、事件处理、图形和动画制作、游戏逻辑设计、音频处理、网络编程、文件I/O操作以及性能优化等内容,为学习...

weixin_35756690的博客 1391

游戏编程:操纵杆事件处理的优化与实践

本文通过对章节内容的解读,深入探讨了游戏编程中操纵杆事件处理的优化策略。文章从具体的事件处理代码出发,分析了如何有效地管理操纵杆事件,避免无效事件的频繁触发,从而提升游戏性能和用户体验。同时,文章还介绍了如何通过状态追踪来决定是否触发事件,这是游戏库中常用且高效的方法。

weixin_42587866的博客 428

windows游戏编程<一>了解消息事件模型

本系列文章由jadeshu编写,转载请注明出处。http://blog.youkuaiyun.com/jadeshu/article/details/22309265 作者:jadeshu   邮箱: jadeshu@qq.com    欢迎邮件交流        熟悉了DOS编程的朋友会更加深了解过程化模型,在DOS环境下,应用程序是一句一句逐个执行的。程序员思考问题的方式和机器的执行顺序是

jadeshu的博客 1697

Java游戏编程:事件处理与用户界面交互

本章节深入探讨了Java AWT中事件处理的机制以及如何添加交互性。从Event类的常量定义到组件的事件传播,再到如何自定义事件处理和显示文本,本章节为游戏开发者提供了实用的指导和代码示例,帮助他们创建更富有交互性的Java应用。

weixin_29476595的博客 320

Qt 魔塔小游戏

魔塔游戏

m0_50244833的博客 2834

vscode中创建vue快捷键

1.安装Vetur插件(扩展里面直接搜) 2.vscode 界面里面左上角选则 文件=> 首选项=> 用户代码片段=>新建全局代码片段=>在输入框中新建名称为vue.json 3.删除里面的注释,当然你也可以留着,把下面的代码粘贴进去! { // Place your 全局 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // descri

Leon_940002463的博客 3207

双轮差动机器人SLAM实战:轮速里程计从建模到精度验证(附Matlab代码)

本文详细介绍了双轮差动机器人SLAM系统中轮速里程计的实现全流程,包括核心原理、建模方法、Matlab代码实现及精度验证。通过轮速仪数据建模和连续积分算法,提升定位精度,并附有完整的误差分析和工程优化技巧,为开发者提供实用参考。

weixin_29050271的博客 224

通过一个游戏编程熟悉线程操作

 继《通过一个游戏编程熟悉事件处理》http://blog.youkuaiyun.com/flyuniverse_shell/archive/2009/10/23/4719939.aspx    《通过一个游戏编程熟悉文件操作》 http://blog.youkuaiyun.com/flyuniverse_shell/archive/2009/11/02/4758566.aspx  之后 我们完成第三个目标,

flyuniverse_shell的专栏 1061

AI搜索优化(GEO)实战指南:抢占智能对话流量入口

AI SEO,是针对生成式AI平台(如DeepSeek、豆包、Kimi等)的优化策略,旨在通过适配AI算法对内容的理解和引用逻辑,提升品牌在AI生成答案中的可见性与权威性,从而在对话式搜索场景中抢占流量入口。:强化内容经验性(Experience)、专业性(Expertise)、权威性(Authoritativeness)、可信度(Trustworthiness)内容需避免夸大描述,提供可验证的细节(如数据、用户评价)。

Baixue5209的博客 6781

通过一个游戏编程熟悉文件操作

 《通过一个游戏编程熟悉事件处理》http://blog.youkuaiyun.com/flyuniverse_shell/archive/2009/10/23/4719939.aspx 已经完成了目标一,今天我们学习了文件操作,那么我们可以接着完成目标二。代码如下:import java.awt.Color;import java.awt.GridLayout;import java.awt.e

flyuniverse_shell的专栏 1043

文本→图像→视频:AIGC跨模态转换全流程解析

本文旨在系统性地解析AIGC领域中跨模态内容生成的技术原理和实现方法,特别聚焦于从文本到图像再到视频的完整转换流程。跨模态表示学习的基本原理文本到图像生成的核心技术图像到视频转换的关键算法端到端跨模态生成系统的构建方法实际应用场景和性能优化策略背景介绍:建立基本概念和知识框架核心概念:解析跨模态转换的关键技术和原理算法细节:深入讲解文本到图像、图像到视频的核心算法数学模型:提供必要的数学基础和公式推导项目实战:通过完整案例展示实现过程应用场景:探讨技术的实际应用可能性。

AI天才研究院 1353

openclaw通俗入门系列6——记忆系统

记忆 = 智能体的笔记本,分长期(MEMORY.md)和每日(memory/日期.md)。只有写到文件里的才能记住!支持语义搜索(理解意思)+ 关键词搜索,还能自动在压缩前保存重要内容。

m0_60605453的博客 403

扫雷游戏事件处理机制:Windows消息循环与Rust异步编程的完美结合

minesweeper-rs是一个使用Rust语言和windows-rs库实现的经典扫雷游戏项目,它展示了如何将传统的Windows消息循环与现代Rust编程语言相结合。本文将深入解析这个扫雷游戏的事件处理机制,探讨Windows消息循环的工作原理以及Rust异步编程在GUI应用中的实际应用。 ## 🎯 Windows消息循环:GUI应用的核心引擎 在Windows GUI编程中,**消息循

gitblog_00901的博客 865

【模型之美】3、文本聚类与智能摘要,让AI帮你做个总结

在信息过载时代,文本聚类与摘要技术成为关键工具。本文提出了一种结合OpenAI Embedding与传统机器学习的方法,实现从文本预处理到智能分析的完整流程。技术方案分为三阶段:1)通过Embedding将文本转化为语义向量;2)采用K-Means等算法进行无监督聚类;3)利用大模型生成可解释的标签和摘要。实验证明,该方法能有效提升信息处理效率,如在新闻聚合系统中自动分类10,000篇文章,准确率较传统方法提高15%。方案包含实用代码示例,涵盖文本清洗、向量化、聚类优化等关键技术细节,可应用于对话记忆、舆情

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1440

游戏开发如此简单?我直接创建了一个游戏场景【python 游戏实战 02】

前言 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。 若有想学习的内容可以在评论区留言,根据大家的要求持续更新。点赞过十万就算化成灰我也更新下一篇。(肯定不到,也会更的。) 有问题也可以在评论区留言,也可以私聊我加我好友共同交流一起进步~ 我的其它教程 教程点击进去将会有目录 《看聊天记录都学不会C语言?太菜了吧(1)我在大佬群里问基础问题没人

1_bit 的博客 5436

kylinos-SP3的软件包降级到V10-SP1中的版本

如果想再次回退到原来版本,将repo改为原来的SP3版本,然后执行yum history 查看ID号,执行yum history rollback ID就可以恢复了。此时我们发现已安装的版本是1.32-2.ky10,而sp1网络源里的版本是1.30-11.ky10,我们将降级安装网络源中的低版本软件包。近期有个客户想要把kylinos-V10-sp3的软件包降级到kylinos-V10-SP1的版本。3、以tar包为例,查看已安装版本及网络源中其他版本。1、查看系统版本,确认是V10-SP3。

太极淘的博客 1103

YOLOv11训练:Roboflow免费数据集获取与格式转换超详细教程

公共数据集库:包含超过20,000个开源数据集数据标注工具:支持在线标注和团队协作数据预处理:自动增强、扩充和格式化版本控制:像管理代码一样管理数据集版本多格式导出:支持所有主流目标检测格式import cv2# 加载图像# 加载标注# 数据增强# 调整尺寸# 调整标注坐标# 转换为Tensor# 实现保持长宽比的resize逻辑pass# 坐标转换逻辑pass# 数据增强实现pass数据集选择优先选择Roboflow上标注质量高的官方数据集。

weixin_39818775的博客 2362

bada 2D游戏编程之五——一个基于定时器的游戏循环

bada 2D游戏编程之五——一个基于定时器的游戏循环     在上篇《bada 2D游戏编程之四——设计游戏循环》中对比较常见的几种设计游戏循环的理论知识进行了阐述,下面按照bada平台的编程知识来实现一种游戏循环。实现“时间驱动”的游戏循环通常采用2种方式,一种是基于定时器的游戏循环,还有一种是基于线程的游戏循环。在本篇文章中给大家介绍如何在bada平台上实现一个基于定时器的游戏循环。

badaeva的专栏 854

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python不能做游戏?一小时做出一个游戏!

嗨喽~小伙伴们,我又来了, 一直都听他们说,python做不出好的游戏,个人是不赞同的,我只能说,python可以写游戏,但不适合。 举个最简单的例子, ...

易果啥笔的博客 5700

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++ 中的协程与 Fiber:下一代异步编程模型在游戏中的应用

C++ 中的协程与 Fiber 作为新一代异步编程模型,正在游戏开发中逐渐取代传统的回调和线程模型,解决代码维护困难、线程切换开销大和状态管理复杂等问题。协程通过编译器支持实现轻量级挂起与恢复,而 Fiber 则通过用户态切换提供自定义调度能力。两者在资源加载、AI 逻辑、网络事件处理等场景中表现出色,显著提升了代码的可读性和执行效率。尽管跨平台支持存在差异,但通过优化和封装,协程与 Fiber 已成为游戏引擎中异步架构的核心技术,未来将进一步与 ECS 和 Job System 结合,推动游戏开发向更高效

轻口味的专栏 2798

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

基于Java编程的扫雷游戏项目

Java是目前世界上最流行的计算机编程语言,是一种可以编写跨平台应用软件的面向对象的程序设计语言,也是当今使用率最高的编程语言。Java有着自己独特的优势:语言简单、是一个面向对象、分布式应用并且安全、体系结构中立并且可移植,最重要,它是一个动态语言。Java自1995年问世以来,因其卓越的通用性、高效性、平台移植性和安全性等特性,成为全球范围内应用范围最广的开发语言,而且即使历经十余年发展仍然在行业内保持着“常青树”的地位。Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。

weixin_52613545的博客 2059
上一篇: java 第七次课--图形用户界面概述补充(事件处理)
下一篇: Java第八次课-Applet程序设计
flyuniverse_shell
博客等级 码龄18年 119粉丝 121原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值