c# winform打砖块教程
为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持。
Winform打砖块游戏制作step by step第一节---主界面搭建
1、主界面截图
2、该窗体主要包含了以下控件:private System.Windows.Forms.Panel panel1;//顶部紫色背景的定制标题栏private System.Windows.Forms.Label lbClose;//一个label,Text为X,用来模拟关闭按钮private System.Windows.Forms.Panel panel2;//panel1下面的一个panel,用来放置表达分数的控件private System.Windows.Forms.Label label1;//放置分数2个字private System.Windows.Forms.TextBox textBox1;//用来显示具体的分数
3、Form1(主窗体)的属性设置注意黑色粗体部分的属性设置BackColor---Black//背景置成黑色FormBorderStyle---None//去掉窗体四周的边框Size = (392, 600);//宽392,高600StartPosition --- CenterScreen;//窗体弹出到屏幕中心
4、panel1的属性设置主要是背景色设为紫色,Dock---Top是指该panel停靠在窗体的顶部,size是392宽,23高
5、其余控件的属性设置,请参考代码,自行研究。本节代码下载:http://files.cnblogs.com/ice-river/csharp%E6%89%93%E7%A0%96%E5%9D%97%E6%B8%B8%E6%88%8Fstepbystep%E7%89%88%28%E7%AC%AC%E4%B8%80%E8%8A%82%29.rar
一篇文章让你彻底弄懂WinForm GDI 编程基本原理
1、GDI编程原理GDI(Graphics Device Interface,图形设备接口),主要负责Windows系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。GDI的常用对象有Graphics、Pen、Font、Brush等。在GDI的所有类中,Graphics类是核心,在绘制任何图形之前,一定要先创建或得到一个Graphics类的对象。那么什么是Graphics呢?可以将Graphics对象理解成一个画图环境,这个画图环境包括:要画在什么东西上,用什么画(什么颜色,类型的画笔,画刷),怎么画(画圆形还是方形等等)。
2、两种得到Graphics对象的主要方法1.使用窗体或控件的CreateGraphics方法,无论是Form还是button,textbox等控件均可调用,用哪个对象调用的就表明要画在哪个对象上。button1的事件处理函数中:Graphics g = this.CreateGraphics(); //画一个椭圆 g.DrawEllipse(Pens.Red, 100,100, 50, 50);// g.Dispose();注意这里g = this.CreateGraphics()this代表的是form窗体本身,所以表明现在要在form上进行作图,(100,100)是相对于form窗体左上角点的偏移。所以结果看到的就是左上边那个圆形。button2的事件处理函数中:Graphics g = this.button2.CreateGraphics(); //画一个椭圆 g.DrawEllipse(Pens.Red, 50, 50, 50, 50); g.Dispose();和上面button1唯一不同的地方在于Graphics对象的获取办法:Graphics g = this.button2.CreateGraphics();注意,这回我们是用button2对象调用的CreateGraphics()方法,表明现在要在button2上进行作图,(100,100)是相对于button2控件左上角点的偏移。所以结果看到的就是右边的那个圆形。此时,注意如果将该窗体最小化再最大化或者将窗体拖动到屏幕的外面,我们发现2个小圆形,消失了。这里是因为每当发生以上行为的时候,windows会自动触发窗体的重绘操作,窗体重绘后,我们刚刚画的小圆形就消失了。2.由此可以引出我们得到Graphics对象的第二种办法---窗体或控件的OnPaint函数。窗体或控件的Paint事件是最常用于放置绘图代码的地方,每当窗体被其他窗体挡住,再次显示的时候,窗体的所有内容必须被重绘,窗体或控件的OnPaint函数会被windows操作系统自动调用,button2_Paint(object sender, PaintEventArgs e)在Paint函数中,有一个PaintEventArgs e参数,通过e.Graphics,我们可以得到该窗体或控件的Graphics对象,之后的画图操作就和第一种方式相同了。如果我们将绘图代码放到了xxx_Paint函数中,就不会发生当窗体被其他窗体挡住,再次显示的时候,之前画的图形都消失了的情形了,因为这些图形被再次重绘了。另外,需要额外说明的是,除了用户操作(比如最小化再最大化窗体)可以触发xxx_Paint函数之外,程序中可以通过调用窗体或控件的Refresh()方法主动触发窗体或控件的重绘。
3、示例代码下载:http://files.cnblogs.com/ice-river/WindowsFormsApplication2.rar
Winform打砖块游戏制作step by step第二节---.画挡板
1、主窗体启动后,一个挡板出现在窗体上,鼠标点击,挡板重新画在鼠标点击的地方,主界面截图如下:
2、挡板类设计挡板类的定义代码如下:class Board { /// <summary> /// 挡板自身宽度 /// </summary> public int m_nBoardWidth = 170; public int m_nBoardHeight = 15; //坐标 public int XPos { get; set; } public int YPos { get; set; } /// <summary> /// 构造挡板初始位置坐标,速度和宽度 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="speed"></param> public Board(int x, int y, int nBoardWidth, int nBoardHeight) { this.XPos = x; this.YPos = y; m_nBoardWidth = nBoardWidth; m_nBoardHeight = nBoardHeight; } /// <summary> /// 画挡板 /// </summary> /// <param name="g"></param> public void Draw(System.Drawing.Graphics g) { using (SolidBrush sbrush = new SolidBrush(Color.LightBlue)) { Pen p = new Pen(Color.SaddleBrown); Rectangle Rect = new Rectangle(XPos, YPos, m_nBoardWidth, m_nBoardHeight); g.DrawRectangle(p, Rect); g.FillRectangle(sbrush, Rect); } g.Dispose(); }这里我们画一个矩形表示挡板,GDI绘制一个矩形需要4个参数,(left,top)坐标,以及矩形的宽度及高度。/// <summary>/// 挡板自身高度宽度/// </summary>public int m_nBoardWidth = 170;public int m_nBoardHeight = 15;//坐标public int XPos { get; set; }public int YPos { get; set; }同时,提供一个绘制自身的Draw方法,方法的实现很简单,就是用画笔和画刷绘制和填充一个矩形。
3、主界面代码主界面中,在BrickGame_Paint窗体重绘函数中,每次发生重绘的时候,新建一个挡板,并调用挡板的Draw函数。Board board = new Board(m_nTop, m_nLeft, 170,15);board.Draw(e.Graphics);
4、代码下载:http://files.cnblogs.com/ice-river/csharp%E6%89%93%E7%A0%96%E5%9D%97%E6%B8%B8%E6%88%8Fstepbystep%E7%89%88%28%E7%AC%AC%E4%BA%8C%E8%8A%82%29.rar
其他章节地址
1、Winform打砖块游戏制作step by step第三节---移动挡板:http://www.cnblogs.com/ice-r足毂忍珩iver/p/3592291.htmlC#基础知识梳理索引:http://www.cnblogs.com/ice-river/p/3593334.htmlWinform打砖块游戏制作step by step第4节---小球移动:http://www.cnblogs.com/ice-river/p/3594556.htmlWinform打砖块游戏制作step by step第5节---重构代码,利用继承多态:http://www.cnblogs.com/ice-river/p/3614085.htmlC#练习DataReader(转载):http://www.cnblogs.com/ice-river/p/3645051.htmlWinform打砖块游戏制作step by step第6节---画墙(砖块集合)以及双缓冲实现:http://www.cnblogs.com/ice-river/p/3647250.htmlWinform打砖块游戏制作step by step第7节---碰撞检测:http://www.cnblogs.com/ice-river/p/3647332.html