为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

俄罗斯方块设计思路

2017-09-26 6页 doc 18KB 38阅读

用户头像

is_890199

暂无简介

举报
俄罗斯方块设计思路俄罗斯方块设计思路 1.方块类:每个方块都要记录自己的ID、形状。形状采用4对整数坐标来表示,分别记录其4个小方块的相对位置(以方块内或旁边任一点为中心,称为参考点)。建议可以在方块类中定义一个或多个private static数组,将每种ID的方块的形状数据存储好(都是一些固定的数据),这样产生一个方块时只需要提供其ID即可。 为了处理方块的旋转,我们不能只记录上述7种方块,而应该把它们旋转后产生的每种形状都 对坐标都不同),然后在方块ID之间建立映射关系,即认为是一种不同的方块(因为它们的4 哪种ID的方块旋转后变成哪...
俄罗斯方块设计思路
俄罗斯方块思路 1.方块类:每个方块都要记录自己的ID、形状。形状采用4对整数坐标来示,分别记录其4个小方块的相对位置(以方块内或旁边任一点为中心,称为参考点)。建议可以在方块类中定义一个或多个private static数组,将每种ID的方块的形状数据存储好(都是一些固定的数据),这样产生一个方块时只需要提供其ID即可。 为了处理方块的旋转,我们不能只记录上述7种方块,而应该把它们旋转后产生的每种形状都 对坐标都不同),然后在方块ID之间建立映射关系,即认为是一种不同的方块(因为它们的4 哪种ID的方块旋转后变成哪种ID的方块,只要求处理一个方向的旋转。这个映射关系也可以用private static数组来实现。 此外,方块类还要记录自己的参考点在指定的游戏区域中的位置。 方块类主要操作:(自行决定哪些为public哪些为private) 构造函数:参数至少有:ID和参考点初始坐标。 填充:把自己填充到指定的游戏区域中。返回填充成功或失败的信息。 清除:把自己从指定的游戏区域中清除。 移动:在指定的游戏区域中移动,包括向左、右、下移动,以1个单元格为单位。如果可以移动,则修改参考点的位置,并在指定的游戏区域中重新填充自己(先清除、然后修改参考点位置,再填充)。返回是否移动成功的信息。 旋转:在指定的游戏区域中旋转一次,此时参考点位置不变,但要改变自己的ID,然后在指定的游戏区域中重新填充自己(先清除、然后修改参考点位置,再填充)。 获得占用行:返回本方块4个小方块所占用的各行,可能有1,4行,要返回每一行的行号(1,20)。这些数据可用参考点位置与自己的4对坐标计算出来。 2.游戏区域类 其主要属性:游戏区域数据,可以用一个二维数组方便地实现。状态:游戏未开始(初态)和游戏已开始。 主要操作为:(自行决定哪些为public哪些为private) 游戏区域读写:指定游戏区域的一个单元格坐标后,返回或设置单元格的值。 绘制:清除屏幕后将游戏区域绘制出来。 命令处理:命令为一个字符串,格式自定。要求实现如下命令: 游戏开始:注意:只有在游戏未开始状态才能执行该命令~当接收到此命令时,将状态切换为游戏已开始。先初始化游戏区域(全空格),然后利用随机数产生一个新的方块ID,并根据此ID和一个初始单元格坐标(在游戏区域的上部中间的位置)产生一个新的方块(称为活动方块),并将此方块填充到本游戏区域中(所以本游戏区域应该作为方块类大部分操作的参数),然后绘制本游戏区域。 注意:以下各命令只有在游戏已开始状态才能执行~ 方块左移、右移、旋转:对活动方块调用相应的操作,不论是否能移动成功都重新绘制本游戏区域,如果移动失败绘制完毕后给出文字提示信息。为增加游戏难度,可以在执行几次左右移或旋转后自动执行“方块下移”命令。 方块下移:对活动方块调用相应的操作,如果移动成功,则重新绘制本游戏区域后操作结束,如果移动失败,则说明方块已经掉到最下面,需要执行方块落地操作。 方块落地: 先执行清行操作:获得活动方块占用了哪些行的信息,然后逐行进行扫描:对每一行,检查其10列单元格是否都已经被填充,如果没有,则继续检查下一行,如果是,则将该行以 上(不包括该行)的游戏区域整体下移一行,并在最上面一行填充一行空格。可以从上往下检查,也可以从下往上检查。可以每清除一行就重新绘制一次游戏区域,获得动画效果。 执行完清行操作后,要产生下一个方块,方法类似于“游戏开始”命令中的步骤,此时要把活动方块指定为新产生的方块,而且还要检查新产生的方块是否能成功填充,如果填充失败,说明游戏结束,此时将游戏区域状态恢复为游戏未开始,抛出异常通知游戏结束(类型自定),但在本类内不处理该异常,让类的使用者处理。 3.程序总体 程序运行后,生成一个游戏区域类对象,然后不停地接收用户输入的命令,并进行处理。命令格式自定。 游戏开始命令。此命令被转发给游戏区域处理。 退出命令。用户可随时退出游戏,不需要转发给游戏区域处理,直接退出程序。 方块左移、右移、旋转、下移命令:转发给游戏区域处理。注意,由于此时游戏区域对象的函数可能会抛出异常表示游戏结束,所以需要捕获这些异常。捕获到异常时说明游戏结束,此时提问用户是退出还是继续游戏,用户要求退出则退出程序,如果要求继续游戏则执行一次“ 游戏开始命令”即可。 整个游戏分为两个部分 1.渲染 渲染部分很简单。用一个二维数组模拟屏幕上的网格,数组下标表示网格的坐标。值为1表示有方块,值为0表示没有方块。遍历这个数组,当遇到1时,在屏幕上相应的网格中绘制方块。什么时候渲染,有5中情况会改变数组的状态,上、下、左、右键(改变位置),空格键(改变方块方向),方块每隔一段时间自动下落。当数组状态改变时就应该渲染。 2.逻辑 主要三个部分: 1)判断方块是否能够移动 当按下向下的按键时,要判断方块是否能往下移动。同理,按其他键时也要判断是否能按照给定的方向移动。可以先根据状态变量,把当前的动态方块清0。模拟下一个状态,判断这个状态是否合法(既用该状态表示的方块是否已经在数组中存在),还原数组(因为之前为了计算,把动态方块清0了),返回“是否合法” bool canMove( char action ) { int tempX = px, tempY = py, tempState = state; // px,py, state 表示当前的状态 clearArray( blockName, state, px, py ); switch( action ) { case 'l': tempX--; break; case 'r': tempX++; break; case 'd': tempY++; break; case 'c': tempState++; if ( tempState > 3 ) tempState = 0; break; default: break; } bool result = testPosition( blockName, tempState, tempX, tempY ); // 判断位置是否合法 recoverArray( blockName, state, px, py ); // 还原数组 return result; } 2)判断是否满足消去条件 这个算法很简单。不说了。 3)根据方块的状态填充数组 俄罗斯方块中方块一共有7种组合,每种有若干方向。 而方块分为两种,一种固定的,一种动态的(正在下落) 动态方块可以用几个变量标记:方块名,方向,坐标。根据这几个变量就可以在数组中 定位方块的值。 主要流程: 现在有方块名,方向,坐标,三个状态。 每隔n秒 如果( 方块能向下移动 ) 坐标向下移动一格 根据方块状态填充数组 否则 方块名更新 判断是否满足消去条件 判断是否游戏结束 渲染屏幕 侦听到向下的方向键被按下 如果( 方块能向下移动 ) 坐标向下移动一格 根据方块状态填充数组 侦听到改变形状按键被按下 如果( 方块能改变方向 ) 方向改变 根据方块状态填充数组 „„(左右按键略)
/
本文档为【俄罗斯方块设计思路】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索