- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
三天教你做俄罗斯方块
小花朵 2010-07-12
序言
大学学C#的时候做了一个俄罗斯方块,发现挺多新手都想牛刀小试一把,我就重写了一遍,并写了这份文档教程,如果你理解快的话,三天就能做出来你的俄罗斯方块了。
先看一下我的俄罗斯方块吧,游戏规则估计不用多说了,我的俄罗斯方块的特色是有美女脱衣表演哦,每升一级,美女就脱一件衣服哦!另外,你还可以自己设定各个参数,包括游戏窗口的大小,按键,背景音乐,甚至自定义砖块样式。
第一部分:基础知识
了解认识GDI+
GDI+的技术是建立在GDI上的。GDI+提供了一个抽象层,隐藏了不同视频卡之间的区别,这样就可以调用windows AIP函数完成指定的任务了
GDI+由.NET基类集组成,这些基类可用于在屏幕上完成定制绘图,能把合适的指令发送到图形设备的驱动程序上,确保在监视器屏幕上显示正确的输出,这里的输出包括打印到硬拷贝中。
表1-1列出了GDI+基类的主要命名空间
表 1-1
命名空间 说明 System.Drawing 包含与一类绘图功能有关的大多数累、结构、枚举、委托 System.Drawing.Drawing2D 为大多数高级2D和矢量绘图操作提供了支持,包括消除锯齿、几何转换和图形路径 System.Drawing.Imaging 帮助处理图像(位图、Gif文件等)的各种类 System.Drawing.Printing 把打印机或打印预览窗口作为输出设备时使用的类 System.Drawing.Design 一些预定义的对话框、属性表和其他用户界面元素,与在设计期间扩展用户界面相关 System.Drawing.Text 与字体和字体系列执行高级操作的类
在GDI+中,设备环境(DC)包装在.NET基类System.Drawing.Graphics中。大多数绘图工作都是调用Graphics的实例来完成的。实际上,因为Graphics类负责处理大多数绘图操作,所以GDI+中很少有操作不涉及到Graphics实例。理解如何处理这个对象是理解如何使用GDI+在现实设备上绘图的关键。
绘制图形
下面用一个小示例来说明如何在应用程序的窗口中绘图(文章所有的示例都在Visual Studio 2005 中建立为C#的Windows应用程序)。启动VS2005,创建一个windows应用程序的项目,语言是C#,名字为Tetris(俄罗斯方块),然后切换到代码视图,在构造函数的最下面追加如下代码:
运行程序,我们期待的结果是在窗体上出现一个蓝色的矩形和一个红色的椭圆,但是实际运行结果呢?什么都没有显示,这是什么原因呢?原因就是在构造函数里执行画图代码的时候,窗口还没有显示出来,也就是说,还没有可以提供绘图的地方,所以,我们要看到期待中的蓝色矩形和红色椭圆,就必须在窗口显示出来以后再执行才能看到效果。
知道了原因我们也就知道解决方案,回到设计视图,添加Form_Shown事件,通过下面的提示我们知道这个事件发生在窗口第一次显示的时候。然后我们把代码移动到Form_Shown事件中,再次运行一下程序,接下了就是见证奇迹的时刻了。
期待中的蓝色矩形和红色椭圆如期出现了,矩形的坐标(0,0),大小(50,50)。椭圆的坐标(0,50),大小(80,50)。需要提醒一下的是如果是椭圆,则是外接矩形的坐标。这里坐标(x,y)表示从窗口的客户区域左上角开始向右的x个像素,向下y个像素——这些是现实出来的图形的左上角的坐标。
外面注意到椭圆的顶部和矩形的下边有轻度的重叠,这与代码中给出的坐标有点不同,这是因为windows在重叠的区域放置了巨星和椭圆的线条。在默认情况下,windows视图把图形边框所在的线条放到中心位置——但这并不是总能做到的,因为线条是以像素为单位来绘制的,但每个图形的边框理论上位于两个像素之间。结果1个像素宽的线条就会正好位于图形顶边和左边的立面,而在右边和底边的外面。这样,从严格意义上讲,相邻的边框就会有1个像素的重叠。由于我们制定的线条宽度比较大,因此重叠区域也就比较大了。一般来说,可以设定Pen.Alignment属性来改变默认的操作方式,但这里使用默认的操作就足够了。
接下了我们会发现一个问题,如果把这个窗口的绘图部分用别的窗体遮住,或者移动到屏幕的外边或者最小化,再恢复它,会发现绘制好的图形就不见了或者部分不见了。
这是怎么回事?这个就要从windows处理屏幕数据的方式来说起了。如果窗口的一部分被隐藏了,windows通常会立刻删除与其中显示的内容相关的所有信息。这是必须的,否则存储屏幕数据的内存量就会是个天文数字。按照1024x768像素,24位彩色模式,屏幕上的每个点(像素)就会占据3个字节(byte),整个屏幕需要2.25M
文档评论(0)