/* Veidoja: Gustavs Skripa Grupa: 110 Praktiskais darbs: C# RPG spēle Izmantotais compiler: www.onlinegdb.com (C# .NET) */ using System; namespace NeonGridRPG { // Interfeisi public interface IEquipment { string Name { get; } int Damage { get; } } public interface IProgram { string Name { get; } int Damage { get; } int Cost { get; } string Effect { get; } } public interface ICombatant { string Name { get; } int Integrity { get; } int ProcPower { get; } int Firewall { get; } double Overclock { get; } void Equip(IEquipment equipment); void ExecuteProgram(ICombatant target, IProgram program); void ReceiveDamage(int amount); void PrintStatus(); } // Implementācijas public class Ierocis : IEquipment { public string Name { get; } public int Damage { get; } public Ierocis(string name, int damage) { Name = name; Damage = damage; } } public class CyberProgram : IProgram { public string Name { get; } public int Damage { get; } public int Cost { get; } public string Effect { get; } public CyberProgram(string name, int damage, int cost, string effect) { Name = name; Damage = damage; Cost = cost; Effect = effect; } } // Bāzes klase ar mantošanu public abstract class OperativeBase : ICombatant { public string Name { get; protected set; } public int Integrity { get; protected set; } public int ProcPower { get; protected set; } public int Firewall { get; protected set; } public double Overclock { get; protected set; } protected IEquipment equippedWeapon; protected OperativeBase(string name, int integrity, int procPower, int firewall, double overclock) { Name = name; Integrity = integrity; ProcPower = procPower; Firewall = firewall; Overclock = overclock; } public virtual void Equip(IEquipment equipment) { equippedWeapon = equipment; } public virtual void ExecuteProgram(ICombatant target, IProgram program) { if (equippedWeapon == null) { Console.WriteLine($"KĻŪDA: {Name} nav aprīkots ar ieroci!"); return; } Console.WriteLine($"\n{Name} palaiž '{program.Name}' izmantojot {equippedWeapon.Name} pret {target.Name}"); if (ProcPower < program.Cost) { Console.WriteLine($"KĻŪDA: {Name} nepietiek Skaitļošanas Jaudas (RAM)!"); return; } double totalDamage = ((program.Damage + equippedWeapon.Damage) * Overclock) - target.Firewall; if (totalDamage < 0) totalDamage = 0; ProcPower -= program.Cost; target.ReceiveDamage((int)Math.Round(totalDamage)); Console.WriteLine($"IZPILDE: {target.Name} saņem {(int)Math.Round(totalDamage)} sistēmas bojājumus!"); Console.WriteLine($"{Name} atlikusī jauda: {ProcPower} RAM."); Console.WriteLine($"{target.Name} atlikusī integritāte: {target.Integrity} HP."); } public virtual void ReceiveDamage(int amount) { Integrity -= amount; if (Integrity < 0) Integrity = 0; } public virtual void PrintStatus() { string weaponName = equippedWeapon != null ? equippedWeapon.Name : "Nav ierocis"; Console.WriteLine($"Spēlētājs: {Name} ({weaponName}) HP: {Integrity} RAM: {ProcPower} DEF: {Firewall} AMP: x{Overclock}"); } } // Konkrēta klase, kas manto bāzi public class CyberOperative : OperativeBase { public CyberOperative(string name, int integrity, int procPower, int firewall, double overclock) : base(name, integrity, procPower, firewall, overclock) { } // Piemērs kā pārrakstīt uzvedību, ja vajadzīgs public override void ExecuteProgram(ICombatant target, IProgram program) { // Var pievienot īpašas spējas vai animācijas šeit base.ExecuteProgram(target, program); } } // Programmas palaišanas piemērs class Program { static void Main(string[] args) { Console.WriteLine("NeonGrid: KiberKarš"); CyberOperative neonGamer = new CyberOperative("NeonGamer", 150, 300, 10, 1.5); CyberOperative anonTyper = new CyberOperative("AnonTyper", 250, 100, 40, 1.1); Ierocis katana = new Ierocis("Katana", 40); Ierocis kriketaNuja = new Ierocis("Kriketa nūja", 20); neonGamer.Equip(katana); anonTyper.Equip(kriketaNuja); CyberProgram neuralShock = new CyberProgram("NeuralShock", 60, 50, "Glitch"); CyberProgram dataLeech = new CyberProgram("DataLeech", 35, 20, "Drain"); Console.WriteLine("\nSPĒLĒTĀJI "); neonGamer.PrintStatus(); anonTyper.PrintStatus(); Console.WriteLine("\nSākas Spēle"); neonGamer.ExecuteProgram(anonTyper, neuralShock); anonTyper.ExecuteProgram(neonGamer, dataLeech); neonGamer.ExecuteProgram(anonTyper, dataLeech); anonTyper.ExecuteProgram(neonGamer, neuralShock); Console.WriteLine("\nBeigas"); Console.ReadLine(); } } }