C#实例练手之test10-1 ————2020/11/20
写作目的:相互学习交流,提供实例,练习C#,有啥问题,可以直接留言,也可以加我vx:poyeezy996.

目标题目:
1.参照P209例8.7进行实验,要求用到抽象类以及抽象方法。
2. 定义玩家类(Player)、枪类(Gun)。以及派生于玩家类的警察类(Police)
和坏人类(Robber),派生于枪类的手枪类(Handgun)和机关枪类
(MachineGun);
3. 手枪类可以造成1点初始伤害值,并且发出的声音为“biubiu” 。机关枪类可
以造成2点初始伤害值,发出的声音为“boomboom”

4. 警察类有初始20点血量,可以使用手枪对坏人射击,造成手枪的伤害值的伤害,
也可以选择前进一步,使得手枪伤害值提高100%;坏人类有初始20点血量,可
以使用机关枪对警察射击,造成机关枪的伤害值的伤害,也可以选择前进一步,
使得机关枪伤害值提高50%。
5. 在Main函数中循环坏人与警察进行选择判断,分别轮流输入数字进行操作。前
进增加伤害:1,开枪造成伤害:2。
6. 直至一方血量低于0,结束游戏。

目标生成内容:
思路讲解:
这一个题目涉及到的知识点其实吧,很简单。
1.抽象类以及抽象方法
(首先来看看抽象类和抽象方法是什么呢)
自己看书或者百度吧,记得抽象类不能实例化就行了。
1.1基本语法
1.1.1
抽象类:
abstarct class 类名{ //声明类成员 }
1.1.2
抽象方法:
abstract [修饰符] 返回值类型 方法名 ([形参列表]);
2.定义基类和派生类
using System; namespace test10_1 { public abstract class Player { public int hp
; //血量 public abstract void forward(); public Player(int hp) { this.hp = hp; } }
class Police : Player { public override void forward() { Console.WriteLine(
"前进1步,伤害提升100%"); } public Police(int hp=20) : base(hp) { }//定义初始值 } class
Robber : Player { public override void forward() { Console.WriteLine(
"前进1步,伤害提升50%"); } public Robber(int hp=20) : base(hp) { } } abstract class Gun
{ public string voice; public double damage; public abstract void shoot();
public Gun(string voice,double damage) { this.voice = voice;this.damage = damage
; } } class Handgun:Gun { public override void shoot() { Console.Write(
"警察使用手枪向坏人射击。"); } public Handgun(string voice="biu~biu", double damage=1) :
base(voice,damage) { } } class Machinegun : Gun { public override void shoot() {
Console.Write("坏人使用手枪向警察射击。"); } public Machinegun(string voice="boom~boom",
double damage=2) : base(voice,damage) { } }
对于上面的代码,根据题目要求,基类有Player、Gun,派生类分别是Police、Robber;Handgun、Machinegun.

要完成动作,前进和射击的功能,我们在基类中分别定义抽象方法forward、shoot,在派生类中,对抽象方法重写,并对属性给定默认值,接下来对后面的对象创建,我们就可以不用给定值了
3.处理逻辑
这里是带佬给出来的思路

图都有了,自己看呗,不会留言区见。
于是我们就处理一下下面的逻辑问题。
class testprogram { static void Main() { int i; int people=1; Police pc = new
Police(); Robber rb = new Robber(); Handgun hg = new Handgun(); Machinegun mg =
new Machinegun(); Console.WriteLine("警察共有"+pc.hp+"滴血,射击一次造成"+hg.damage+"伤害");
Console.WriteLine("坏人共有" + rb.hp + "滴血,射击一次造成" + mg.damage + "伤害"); Console.
WriteLine("开始游戏:"); while (pc.hp > 0 && rb.hp > 0) { if (people % 2 != 0) {
Console.Write("坏人选择操作:1:前进1步,伤害提高50%;2:射击,造成"+ mg.damage +"点伤害。请选择:"); i =
Convert.ToInt32(Console.ReadLine()); switch (i) { case 1: rb.forward(); mg.
damage*= 1.5; people += 1; break; case 2: mg.shoot(); Console.WriteLine(mg.voice
); pc.hp -= (int)mg.damage; if(pc.hp<=0){Console.WriteLine("警察死亡!");} else{
Console.WriteLine("警察受到" + mg.damage + "点伤害,还剩" + pc.hp + "血"); } people += 1;
break; } } else if (people % 2 == 0) { Console.Write(
"警察选择操作:1:前进1步,伤害提高100%;2:射击,造成"+ hg.damage +"点伤害。请选择:"); i = Convert.ToInt32(
Console.ReadLine()); switch (i) { case 1: pc.forward(); hg.damage *= 2; people +
= 1; break; case 2: hg.shoot(); Console.WriteLine(hg.voice); rb.hp -= (int)hg.
damage; if (rb.hp <= 0) { Console.WriteLine("坏人死亡!"); } else { Console.WriteLine
("坏人受到" + hg.damage + "点伤害,还剩" + rb.hp + "血"); } people += 1; break; } } }
Console.ReadLine(); } } }
ps:上面两行代码在一起才能运行哦
嗯哼,首先定义一个i作为派生类在行动时的选择;people作为后面判定该谁进行选择用。
直接看,while一个都不能死,死了就不玩了。
if看到谁行动了
switch看选择啥选择中,把伤害算一下,people要累加。单数时坏人,双数是jc
于是代码就这样:你一枪我一枪的,演起来了电视桥段,最终正义或许回来迟,但是他永远不会缺席。

PS:我可真想把这玩意放到无限大.
今天完。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信