Masken

Bakgrund

I en tid då alla använde telefoner från Nokia (eller eventuellt Ericsson) så var spelet Masken, eller ”Snake”, något som alla kände till. Spelet är ett bra exempel på en enkel idé som ändå ger mycket spelglädje.

Här hittar du källkod till Youtube-genomgången.

Masken i Console

Snake.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace Snake
{
    class Program
    {
        struct Point
        {
            public Point(int x, int y)
            {
                X = x;
                Y = y;
            }

            public int X { get; }
            public int Y { get; }
        }

        static void Main(string[] args)
        {
            string[,] map =
            {
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "},
                {". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". ", ". "}         
            };

            Point direction = new Point(1, 0);
            List<Point> masken = new List<Point>();
            masken.Add(new Point(4, 4));
            masken.Add(new Point(4, 4));
            masken.Add(new Point(4, 4));
           
            while (true)
            {
                Console.Clear();

                //Rita spelet
                for (int y = 0; y < map.GetLength(0); y++)
                {
                    for (int x = 0; x < map.GetLength(1); x++)
                    {
                        Point currentPosition = new Point(x, y);

                        if (masken.Contains(currentPosition))
                        {
                            Console.BackgroundColor = ConsoleColor.Blue;
                            Console.Write("  ");
                            Console.BackgroundColor = ConsoleColor.Black;
                        }
                        else
                            Console.Write(map[y, x]);
                    }
                    Console.WriteLine();
                }

                //Vänta på input i ca 500ms
                Stopwatch sw = Stopwatch.StartNew();
                while (sw.ElapsedMilliseconds < 500)
                {
                    if (Console.KeyAvailable)
                    {
                        var key = Console.ReadKey(true);
                        if (key.Key == ConsoleKey.LeftArrow)
                        {
                            direction = new Point(direction.Y, -direction.X);
                        }

                        if (key.Key == ConsoleKey.RightArrow)
                        {
                            direction = new Point(-direction.Y, direction.X);
                        }
                    }
                }

                //Göra förflyttning och logik etc.
                Point head = masken[0];
                Point newPosition = new Point(head.X + direction.X, head.Y + direction.Y);
                masken.Insert(0, newPosition);
                masken.RemoveAt(masken.Count - 1);
                
            }
        }
    }
}
Scroll to top