Winform打砖块游戏制作step by step第4节---小球移动

三世轮回 提交于 2020-03-26 05:09:29

一 引子

为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持。

预备知识,无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);
        }

五 代码下载

本节代码下载

  

作者:宋波
出处:http://www.cnblogs.com/ice-river/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!