(河北大学 河北 保定 071000)
有关俄罗斯方块的设计
齐子欢
(河北大学河北保定071000)
俄罗斯方块是一个很经典的小游戏,简单有趣。本次实验主要是设计一个易操作且界面美观的一款俄罗斯方块游戏。俄罗斯方块的设计工作对我这样的初学者来说有很大的挑战性,整个过程种包含的内容多,涉及的知识广泛,在设计的过程中也实现了知识的应用,有利于学习框架的建立。
本次设计可分为游戏设置、控制、帮助、场景、界面设计几大模块来描述
游戏设置模块:游戏设置主要实现的功能有速度设置、背景颜色设置、方块颜色设置、恢复默认设置以及退出游戏的设置。速度设置分为了慢、中、快三个等级,从而来改变游戏的难易程度;背景颜色设置主要指的是场景的背景设置,通过添加了colordialog这个控件来进行颜色的修改;方块颜色设置可以对7种组合方式进行颜色的自由搭配,选中该组合即可进行前景色和背景色的改变从而实现一种美观的渐变效果。
控制模块:主要对游戏过程进行控制,包括开始、暂停、重新开始、结束等操作功能的实现。
帮助模块:涉及到键盘操作的一些指示性的指令。向下、向左、向右、向下加速对应的按键。
场景模块:主要包括正在运行的俄罗斯方块和随机出现的下一个方块,正在运行的俄罗斯方块可以通过控制模块和键盘的按键来进行一系列的操作。
界面设计:整个界面颜色的主要以同类色为主,使整个画面感更和谐。界面设计的风格以活泼为主,符合游戏本身的特点,简单有趣。
游戏主要由四部分组成:square类,block类,gamefield类,游戏引擎
Square类 描述的对象是组成大方块中的每个小正方形实体;
定义square类之后在这个cs中创建Graphics类的对象g 并进行实例化,以及进行毛刷类GraphicsPath、矩形类Rectangle、颜色类Color、渐变类PathGradientBrush等对象的定义和实例化。从而来实现画方块(主要起作用的类有Graphics、GraphicsPath、Rectangle)的操作,并对其进行渐变式颜色的填充。之后进行擦出方块,主要利用的原理是有场景的背景色对方块进行填充。
block类描述的对象是某一个大方块的实体。每个大方块由四个小正方形组成,一共有7中组合方式。这个类需要实现一个大方块实体所有的属性和动作,包括:方块的形状、位置、方块左移、右移、下移、旋转等。
class Block
{ public Square square1;?//组成block的四个小方块public Square square2;public Square square3;public Square square4;private const int squareSize = GameField.SquareSize;?//小方块的边长
方块的形状:public enum BlockTypes//一共有7种形状{ undefined = 0,square = 1,line = 2,J = 3,L = 4,T = 5,Z = 6,S = 7};
移动的代码:(左移、下移同理)
public bool right()//检测是否可以右
{ if(GameField.isEmpty(square1.location.X / squareSize +1,square1.location.Y / squareSize)&& GameField.isEmpty(square2.location.X / squareSize +1,square2.location.Y / squareSize)&& GameField.isEmpty(square3.location.X / squareSize +1,square3.location.Y / squareSize)&& GameField.isEmpty(square4.location.X / squareSize +1,square4.location.Y / squareSize))
{ Erase(GameField.winHandle);
square1.location = new Point(square1.location.X + squareSize,square1.location.Y);
square2.location = new Point(square2.location.X + squareSize,square2.location.Y);
square3.location = new Point(square3.location.X + squareSize,square3.location.Y);
square4.location = new Point(square4.location.X + squareSize,square4.location.Y);Draw(GameField.winHandle);return true;} else //如果不能右移了{ return false;}
gamefield类所描述的对象是游戏场景实体,在其中进行了场景的背景色,大小,方块是否还可以移动等的设置。
游戏引擎,就像一个发动机一样让游戏不间断运行。本游戏中就是让方块以一定的速度下落,并响应键盘事件,实现左右移动,和向下加速的一些功能。
声音播放:使用一个using System.Media来定义一个播放声音的命名空间,然后创建一个soundplayer的对象,用soundlocation属性设置声音文件的地址,然后调用play()方法即可进行播放。
/*播放声音*/ public static void PlaySound(string soundstr)
{switch(soundstr){ case "FinishOneLine"://消除一行的声音 if(!File.Exists("FinishOneLine.wav"))return;sound.SoundLocation = "FinishOneLine.wav";break;case "CanNotDo"://当无法操作时if(!File.Exists("CanNotDo.wav"))return;sound.SoundLocation = "CanNotDo.wav" break;} sound.Play();}
(一)首先要定义一个类来描述组成每一个大方块的小正方形实体;
(二)进行Graphics类、毛刷类GraphicsPath、矩形类Rectangle、颜色类Color、渐变类PathGradientBrush从而进行小方块的颜色的填充,完成一个小正方形实体的构造;
(三)进行大方块进行定义,每四个小正方形组成一个大方块,并通过调节小正方形在位置来形成7中大方块的组合形式,大方块便是出现在主页面场景中的一个个组合;
(四)进行按键方面的指定和一些操作上的限制,例如是否还可以右移、左移、下移,当不能移动时出现声音提示;暂停、重新开始分别用键盘上的空格和回车进行实现;
齐子欢(1995-),女,汉族,河北邯郸人,学生,本科,河北大学教育学院教育技术学专业,研究方向:教育技术学。