コード例 #1
0
    public Okreslenie_Pola Sprawdzenie_Pola(int cel_x, int cel_y, Bazowa_Figura sprawdzanie)
    {
        // Czy na planszy?
        if (cel_x < 0 || cel_x > 7)
        {
            return(Okreslenie_Pola.Za_Plansza);
        }

        if (cel_y < 0 || cel_y > 7)
        {
            return(Okreslenie_Pola.Za_Plansza);
        }

        Cell Atak = AllCells[cel_x, cel_y];

        // Sprawdzenie czy jest wróc albo przyjaciel
        if (Atak.Aktualna_Figura != null)
        {
            if (sprawdzanie.kolor == Atak.Aktualna_Figura.kolor)
            {
                return(Okreslenie_Pola.Przyjaciel);
            }

            if (sprawdzanie.kolor != Atak.Aktualna_Figura.kolor)
            {
                return(Okreslenie_Pola.Wrog);
            }
        }
        return(Okreslenie_Pola.Wolne);
    }
コード例 #2
0
    // tymczasowe zasymulowanie wykonania ruchu
    public Bazowa_Figura tymczasowyRuch(PossibleMove possibleMove)
    {
        Bazowa_Figura figura = AllCells[possibleMove.toX, possibleMove.toY].Aktualna_Figura;

        AllCells[possibleMove.toX, possibleMove.toY].Aktualna_Figura = AllCells[possibleMove.fromX, possibleMove.fromY].Aktualna_Figura;
        AllCells[possibleMove.toX, possibleMove.toY].Aktualna_Figura._CurrentCell = AllCells[possibleMove.toX, possibleMove.toY];
        AllCells[possibleMove.fromX, possibleMove.fromY].Aktualna_Figura          = null;
        return(figura);
    }
コード例 #3
0
    // Cofniecie symulacji wykonania ruchu
    public void cofnijTymczasowyRuch(PossibleMove possibleMove, Bazowa_Figura figura)
    {
        AllCells[possibleMove.fromX, possibleMove.fromY].Aktualna_Figura = AllCells[possibleMove.toX, possibleMove.toY].Aktualna_Figura;
        AllCells[possibleMove.fromX, possibleMove.fromY].Aktualna_Figura._CurrentCell = AllCells[possibleMove.fromX, possibleMove.fromY];

        AllCells[possibleMove.toX, possibleMove.toY].Aktualna_Figura = figura;
        if (figura != null)
        {
            AllCells[possibleMove.toX, possibleMove.toY].Aktualna_Figura._CurrentCell = AllCells[possibleMove.toX, possibleMove.toY];
        }
    }
コード例 #4
0
ファイル: Menager_Figur.cs プロジェクト: heis125/Szachy_Unity
    public void Promowanie_Figury(Pionek pionek, Cell cell, Color kolor_Druzyny, Color kolor_Figury)
    {
        // zabic pionka
        pionek.Zabij();
        //stworzenie nowego
        Bazowa_Figura Promowany = Stworz_F(typeof(Dama));

        Promowany.Zaladuj(kolor_Druzyny, kolor_Figury, this);
        // postawic
        Promowany.Miejsce(cell);
        // dodac
        Promowane.Add(Promowany);
    }
コード例 #5
0
ファイル: Menager_Figur.cs プロジェクト: heis125/Szachy_Unity
    private Bazowa_Figura Stworz_F(Type typ_figury)
    {
        //Tworzenie nowego obiektu
        GameObject nowy_Obiekt_Figury = Instantiate(Prefab_Figury);

        nowy_Obiekt_Figury.transform.SetParent(transform);

        //Skiala i pozycja
        nowy_Obiekt_Figury.transform.localScale    = new Vector3(1, 1, 1);
        nowy_Obiekt_Figury.transform.localRotation = Quaternion.identity;

        Bazowa_Figura _nowa_Figura = (Bazowa_Figura)nowy_Obiekt_Figury.AddComponent(typ_figury);

        return(_nowa_Figura);
    }
コード例 #6
0
ファイル: Menager_Figur.cs プロジェクト: heis125/Szachy_Unity
    private List <Bazowa_Figura> Stworz_Figure(Color teamColor, Color32 spriteColor, Board board)
    {
        List <Bazowa_Figura> nowa_Figura = new List <Bazowa_Figura>();

        for (int i = 0; i < Kolejnosc_Figur.Length; i++)
        {
            // załadowanie typu i stworzenie obiektu
            string key        = Kolejnosc_Figur[i];
            Type   typ_Figury = Spis_Figur[key];

            // przechowywanie nowej figury
            Bazowa_Figura _nowa_Figura = Stworz_F(typ_Figury);
            nowa_Figura.Add(_nowa_Figura);

            //ustawienie figury
            _nowa_Figura.Zaladuj(teamColor, spriteColor, this);
        }
        return(nowa_Figura);
    }
コード例 #7
0
ファイル: Menager_Figur.cs プロジェクト: heis125/Szachy_Unity
    // tworzenie jakby drzewa gdzie w każdej gałęzi liczone jest co się najbardziej opłaca
    protected int minimax(int glebokosc, bool czy_Max, Board newBoard, bool czarne)
    {
        if (glebokosc == 0)
        {
            return(wartosc_planszy(true, newBoard)); //wartość pionków na planszy po ruchach
        }
        if (czy_Max)
        {
            int najlepsza_wartosc             = -9999999;
            List <PossibleMove> possibleMoves = newBoard.GetPossibleMoves(czarne); //tworzy listę możliwych ruchów

            possibleMoves.Sort((a, b) => 1 - 2 * UnityEngine.Random.Range(0, 1));
            for (int i = 0; i < possibleMoves.Count; i++) //losowe ułożenie listy
            {
                PossibleMove temp        = possibleMoves[i];
                int          randomIndex = UnityEngine.Random.Range(i, possibleMoves.Count);
                possibleMoves[i]           = possibleMoves[randomIndex];
                possibleMoves[randomIndex] = temp;
            }

            foreach (PossibleMove move in possibleMoves)
            {
                Bazowa_Figura figura  = newBoard.tymczasowyRuch(move);
                int           wartosc = minimax(glebokosc - 1, !czy_Max, newBoard, !czarne);
                if (wartosc > najlepsza_wartosc) //jak znajdzie lepszą wartość to ją wstawia
                {
                    najlepsza_wartosc = wartosc;
                    if (glebokosc == 2)
                    {
                        najlepszy_ruch = move;
                    }
                }
                newBoard.cofnijTymczasowyRuch(move, figura);
                //Debug.Log(" Best Move: " + najlepsza_wartosc + " Figura: " + move.fromX + "." + move.fromY);
            }
            return(najlepsza_wartosc);
        }
        else
        {
            int najlepsza_wartosc             = 9999999;
            List <PossibleMove> possibleMoves = newBoard.GetPossibleMoves(czarne); //tworzy listę możliwych ruchów

            possibleMoves.Sort((a, b) => 1 - 2 * UnityEngine.Random.Range(0, 1));
            for (int i = 0; i < possibleMoves.Count; i++) //losowe ułożenie listy
            {
                PossibleMove temp        = possibleMoves[i];
                int          randomIndex = UnityEngine.Random.Range(i, possibleMoves.Count);
                possibleMoves[i]           = possibleMoves[randomIndex];
                possibleMoves[randomIndex] = temp;
            }

            foreach (PossibleMove move in possibleMoves)
            {
                Bazowa_Figura figura  = newBoard.tymczasowyRuch(move);
                int           wartosc = minimax(glebokosc - 1, !czy_Max, newBoard, !czarne);
                if (wartosc < najlepsza_wartosc) //jak znajdzie lepszą wartość to ją wstawia
                {
                    najlepsza_wartosc = wartosc;
                    if (glebokosc == 2)
                    {
                        najlepszy_ruch = move;
                    }
                }
                newBoard.cofnijTymczasowyRuch(move, figura);
                //Debug.Log(" Best Move: " + najlepsza_wartosc + " Figura: " + move.fromX + "." + move.fromY);
            }
            return(najlepsza_wartosc);
        }
    }