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
| Punktid | Kaadri viivitus | Tähed |
| 0-49 | 150ms | ★☆☆☆☆ |
| 50-99 | 130ms | ★★☆☆☆ |
| 100-149 | 110ms | ★★★☆☆ |
| 150-199 | 90ms | ★★★★☆ |
| 200+ | 50ms | ★★★★★ |

P-klahvile lisati paus

Lisasin peamenüü
