面向对象程序设计实训(吃金豆游戏设计与实现)
面向对象程序设计实训(吃金豆游戏设计与实现)
常熟理工学院计算机学院
在Visual Studio 2005环境下用C#编写GUI代码达到如下功能: (1) 游戏基本功能:
游戏屏幕是一个 NxN 的网格,其中某些格子是固定的墙壁,其他网格是可以通行的,开始的时候放满了金豆。游戏开始后,玩家通过键盘的方向键控制游戏主角PACMAN移动,经过的地方,金豆被吃掉,同时加分。游戏屏幕上还有一个怪物,它会随机地移动。PACMAN如果碰到怪物,游戏失败。如果吃掉了全部金豆,则游戏成功。 (2) 游戏场景(即墙壁和金豆的位置,PACMAN与怪物的初始位置等信息)是从文件 scene.txt 中读到的。格式如下:
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/Lost时显示不同的声音。
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 static 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 MathOp{
private double left; private double right;
public MathOp(double left,double right){ this.left = left; this.right = right; 代理作为参数 }
public double GetResult(OpHandler op){ return op(left,right); }
}
class App{
public static void Main(){
MathOp m1 = new MathOp(3,4);
double result = m1.GetResult(Calc.Add); Console.WtriteLine(“result = {0}”,result); } }
3、 代理变量作为类的一个数据成员
class MathOp{
public 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) //如果有方法注册委托变量op throw new Exception();
return op(first,second); //通过委托来调用方法 } }
class App{
public 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 GreetingManager{
public GreetingDelegate say;
public void GreetPeople(string name){ if(say!=null) say(name); } }
class App{
public static void EnglishGreeting(string name) {
Console.WriteLine(\英文问候 }
public static void ChineseGreeting(string name) {
Console.WriteLine(\早上好, \中文问候 }
public static void Main(){
GreetingManager gm = new GreetingManager ();
gm.say = EnglishGreeting;
gm.say += ChineseGreeting; //用+=合并两个代理
gm.GreetPeople(“Marry”); //也可以直接gm.say(“Marry”)调用委托
} }
注:同样用-=可以删除一个代理。 二、事件(event)
将代理封装起来就成了事件,事件对外是公开的,而它所对应的代理是私有的。事件可以看作是受限的代理。因此事件也可以绑定(注册)一个方法,但不能通过=,只能通过+=进行。事件最常见的用途是用于窗体编程,当发生像点击按钮、移动鼠标等事件时,对应的方法执行,以响应该事件。 例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{
public static void EnglishGreeting(string name) {
Console.WriteLine(\英文问候 }
public static void ChineseGreeting(string name) {
Console.WriteLine(\早上好, \中文问候 }
public static void Main(){
GreetingManager gm = new GreetingManager ();
gm.MakeGreet = EnglishGreeting; //编译错误,不允许用=注册方法 gm.MakeGreet += 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;
Button btnOK = new Button(); //实例化一个名b …… 此处隐藏:2957字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




