Uss mäng

Moodlest :

Toit :

public class Toit
{
    private Random rnd = new Random();
    private int ekraaniLaius;
    private int ekraaniKõrgus;
    public Punkt Asukoht { get; private set; }

    public Toit(int laius, int kõrgus)
    {
        ekraaniLaius = laius;
        ekraaniKõrgus = kõrgus;
        LooUusToit(); // Loome kohe alguses esimese toidu
    }

    public void LooUusToit()
    {
        int x = rnd.Next(2, ekraaniLaius - 2);
        int y = rnd.Next(2, ekraaniKõrgus - 2);
        Asukoht = new Punkt(x, y, '@'); // Toit näeb välja nagu '@'
        Asukoht.Joonista();
    }
}

Punkt :

// Määrab ära 4 võimalikku liikumissuunda
public enum Suund
{
    Üles, Alla, Vasakule, Paremale
}

public class Punkt
{
    public int X { get; set; }
    public int Y { get; set; }
    public char Sümbol { get; set; } // Näiteks '*' ussi jaoks, '@' toidu jaoks

    public Punkt(int x, int y, char sümbol)
    {
        X = x;
        Y = y;
        Sümbol = sümbol;
    }

    // See meetod joonistab punkti konsooli õigesse kohta
    public void Joonista()
    {
        Console.SetCursorPosition(X, Y);
        Console.Write(Sümbol);
    }

    // Puhastab eelmise asukoha (kui uss liigub edasi)
    public void Kustuta()
    {
        Console.SetCursorPosition(X, Y);
        Console.Write(' '); // Kirjutame tühiku peale
    }
}

Uss :

using System.Collections.Generic;
using System.Linq;

public class Uss
{
    private List<Punkt> keha = new List<Punkt>();
    public Suund PraeguneSuund { get; set; }

    public Uss(int algX, int algY, int pikkus)
    {
        PraeguneSuund = Suund.Paremale; // Alguses liigub paremale

        // Loome ussi algse keha
        for (int i = 0; i < pikkus; i++)
        {
            Punkt p = new Punkt(algX - i, algY, '*');
            keha.Add(p);
            p.Joonista();
        }
    }

    public void Liigu()
    {
        // 1. Leiame praeguse pea asukoha
        Punkt pea = keha.First();
        Punkt uusPea = new Punkt(pea.X, pea.Y, '*');

        // 2. Arvutame uue pea asukoha vastavalt suunale
        switch (PraeguneSuund)
        {
            case Suund.Paremale: uusPea.X++; break;
            case Suund.Vasakule: uusPea.X--; break;
            case Suund.Alla: uusPea.Y++; break;
            case Suund.Üles: uusPea.Y--; break;
        }

        // 3. Lisame uue pea listi algusesse ja joonistame
        keha.Insert(0, uusPea);
        uusPea.Joonista();

        // 4. Kustutame sabaotsa (viimase elemendi), et simuleerida liikumist
        Punkt saba = keha.Last();
        saba.Kustuta();
        keha.Remove(saba);
    }

    public Punkt HangiPea()
    {
        return keha.First();
    }

    public void Kasva()
    {
        // Kasvamine on lihtne - lisame saba lõppu lihtsalt uue nähtamatu punkti, 
        // mis järgmise liikumise ajal asendab päris saba.
        // Lihtsuse mõttes võime lihtsalt järgmisel liikumisel saba mitte kustutada!
        // Siin lisame lihtsalt ajutise koopia viimasest elemendist.
        keha.Add(new Punkt(keha.Last().X, keha.Last().Y, '*'));
    }
}

Program :

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        // Seadistame konsooli akna
        Console.WindowHeight = 20;
        Console.WindowWidth = 50;
        Console.CursorVisible = false;

        // Loome objektid
        Uss uss = new Uss(10, 10, 3);
        Toit toit = new Toit(Console.WindowWidth, Console.WindowHeight);

        // MÄNGU TSÜKKEL
        while (true)
        {
            // 1. Sisendi lugemine (kas kasutaja vajutas nooleklahvi?)
            if (Console.KeyAvailable)
            {
                ConsoleKeyInfo klahv = Console.ReadKey(true);
                // Muudame suunda, aga väldime tagurdamist
                if (klahv.Key == ConsoleKey.UpArrow && uss.PraeguneSuund != Suund.Alla) 
                    uss.PraeguneSuund = Suund.Üles;
                else if (klahv.Key == ConsoleKey.DownArrow && uss.PraeguneSuund != Suund.Üles) 
                    uss.PraeguneSuund = Suund.Alla;
                else if (klahv.Key == ConsoleKey.LeftArrow && uss.PraeguneSuund != Suund.Paremale) 
                    uss.PraeguneSuund = Suund.Vasakule;
                else if (klahv.Key == ConsoleKey.RightArrow && uss.PraeguneSuund != Suund.Vasakule) 
                    uss.PraeguneSuund = Suund.Paremale;
            }

            // 2. Objektide uuendamine
            uss.Liigu();
            Punkt pea = uss.HangiPea();

            // 3. Kas uss sõi toidu ära?
            if (pea.X == toit.Asukoht.X && pea.Y == toit.Asukoht.Y)
            {
                uss.Kasva();
                toit.LooUusToit();
            }

            // 4. Kas uss põrkas vastu seina? (Lihtne mängu lõpu kontroll)
            if (pea.X <= 0 || pea.X >= Console.WindowWidth - 1 || 
                pea.Y <= 0 || pea.Y >= Console.WindowHeight - 1)
            {
                Console.SetCursorPosition(15, 10);
                Console.WriteLine("MÄNG LÄBI!");
                break; // Murrame tsüklist välja
            }

            // Mängu kiirus (mida väiksem number, seda kiirem uss)
            Thread.Sleep(150); 
        }

        Console.ReadLine();
   

MänguSeaded :

public class MänguSeaded
{
    public int Laius { get; set; }
    public int Kõrgus { get; set; }
    public int KiirusMS { get; set; } // Viivitus millisekundites

    public MänguSeaded(int tase)
    {
        // Raskusastme valik (1 - Lihtne, 2 - Keskmine, 3 - Raske)
        switch (tase)
        {
            case 1: KiirusMS = 200; Laius = 40; Kõrgus = 20; break;
            case 2: KiirusMS = 100; Laius = 30; Kõrgus = 15; break;
            case 3: KiirusMS = 50; Laius = 20; Kõrgus = 10; break;
            default: KiirusMS = 150; Laius = 40; Kõrgus = 20; break;
        }
    }
}

Teeme paar uuendusi

Nüüd mänd pole lihtsalt konsool mäng, praegu siin on lisatud ilus liides

Lisasin kiirus

PunktidKaadri viivitus Tähed
0-49150ms★☆☆☆☆
50-99130ms★★☆☆☆
100-149110ms★★★☆☆
150-19990ms★★★★☆
200+50ms★★★★★

P-klahvile lisati paus

Lisasin peamenüü