俄罗斯方块程序设计原理.doc_第1页
俄罗斯方块程序设计原理.doc_第2页
俄罗斯方块程序设计原理.doc_第3页
俄罗斯方块程序设计原理.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

首先自我介绍下,如果您对我不感兴趣,请直接跳过这段。我的真名叫李志刚,河南科技大学计算机05级,平时就喜欢写程序。大三上学完了C#,想找点东西练手,就写了这个程序,这是我第一次写超过了2K行的程序。如果您是个程序老手,那么,没必要在这听我罗嗦,我想的很简单,对您没什么参考价值。但我相信,还是有很多和我一样的学生朋友。我想,全国的二流大学的计算机专业的情况应该是一样的(我真不想再多说,这些抱怨话在大一,大二时应该都讲完了,再说下去就没意思了,走好以后的路才重要),因为我也是这样学校中的一员,我就从没指望靠学校能找到工作。我只有靠自己的实力了,我没得选。想和我做朋友,请加我QQ 437004168 好了,不罗嗦了,我把我的设计原理尽量讲清:首先,俄罗斯方块游戏中的基础是Block(方块),而Block(方块)又是由Brick(砖块)构成,所以,我在程序中就设计了这两个类:Class Block 和 Class Brick。先说说Class Brick :private class Brick /方块的基础:砖块.设砖块都为正方形 static private int side; /砖块的边长 private int x; /砖块的X坐标 private int y; /砖块的Y坐标 private bool filled; /砖块是否被填满 再来看Class Block:以下面的形状为例:/方块Block由一个二维数组4*4来存储形状,方块有极端位置,因为平移,旋转,下移都和这几个极端位置有关/游戏中的基本元素-方块private class Block private Brick , Shape;/方块是由几个砖块构成的 /方块的最左,最右,下,上,都是一个平面内的点 private Point left; /方块的最左边 private Point right; /方块的最右边 private Point top; /方块的最顶部 private Point bottom; /方块的最底部 private int type; /方块的形状 public Block() /新生成一个方块,随机产生形状 public bool CanMoveDown() /方块是否能继续下移 public bool CanMoveLeft() /方块能左移动 public bool CanMoveRight() /方块能右移动 public bool CanRotate() /方块能否顺利旋转 public void DrawBlock(Graphics g) /画方块public int GetBrickX(int i, int j) public int GetBrickY(int i, int j) /查看方块中指定坐标的砖块的位置public bool IsFilled(int i,int j) /查看方块中指定坐标的砖块是否被填充 public void MoveBlock(int KeyCode) /移动方块public void MoveToCenterScreen() /把方块平移到屏幕中间,用于居中显示每个方块,都有共同的行为:移动、画方块。关键在移动方块,有左移、右移、下移、上移(旋转方块),而移动方块时,有要考虑这个方块能否移动,当方块处于边界时不能移,当方块下面有方块了也不能移。所以我就设计了如public bool CanMoveDown() 方法来判断方块能否移动,具体代码看原程序。设计好这两个类后,这个程序也就基本出来了。我把游戏的界面分成20*15的单元,用一个二维数组Game20,15存储,当Gamei,j=1,说明这个单元格被一砖块填充。在设计好结构后,再来看看程序的流程:在事件Form1_Shown中,添加代码,NewGame()即新建游戏,让上面的单元格都为0,即Gamei,j=0,然后是timer1.Start();private void Form1_Shown(object sender, EventArgs e) NewGame(); 下面的代码是最重要的部分:定时器功能,每隔一段时间根据游戏的当前状态对整个屏幕进行重绘private void timer1_Tick(object sender, EventArgs e) /如果当前的方块不能再往下移动 if (!CurrentBlock.CanMoveDown() for (int i = 0; i 4; i+) for (int j = 0; j 4; j+) if (CurrentBlock.IsFilled(i, j) GameCurrentBlock.GetBrickX(i, j), CurrentBlock.GetBrickY(i, j) = 1; ClearLine(); /消去填满的行 /下一个方块变为当前活动方块 CurrentBlock = NextBlock; CurrentBlock.MoveToCenterScreen(); /再新产生一个方块作为下一个方块 NextField.Refresh(); NextBlock = new Block(); NextBlock.DrawBlock(NextField.CreateGraphics(); if (CurrentBlock.CanMoveDown() GameMainField.Refresh(); FullGameField(); CurrentBlock.DrawBlock(GameMainField.CreateGraphics(); CurrentBlock.MoveBlock(40); if (GameIsOver() /游戏结束 timer1.Stop(); FullGameField(); MessageBox.Show(Game Over); 如果当前活动的方块不能再住下移动if (!CurrentBlock.CanMoveDown(),就让数组GameCurrentBlock.GetBrickX(i, j), CurrentBlock.GetBrickY(i, j) = 1;同时消去被填满的行,下一个方块变为当前活动方块,再新产生一个方块作为下一个方块如果当前活动的方块能再住下移动if (CurrentBlock.CanMoveDown(),让当前活动方块下移一个单元,再重绘游戏界面如果游戏结束if (GameIsOver()即方块到了最

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论