完成模擬英雄聯盟1V1對戰的回合制文字遊戲
具體要求如下:
-
英雄初始沒有學習技能,也沒有裝備
-
英雄每回合可以
1 選擇學習⼀個技能【每個英雄最多學習4個技能】
或給學過的技能升⼀級【每個技能最⾼3級,默認1級】 -
升級後的技能傷害有所提⾼
特殊效果可以酌情設計【眩暈、沉默等】(選做) -
英雄每回合可以選擇行動⼀次(三種行動可選,但會因爲所處狀態有所限制)
1、【普通攻擊】(若被眩暈,則不可做此操作)
普通攻擊造成傷害
造成傷害之後,還會獲得相應的⾦錢2、或【技能攻擊】(若被眩暈或者沉默,則不可做此操作)
技能攻擊造成傷害
造成傷害之後,還會獲得相應的⾦錢
技能攻擊還可以使對⽅【(選做)】
【眩暈(每三回合能使⽤⼀次)】下回合對⽅不能攻擊
【沉默(每兩回合能使⽤⼀次)】下回合對⽅不能釋放技能
【其他技能攻擊模式可⾃⾏設計】3、 或購買⼀件裝備(任意狀態皆可做此操作)
-
購買裝備需要⽀付⾦錢
-
每個英雄最多購買6件裝備
-
兩個英雄回合交替,直⾄⼀⽅英雄死亡
需求分析:
首先,我們肯定需要一個英雄類,一個裝備類,一個技能類,一個商店類,一個裝備類型的枚舉,一個英雄狀態的枚舉,一個初始化操作的程序入口(main)。當然還可以細分裝備的種類等等,博主這裏偷懶就沒有做細分,武器裝備和消耗品都放在一起,讀者可以自行添加(通過子類繼承裝備類重寫可以實現)
下面開始上代碼:
一、裝備類
using System;
namespace textGame
{
/// <summary>
/// 裝備類
/// </summary>
class Equipment
{
/// <summary>
/// 裝備名稱
/// </summary>
public string name;
/// <summary>
/// 攻擊加成
/// </summary>
public int adUp;
/// <summary>
/// 法強加成
/// </summary>
public int apUP;
/// <summary>
/// 護甲加成
/// </summary>
public int armorUp;
/// <summary>
/// 魔抗加成
/// </summary>
public int magicResistanceUp;
/// <summary>
/// 購買價格
/// </summary>
public int buyPrice;
/// <summary>
/// 出售價格
/// </summary>
public int sellPrice;
/// <summary>
/// 裝備類型
/// </summary>
public EquipmentType type;
/// <summary>
/// 回覆血量
/// </summary>
public int hp;
public Equipment(string name, int adUp, int apUP, int armorUp, int magicResistanceUp, int buyPrice, int sellPrice, EquipmentType type, int hp)
{
this.name = name;
this.adUp = adUp;
this.apUP = apUP;
this.armorUp = armorUp;
this.magicResistanceUp = magicResistanceUp;
this.buyPrice = buyPrice;
this.sellPrice = sellPrice;
this.type = type;
this.hp = hp;
}
/// <summary>
/// 裝備詳情介紹方法
/// </summary>
public void Introduce()
{
if (type == EquipmentType.Normal)
{
Console.WriteLine($"-------【裝備名稱】:{name}-------");
Console.WriteLine($"【裝備花費:{buyPrice}】");
Console.WriteLine($"【裝備類型:普通類型】");
Console.WriteLine($"【攻擊加成:{adUp}】");
Console.WriteLine($"【法術加成:{apUP}】");
Console.WriteLine($"【護甲加成:{armorUp}】");
Console.WriteLine($"【魔抗加成:{magicResistanceUp}】");
Console.WriteLine("---------------------------------------------");
}
else
{
Console.WriteLine($"-------【裝備名稱】:{name}-------");
Console.WriteLine($"【裝備花費:{buyPrice}】");
Console.WriteLine($"【裝備類型:消耗品】");
Console.WriteLine($"【裝備回覆生命值:{hp}】");
Console.WriteLine("---------------------------------------------");
}
}
}
}
二、裝備類型枚舉
namespace textGame
{
/// <summary>
/// 裝備類型的枚舉
/// </summary>
enum EquipmentType
{
/// <summary>
/// 普通類型
/// </summary>
Normal,
/// <summary>
/// 消耗品
/// </summary>
Consumables
}
}
三、技能類
using System;
namespace textGame
{
/// <summary>
/// 技能類
/// </summary>
class Skill
{
/// <summary>
/// 技能名稱
/// </summary>
public string name;
/// <summary>
/// 技能等級
/// </summary>
public int level;
/// <summary>
/// 技能附加狀態
/// </summary>
public State state;
/// <summary>
/// 是否學習了該技能
/// </summary>
public bool isStudy;
/// <summary>
/// 技能傷害
/// </summary>
public int dmg;
/// <summary>
/// 技能CD
/// </summary>
public int cd;
/// <summary>
/// 記錄技能cd情況
/// </summary>
public int cdCount;
/// <summary>
/// 技能升級
/// </summary>
public bool LevelUp()
{
if (isStudy == true)
{
if (level < 3)
{
level++;
Console.WriteLine($"技能{name}升級成功!");
return true;
}
else
{
Console.WriteLine("技能已滿級!");
return false;
}
}
else
{
Console.WriteLine("該技能尚未學習,無法升級!");
return false;
}
}
/// <summary>
/// 學習技能
/// </summary>
public bool StudySkill()
{
//判斷是否學習過
if (isStudy == false)
{
isStudy = true;
Console.WriteLine($"技能{name}學習成功!");
return true;
}
else
{
Console.WriteLine("你已經學習過這個技能了,請選擇升級技能");
return false;
}
}
public Skill(string name, State state, bool isStudy, int dmg, int cd)
{
this.name = name;
level = 1;
this.state = state;
this.isStudy = isStudy;
this.dmg = dmg;
this.cd = cd;
cdCount = cd;
}
/// <summary>
/// 技能介紹方法
/// </summary>
public void Introduce()
{
Console.WriteLine($"-------【技能名稱】:{name}-------");
Console.WriteLine($"【技能等級】:{level}");
Console.WriteLine($"【技能類型】:讓敵方{state}");
Console.WriteLine($"【技能基礎傷害】:{dmg}");
Console.WriteLine($"【技能等級傷害加成】:{(level - 1) * 100}");
Console.WriteLine($"【技能冷卻時間】:每{cd}回合使用一次");
Console.WriteLine("---------------------------------------------");
}
}
}
四、英雄狀態的枚舉
namespace textGame
{
/// <summary>
/// 英雄狀態的枚舉
/// </summary>
enum State
{
/// <summary>
/// 普通
/// </summary>
Normal,
/// <summary>
/// 眩暈
/// </summary>
Dizziness,
/// <summary>
/// 沉默
/// </summary>
Silence
}
}
五、商店類
using System.Collections.Generic;
namespace textGame
{
/// <summary>
/// 商店類
/// </summary>
class Store
{
/// <summary>
/// 裝備倉庫
/// </summary>
public static List<Equipment> store = new List<Equipment>();
/// <summary>
/// 介紹商店所有裝備信息
/// </summary>
public static void Introduce()
{
foreach (var item in store)
{
item.Introduce();
}
}
}
}
六、英雄類
using System;
using System.Collections.Generic;
namespace textGame
{
/// <summary>
/// 英雄類
/// </summary>
class Hero
{
/// <summary>
/// 英雄名稱
/// </summary>
public string name;
/// <summary>
/// 英雄血量
/// </summary>
public int hp;
/// <summary>
/// 英雄擁有金錢
/// </summary>
public int money;
/// <summary>
/// 英雄基礎攻擊力
/// </summary>
public int ad;
/// <summary>
/// 英雄基礎法強
/// </summary>
public int ap;
/// <summary>
/// 英雄基礎護甲
/// </summary>
public int armor;
/// <summary>
/// 英雄基礎魔抗
/// </summary>
public int magicResistance;
/// <summary>
/// 裝備加成魔抗
/// </summary>
public int magicResistanceUp;
/// <summary>
/// 裝備護甲加成
/// </summary>
public int armorUp;
/// <summary>
/// 裝備加成法強
/// </summary>
public int apUp;
/// <summary>
/// 裝備加成攻擊力
/// </summary>
public int adUp;
/// <summary>
/// 英雄所有技能
/// </summary>
public List<Skill> skills;
/// <summary>
/// 英雄裝備欄
/// </summary>
public List<Equipment> equipments;
/// <summary>
/// 英雄狀態
/// </summary>
public State state;
/// <summary>
/// 學習技能
/// </summary>
/// <param name="num"></param>
public bool StudySkill(int num)
{
//調用技能學習方法
return skills[num].StudySkill();
}
/// <summary>
/// 升級技能
/// </summary>
/// <param name="num"></param>
public bool UpgradeSkill(int num)
{
//調用技能升級方法
return skills[num].LevelUp();
}
/// <summary>
/// 英雄普通攻擊方法
/// </summary>
public bool Attack(Hero hero)
{
//被攻擊的英雄掉血
hero.hp -= (ad + adUp);
Console.WriteLine($"{name}對{hero.name}使用了普通攻擊");
Console.WriteLine($"對{hero.name}造成了{ad + adUp}點傷害");
Console.WriteLine($"{hero.name}剩餘血量:{hero.hp}");
Console.WriteLine($"{name}獲得了{(ad + adUp) * 10}的金錢");
//攻擊獲得金錢
money += (ad + adUp) * 10;
Console.WriteLine($"{name}當前擁有的金錢數量是{money}");
//判斷被攻擊者是否死亡
if (hero.hp <= 0)
{
Console.WriteLine($"{hero.name}已經死亡!");
return true;
}
return false;
}
/// <summary>
/// 英雄技能攻擊方法
/// </summary>
/// <param name="hero">被攻擊的英雄</param>
/// <param name="num"></param>
/// <returns></returns>
public bool AttackBySkill(Hero hero, Skill skill)
{
skill.cdCount = 0;
//被攻擊的英雄掉血
hero.hp -= skill.dmg * skill.level;
hero.state = skill.state;
Console.WriteLine($"{name}對{hero.name}使用了{skill.name}");
Console.WriteLine($"對{hero.name}造成了{skill.dmg * skill.level}點傷害");
Console.WriteLine($"{hero.name}被{name}{skill.state}了");
Console.WriteLine($"{hero.name}剩餘血量:{hero.hp}");
Console.WriteLine($"{name}獲得了{skill.dmg * skill.level * 10}的金錢");
//攻擊所得金錢
money += skill.dmg * skill.level * 10;
Console.WriteLine($"{name}當前擁有的金錢數量是{money}");
//判斷被攻擊者是否死亡
if (hero.hp <= 0)
{
Console.WriteLine($"{hero.name}被擊殺了");
return true;
}
return false;
}
/// <summary>
/// 購買裝備方法
/// </summary>
public bool BuyEquipment(Equipment equipment)
{
//限制購買數量
if (equipments.Count > 6)
{
Console.WriteLine($"{name}不能再購買更多的裝備了!");
return true;
}
if (equipment == null)
{
Console.WriteLine("請輸入正確的指令!");
return false;
}
//判斷所有金錢是否足夠購買
if (money < equipment.buyPrice)
{
Console.WriteLine($"【{name}當前沒有足夠的金錢】");
return false;
}
else if (equipment.type == EquipmentType.Consumables)
{
hp += equipment.hp;
money -= equipment.buyPrice;
Console.WriteLine($"【購買{equipment.name}成功!】");
Console.WriteLine($"【{name}恢復了{equipment.hp}點生命】");
Console.WriteLine($"【{name}當前的血量是{hp}】");
return true;
}
else
{
equipments.Add(equipment);
Console.WriteLine($"{name}購買了{equipment.name},{name}變強了!");
//扣除金錢
money -= equipment.buyPrice;
//計算裝備加成
adUp += equipment.adUp;
apUp += equipment.apUP;
armorUp += equipment.armorUp;
magicResistanceUp += equipment.magicResistanceUp;
return true;
}
}
public Hero(string name, int hp, int ad, int ap, int armor, int magicResistance, List<Skill> skills)
{
this.name = name;
this.hp = hp;
money = 0;
this.ad = ad;
this.ap = ap;
this.armor = armor;
this.magicResistance = magicResistance;
magicResistanceUp = 0;
armorUp = 0;
apUp = 0;
adUp = 0;
this.skills = skills;
equipments = new List<Equipment>();
state = State.Normal;
}
/// <summary>
/// 介紹英雄技能方法
/// </summary>
public void IntroduceSkill()
{
foreach (var item in skills)
{
item.Introduce();
}
}
/// <summary>
/// 開始PK
/// </summary>
public Hero PKWith(Hero hero)
{
Console.WriteLine("------------------------------");
Console.WriteLine($"【{name}的回合】");
IntroduceSkill();
//控制學習技能的循環的標記
bool studyFlag = true;
//控制購買或攻擊的循環的標記
bool flag = true;
//如果所有技能都已經滿級,不再進入技能相關的循環
if (skills[0].level == 3 && skills[1].level == 3 && skills[2].level == 3 && skills[3].level == 3)
{
Console.WriteLine("您的所有技能都已滿級!");
studyFlag = false;
}
//控制技能學習與升級的循環
while (studyFlag)
{
Console.WriteLine("請選擇學習技能還是升級技能:0-學習,1-升級");
switch (Console.ReadLine())
{
case "0":
Console.WriteLine("請輸入技能編號:");
int num01 = Int32.Parse(Console.ReadLine());
//如果學習成功,標記改爲false結束循環
if (StudySkill(num01))
{
studyFlag = false;
}
break;
case "1":
Console.WriteLine("請輸入技能編號:");
int num02 = Int32.Parse(Console.ReadLine());
//如果升級成功,標記改爲false結束循環
if (UpgradeSkill(num02))
{
studyFlag = false;
}
break;
default:
Console.WriteLine("您輸入的指令不正確!");
break;
}
}
//控制每回合行動的循環
while (flag)
{
//首先判斷英雄當前所處的狀態
if (state == State.Normal)
{
Console.WriteLine($"{name}當前的狀態是:{state}");
Console.WriteLine("********************************");
Console.WriteLine("請輸入指令:0-購買裝備,1-普通攻擊,2-技能攻擊");
}
else if (state == State.Silence)
{
Console.WriteLine($"{name}當前的狀態是:{state}");
Console.WriteLine("********************************");
Console.WriteLine("請輸入指令:0-購買裝備,1-普通攻擊");
}
else
{
Console.WriteLine($"{name}當前的狀態是:{state}");
Console.WriteLine("********************************");
Console.WriteLine("請輸入指令:0-購買裝備");
}
switch (Console.ReadLine())
{
case "0":
Console.WriteLine($"{name}正在購買裝備。。。");
Store.Introduce();
Console.WriteLine("請輸入你要購買的裝備的編號:(輸入666退出)");
int num03 = Int32.Parse(Console.ReadLine());
//判斷指令決定是否退出行動並結束本回合
if (num03 == 666)
{
flag = false;
break;
}
else if (BuyEquipment(Store.store[num03]))
{
flag = false;
}
break;
case "1":
//根據英雄狀態決定是否可以執行此操作
if (state == State.Dizziness)
{
Console.WriteLine($"{name}在當前狀態下不能執行此操作!");
break;
}
//判斷英雄是否死亡已決定是否結束遊戲
if (Attack(hero))
{
return this;
}
flag = false;
break;
case "2":
//根據英雄狀態決定是否可以執行此操作
if (state != State.Normal)
{
Console.WriteLine($"{name}在當前狀態下不能執行此操作!");
break;
}
Console.WriteLine($"{name}當前可以釋放以下技能。。。");
//用來保存所有可用的技能
List<Skill> usableSkill = new List<Skill>();
//查出所有已學且cd好的技能
foreach (var item in skills)
{
if (item.isStudy && item.cd == item.cdCount)
{
//將符合條件的技能放入可用技能的集合
usableSkill.Add(item);
item.Introduce();
}
}
Console.WriteLine("請輸入技能編號:");
int num04 = Int32.Parse(Console.ReadLine());
//判斷英雄是否死亡已決定是否結束遊戲
if (AttackBySkill(hero, usableSkill[num04]))
{
return this;
}
flag = false;
break;
default:
Console.WriteLine("請輸入正確的指令!");
break;
}
}
//英雄所有技能刷新cd時間一回合
foreach (var item in skills)
{
if (item.cdCount != item.cd)
{
item.cdCount++;
}
}
state = State.Normal;
//(這裏是用兩個英雄來回調用各自的PKWith()函數實現回合制,直到一方死亡)返回獲勝英雄
return hero.PKWith(this);
}
}
}
七、主函數
using System;
using System.Collections.Generic;
namespace textGame
{
class Program
{
static void Main(string[] args)
{
//新建亞索技能
Skill zhangangshan = new Skill("斬鋼閃", State.Dizziness, false, 100, 3);
Skill taqianzhan = new Skill("踏前斬", State.Normal, false, 100, 1);
Skill beishang = new Skill("悲傷的失戀", State.Silence, false, 100, 2);
Skill touqian = new Skill("偷錢", State.Normal, false, 100, 1);
//新建風行者技能
Skill shufuji = new Skill("束縛擊", State.Dizziness, false, 100, 3);
Skill qiangliji = new Skill("強力擊", State.Normal, false, 100, 1);
Skill jifengbu = new Skill("詛咒遺言", State.Silence, false, 100, 2);
Skill jizhonghuli = new Skill("集中火力", State.Normal, false, 100, 1);
//將亞索的技能放入一個集合
List<Skill> yasuoskills = new List<Skill>();
yasuoskills.Add(zhangangshan);
yasuoskills.Add(taqianzhan);
yasuoskills.Add(beishang);
yasuoskills.Add(touqian);
//將風行者的技能放入一個集合
List<Skill> fengxingskills = new List<Skill>();
fengxingskills.Add(shufuji);
fengxingskills.Add(qiangliji);
fengxingskills.Add(jifengbu);
fengxingskills.Add(jizhonghuli);
//新建裝備
Equipment sanxiangzhili = new Equipment("三相之力", 40, 10, 20, 10, 3000, 1750, EquipmentType.Normal, 0);
Equipment wujinzhiren = new Equipment("無盡之刃", 100, 0, 0, 0, 3500, 1750, EquipmentType.Normal, 0);
Equipment feizhaikuaileshui = new Equipment("肥宅快樂水", 40, 10, 20, 10, 3500, 1750, EquipmentType.Consumables, 500);
//將新建的裝備放入商店
Store.store.Add(sanxiangzhili);
Store.store.Add(wujinzhiren);
Store.store.Add(feizhaikuaileshui);
//新建英雄亞索
Hero yasuo = new Hero("疾風劍豪 亞索", 1500, 50, 0, 10, 10, yasuoskills);
//新建英雄風行者
Hero fengxing = new Hero("風行者", 1500, 50, 0, 10, 10, fengxingskills);
Console.WriteLine("遊戲開始!");
//定義一個英雄變量保存贏家
Hero winner = yasuo.PKWith(fengxing);
Console.WriteLine("---------------------------------------------");
Console.WriteLine($"經過一番鏖戰!{winner.name}獲得了勝利!");
}
}
}