コード例 #1
0
ファイル: Pacman.cs プロジェクト: adzierzakk/Pacman-Unity
    void RuchWKierunkuWezla(Vector2 d)    //zeby poruszal sie od wezla do wezla
    {
        Wezly ruchWKierunkuWezla = MozliwoscRuchu(d);

        if (ruchWKierunkuWezla != null)
        {
            transform.localPosition = ruchWKierunkuWezla.transform.position;
            obecnyWezel             = ruchWKierunkuWezla;
        }
    }
コード例 #2
0
 public Vector2[] prawidlowyKierunek; //obiekt bez przypisanej wartosci//pod spodem piszemy kod, ktory za mnie przypisuje mozliwe kierunki(gora,dol,lewo,prawo)
 //vector2 reprezentuje 2wymiarowy wektor lub punkt
 // Use this for initialization
 void Start()                                             // w trakcie rozpoczacia gry dopiero przypisuje kierunki//length to rozmiar tablicy
 {
     prawidlowyKierunek = new Vector2[sasiedztwo.Length]; //tablica prawidlowyKierunek ma dlugosc taka sama jak sasiedztwo
     for (int i = 0; i < sasiedztwo.Length; i++)          //zalezy ile ma sasiedztwa wokol siebie wezel
     {
         Wezly   sasiad         = sasiedztwo [i];
         Vector2 chwilowyWektor = sasiad.transform.localPosition - transform.localPosition; //odejmuje pozycje sasaiada od aktualnej pozycji
         prawidlowyKierunek [i] = chwilowyWektor.normalized;                                //normalized sprawia ze zachowuje swoj kierunek, ale dlugosc staje sie 1
     }
 }
コード例 #3
0
ファイル: Duch.cs プロジェクト: adzierzakk/Pacman-Unity
    Wezly WybierzKolejneZiarno()
    {
        Vector2 doceloweZiarno = Vector2.zero;        //(0,0)

        if (obecnyStan == Stan.Poscig)
        {
            doceloweZiarno = PobieranieZiarnaDocelowego();   //miejsce znajdowania sie pacmana
        }
        else if (obecnyStan == Stan.Rozproszenie)            //duchy poruszaja sie wokol swojego otoczenia
        {
            doceloweZiarno = domowyWezel.transform.position;
        }
        Wezly ruchWKierunkuWezla = null;        //wczesniej wyrzucalo blad, a po przypisaniu null jest ok

        Wezly[]   znalezioneWezly         = new Wezly[4];
        Vector2[] znalezionyKierunekWezla = new Vector2[4];
        int       licznikWezlow           = 0;

        for (int i = 0; i < obecnyWezel.sasiedztwo.Length; i++)                               //do ilosci sasiadow wezla
        {
            if (obecnyWezel.prawidlowyKierunek [i] != kierunek * -1)                          //jezeli nie zmienia kierunku o 180 stopni, bo tak to wraca sie na stara pozycje
            {
                znalezioneWezly [licznikWezlow]         = obecnyWezel.sasiedztwo [i];         //sasiedztwo danego wezla
                znalezionyKierunekWezla [licznikWezlow] = obecnyWezel.prawidlowyKierunek [i]; //w ktorym kierunku moze sie poruszac
                licznikWezlow++;                                                              //liczy wezly w sasiedztwie
            }
        }
        if (znalezioneWezly.Length == 1)          //jezeli mam jeden wezel
        {
            ruchWKierunkuWezla = znalezioneWezly [0];
            kierunek           = znalezionyKierunekWezla [0];
        }
        if (znalezioneWezly.Length > 1)           //dla kilku wezlow szukamy tego najkrotszego
        {
            float najmniejszaOdleglosc = 100000f; //f na koncu, zeby zajmowalo mniej pamieci bo inaczej jest double
            for (int i = 0; i < znalezioneWezly.Length; i++)
            {
                if (znalezionyKierunekWezla [i] != Vector2.zero)
                {
                    float odleglosc = PobieranieOdleglosci(znalezioneWezly [i].transform.position, doceloweZiarno); //liczy odleglosc
                    if (odleglosc < najmniejszaOdleglosc)                                                           //szukamy najmniejszej odleglosci do pokonania jak najkrotszej trasy
                    {
                        najmniejszaOdleglosc = odleglosc;
                        ruchWKierunkuWezla   = znalezioneWezly [i];
                        kierunek             = znalezionyKierunekWezla [i];
                    }
                }
            }
        }
        return(ruchWKierunkuWezla);
    }
コード例 #4
0
ファイル: Pacman.cs プロジェクト: adzierzakk/Pacman-Unity
 public void Restart()     //powrot do poczatkowych pozycji po zabiciu pacmana
 {
     iloscZyc--;
     if (iloscZyc == 0)
     {
         SceneManager.LoadScene("Przegrana");
     }
     transform.position = pozycjaPoczatkowa.transform.position; //resetuje pozycje pacmana do pozycji startowej
     obecnyWezel        = pozycjaPoczatkowa;                    //ustawiam pierwszy wezel na pozycji pacmana
     kierunek           = Vector2.left;                         //ruszamy w lewo
     orientacja         = Vector2.left;                         //orientacja grafiki pacmana
     kolejnyKierunek    = Vector2.left;
     ZmianaPozycji(kierunek);                                   // to musi byc, bo inaczej pacman wraca nie na pozycje startowa tylko na pozycje w ktorej zginal
 }
コード例 #5
0
ファイル: Pacman.cs プロジェクト: adzierzakk/Pacman-Unity
    Wezly MozliwoscRuchu(Vector2 d)    //wskazuje na mozliwosci ruchow po wezlach
    {
        Wezly ruchDoWezla = null;

        for (int i = 0; i < obecnyWezel.sasiedztwo.Length; i++)
        {
            if (obecnyWezel.prawidlowyKierunek [i] == d)              //jezeli znajdzie co chcial to przerywa dzialanie petli
            {
                ruchDoWezla = obecnyWezel.sasiedztwo [i];
                break;                //w pewnym momencie wyrzucalo blad, a po zastosowaniu break dziala poprawnie
            }
        }
        return(ruchDoWezla);
    }
コード例 #6
0
ファイル: Pacman.cs プロジェクト: adzierzakk/Pacman-Unity
    private Wezly pozycjaPoczatkowa;                                //upup
    // Use this for initialization
    void Start()                                                    //zachowanie pacmana na poczatku rozgrywki, poczatkowe polozenie, poczatkowy kierunek ruchu
    {
        Wezly wezel = PozycjonowanieWezla(transform.localPosition); //ustawianie poczatkowej pozycji wezla

        pozycjaPoczatkowa = wezel;                                  //upup
        if (wezel != null)
        {
            obecnyWezel = wezel;
            Debug.Log(obecnyWezel);
        }
        kierunek   = Vector2.left;      //zakladam poczatkowy kierunek ruchu pacmana w lewo
        orientacja = Vector2.left;
        //ZmianaPozycji (kierunek); //wczesniej tego uzywalem to pacman poruszal sie od razu na lewo, a bez tego moge sobie wybrac kierunek ruchu pacmana
    }
コード例 #7
0
ファイル: Pacman.cs プロジェクト: adzierzakk/Pacman-Unity
    void Ruch()
    {
        if (wezelDocelowy != obecnyWezel && wezelDocelowy != null)
        {
            if (kolejnyKierunek == kierunek * -1)              //zeby mogl zmieniac zwrot pomiedzy wezlami
            {
                kierunek *= -1;
                Wezly chwilowyWezel = wezelDocelowy;
                wezelDocelowy  = poprzedniWezel;               //zeby nie zmienial pozycji w wezle tylko w obojetnym polozeniu
                poprzedniWezel = chwilowyWezel;                //zeby nie wracal nagle na pozycje starego wezla
            }

            if (OminietyCel())               //do poruszania sie miedzy wezlami
            {
                obecnyWezel             = wezelDocelowy;
                transform.localPosition = obecnyWezel.transform.position;
                GameObject innyPortal = PrzejsciePortalem(obecnyWezel.transform.position);

                if (innyPortal != null)
                {
                    transform.localPosition = innyPortal.transform.position;         //zamienia pozycje portali
                    obecnyWezel             = innyPortal.GetComponent <Wezly>();     //teraz na pozycji drugiego portalu znajduje sie obecnywezel
                }
                Wezly poruszaniewKierunkuWezla = MozliwoscRuchu(kolejnyKierunek);
                if (poruszaniewKierunkuWezla != null)                //zeby nie przechodzic przez sciany
                {
                    kierunek = kolejnyKierunek;
                }
                if (poruszaniewKierunkuWezla == null)
                {
                    poruszaniewKierunkuWezla = MozliwoscRuchu(kierunek);
                }
                if (poruszaniewKierunkuWezla != null)
                {
                    wezelDocelowy  = poruszaniewKierunkuWezla;                   //zeby pacman poruszal sie od wezla do wezla po kazdym ziarnie
                    poprzedniWezel = obecnyWezel;
                    obecnyWezel    = null;
                }
                else
                {
                    kierunek = Vector2.zero;
                }
            }
            else                                                                            //do poruszenia pacmanem
            {
                transform.localPosition += (Vector3)(kierunek * predkosc) * Time.deltaTime; //zeby pacman mogl wystartowac
            }
        }
    }
コード例 #8
0
ファイル: Pacman.cs プロジェクト: adzierzakk/Pacman-Unity
 void ZmianaPozycji(Vector2 d) //jezeli napotka na wezel to ma do wyboru rozne kierunki poruszania sie
 {
     if (d != kierunek)        //kierunkowi na poczatek przypisalem wartosc wektora zerowego
     {
         kolejnyKierunek = d;  //nowy kierunek
     }
     if (obecnyWezel != null)
     {
         Wezly ruchWKierunkuWezla = MozliwoscRuchu(d);
         if (ruchWKierunkuWezla != null)              //do poruszania sie od wezla do wezla Pacmana
         {
             kierunek       = d;
             wezelDocelowy  = ruchWKierunkuWezla;
             poprzedniWezel = obecnyWezel;
             obecnyWezel    = null;
         }
     }
 }
コード例 #9
0
ファイル: Duch.cs プロジェクト: adzierzakk/Pacman-Unity
    // Use this for initialization
    void Start()
    {
        pacMan = GameObject.FindGameObjectWithTag("Pacman");         //szuka obiektu oznaczonego tagiem Pacman
        Wezly ziarno = UstawianieZiarenekNaPozycjach(transform.localPosition);

        if (ziarno != null)
        {
            obecnyWezel = ziarno;            //przypisuje wezel w ktorym sie znajduje do ziarna
        }
        if (czyJestWDomuDuchow)
        {
            kierunek      = Vector2.up;                //bo w gore wychodza
            docelowyWezel = obecnyWezel.sasiedztwo[0]; //poniewaz nad nim jest tylko jeden sasiad
        }
        else                                           //jak jest poza domkiem
        {
            kierunek      = Vector2.left;              //zakladamy kierunek ruchu w lewo
            docelowyWezel = WybierzKolejneZiarno();
        }

        poprzedniWezel = obecnyWezel;
    }
コード例 #10
0
ファイル: Duch.cs プロジェクト: adzierzakk/Pacman-Unity
 public void Restart()
 {
     transform.position            = pozycjaStartowa.transform.position;//ustawia duchy na pozycji startowej
     CzasUwolnieniaCzerwonegoDucha = 0;
     iteracjaZmianyTrybu           = 1;
     czasZmianyTrybu = 0;
     if (transform.name != "Duch")        //czy nazwa obiektu to nie duch, czyli wszystkie poza czerwonym
     {
         czyJestWDomuDuchow = true;       //zaznaczamy automatycznie ze sa w domu duszkow
     }
     obecnyWezel = pozycjaStartowa;
     if (czyJestWDomuDuchow)
     {
         kierunek      = Vector2.up;                 //poczatkowy ruch w gore
         docelowyWezel = obecnyWezel.sasiedztwo [0]; //jest tylko jeden docelowy wezel na poczatku
     }
     else
     {
         kierunek      = Vector2.left;       //czerwony rusza sie w lewo
         docelowyWezel = WybierzKolejneZiarno();
     }
     poprzedniWezel = obecnyWezel;
 }
コード例 #11
0
ファイル: Duch.cs プロジェクト: adzierzakk/Pacman-Unity
 void Ruch()
 {
     if (docelowyWezel != obecnyWezel && docelowyWezel != null && !czyJestWDomuDuchow) //czyjestwdomuduchow musi byc falszem(odpala sie jak duch jest poza domem)
     {
         if (OminietyCel())                                                            //sprawdza czy duch znajduje sie w swoim otoczeniu, jezeli tak to wykonuje sie else
         {
             obecnyWezel             = docelowyWezel;
             transform.localPosition = obecnyWezel.transform.position;                  //pozycja wzgledem macierzystej pozycji
             GameObject innyPortal = PrzejsciePortalem(obecnyWezel.transform.position); //poruszanie sie ducha w portalu
             if (innyPortal != null)
             {
                 transform.localPosition = innyPortal.transform.position;      //zamiana pozycji na pozycje drugiego portalu
                 obecnyWezel             = innyPortal.GetComponent <Wezly> (); //ustawia obecnyWezel na pozycje innego portalu
             }
             docelowyWezel  = WybierzKolejneZiarno();                          //nastepny wezel bedzie kolejnym wezlem przez ktory przejdzie duch
             poprzedniWezel = obecnyWezel;
             obecnyWezel    = null;
         }
         else
         {
             transform.localPosition += (Vector3)kierunek * przyspieszenie * Time.deltaTime; //sluzy do poruszania sie duchow
         }                                                                                   //time.deltaTime daje czas jaki uplynal od wyrenderowania ostatniej klatki gry
     }
 }