面向对象程序设计实训(吃金豆游戏设计与实现)

上传人:第*** 文档编号:33582510 上传时间:2018-02-15 格式:DOC 页数:18 大小:219.50KB
返回 下载 相关 举报
面向对象程序设计实训(吃金豆游戏设计与实现)_第1页
第1页 / 共18页
面向对象程序设计实训(吃金豆游戏设计与实现)_第2页
第2页 / 共18页
面向对象程序设计实训(吃金豆游戏设计与实现)_第3页
第3页 / 共18页
面向对象程序设计实训(吃金豆游戏设计与实现)_第4页
第4页 / 共18页
面向对象程序设计实训(吃金豆游戏设计与实现)_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《面向对象程序设计实训(吃金豆游戏设计与实现)》由会员分享,可在线阅读,更多相关《面向对象程序设计实训(吃金豆游戏设计与实现)(18页珍藏版)》请在金锄头文库上搜索。

1、面向对象程序设计实训(吃金豆游戏设计与实现)常熟理工学院计算机学院在 Visual Studio 2005 环境下用 C#编写 GUI 代码达到如下功能:(1) 游戏基本功能:游戏屏幕是一个 NxN 的网格,其中某些格子是固定的墙壁,其他网格是可以通行的,开始的时候放满了金豆。游戏开始后,玩家通过键盘的方向键控制游戏主角 PACMAN 移动,经过的地方,金豆被吃掉,同时加分。游戏屏幕上还有一个怪物,它会随机地移动。PACMAN 如果碰到怪物,游戏失败。如果吃掉了全部金豆,则游戏成功。(2) 游戏场景(即墙壁和金豆的位置,PACMAN 与怪物的初始位置等信息)是从文件 scene.txt 中读到

2、的。格式如下:pr,pc,mr,mc /(pr,pc)为 Pacman 初始行列,(mr,mc) 为 Monster 初始行列11111111 /第一行,N 列,其中 1 表示墙;0 表示金豆10010. /第 2-N 行. (3) 附加功能,完成以上内容的同学选做: 游戏主菜单开始游戏、查看成绩排行榜、退出游戏等项目。 每次游戏成功结束,要求输入用户名,并记录成绩到文件 score.txt。如果已有同名用户,且本次得分更高,则替代之。在显示排行榜时,按得分高低排序。 使用不同的关卡,即使用多个场景文件 scene(0-n).txt,在开始游戏时选择。 加入声音效果,吃到金豆时,Win/Los

3、t 时显示不同的声音。3、基础部分训练内容(1) C#面向对象程序设计,Visual Stuio 2005 开发环境;(2) C# GUI 编程;(3)游戏及动画实现;(4)游戏相关功能(键盘处理,图形移动,随机数,数学函数等)。4、指导教师:宋东兴、殷旭东1代理和事件一、代理(delegate)1、 代理概念是一种将方法作为对象封装起来的引用数据类型,一个代理变量可以指向一个方法。(1)定义一个名为 OpHandler 的代理类型。delegate double OpHandler(double x,double y);(2)创建一个代理变量 h1;class Calc public sta

4、tic double Add(double x,double y)return x+y;public double Sub(double x,double y)return x-y;OpHandler h1 = Calc.Add; /h1 指向 Add 方法(3)通过代理变量 h1 调用它指向的方法double result;result = h1(3,4); /调用 Add 方法h1 = new Calc().Sub;result = h1(3,4); /调用 Sub 方法2、 代理作为方法的参数class MathOpprivate double left;private double r

5、ight;public MathOp(double left,double right)this.left = left; this.right = right;public double GetResult(OpHandler op) return op(left,right);class Apppublic static void Main()MathOp m1 = new MathOp(3,4);double result = m1.GetResult(Calc.Add);Console.WtriteLine(“result = 0”,result);3、 代理变量作为类的一个数据成员c

6、lass MathOppublic OpHandler op; /op 是代理变量private double first;private double second;public MathOp(double first,double second)this.first = first; this.second = second; op = null; public double Invoke()if(op=null) /如果有方法注册委托变量 opthrow new Exception();return op(first,second); /通过委托来调用方法class Apppublic

7、static void Main()MathOp m1 = new MathOp(3,4);代理作为参数 m1.op = Calc.Add; double result = m1.Invoke();Console.WtriteLine(“result = 0”,result);4、 多播代理在 C# 中,代理是 “多播”的,这表示它可同时指向一个以上的方法。多播代理将维护一个方法列表。当调用该代理时,将会按 FIFO 顺序调用列表中的所有方法。public delegate void GreetingDelegate(string name); class GreetingManagerpub

8、lic GreetingDelegate say;public void GreetPeople(string name)if(say!=null) say(name);class Apppublic static void EnglishGreeting(string name) Console.WriteLine(Morning, + name); /英文问候public static void ChineseGreeting(string name) Console.WriteLine(早上好, + name); /中文问候public static void Main()Greetin

9、gManager gm = new GreetingManager ();gm.say = EnglishGreeting;gm.say += ChineseGreeting; /用+=合并两个代理gm.GreetPeople(“Marry”); /也可以直接 gm.say(“Marry”)调用委托注:同样用-=可以删除一个代理。二、事件(event)将代理封装起来就成了事件,事件对外是公开的,而它所对应的代理是私有的。事件可以看作是受限的代理。因此事件也可以绑定(注册)一个方法,但不能通过=,只能通过+=进行。事件最常见的用途是用于窗体编程,当发生像点击按钮、移动鼠标等事件时,对应的方法执行

10、,以响应该事件。例 1:将上例的 GreetingDelegate 代理封装成 MakeGreet 的事件,代码如下:public delegate void GreetingDelegate(string name);class GreetingManager/* 将代理 GreetingDelegate 封装成事件 MakeGreet*/public event GreetingDelegate MakeGreet; public void GreetPeople(string name)if(MakeGreet!=null) MakeGreet(name); /调用事件class App

11、public static void EnglishGreeting(string name) Console.WriteLine(Morning, + name); /英文问候public static void ChineseGreeting(string name) Console.WriteLine(早上好, + name); /中文问候public static void Main()GreetingManager gm = new GreetingManager ();gm.MakeGreet = EnglishGreeting; /编译错误,不允许用=注册方法gm.MakeGre

12、et += ChineseGreeting; gm.GreetPeople(“Marry”); /*不可以直接 gm. MakeGreet (“Marry”)调用事件,只能在定义MakeGreet 的类中调用事件。*/例 2:类 Button 在 GUI 中代表按钮,在 Button 类中定义了一个 Click 事件,它是对代理EventHandler 的封装。(1)EventHandler 代理的定义如下:delegate void EventHandler(object sender,EventArgs e);(2)Click 事件定义如下:event EventHandler Click

13、;Button btnOK = new Button(); /实例化一个名 btnOk 的按钮btnOK.Click += ClickProcess; /为它的 Click 事件注册 ClickProcess 方法。则当单击 btnOK 按钮时,ClickProcess 方法被调用以响应该单击事件。2窗体和按钮一、窗体(Form 类)1、Form 类是所有高级窗口的基类。2、设置 Form 属性 如: (Text, Location, Size, Name)(FormBorderStyle, BackColor, StartPosition)(MaximunBox, MinimunBox, C

14、ontrolBox)等。二、按钮控件(Button 类)1、属性:(Text, Name, Enabled, )2、方法: Show(),Hide(),Focus(),Invalidate()3、事件: ClickGUI 应用程序的例子:1)生成并显示一个标题为 Hello 的空白窗体:class MyForm:Formpublic MyForm()this.Text = “Hello”;class WinApppublic static void Main()Application.Run(new MyForm();2)在窗体中增加一个按钮,按钮标题为 OK,修改 MyForm 类:clas

15、s MyForm:Formprivate Button btnOK;public MyForm()btnOK = new Button();btnOK.Text = “OK”; this.Text = “Hello”;this.Controls.Add(btnOK);运行程序,单击 OK 按钮,看看有没有什么发生?3)为 OK 按钮注册 Click 事件,当单击 OK 时,按钮的背景色变红。修改 MyForm 类:class MyForm:Formprivate Button btnOK;public MyForm()btnOK = new Button();btnOK.Text = “OK”; btnOK.Click+= ClickProcess; /注册 click 事件this.Text = “Hello”;this.Controls.Add(btnOK);public void ClickProcess(object sender,EventArgs e)btnOK.BackColor = Color.Red;运行程序,单击 OK 按钮,看看发生了什么?3GDI 编程GDI(Graphics Device

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号