/* Veidotājs: Tomass Dučkens Grupa: 110 Projekta nosaukums: Origo Trial Latvija Projekta apraksts: Teksta ceļojuma spēle, kur jānobrauc noteikts attālums ar nejaušiem notikumiem. Veidots: 2026. gadā 22. Maijā Compilers: https://www.onlinegdb.com/online_csharp_compiler */ using System; namespace galadarbs_OOP_110 { // OBLIGĀTĀ PRASĪBA: C# Enums (Izveidots un izmantots vismaz viens enum) public enum Notikums { Normal, // Parasts ceļš Bedre, // Negadījums / Zaudē HP Bonuss, // Atrasts bonuss / Iegūst HP Sastregums // Kavēklis / Tērē vairāk pārtikas } public interface ILietojams // Interfeiss priekšmetu lietošanai { void Lietot(); } public abstract class Prieksmets // Abstraktā klase priekšmetiem { public string Nosaukums { get; set; } public abstract void IzpilditEfektu(); } // Klase izmanto interfeisu ILietojams public class Speletajs : ILietojams // Spēlētāja klase kurā apvienoti visi mainīgie { public string Name { get; set; } private int _Hp; // Private modifikators protected bool irDzivs = true; // Protected modifikators public int Hp // Pareizi noformē Hp īpašība (C# Properties) { get { return _Hp; } set { _Hp = value; if (_Hp > 100) _Hp = 100; if (_Hp <= 0) { _Hp = 0; irDzivs = false; } } } public Speletajs(string name) // Konstruktors, kas izveido spēlētāju { this.Name = name; this.Hp = 100; // Automātiski izsauks set } // Pievienots virtual, lai metodi varētu pārdefinēt polimorfismam public virtual void ParaditStatusu() { Console.WriteLine($"{Name} - {Hp}% (Dzīvs: {irDzivs})"); } // Interfeisa metodes realizācija public void Lietot() { Console.WriteLine($"\n[SISTĒMA]: {Name} izmantoja aptieciņu un atjaunoja spēkus!"); this.Hp += 20; } } // JAUNA KLASE MANTOŠANAI UN POLIMORFISMAM public class VIPSpeletajs : Speletajs { public VIPSpeletajs(string name) : base(name) { } // Pārdefinēta metode (Polimorfisms) public override void ParaditStatusu() { Console.WriteLine($"[VIP CEĻOTĀJS] {Name} - {Hp}% (Dzīvs: {irDzivs})"); } } // Pievienots 'internal' internal class Program { static void Main(string[] args) { // Mainīgie un 5 dažādi datu tipi int attalumsLidzMerkim = 300; double partikaKg = 40.5; bool speleTurpinas = true; char izveleChar = ' '; long kopejiePunkti = 0L; // Piektais datu tips drošībai // Izveidojam Random objektu nejaušajiem mini notikumiem Random rand = new Random(); Console.WriteLine(" Origo Trial Latvija! "); // Izveidots otrā tipa objekts no mantotās klases VIPSpeletajs speletajs1 = new VIPSpeletajs("Ceļotājs"); speletajs1.ParaditStatusu(); Console.WriteLine("\n[Notiek sadursme, spēlētājs zaudē 40 HP]"); speletajs1.Hp -= 40; speletajs1.ParaditStatusu(); string[] pieturvietas = { "Rīga", "Bauska", "Iecava", "Platone" }; Console.WriteLine("\nMaršruts:"); for (int i = 0; i < pieturvietas.Length; i++) { Console.WriteLine($"- {pieturvietas[i]}"); } for (int i = 0; i < 2; i++) // Otrais for cikls { Console.Write("."); } Console.WriteLine("\nSākās brauciens!"); while (speleTurpinas) // Galvenais cikls { Console.WriteLine($"\nAtlicis ceļš: {attalumsLidzMerkim} km | Pārtika: {partikaKg} kg"); Console.WriteLine("Izvēlies: [1] Braukt | [2] Pirkt pārtiku | [3] Izmantot aptieciņu | [4] Padoties"); Console.Write("Tava izvēle: "); string ievade = Console.ReadLine(); if (string.IsNullOrEmpty(ievade)) continue; // break un continue prasība izveleChar = ievade[0]; switch (izveleChar) { case '1': Console.WriteLine("\nBraucam uz priekšu..."); attalumsLidzMerkim -= 75; partikaKg -= 5.4; speletajs1.Hp -= 15; // Pamata veselības zudums braucot kopejiePunkti += 100; // MINI NOTIKUMU (EVENTS) SISTĒMA, IZMANDOJOT ENUM // Nejauši saģenerē skaitli no 0 līdz 3 un pārvērš par Notikums enum tipu Notikums pasreizējaisNotikums = (Notikums)rand.Next(0, 4); if (pasreizējaisNotikums == Notikums.Bedre) { Console.WriteLine("[NOTIKUMS]: Tu iebrauci dziļā bedrē! Auto stipri satricinājās. ( -15 HP)"); speletajs1.Hp -= 15; } else if (pasreizējaisNotikums == Notikums.Bonuss) { Console.WriteLine("[BONUSS]: Ceļmalas stendā bez maksas saņēmi enerģijas dzērienu! (+10 HP, +50 Punkti)"); speletajs1.Hp += 10; kopejiePunkti += 50; } else if (pasreizējaisNotikums == Notikums.Sastregums) { Console.WriteLine("[NOTIKUMS]: Tu nokļuvi sastrēgumā pie būvdarbiem. Ilgi stāvot, tiek patērēts vairāk pārtikas! (-3.0 kg pārtika)"); partikaKg -= 3.0; } else { Console.WriteLine("[NOTIKUMS]: Ceļš ir tīrs un mierīgs, brauciens rit pēc plāna."); } speletajs1.ParaditStatusu(); break; case '2': try // Try..catch prasība un Type Casting { Console.Write("Cik kg pārtikas pirkt? "); int daudzums = Convert.ToInt32(Console.ReadLine()); partikaKg += daudzums; } catch { Console.WriteLine("Ha! neesi pareizi ievadījis vienību!!"); } break; case '3': speletajs1.Lietot(); // Izmanto interfeisa metodi spēles gaitā speletajs1.ParaditStatusu(); break; case '4': speleTurpinas = false; break; default: Console.WriteLine("Nepareiza izvēle! Izvēlies ciparu no 1 līdz 4."); break; } if (attalumsLidzMerkim <= 0) // If..else prasība uzvarai { Console.WriteLine("\nApsveicu! Tu sasniedzis mērķi!"); speleTurpinas = false; } else if (partikaKg <= 0 || speletajs1.Hp <= 0) // Zaudējuma nosacījums { Console.WriteLine("\nSpēles ir beigusies! Tev beidzās pārtika vai Hp."); speleTurpinas = false; } } PazinotBeigas(speletajs1.Name); // Izsauc metodes spēles noslēgumā PazinotBeigas(speletajs1.Name, attalumsLidzMerkim); double atlikums = IegutAtlikumu(partikaKg); Console.WriteLine($"Atlikusī pārtika: {atlikums} kg."); // Izmanto atgriezto vērtību Console.WriteLine($"\nKopā sesijā iegūtie punkti: {kopejiePunkti}"); Console.ReadLine(); } static void PazinotBeigas(string vards) { Console.WriteLine($"\nLietotājs {vards} pabeidza spēli."); } static void PazinotBeigas(string vards, int km) { int galaKm = Math.Max(0, km); // C# Math metodes prasība Console.WriteLine($"{vards} palika {galaKm} km līdz finišam."); } static double IegutAtlikumu(double ediens) // Metode, kas atgriež vērtību { try { return ediens; } catch { return 0.0; } } } }