C#练手之项目10-1之正义永不缺席

										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,结束游戏。

目标生成内容:C#练手之项目10-1之正义永不缺席_第1张图片
思路讲解
这一个题目涉及到的知识点其实吧,很简单。
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.处理逻辑
这里是带佬给出来的思路
C#练手之项目10-1之正义永不缺席_第2张图片
图都有了,自己看呗,不会留言区见。
于是我们就处理一下下面的逻辑问题。

  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:我可真想把这玩意放到无限大.
今天完。

你可能感兴趣的:(c#)