集美大学C#实验报告实验五.docx
- 文档编号:13730455
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:20
- 大小:2.27MB
集美大学C#实验报告实验五.docx
《集美大学C#实验报告实验五.docx》由会员分享,可在线阅读,更多相关《集美大学C#实验报告实验五.docx(20页珍藏版)》请在冰点文库上搜索。
集美大学C#实验报告实验五
集美大学计算机工程学院实验报告
课程名称:
C#面向对象程序设计
班级:
计算1012
实验成绩:
指导教师:
陈杰
姓名:
林%%%
实验项目名称:
接口与事件
学号:
201080
上机实践日期:
5.28
实验项目编号:
实验5
组号:
上机实践时间:
2学时
一、目的
掌握C#中接口与事件的定义和使用的方法
2、实验要求
在实验4基础上添加会心一击的功能和反击功能
3、实验使用环境
Visualstudio2012
4、实验内容
1.定义会心一击的接口
添加一个自定义接口ISuperAttack
分别在怪物类和英雄类中实现这个接口
在循环攻击中判断是否调用SuperAttack
注意需要判断集合中的Monster是否实现了这个接口(拿攻击性武器的怪物才有会心一击的功能,会心一击的条件自定,产生会心一击的概率由武器的幸运值决定的,不同类型的英雄和怪物(如武力系,魔法系等)会心一击攻击的方法也不一样)
定义一个ISuperAttack,接收一个实现ISuperAttack的对象调用攻击方法即可(与作为返回值类似)
2.为某些怪物和某些英雄定义被攻击事件,当遇到攻击以后可以自动反击。
五、实验过程
自定义接口ISuperAttack
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceshiyan2
{
publicinterfaceISuperAttack
{
voidAllBeat(AttackQQqq,MagicQQmm,DefeatBirdbird1,MagicBirdbird2,AttackBirdbird3);
}
}
分别在怪物类和英雄类中实现这个接口
英雄继承借口实现AllBeat()
publicclassAttackQQ:
QQ,ISuperAttack
{
publicAttackQQ(stringname,intfirstBlood,intattackPower,intdefeatPower,PointfirstLoc,Sizesize):
base(name,firstBlood,attackPower,defeatPower,firstLoc,size)
{
this.Speed=90;
}
//inta=bird.FirstBlood;
publicoverridevoidMove(Birdbird,QQqq)
{
this.SecondLoc=newPoint
(
bird.FirstLoc.X,
bird.FirstLoc.Y+bird.Size.Height+20
);
bird.FirstBlood=bird.FirstBlood-qq.AttackPower+bird.DefeatPower;
YS=true;
}
publicoverridevoidMove()
{
this.SecondLoc=this.FirstLoc;
YS=false;
}
publicvoidAllBeat(AttackQQqq,MagicQQmm,DefeatBirdbird1,MagicBirdbird2,AttackBirdbird3)
{
bird1.FirstBlood-=50;
bird2.FirstBlood-=50;
bird3.FirstBlood-=50;
}
}
怪物继承借口实现AllBeat()
publicclassMagicBird:
Bird,ISuperAttack
{
//privateintmagicAttact;
publicintMagicAttact{get;set;}
publicintSpeed{get;set;}
publicMagicBird(stringname,intfirstBlood,intattackPower,intdefeatPower,PointfirstLoc,Sizesize):
base(name,firstBlood,attackPower,defeatPower,firstLoc,size)
{
this.MagicAttact=50;
this.Speed=60;
}
publicvoidMove(QQqq,MagicBirdbird)
{
this.SecondLoc=newPoint
(
qq.FirstLoc.X,
qq.FirstLoc.Y+qq.Size.Height-300
);
qq.FirstBlood=qq.FirstBlood-bird.AttackPower-MagicAttact+qq.DefeatPower;
YS=true;
}
publicoverridevoidMove()
{
this.SecondLoc=this.FirstLoc;
YS=false;
}
publicvoidAllBeat(AttackQQqq,MagicQQmm,DefeatBirdbird1,MagicBirdbird2,AttackBirdbird3)
{
qq.FirstBlood-=50;
mm.FirstBlood-=50;
}
}
注意需要判断集合中的Monster是否实现了这个接口(拿攻击性武器的怪物才有会心一击的功能,会心一击的条件自定,产生会心一击的概率由武器的幸运值决定的,不同类型的英雄和怪物(如武力系,魔法系等)会心一击攻击的方法也不一样)
privatevoidbird2_Click(objectsender,EventArgse)
{
inti=ran.Next(1,10);
if(!
mm.YS&&!
qq.YS&&!
birdTemp1.YS&&!
birdTemp2.YS&&!
birdTemp3.YS)
{
if(flag2)
{
b2=birdTemp2.FirstBlood;
flag2=false;
}
if(i%2==0&&(qq.FirstBlood>0||mm.FirstBlood>0))
{
smallqq();
}
else
{
if(qq.FirstBlood>0)
{
qq.Move(birdTemp2,qq);
QQNewPlace(pp,qq);
BarValue=100*birdTemp2.FirstBlood/b2;
Judge(progressBar4);
LaterTime(1000);
qq.Move();
QQOldPlace(pp,qq);
if(birdTemp2.FirstBlood<=0)
{
bird2.Click-=newEventHandler(bird2_Click);
gotoend;
}
LaterTime(1000);
}
if(mm.FirstBlood>0)
{
mm.Move(birdTemp2,mm);
QQNewPlace(mqq,mm);
BarValue=100*birdTemp2.FirstBlood/b2;
Judge(progressBar4);
LaterTime(1000);
mm.Move();
QQOldPlace(mqq,mm);
}
//progressBar4.SetBounds(270,30,120*birdTemp2.FirstBlood/150,16);
//BarValue=100*birdTemp2.FirstBlood/150;
end:
if(birdTemp2.FirstBlood<=0)
{
bird2.Click-=newEventHandler(bird2_Click);
bird2.Image=global:
:
shiyan2.Properties.Resources.redh;
}
}
}
else
{
birdTemp2.Move();
BirdOldPlace(bird2,birdTemp2);
}
}
privatevoidpp_Click(objectsender,EventArgse)
{
inti=ran.Next(1,10);
if(flag4)
{
q1=qq.FirstBlood;
flag4=false;
}
if(!
mm.YS&&!
qq.YS&&!
birdTemp1.YS&&!
birdTemp2.YS&&!
birdTemp3.YS)//当没有攻击时攻击。
有攻击时后退
{
if(i%3==0&&(birdTemp1.FirstBlood>0||birdTemp2.FirstBlood>0||birdTemp3.FirstBlood>0))
{
jian();
}
else
{
if(birdTemp2.FirstBlood>0)
{
birdTemp2.Move(qq,birdTemp2);
BirdNewPlace(bird2,birdTemp2);
//progressBar1.SetBounds(259,340,131*qq.FirstBlood/500,22);
BarValue=100*qq.FirstBlood/q1;
Judge(progressBar1);
LaterTime(1000);
birdTemp2.Move();
BirdOldPlace(bird2,birdTemp2);
if(qq.FirstBlood<=0)
{
pp.Click-=newEventHandler(pp_Click);
gotoend;
}
LaterTime(1000);
}
if(birdTemp1.FirstBlood>0)
{
birdTemp1.Move(qq,birdTemp1);
BirdNewPlace(bird1,birdTemp1);
BarValue=100*qq.FirstBlood/q1;
Judge(progressBar1);
LaterTime(1000);
birdTemp1.Move();
BirdOldPlace(bird1,birdTemp1);
if(qq.FirstBlood<=0)
{
pp.Click-=newEventHandler(pp_Click);
gotoend;
}
LaterTime(1000);
}
if(birdTemp3.FirstBlood>0)
{
birdTemp3.Move(qq,birdTemp3);
BirdNewPlace(bird3,birdTemp3);
BarValue=100*qq.FirstBlood/q1;
Judge(progressBar1);
LaterTime(1000);
birdTemp3.Move();
BirdOldPlace(bird3,birdTemp3);
}
end:
if(qq.FirstBlood<=0)
{
pp.Click-=newEventHandler(pp_Click);
pp.Image=global:
:
shiyan2.Properties.Resources.qqh;
}
}
}
else
{
qq.Move();
QQOldPlace(pp,qq);
}
}
publicvoidjian()
{
birdTemp2.AllBeat(qq,mm,birdTemp1,birdTemp2,birdTemp3);
pictureBox2.Image=global:
:
shiyan2.Properties.Resources.jian;
pictureBox3.Image=global:
:
shiyan2.Properties.Resources.jian;
LaterTime(500);
pictureBox2.Image=global:
:
shiyan2.Properties.Resources.cspace;
pictureBox3.Image=global:
:
shiyan2.Properties.Resources.cspace;
LaterTime(500);
pictureBox2.Image=global:
:
shiyan2.Properties.Resources.jian;
pictureBox3.Image=global:
:
shiyan2.Properties.Resources.jian;
BarValue=100*qq.FirstBlood/500;
Judge(progressBar1);
BarValue=100*mm.FirstBlood/400;
Judge(progressBar5);
LaterTime(1000);
pictureBox2.Image=global:
:
shiyan2.Properties.Resources.cspace;
pictureBox3.Image=global:
:
shiyan2.Properties.Resources.cspace;
if(qq.FirstBlood<=0)
{
pp.Click-=newEventHandler(pp_Click);
pp.Image=global:
:
shiyan2.Properties.Resources.qqh;
}
if(mm.FirstBlood<=0)
{
mqq.Click-=newEventHandler(mqq_Click_1);
mqq.Image=global:
:
shiyan2.Properties.Resources.mqqh;
}
}
publicvoidsmallqq()
{
qq.AllBeat(qq,mm,birdTemp1,birdTemp2,birdTemp3);
sqq1.Image=global:
:
shiyan2.Properties.Resources.sqq;
sqq2.Image=global:
:
shiyan2.Properties.Resources.sqq;
sqq3.Image=global:
:
shiyan2.Properties.Resources.sqq;
BarValue=100*birdTemp1.FirstBlood/300;
Judge(progressBar3);
BarValue=100*birdTemp2.FirstBlood/300;
Judge(progressBar4);
BarValue=100*birdTemp3.FirstBlood/350;
Judge(progressBar2);
LaterTime(1500);
sqq1.Image=global:
:
shiyan2.Properties.Resources.space;
sqq2.Image=global:
:
shiyan2.Properties.Resources.space;
sqq3.Image=global:
:
shiyan2.Properties.Resources.space;
if(birdTemp1.FirstBlood<=0)
{
bird1.Click-=newEventHandler(pictureBox2_Click);
bird1.Image=global:
:
shiyan2.Properties.Resources.whiteh;
}
if(birdTemp2.FirstBlood<=0)
{
bird2.Click-=newEventHandler(bird2_Click);
bird2.Image=global:
:
shiyan2.Properties.Resources.redh;
}
if(birdTemp3.FirstBlood<=0)
{
bird3.Click-=newEventHandler(pictureBox3_Click);
bird3.Image=global:
:
shiyan2.Properties.Resources.blackh;
}
}
英雄的会心一击
怪物会心一击
为某些怪物和某些英雄定义被攻击事件,当遇到攻击以后可以自动反击
publicpartialclassForm1:
Form
{
publicboolYS=false;
publicdelegatevoidSecAtt(QQqq,Birdbird);
publiceventSecAttSecondAttack;
publicvoidSAttack(QQqq,Birdbird)
{
if(SecondAttack!
=null)
SecondAttack(qq,bird);
}
publicvoidBigBanBan(Form1form1)
{
form1.SecondAttack+=BigBan;
}
publicvoidBigBan(QQqq,Birdbird)
{
bird.SecondLoc=newPoint
(
qq.FirstLoc.X,
qq.FirstLoc.Y+qq.Size.Height-300
);
qq.FirstBlood=qq.FirstBlood-60;
YS=true;
}
privatevoidpictureBox2_Click(objectsender,EventArgse)
{
inti=ran.Next(1,10);
if(!
mm.YS&&!
qq.YS&&!
birdTemp1.YS&&!
birdTemp2.YS&&!
birdTemp3.YS)
{
if(i%2==0&&(qq.FirstBlood>0||mm.FirstBlood>0))
{
smallqq();
}
else
{
//birdTemp1.FirstBlood=birdTemp1.FirstBlood-qq.AttackPower+birdTemp1.DefeatPower+birdTemp1.AddDefeat;
if(flag1)
{
b1=birdTemp1.FirstBlood;
flag1=false;
}
if(flag4)
{
q1=qq.FirstBlood;
flag4=false;
}
if(flag5)
{
q2=mm.FirstBlood;
flag5=false;
}
//Birdpb=(Bird)sender;
//birdTemp2.FirstBlood=birdTemp2.FirstBlood-qq.AttackPower+birdTemp2.DefeatPower;
if(qq.FirstBlood>0)
{
qq.Move(birdTemp1,qq);
QQNewPlace(pp,qq);
BarValue=100*birdTemp1.FirstBlood/b1;
Judge(progressBar3);
LaterTime(1000);
qq.Move();
QQOldPlace(pp,qq);
if(birdTemp1.FirstBlood<=0)
{
bird1.Click-=newEventHandler(pictureBox2_Click);
gotoend;
}
LaterTime(1000);
}
if(birdTemp1.FirstBlood>0&&qq.FirstBlood>0)
{
//birdTemp1.BigBan(qq,birdTemp1);
SAttack(qq,birdTemp1);
BirdNewPlace(bird1,birdTemp1);
BarValue=100*qq.FirstBlood/q1;
Judge(progressBar1);
LaterTime(1000);
birdTemp1.Move();
BirdOldPlace(bird1,birdTemp1);
if(qq.FirstBlood<=0)
{
pp.Click-=newEventHandler(pp_Click);
pp.Image=global:
:
shiyan2.Properties.Resources.qqh;
}
LaterTime(1000);
}
if(mm.FirstBlood>0)
{
mm.Move(birdTemp1,mm);
QQNewPlace(mqq,mm);
BarValue=100*birdTemp1.FirstBlood/b1;
Judge(progressBar3);
LaterTime(1000);
mm.Move();
QQOldPlace(mqq,mm);
//progressBar3.SetBounds(501,30,120*birdTemp1.FirstBlood/200,16);
}
end:
if(birdTem
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 C# 实验 报告