Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Wykonanie prostego ruchu "X" - em


Rekomendowane odpowiedzi

Opublikowano

Witam, ostatnio stworzyłem nowy projekt z zamysłem stworzenia prostej "animacji" ruchu. Lecz pojawił się problem, za cholerę nie potrafię sprawić aby mój nieszczęsny "X", który znajduję się na środku (otoczony polem) ruszył się. Zależy mi aby zrobić tutaj prostą czynność, aby po naciśnięciu powiedzmy klawisza "W" X przesunął się o jedną pozycje do góry.

Próbowałem jakoś go ruszać, różnymi sposobami ale no niestety, nie udało mi się. Stąd moja prośba, mógłby mnie ktoś naprowadzić jak to zrobić? Gdzie ten kawałek kodu dopisać? W którym miejscu "animować" X? Czy zrobić dla niego nową tablicę czy wszystko zawrzeć w tej?

Tutaj kod:

 

 

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

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            //generowanie mapy START
            string[,] mapa = new string[20,20];
            string zmienna = "X";

            for (int x = 0; x < 20; x++)
                {

                    for (int y = 0; y < 20; y++)
                    {

                        if (!(x > 0 && y > 0 && x < 19 && y < 19))
                        {
                            mapa[x, y] = "O";
                        }
                        else if (x == 9 && y == 9)
                        {
                            mapa[9, 9] = zmienna;

                        }

                        else
                        {
                            mapa[x, y] = " ";
                        }
                        Console.Write(mapa[x, y]);

                    }
                Console.WriteLine();

                }
           
            //generowanie mapy KONIEC            


            Console.Read();
        }
    }
}

Z góry dziękuje za pomoc, pozdrawiam

Opublikowano

Generalnie możesz zrobić dla tego X'a oddzielną tablicę o takich samych wymiarach, co tablica z mapą. Tablicę z mapą możesz wtedy wypełnić jakimi chcesz znakami, np litera W, to woda, znak # to płot itp.

potem w kodzie dajesz pętle while(true) i w niej oczekiwanie na klawisz. Sprawdzasz kliknięty klawisz, jeśli W, to X w swojej tablicy pójdzie o jedno pole w górę (jeśli może) i potem albo wyświetlasz najpierw tablicę z mapą, a potem jedynie X z tablicy z X'em i przemalujesz wtedy znak z mapy na X w consoli, albo sprawdzasz gdzie jest X i przy wyswietlaniu znaków z tablicy z mapą, w miejsu, gdzie znajduje się X wyswietlasz X.

Opublikowano

Chyba nadal nie rozumiem, z podwójnej pętli for mam wywalić "X" i stworzyć dla niego osobną tablicę, jeszcze raz zainicjować podwójnego fora i tam go wyświetlić ?

Opublikowano

Podwójna pętla for będzie jeden raz występowała, będziesz mieć dwie tablice, jedna od X druga od mapy, do pętli while(true) wrzucasz nasłuchiwanie klawisza, jeśli wykryje np strzałkę w górę, to zmieniasz pozycję X w tablicy i malujesz wszystko jedną podwójną pętlą for, sprawdzasz jedynie czy malowany własnie znak z tablicy z mapą, nie ma swojego odpowiednika w postaci X na tych samych pozycjach tablicy.

Opublikowano

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace ConsoleApplication2

{

    class Program

    {

        static void Main(string[] args)

        {

            var mapa = new char?[15][]; //yx

            for (var i = 0; i < mapa.Length; i++)

                mapa = new char?[mapa.Length];

            mapa[0][0] = 'X';

            int x = 0, y = 0;

           

            while (true)

            {

                drawMap(mapa);

                switch (Console.ReadKey().Key)

                {

                    case ConsoleKey.UpArrow:

                        if (y > 0)

                            moveTo(ref mapa, x, --y);

                        break;

                    case ConsoleKey.DownArrow:

                        if (y < mapa.Length - 1)

                            moveTo(ref mapa, x, ++y);

                        break;

                    case ConsoleKey.LeftArrow:

                        if (x > 0)

                            moveTo(ref mapa, --x, y);

                        break;

                    case ConsoleKey.RightArrow:

                        if (x < mapa[y].Length - 1)

                            moveTo(ref mapa, ++x, y);

                        break;

                }

            }

        }

        private static string _lSep = string.Empty;

        private static void drawMap(char?[][] mapa)

        {

            Console.Clear();

            if (string.IsNullOrEmpty(_lSep))

                for (var i = 0; i < mapa.Length; i++)

                    _lSep += "--";

            for (var y = 0; y < mapa.Length; y++)

            {

                Console.WriteLine(_lSep);

                for (var x = 0; x < mapa[y].Length; x++)               

                    Console.Write("{0}|", mapa[y][x] ?? '\0');

                Console.Write("\r\n");               

            }

            Console.WriteLine(_lSep);

        }

        private static void moveTo(ref char?[][] mapa, int x, int y)

        {

            for (var i = 0; i < mapa.Length; i++)

            {

                for (var z = 0; z < mapa.Length; z++)

                {

                    if (mapa[z].Equals('X'))

                    {

                        mapa[z] = null;

                        mapa[y][x] = 'X';

                        return;

                    }

                }

            }

        }

    }

}

9242aa180120abf8108cee933abec484.gif

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...