首页 > 其他分享 >EECS 1720简单线程探索

EECS 1720简单线程探索

时间:2024-03-22 15:56:52浏览次数:27  
标签:EECS 实验室 IBlock 网格 1720 旋转 线程 方块 构造函数

LAB 6::探索和使用鼠标事件、键事件和简单线程(计时器)先决条件-实验室1-5实验室资源:
Java API:https://docs.oracle.com/javase/8/docs/api/
Java Swing:https://docs.oracle.com/javase/tutorial/uiswing/components/index.html
**事件/事件处理程序接口的Swing层次结构提醒。
步骤1:导入存档项目
在这一步中,您将把一个归档的项目导入Eclipse工作区(的文件嵌入每个实验室练习)。每个问题都指向一个单独的java文件。这个以下文档中包含了每个问题所需内容的说明(STEP2以后)。为此创建一个单独的工作空间(例如“EECS1720”)是个好主意课程
a.您可以从上面的链接下载实验室项目文件(请参阅参考资料)这个文件是一个zip文件,也称为归档文件。单击下面的链接打开浏览器中的URL。在打开的对话框中,选择“保存”,而不是“打开”。此文件是通常保存到您的主页或下载文件夹中。
b.打开Eclipse并导入此归档文件重要提示:此过程与您将在实验室测试中使用的过程相同,因此请确保你遵守它,这样你就不会在提交过程中遇到困难实验室测试。不要双击要打开的文件。通过导入此项目,您将把它添加到您的EECS1720工作空间中。执行此操作的方法:
i.打开Eclipse(应用程序→ 编程→ Eclipse)设置/选择您的工作空间
ii。关闭“欢迎”选项卡,然后导航到“文件”→ 进口→ 全体的→ 现有的项目到工作区。点击“下一个”
iii.选择存档文件(您在(a)中下载的zip文件)。选择后,点击完成后,该文件将作为项目在project Explorer中打开。
iv.我们现在准备好进行实验室练习。
第2步:实验室练习
俄罗斯方块是一款益智游戏,玩家可以移动和旋转下落的方块各种形状。游戏的目标是在不留下任何空隙的情况下堆叠积木块之间。在这个实验室中,你将完成与为我们在俄罗斯方块的典型游戏中看到的“方块”建模,并将添加一些简单的基于事件的处理(对按键和鼠标),以允许“操纵”这些块(旋转/移动),以及设置块动画的一些基本功能。如果你以前从未玩过俄罗斯方块,这里有一个维基,里面有很多关于游戏有7个标准区块(称为Tetriminoes)。块都定义在尺寸为3乘3或4乘4的正方形网格。图1:俄罗斯方块游戏(游戏场地)在这个实验室里,你会得到一个类BlockGrid,它可以帮助你描述块的形状。
BlockGrid允许您获取、设置和清除各个网格位置。代 写EECS 1720网格位置是使用一对从零开始的整数索引(行索引和列索引)指定。下图显示了3乘3区块网格上每个网格位置的索引:每个块的形状都可以使用BlockGrid对象来表示。上图(右)显示了一个S块的BlockGrid;白色网格位置的值为false
并且绿色网格位置具有值true。玩家可以将方块旋转到4个可能的方向中的任何一个。以下数字显示了I区块、J区块和S区块的4种可能方向。列A显示块的起始方向。B列显示了旋转后的块向右一次。C列显示了再次向右旋转后的块。D列显示了再次向右旋转后的块。旋转blocks再次将blocks返回到列A。如果玩家向左旋转blocks从A列开始,方向由D列给出,然后由C列给出,然后是列B,返回到列A。俄罗斯方块游戏场通常是一个有20行10列的格子。的位置场上的块由其网格左上角的坐标给出。图像下面示出了在运动场上具有位置(6,14)的J块。对于这个实验室,您将首先完成三种类型的块的实现:IBlock,
Block和SBlock。所有俄罗斯方块都有三个基本特征:(1)它们可以绘制在赛场上;(2) 它们可以被移动;(3) 它们可以旋转。每种类型的块所需的信息,例如块在比赛场地、方块的颜色和方块的形状;该信息可以是由所有块都将扩展的抽象基类Block管理。关系类之间的关系如以下UML图所示:
请注意,在上面的定义中,Block类已经为您完成,但是您将需要完成子类(IBlock、JBlock和SBlock),即它们构造函数,以及spinLeft()和spinRight()方法的重写版本。请参阅关于抽象类的笔记(以及本实验室的视频演练)-在实验室录制会话,并发布在eClass上。本质上,抽象类是一个显式声明为“抽象”的类,并且可以具有一个或多个也可以声明为“抽象”的方法。这意味着抽象方法只被声明(并且没有被定义)。因此,抽象类起作用很像一个接口(也有部分定义)。对于任何抽象功能,都需要通过儿童班。因此,如果一个子类扩展了一个抽象类,为了使其完全具体,它必须对继承的每个抽象特性都有一个完整的实现。只有具有的类完整的实现可以实例化为对象。在这个实验室中,我们想实例化每个子类(作为块的具体子类型)。练习01在这个实验室中,第一个任务是完成子类(IBlock、JBlock和SBlock)。要完成Block子类,首先需要完成的构造函数IBlock、JBlock和SBlock类,以及它们的spinLeft()和spinRight()方法。您还需要完成抽象Block类中的moveDown方法(请参阅供参考的其他移动方法)。Block的构造函数已作为引用为您完成。请注意,该图显示了上面的IBlock的旋转版本(本文档第3页的底部),构成构造函数的基础,该构造函数利用现有的BlockGrid类实例化并存储4个独立的BlockGrid,以在旋转时保持IBlock的形状。
这些都存储在一个名为“网格”的ArrayList中。还有一种颜色、位置,块网格大小和与每个块相关联的网格索引(使用其中一些变量
以初始化父级的类字段)。gridIndex是一个变量,用于指示哪个版本的当前表示IBlock(因此值0表示第一个状态(上图中I块的水平或A位置),而网格索引3表示IBlock的最后一个D位置)。SBlock和JBlock类也是如此(尽管它们的状态指的是3x3块如前一张图所示,位于本文档第3页底部)。首先完成类IBlock、JBlock和SBlock的构造函数,然后运行TetrisBlockDemo.java文件,如果有效,则应在比赛场地的顶端。每次运行时,都会显示不同的块(运行足够
确认所有3个块初始化的时间,并根据位置A。提示:JBlock和SBlock的构造函数应该创建3x3(而不是4x4)GridBlocks,然后应该使用mutator(setter)为块的每个旋转版本设置适当的网格正方形。spinLeft()和spinRight()方法对于所有块应该是相似的,因为它们都包含4个要在其中切换的状态。A=>D如果
向左旋转,如果向右旋转则D=>A(对于所有块)。此外,您可以在完成构造函数(因为稍后将通过事件处理触发旋转行为)
在剩下的练习中,您将使用TetrisBlockDemo.java文件,位于以便添加管理用户与键盘交互的功能(按键事件),作为
以及鼠标,然后最终管理落在游戏场地上的块的动画(在它从底部的应用程序窗口掉下来后重新生成之前)。这不是完成俄罗斯方块的实现,但只是添加了一些交互并测试了这种交互用于在俄罗斯方块游戏中摔倒时管理障碍行为。无行为处理块如何在底部聚合/连接以得分
这个实验室。练习02(使用KeyEvents管理块的spinLeft/spinRight行为)在本练习中,您将完成的KeyListener接口的实现TetrisBlockDemo类。注意,这是为您启动的(可以是提供了所使用的)。该行为应看到以下按键执行以下操作:
“Z”键=>按下时,应将块(存储在块类字段中)向左移动1格position(即应该调用块的moveLeft()方法)
“X”键=>按下时,应向右移动块
“,”键(逗号键)=>应向左旋转块
“.”键(句点键)=>应向右旋转块
“SPACE BAR”key=>应设置将isFalling状态从true切换为false,或从false切换为
rue(此字段将用于练习04。
**请记住,KeyListener最好是针对JFrame注册的(并且应设置为具有焦点。请参阅课堂讲稿了解更多信息。通过运行TetrisBlockDemo.java测试您的实现

标签:EECS,实验室,IBlock,网格,1720,旋转,线程,方块,构造函数
From: https://www.cnblogs.com/rluanguae/p/18089671

相关文章

  • 限流器(流控)+ 线程 C++实现
    在C++中,你可以使用互斥锁(mutex)和条件变量(conditionvariable)来实现一个简单的限流器(流控)以及线程。下面是一个简单的例子,它创建了一个限流器类,该类允许一定数量的线程同时访问某个资源。#include<iostream>#include<thread>#include<mutex>#include<condition_variable>......
  • QT增加线程函数步骤流程
    在使用线程的时候,不仅要关注线程开启的时机,同时还要关注线程安全退出,这样才能保证程序的健壮性,如果线程开启的较多,且开启关闭比较频繁,建议使用线程池来处理。开启线程有三种方式:第一种C++的开线程方式;第二种自定义一个继承自QObject的类,把要处理的事情放在这个类中实现,然后再ne......
  • 数据清洗使用Parallel 多线程
    一.概述在开发数据清洗时,ES数据集有600w条,每一条的子对象又有几十条,需要拿到子对象去重后的集合,使用分批提取ES数据,共535批。开始使用List来操作,关键代码如下:varspecListAll=newList<SpecInfo>();for(inti=0;i<batchCount;i++)......
  • 多线程并发聊天室简单实现代码详解 -- 涉及网络编程,多线程和线程同步的知识
            本项目主要完成多线程并发聊天室的基础功能,即多个客户端之间通过服务器可以实现群发消息,重点在于学习网络编程,多线程和线程同步的基础知识(基于Linux)。    下面我会详解每一部分的代码。1.主线程        1.1首先由于是自己在电脑里面测试,......
  • 一个基于配置文件构建有向无环图,并多线程运行图上节点的例子
    #include<iostream>#include<memory>#include<thread>#include<vector>classNode{public:virtualvoidshow()=0;virtualboolhasFinished(){returnhas_finished_;}protected:boolhas_finished_=false;};classA......
  • CSIE3310操作系统线程包问题
    机器问题1-线程包CSIE3310-操作系统:100TA时间截止日期前10:00-12:00,中船重工R428号楼目录1摘要12环境设置23第1部分(60分)23.1功能说明。2.3.2样本输出。3.4第2部分(40分)44.1功能说明。4.4.2提醒。4.4.3样本输出。5.5运行公共测试用例56提交和分级56.1源代码。5.6.2解压缩后的文件夹......
  • C# 多线程锁
    C#多线程锁分类lock(Monitor):lock是C#中的关键字,它实际上是Monitor类的一个简化版本的语法糖。使用方式:lock(obj){//代码块},其中obj是一个对象引用,所有线程都试图获取该对象的互斥锁。功能:确保同一时间只有一个线程可以进入受保护的代码块。应用场景:适用......
  • 多线程:乐观锁
     悲观锁:一上来就加锁,没有安全感。每次只能一个线程进入访问完毕后,再解锁。线程安全,性能较差!乐观锁:一开始不上锁,认为是没有问题的,大家一起跑,等要出现线程安全问题的时候才开始控制。线程安全,性能较好。为什么出现线程安全问题?100个线程每个加100次应该加10000次才对;因为......
  • Java并发编程:第四章 线程池(Executor框架)
    文章目录一、为什么需要线程池1、线程的创建2、线程销毁二、优点1、降低资源消耗2、提高响速度3、线程管理三、架构说明四、Executors工具类1、介绍2、Executors工具类常用的方法(1)newFixedThreadPool(intnThreads):(2)newCachedThreadPool()(3)newSingleThreadExecutor()......
  • Java-Java基础学习(3)-多线程(1)
    Java-Java基础学习(4)-多线程(1)3.多线程在Java中,多线程主要的实现方式有四种:继承Thread类、实现Runnable接口、实现Callable接口经过FutureTask包装器来建立Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。3.1.四种创建方式Threadclass==>......