父类写完之后,考虑子类应该怎么写。
最简单的子类:砖块类,砖块类基本上没有什么新的字段和方法,不过为了方便画图,我加了一部分常量字段。顺便说一句,C#里常量字段默认是静态的,可是操作常量字段的get和set访问器得自己显示的定义为静态。
上代码:
using System.Drawing;
namespace 弹球
{
/// <summary>
/// 方块:弹球世界中的矩形物体,被撞击后消失
/// </summary>
class Block : Actor
{
/// <summary>
/// 方块的宽度
/// </summary>
private const int width = 50;
/// <summary>
/// 获取方块的宽度
/// </summary>
public static int Width
{
get { return width; }
}
/// <summary>
/// 方块的高度
/// </summary>
private const int height = 10;
/// <summary>
/// 获取方块的高度
/// </summary>
public static int Height
{
get { return height; }
}
public Block()
{ }
/// <summary>
/// 构造函数:设置方块的左上角顶点位置
/// </summary>
/// <param name="iX"></param>
/// <param name="iY"></param>
/// <param name="iWidth"></param>
/// <param name="iHeight"></param>
public Block(int iX, int iY)
{
PositionBounds.SetBounds(iX, iY, Block.width, Block.height);
CollisionBounds.SetBounds(iX, iY, Block.width, Block.height);
MoveBounds.SetBounds(0, 0, 0, 0);
}
/// <summary>
/// 绘制方块
/// </summary>
/// <param name="g"></param>
public override void Draw(Graphics g)
{
g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(PositionBounds.Left, PositionBounds.Top, Block.width, Block.height));
g.DrawRectangle(Pens.White, new Rectangle(PositionBounds.Left, PositionBounds.Top, Block.width, Block.height));
}
public override void Update()
{
//该物体不更新信息
}
}
}
然后写球拍类,这个类相当于在基类的基础上新增一个移动方向,并且定义了自己的update()方法用来更新信息,其实球拍的移动就是更新了位置信息(包括碰撞)。
相应的我也给这个类写了几个静态字段用来表示球拍的一些参数,以后如果要修改这些参数的话只需