一 引子
为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持。
预备知识,无GDI画图基础的童鞋请先阅读一篇文章让你彻底弄懂WinForm GDI 编程基本原理
二 本节内容---小球移动
1.主窗体启动后,一个小球自动开始运动,碰到界面的四周,进行反弹,反弹后运动速度可能变快或者变慢,主界面截图如下:
三 小球类设计
小球类的定义代码和之前的挡板类差不多,代码如下:
public class Ball { //坐标 public int XPos { get; set; } public int YPos { get; set; } public int SpeedX { get; set; } public int SpeedY { get; set; } public Rectangle Rect; /// <summary> /// 初始化小球位置和偏移值 /// </summary> public Ball(int x, int y, int speedX, int speedY) { this.XPos = x; this.YPos = y; this.SpeedX = speedX; this.SpeedY = speedY; } public void Draw(Graphics g) { using (SolidBrush sbrush = new SolidBrush(Color.Snow)) { Rect = new Rectangle(XPos, YPos, 20, 20); g.DrawEllipse(new Pen(Color.Gray), Rect); g.FillEllipse(sbrush, Rect); } // g.Dispose(); } public void Run() { XPos = XPos + SpeedX; YPos = YPos - SpeedY; if (XPos <= 0) SpeedX = (new Random().Next(3, 5)); if (XPos >= 378) SpeedX = -(new Random().Next(3, 5)); if (YPos <= 100) SpeedY = -(new Random().Next(3, 8)); if (YPos >= 580) SpeedY += (new Random().Next(3, 8)); } }
值得一提是run方法,4个条件判断分别判断是否碰到了界面的4条边。
四 主界面代码
主界面中,定义一个timer来表达小球的运动,timer初始化代码如下:
timer = new Timer();
timer.Interval = 10;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
timer处理函数如下(小球移动,刷新屏幕):
public void timer_Tick(object sender, EventArgs e)
{
m_Ball.Run();
this.Refresh();
}
窗体onPaint函数修改如下(重绘挡板及小球):
private void BrickGame_Paint(object sender, PaintEventArgs e) { m_Ball.Draw(e.Graphics); m_board.Draw(e.Graphics); }
五 代码下载