0

C# コンソール アプリケーションを使用してスネーク ゲームを作成しています。ヘビの座標を格納するために 2D 配列を使用しています。新しい座標を最初の要素として保存し、他の要素を 1 つ上に移動したいと考えています。要素を変更すると、新しいヘビを描きたいと思います。

ありがとう!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Snake
{
class Program
{
    static void VerplaatsSlang(int VerplaatsX, int VerplaatsY, ref int BeginX, ref int BeginY, int LengteSlang, int [,] PlaatsSlang)
    {
        int NieuwX = BeginX + VerplaatsX;
        int NieuwY = BeginY + VerplaatsY;

        //Verplaatsing van hoofd
        Console.SetCursorPosition(BeginX, BeginY);
        Console.WriteLine("░");
        Console.SetCursorPosition(NieuwX, NieuwY);
        Console.WriteLine("☺");

        // Waarden slang doorschuiven
        for (int i = 1; i <= LengteSlang; i++)
        {
                PlaatsSlang[i, 0] = PlaatsSlang[(i - 1), 0];
                PlaatsSlang[i, 1] = PlaatsSlang[(i - 1), 1];
        }

        PlaatsSlang[0, 0] = NieuwX;
        PlaatsSlang[0, 1] = NieuwY;

        for (int i = 0; i <= LengteSlang; i++)
        {
            if (i ==1)
            {
                Console.SetCursorPosition(PlaatsSlang[i, 0], PlaatsSlang[i, 1]);
                Console.WriteLine("☺");
            }
            else if (i < LengteSlang)
            {
                Console.SetCursorPosition(PlaatsSlang[LengteSlang, 0], PlaatsSlang[LengteSlang, 1]);
                Console.WriteLine("░");
            }
            else if (i == LengteSlang)
            {
                Console.SetCursorPosition(PlaatsSlang[i, 0], PlaatsSlang[i, 1]);
                Console.WriteLine(" ");
            }
        }
        BeginX = NieuwX;
        BeginY = NieuwY;
    }

    static void Main(string[] args)
    {
        //Instellen van veld.
        /***************************************************************************/
        Console.WindowWidth = 100;      //breedte
        Console.WindowHeight = 25;       //hoogte
        Console.SetBufferSize(100, 25);     //beperking zodat er geen scroll is. 
        Console.WriteLine("\n" +
                            "\n   ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄" + // alt+ 220 ▄
                            "\n   █     Score     █    █                                                                     █" + // alt+ 219 █
                            "\n   █               █    █                                                                     █" +
                            "\n   █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█    █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                            "\n                        █                                                                     █" +
                         "                             ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"); // alt+ 223▀
        //Begin Slang Plaatsen.
        /***************************************************************************/
        int BeginX = 58;
        int BeginY = 10;
        int[,] PlaatsSlang = { { 58, 10 }, { 59, 10 }, { 60, 10 }, { 61, 10 } };
        int Lengte = (PlaatsSlang.Length / 2) - 1;                                 // 2d array heeft dubbele lengte en moet -1 gedaan worden anders error bij for-loop
        for (int i = 0; i <= Lengte; i++)
        {
            if (i == 0)
            {
                Console.SetCursorPosition(PlaatsSlang[i, 0], PlaatsSlang[i, 1]);
                Console.WriteLine("☺");
            }
            if (i > 0)
            {
                Console.SetCursorPosition(PlaatsSlang[i, 0], PlaatsSlang[i, 1]);
                Console.WriteLine("░");
            }
        }

        //Plaats eten.
        /***************************************************************************/
        bool Plaats = false;
        Random Rangen = new Random();
        int[] PlaatsSnoep = new int[2];
        PlaatsSnoep[0] = Rangen.Next(25, 94);                                    //x-coördinaat
        PlaatsSnoep[1] = Rangen.Next(3, 23);                                    //y-coördinaat

        while (Plaats == false)                                                      //Om te vermijden dat snoepje op plaats van slang komt
        {
            for (int i = 0; i <= Lengte; i++)
            {
                if (PlaatsSnoep[0] == PlaatsSlang[i, 0] && PlaatsSnoep[1] == PlaatsSlang[i, 1])
                {
                    Plaats = false;
                }
                else
                {
                    Console.SetCursorPosition(PlaatsSnoep[0], PlaatsSnoep[1]);
                    Console.WriteLine("■");
                    Plaats = true;
                }
            }
        }

        //Iets eten.
        /***************************************************************************/
        int LengteSlang = 3;
        int Punten = 0;
        if (BeginX == PlaatsSnoep[0] && BeginY == PlaatsSnoep[1])
        {
            Console.SetCursorPosition(11, 4);
            Console.WriteLine(Punten);
            LengteSlang++;
        }
        ConsoleKeyInfo keyInfo;

            while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Escape)
            {
                switch (keyInfo.Key)
                {
                    case ConsoleKey.UpArrow:
                        if (BeginY > 3)
                        {
                            VerplaatsSlang(0,-1, ref BeginX, ref BeginY, LengteSlang, PlaatsSlang);
                        }
                        break;

                    case ConsoleKey.RightArrow:
                        if (BeginX < 93)
                        {
                            VerplaatsSlang(+1, 0, ref BeginX, ref BeginY, LengteSlang, PlaatsSlang);
                        }
                        break;

                    case ConsoleKey.DownArrow:
                        if (BeginY < 22)
                        {
                            VerplaatsSlang(0, +1, ref BeginX, ref BeginY, LengteSlang, PlaatsSlang);
                        }
                        break;

                    case ConsoleKey.LeftArrow:
                        if (BeginX > 25)
                        {
                            VerplaatsSlang(-1, 0, ref BeginX, ref BeginY, LengteSlang, PlaatsSlang);
                        }
                        break;
                }
                //Console.Read();
            }
    }
}

}

4

1 に答える 1

0

スタックで試してください:

        Stack<Coordinate> strings = new Stack<Coordinate>();
        strings.Push(new Coordinate(x, y));

カスタム座標クラス:

public class Coordinate       
{
    public Coordinate(int x, int y)
    {
        xCoordinate = x;
        yCoordinate = y;
    }
    public int xCoordinate { get; set; }
    public int yCoordinate { get; set; }
}
于 2013-02-22T18:54:11.243 に答える