WEB开发网
开发学院软件开发C语言 游戏人生Silverlight(3) - 打苍蝇[Silverlight 2.... 阅读

游戏人生Silverlight(3) - 打苍蝇[Silverlight 2.0(c#)]

 2009-06-22 08:33:13 来源:WEB开发网   
核心提示: 介绍使用 Silverlight 2.0(c#) 开发一个打苍蝇的游戏玩法用鼠标控制瞄准镜的移动,鼠标左键开火在线DEMO思路1、苍蝇的移动轨迹用一个简单的公式计算,游戏人生Silverlight(3) - 打苍蝇[Silverlight 2.0(c#)],即正弦波,正弦波的公式:y = A * sin(&o

介绍

使用 Silverlight 2.0(c#) 开发一个打苍蝇的游戏

玩法

用鼠标控制瞄准镜的移动,鼠标左键开火

在线DEMO

游戏人生Silverlight(3) - 打苍蝇[Silverlight 2.0(c#)] 

思路

1、苍蝇的移动轨迹用一个简单的公式计算,即正弦波。正弦波的公式:y = A * sin(ωx + φ)

2、苍蝇控件使用MVP(Model - View - Presenter)模式开发,其目的只是为了说明如何在Silverlight中应用MVP模式

关键代码

1、苍蝇控件的Model

IFlyModel.cs


using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace YYFly.Model
{
    public interface IFlyModel
    {
        /**//// <summary>
        /// 让一只苍蝇开始飞
        /// </summary>
        void Start();
        /**//// <summary>
        /// 让一只苍蝇停止飞
        /// </summary>
        void Stop();
        /**//// <summary>
        /// 计分方法
        /// </summary>
        void Score();

        /**//// <summary>
        /// 苍蝇改变位置所触发的事件
        /// </summary>
        event EventHandler<FlyEventArgs> FlyChanging;
    }
}


FlyModel.cs


using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace YYFly.Model
{
    public class FlyModel : IFlyModel
    {
        private DispatcherTimer timer; // 改变苍蝇位置的计时器
        private SineWave sineWave; // 苍蝇的运动轨迹(正弦波)的参数
        private FlyEventArgs evt; // 苍蝇的位置参数
        private Random random;
        private double minX = -100, minY = 40, maxY = 300, minZ = 0.1, maxZ = 0.5;

        private static readonly object objLock = new object();

        public FlyModel()
        {
            timer = new DispatcherTimer();
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = new TimeSpan(0, 0, 0, 0, 33);
        }

        void InitData()
        {
            random = new Random();

            sineWave = new SineWave
            {
                A = random.Next(40, 60),
                OffsetY = random.Next((int)minY, (int)maxY),
                Omega = 1d / random.Next(20, 50),
                Phi = random.Next((int)minX * 2, (int)minX),
            };

            evt = new FlyEventArgs()
            {
                X = minX,
                Z = (minZ + maxZ) / 2,
                Z_Out = Convert.ToBoolean(random.Next(0, 2))
            };
        }

        void timer_Tick(object sender, EventArgs e)
        {
            evt.X += Singleton<Scorer>.Instance.Level * 1.5;
            evt.Y = sineWave.OffsetY + sineWave.A * Math.Sin(sineWave.Omega * evt.X + sineWave.Phi);

            if (evt.Z_Out)
            {
                if (evt.Z < maxZ)
                    evt.Z += random.Next(0, 3) / 200d;
                else
                    evt.Z_Out = false;
            }
            else
            {
                if (evt.Z > minZ)
                    evt.Z -= random.Next(0, 3) / 200d;
                else
                    evt.Z_Out = true;
            }

            OnFlyChanging(evt);
        }

        public void Start()
        {
            InitData();
            timer.Start();
        }

        public void Stop()
        {
            timer.Stop();
        }

        public void Score()
        {
            try
            {
                lock (objLock)
                {
                    Singleton<Scorer>.Instance.Score += 1;
                    Singleton<Scorer>.Instance.Level = (int)Singleton<Scorer>.Instance.Score / 10 + 1;
                }
            }
            finally {}
        }

        public event EventHandler<FlyEventArgs> FlyChanging;
        protected virtual void OnFlyChanging(FlyEventArgs e)
        {
            EventHandler<FlyEventArgs> handler = FlyChanging;
            if (handler != null)
                handler(this, e);
        }
    }
}

1 2 3  下一页

Tags:游戏 人生 Silverlight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接