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:我可真想把這玩意放到無限大.
今天完,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225916.html
標籤:其他
上一篇:無人機——遙控器篇(三)
