/* Veidoja: Roberts Onzuls Grupa: 110 Nosaukums: Minesweeper Apraksts: Vienkārša minesweeper veida spēle tekstveidā Veidots: 29.05.2026 Programma: onlinegdb.com (C# (dotnet)) */ using System; namespace Minesweeper { // Abstrakta bāzes klase visiem lauka elementiem public abstract class LaukaElements { // Īpašības lauciņa stāvoklim public bool VaiAtverts { get; set; } = false; public bool VaiMina { get; set; } = false; // Abstrakta metode attēlošanai public abstract void Attilot(); } // Mantotā klase lauciņam public class ParastsLaucinis : LaukaElements { // Atribūts mīnu skaitam public int BlakusMinuSkaits { get; set; } = 0; // Konstruktors lauciņam public ParastsLaucinis(bool irMina) { this.VaiMina = irMina; } public override void Attilot() { if (!VaiAtverts) { Console.Write(". "); } else if (VaiMina) { Console.ForegroundColor = ConsoleColor.Red; Console.Write("* "); Console.ResetColor(); } else if (BlakusMinuSkaits > 0) { Console.Write(BlakusMinuSkaits + " "); } else { Console.Write(" "); } } } // Klase spēles loģikai public class Spele { // Privāti mainīgie un 2D masīvs lauka parametriem private int izmers; private int minuSkaits; private LaukaElements[,] galds; public Spele(int izmers, int minuSkaits) { this.izmers = izmers; this.minuSkaits = minuSkaits; this.galds = new LaukaElements[izmers, izmers]; InicializetLaukumu(); } // Laukuma sagatavošana private void InicializetLaukumu() { // For cikls laukuma aizpildīšanai for (int r = 0; r < izmers; r++) { for (int k = 0; k < izmers; k++) { galds[r, k] = new ParastsLaucinis(false); } } Random rand = new Random(); int izvietotasMinas = 0; while (izvietotasMinas < minuSkaits) { int r = rand.Next(izmers); int k = rand.Next(izmers); if (!galds[r, k].VaiMina) { galds[r, k].VaiMina = true; izvietotasMinas++; } } SaskaititVisasBlakusMinas(); } private void SaskaititVisasBlakusMinas() { for (int r = 0; r < izmers; r++) { for (int k = 0; k < izmers; k++) { if (galds[r, k] is ParastsLaucinis) { ParastsLaucinis pl = (ParastsLaucinis)galds[r, k]; pl.BlakusMinuSkaits = SaskaititMinasApkart(r, k); } } } } // Metode ar 2 parametriem skaita cik mīnas ap lauciņu private int SaskaititMinasApkart(int rinda, int kolonna) { int skaits = 0; for (int dr = -1; dr <= 1; dr++) { for (int dk = -1; dk <= 1; dk++) { int jaunaR = rinda + dr; int jaunaK = kolonna + dk; if (jaunaR >= 0 && jaunaR < izmers && jaunaK >= 0 && jaunaK < izmers) { if (galds[jaunaR, jaunaK].VaiMina) { skaits++; } } } } return skaits; } // Izvada laukumu konsolē public void ZimetLaukumu(bool paraditVisu = false) { Console.Clear(); Console.WriteLine("Minesweeper"); Console.WriteLine("Komandas: '1' - Atvērt, '2' - Instrukcija, '3' - Iziet\n"); Console.Write(" "); for (int k = 0; k < izmers; k++) Console.Write(k + " "); Console.WriteLine(); for (int r = 0; r < izmers; r++) { Console.Write(r + " "); for (int k = 0; k < izmers; k++) { if (paraditVisu) { galds[r, k].VaiAtverts = true; } galds[r, k].Attilot(); } Console.WriteLine(); } } // Rekursīva lauciņu atvēršana public void Atvert(int r, int k) { if (r < 0 || r >= izmers || k < 0 || k >= izmers || galds[r, k].VaiAtverts) return; galds[r, k].VaiAtverts = true; if (galds[r, k] is ParastsLaucinis) { ParastsLaucinis pl = (ParastsLaucinis)galds[r, k]; if (pl.BlakusMinuSkaits == 0 && !pl.VaiMina) { for (int dr = -1; dr <= 1; dr++) { for (int dk = -1; dk <= 1; dk++) { Atvert(r + dr, k + dk); } } } } } public bool VaiUkapaUzMinas(int r, int k) { return galds[r, k].VaiMina; } // For cikls uzvaras pārbaudei (Search) public bool ParbauditUzvaru() { for (int r = 0; r < izmers; r++) { for (int k = 0; k < izmers; k++) { if (!galds[r, k].VaiMina && !galds[r, k].VaiAtverts) { return false; } } } return true; } } class Program { static void Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; int laukumaIzmers = Math.Clamp(8, 5, 15); Spele spele = new Spele(laukumaIzmers, 10); bool speleAktiva = true; while (speleAktiva) { spele.ZimetLaukumu(); Console.Write("\nIzvēlies darbību (1-3): "); string izvele = Console.ReadLine(); // Switch sazarojums darbības izvēlei switch (izvele) { case "1": Console.Write("Ievadi rindu un kolonnu: "); string[] koordinatas = Console.ReadLine().Split(' '); // If...else sazarojums vai ir koordināšu laukā if (koordinatas.Length == 2 && int.TryParse(koordinatas[0], out int r) && int.TryParse(koordinatas[1], out int k)) { // If...else sazarojumi pārbaudei if (r >= 0 && r < laukumaIzmers && k >= 0 && k < laukumaIzmers) { if (spele.VaiUkapaUzMinas(r, k)) { spele.ZimetLaukumu(paraditVisu: true); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\n[BOOM] Tu zaudēji! Spēle beigusies."); Console.ResetColor(); speleAktiva = false; } else { spele.Atvert(r, k); if (spele.ParbauditUzvaru()) { spele.ZimetLaukumu(paraditVisu: true); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\nApsveicam! Tu uzvarēji!"); Console.ResetColor(); speleAktiva = false; } } } else { Console.WriteLine("Skaitlis ir ārpus laukuma! Spied Enter."); Console.ReadLine(); } } else { Console.WriteLine("Nepareizs formāts! Spied Enter."); Console.ReadLine(); } break; case "2": Console.WriteLine("\n[INSTRUKCIJA]: Atver visus lauciņus, kur nav mīnu. Cipars norāda mīnu skaitu apkārt."); Console.WriteLine("Spied Enter, lai atgrieztos."); Console.ReadLine(); break; case "3": Console.WriteLine("Paldies par spēli!"); speleAktiva = false; break; default: Console.WriteLine("Nepareiza izvēle! Spied Enter."); Console.ReadLine(); break; } } } } }