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); }
// 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); }
// 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]; } }
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); }
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); }
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); }
// 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); } }