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

scratch小游戏合集源码(13个) scratch小游戏源码,共13个,适合大家自学,包含贪吃蛇,大鱼吃小鱼,打砖块,走迷宫,格斗,飞机大战等 立即下载
[源码下载]


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


作者: webabcd


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


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


在线DEMO
Get Microsoft Silverlight


思路
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);
        }

    }

}



2、苍蝇控件的View
IFlyView.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.View
{
    
public interface IFlyView
    
{
        
/// <summary>
        
/// 更新苍蝇的位置
        
/// </summary>
        
/// <param name="x">X 轴坐标</param>
        
/// <param name="y">Y 轴坐标</param>
        
/// <param name="z">Z 轴方向上的缩放比例</param>

        void Update(double x, double y, double z);

        
/// <summary>
        
/// 苍蝇开始飞的事件处理器
        
/// </summary>

        event EventHandler Start;
        
/// <summary>
        
/// 苍蝇停止飞的事件处理器
        
/// </summary>

        event EventHandler Stop;
        
/// <summary>
        
/// 打死苍蝇后的计分事件
        
/// </summary>

        event EventHandler Score;
    }

}


Fly.xaml.cs
using  System;
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.View
{
    
public partial class Fly : UserControl, IFlyView
    
{
        
public Fly()
        
{
            InitializeComponent();

            
this.Loaded += new RoutedEventHandler(Fly_Loaded);
        }


        
void Fly_Loaded(object sender, RoutedEventArgs e)
        
{
            
        }


        
/// <summary>
        
/// 更新苍蝇的位置
        
/// </summary>
        
/// <param name="x">X 轴坐标</param>
        
/// <param name="y">Y 轴坐标</param>
        
/// <param name="z">Z 轴方向上的缩放比例</param>

        public void Update(double x, double y, double z)
        
{
            fly.SetValue(Canvas.LeftProperty, x);
            fly.SetValue(Canvas.TopProperty, y);
            st.ScaleX 
= st.ScaleY = z;
        }


        
/// <summary>
        
/// 打到苍蝇后
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void fly_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        
{
            
if (aniWing.GetCurrentState() != ClockState.Stopped)
            
{
                aniFlyDisappear.Begin();

                OnScore();
            }

        }


        
/// <summary>
        
/// 苍蝇消失的动画结束后
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void aniFlyDisappear_Completed(object sender, EventArgs e)
        
{
            OnStop();
        }


        
/// <summary>
        
/// 初始化苍蝇的位置
        
/// </summary>

        public void InitPosition()
        
{
            fly.SetValue(Canvas.LeftProperty, 
-300d);
        }


        
public event EventHandler Start;
        
public void OnStart()
        
{
            InitPosition();

            aniFlyDisappear.Stop();

            
if (Start != null)
                Start(
this, EventArgs.Empty);
        }


        
public event EventHandler Stop;
        
public void OnStop()
        
{
            InitPosition();

            
if (Stop != null)
                Stop(
this, EventArgs.Empty);
        }


        
public event EventHandler Score;
        
public void OnScore()
        
{
            
if (Score != null)
                Score(
this, EventArgs.Empty);
        }

    }

}


3、苍蝇控件的Presenter
FlyPresenter.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  YYFly.Model;
using  YYFly.View;

namespace  YYFly.Presenter
{
    
/// <summary>
    
/// Model - View - Presenter 模式中的 Presenter
    
/// </summary>

    public class FlyPresenter
    
{
        
public FlyPresenter(IFlyView flyView, IFlyModel flyModel)
        
{
            FlyView 
= flyView;
            FlyModel 
= flyModel;

            FlyView.Start 
+= new EventHandler(FlyView_Start);
            FlyView.Stop 
+= new EventHandler(FlyView_Stop);
            flyView.Score 
+= new EventHandler(flyView_Score);

            FlyModel.FlyChanging 
+= new EventHandler<FlyEventArgs>(FlyModel_FlyChanging);
        }


        
void FlyView_Start(object sender, EventArgs e)
        
{
            FlyModel.Start();
        }


        
void FlyView_Stop(object sender, EventArgs e)
        
{
            FlyModel.Stop();
        }


        
void flyView_Score(object sender, EventArgs e)
        
{
            FlyModel.Score();
        }


        
void FlyModel_FlyChanging(object sender, FlyEventArgs e)
        
{
            FlyView.Update(e.X, e.Y, e.Z);
        }


        
public IFlyView FlyView { get; set; }
        
public IFlyModel FlyModel { get; set; }
    }

}



OK
[源码下载]
打苍蝇游戏--打苍蝇游戏 打苍蝇游戏(代码元件) 打苍蝇游戏(代码元件) 打苍蝇游戏(代码元件) 立即下载

相关推荐

保姆级教程:用NovAtel Inertial Explorer 8.7搞定GNSS/INS紧组合后处理(附避坑指南)

本文提供NovAtel Inertial Explorer 8.7的GNSS/INS紧组合后处理全流程教程,涵盖环境准备、数据转换、基站坐标解算及紧组合处理等关键步骤。特别针对零基础用户,分享实用技巧和常见陷阱,帮助高效完成高精度组合导航数据处理,适用于测绘、自动驾驶等领域。

weixin_42614269的博客 278

一个学习silverlight游戏的网站

http://blog.csdn.net/alamiye010/article/category/541201

茶向 621

vivado2025安装教程:手把手带你完成环境配置

详细讲解vivado2025的安装步骤与环境配置技巧,帮助开发者快速搭建FPGA开发平台。涵盖常见问题解决方案,确保vivado2025稳定运行,提升开发效率。

weixin_42588672的博客 3007

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 148

智能客服系统知识库数据清洗

数据清洗(Data Cleaning)是确保智能客服知识库高效运行的重要环节,主要涉及。| 分类 & 标签优化 | 重新组织 FAQ,创建关键字索引 || 定期更新 | 结合用户反馈,每 1-3 个月优化 |才能提供更优质、正确的回答,提升客户满意度!、Zendesk、Intercom 等)中,: FAQ 或客服回答中可能存在。,会影响 AI 匹配的准确性。是一个持续优化的过程,

z1941563559的博客 2098

Unity零基础到进阶 | Unity中的内存泄漏全解析,原因、排查及避免

Unity 内存泄漏并非传统C++语境中的野指针或未释放堆内存,而是基于其「托管内存(C#)+ 原生内存(引擎/非托管)」双架构的特殊问题——即已废弃、不再被业务逻辑使用的内存块,无法被引擎或系统自动回收,持续占用内存空间,最终引发内存暴涨、GC卡顿、OOM(内存溢出)崩溃,其中移动端、主机端受影响最显著。 Unity 内存主要分为三类,其中泄漏仅发生在前两类,栈内存因系统自动分配/释放,无泄漏风险:

努力前行,总会成为自己心中的那道光 1万+

Lua 与 ToLua:运行机制及热更新原理

本文解析 Lua 与 ToLua 在 Unity 中的运行机制及热更新原理。Lua 作为可嵌入语言,通过编译字节码由虚拟机执行,支持运行时加载新脚本;ToLua 实现 C# 与 Lua 的双向调用,通过生成 Wrap 代码注册类型接口;热更新依赖于宿主动态加载并执行新脚本,结合资源管理、版本控制与状态处理机制。关键点包括:table 共享引用、函数值不随重定义更新、闭包捕获状态、元表实现类逻辑,以及对象跨语言传递的生命周期管理。完整热更新需独立设计补丁分发与回滚策略。

2503_90324697的博客 125

机器人中的数值优化(十四)——罚函数法(Penalty Method)、障碍函数法(Barrier Method)、拉格朗日松弛法(Lagrangian Relaxation)

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 5216

C#使用opencv和Yolo模型识别车牌号

本文基于OpenCVSharp与OnnxRuntime,结合YoloV8n-pose_plate模型(检测车牌位置)和OCR模型(识别车牌文字),实现高效车牌识别。通过预处理、目标检测、NMS筛选及文字识别流程,最终输出车牌框位置与识别文本。代码封装良好,支持自定义路径与置信度阈值,具备实际应用价值。

lweiyue的专栏 156

【现代人形机器人:从物理建模到大模型驱动的控制与学习】第1章 机器人建模回顾

本章建立读者进行后续控制 / 优化 / 学习工作的数学与计算基础。内容分为三大块:刚体运动学:位姿表示、坐标变换、旋转参数与李代数/李群(指数映射、twist)多关节机构的正/逆运动学:DH 与 POE 两种建模、雅可比矩阵推导、数值/解析逆解方法与奇异性问题约束动力学:拉格朗日公式、牛顿—欧拉递归算法、接触/冲击模型、受约束系统的方程(拉格朗日乘子与互补性条件)每一节同时给出与练习题。假设读者已具备线性代数(矩阵、特征分解、SVD)、多变量微积分与基础力学(牛顿第二定律)知识。

u012133341的博客 183

【TIDB】TiDB认证考试PTCA 练习题 题库

TiDB认证考试PTCA 练习题 题库

DBA之路的博客 4718

使用lxml操作 Word 的 OpenXML 底层

本文综合介绍了使用lxml操作Word底层OpenXML文档的基础知识,并给出了一个效率远超VBA的提取Word文档中的表格的HTML表结构的实例,演示了用lxml获取及修改部分Word文档组成部件的文本、属性的方法。

yivifu的专栏 394

[AI工具评测] 为什么功能全面的 Kimi Claw,最终还是被放弃?

《KimiClaw:功能整合与体验落差的AI工具实践》 KimiClaw作为集LLM、Agent、云端执行和SaaS分发于一体的AI工具,理论上具备个人开发者所需的全栈能力:原生整合大模型与Agent、支持云端Docker部署、可生成Web应用并通过飞书协作。然而实际高频使用中暴露三大核心问题:响应延迟导致思考节奏断裂(非流式输出)、云端黑箱执行缺乏可控性(无法实时干预)、系统稳定性不足(网关和隧道偶发故障)。这些体验落差表明,功能完整性不等于使用高效性——对开发者而言,实时响应、执行透明度和系统可靠性比自

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 532

使用C#代码提取、修改或删除 Excel 中的超链接

通过 C# 和 VB.NET,可以方便地管理 Excel 文件中的超链接,包括提取、修改和删除等操作。提取超链接: 获取工作表中的超链接集合,读取每个超链接的地址和类型,并将相关信息保存到文本文件中。修改超链接: 更新超链接的显示文本和目标地址,确保链接信息准确。删除超链接: 移除指定的超链接,同时可以选择保留单元格中的原有显示文本,或清除单元格的全部内容。这些操作可以帮助开发人员更高效地管理 Excel 文档中的链接信息,减少重复的手动操作,也便于在数据迁移、文档维护和自动化报表处理等场景中使用。

2501_93070778的博客 221

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C#: 控件不支持透明的背景色

把透明度固定为255。

海天鹰 26

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

week11-词云图

核心逻辑:词频越高,文字字号越大;适合快速看文本高频关键词(影评、评论、摘要文本非常适配 CommentInfo.csv)

m0_66244637的博客 131

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

基于 OPC UA 的半导体工厂化学气体传输 SCADA 监控系统:架构设计与 C# MVVM 实现

本文提出一套面向半导体化学气体传输的可演进SCADA系统,基于OPCUA统一信息模型与C#+WPF+MVVM技术栈,实现从气源到机台的全链路实时监控、安全联锁与追溯。通过资产树建模、分层解耦架构与标准对齐(SEMI E30/E95/S2),确保系统可扩展、可维护、可审计,满足高安全、高可靠要求,支持快速落地与持续演进。

ponygame的博客 325

C# 基于OpenCv的视觉工作流-章115-单节点条件

本章介绍C#基于OpenCv的视觉工作流中单节点条件的设置,涵盖列表值范围判断(支持“与”“或”逻辑)、模块结果参数匹配判定,以及结果显示图像与字体配置。通过灵活设定条件,实现检测结果的OK/NG自动判定,提升视觉系统智能化水平。配套工具“VisionTool 探迹”已更新,新增海康相机、PC相机采集及多类通讯优化功能,助力工业视觉应用。

sali-tec的博客 243

把本地 docx 半自动发到 优快云 创作页(python实现)

本文介绍一套基于Python的自动化工具链,实现将本地Word文档(.docx)半自动发布至优快云创作页。通过docx2md.py将文档转为Markdown并导出图片,再用auto_upload.py自动粘贴文本与图片至网页编辑器,全程仅需双击脚本和点击输入框,支持40张图片按序粘贴,显著提升内容发布效率。

weixin_45615730的博客 193

C# 程序一键打包(PupNet-Deploy)

它允许开发者通过一个统一的配置文件(.pupnet.conf)和一个简单的命令行指令,自动完成 .NET 代码编译(dotnet publish)与目标平台原生安装包(如 Windows 的 Setup 安装程序、Linux 的 AppImage / Debian / RPM 包等)的封装。一键全自动: 完美打通了“源码编译 -> 依赖收集 -> 路径替换 -> 快捷方式/元数据注册 -> 原生安装包生成”的全套自动化流水线。一次配置多端适配: 只需维护一份配置文件,即可搞定多端发布。

czjnoe的博客 177

04 · Diagram —— 示意图与接线图

CCDiagramDiagramDiagrams把一组"节点 + 连线"画出来:机车各柜体之间的连线关系、系统拓扑、信号流向。节点是矩形框(可带标题),连线可以带箭头。

hdjsjb的博客 438

MIGraphX CSharp API 发布:让 C# 接入 AMD GPU 原生推理

MIGraphX CSharp API 0.0.2 已发布,为 .NET 开发者提供 AMD GPU 上的 ONNX 模型推理能力。支持 YOLOv26、PaddleOCR、PP-Structure 与 CLIP 四类场景,实现模型解析、动态输入、GPU 编译与张量管理。通过类型化接口与 IDisposable 资源管控,兼容 .NET 5–10 及旧版框架,可集成 HIP 实现端到端 GPU 推理。配套案例覆盖视觉检测、文档处理与图文检索,助力 C# 项目高效接入 AMD ROCm 生态。

grape_yan的博客 349

C#: (float) RegistryKey.GetValue() 报错 System.InvalidCastException: 指定的转换无效

RegistryKey.GetValue() 类型是 object,首先要转为 string,再 float.Parse(string)。

海天鹰 30

C# 14 实战三连:field 关键字、extension 成员与 null 条件赋值

NET 10 带来的 C# 14 不是一场 syntax earthquake,但里面藏着三件日常写码频率极高的改进。这篇不讲新闻稿,只讲用起来什么感觉、编译器在背后做了什么、以及哪里会静默踩坑。

dotnethello的博客 174
上一篇: 积少成多Flash ActionScript 3.0(7) - 交互之鼠标事件和键盘事件
下一篇: 返璞归真asp.net mvc 1.0(1) - 添加、查询、更新和删除的Demo
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值