예제 #1
0
    public bool sprawdzSzachBierki(int x, int y)
    {
        Bierki b = Bierki[x, y];

        if (b == null)
        {
            return(false);
        }

        var dr = b.MozliweRuchy();

        if (b.czyBialy != true)
        {
            if (dr[pozycjaXkrolbialy(), pozycjaYkrolbialy()])
            {
                czyBialySzach = true;
                Debug.Log("Bialy szachowany");
                return(true);
            }
        }
        else
        {
            if (dr[pozycjaXkrolCzarny(), pozycjaYkrolCzarny()])
            {
                czyCzarnySzach = true;
                Debug.Log("Czarny szachowany");
                return(true);
            }
        }
        return(false);
    }
예제 #2
0
 public int pozycjaXkrolbialy()
 {
     for (int k = 0; k < 8; k++)
     {
         for (int j = 0; j < 8; j++)
         {
             Bierki b = Bierki[j, k];
             if (b != null && b.czyBialy == true && b.GetType() == typeof(Krol))
             {
                 return(j);
             }
         }
     }
     return(wybraneX);
 }
예제 #3
0
 public int pozycjaYkrolCzarny()
 {
     for (int k = 0; k < 8; k++)
     {
         for (int j = 0; j < 8; j++)
         {
             Bierki b = Bierki[j, k];
             if (b != null && b.czyBialy != true && b.GetType() == typeof(Krol))
             {
                 return(k);
             }
         }
     }
     return(wybraneY);
 }
예제 #4
0
    private void WybierzBierke(int x, int y)
    {
        if (wybranaBierka != null)
        {
            wybranaBierka.GetComponent <MeshRenderer>().material = WybranyMat;

            MozliweRuchy.Instance.ukryjMozliweRuchy();
            wybranaBierka = null;
        }

        if (Bierki[x, y] == null)
        {
            return;
        }

        if (Bierki[x, y].czyBialy != czyRuchBialego)
        {
            return;
        }
        dozwoloneRuchy = Bierki[x, y].MozliweRuchy();
        var  ruchy     = RuchyZUwzglednieneimSzachu(dozwoloneRuchy, Bierki[x, y]);
        bool czyMaRuch = false;

        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                if (ruchy[i, j])
                {
                    czyMaRuch = true;
                }
            }
        }

        if (!czyMaRuch)
        {
            return;
        }


        wybranaBierka = Bierki[x, y];

        nieWybranyMat          = wybranaBierka.GetComponent <MeshRenderer>().material;
        WybranyMat.mainTexture = nieWybranyMat.mainTexture;
        wybranaBierka.GetComponent <MeshRenderer>().material = WybranyMat;
        MozliweRuchy.Instance.pokazMozliweRuchy(ruchy);
    }
예제 #5
0
    public bool czyCzarnySzach = false; //czy czarny szachuje

    public bool sprawdzSzachCalosc()
    {
        czyCzarnySzach = false;
        czyBialySzach  = false;
        var czarnyKrolX = pozycjaXkrolCzarny();
        var czarnyKrolY = pozycjaYkrolCzarny();
        var bialyKrolX  = pozycjaXkrolbialy();
        var bialyKrolY  = pozycjaYkrolbialy();

        for (int k = 0; k < 8; k++)
        {
            for (int j = 0; j < 8; j++)
            {
                Bierki b = Bierki[j, k];

                if (b == null)
                {
                    continue;
                }


                var dr = b.MozliweRuchy();
                if (b.czyBialy == true)
                {
                    if (dr[czarnyKrolX, czarnyKrolY])
                    {
                        czyCzarnySzach = true;
                        Debug.Log("Czarny szachowany");
                        return(true);
                    }
                }
                else
                {
                    if (dr[bialyKrolX, bialyKrolY])
                    {
                        czyBialySzach = true;
                        Debug.Log("Bialy szachowany");
                        return(true);
                    }
                }
            }
        }
        return(false);
    }
예제 #6
0
    public bool szachKrola(int i, int j, Bierki krol)
    {
        var tmp = Bierki[i, j];

        Bierki[i, j] = krol;
        Bierki[krol.pozycjaX, krol.pozycjaY] = null;
        try
        {
            if (sprawdzSzachCalosc())
            {
                return(true);
            }
        }
        finally
        {
            Bierki[krol.pozycjaX, krol.pozycjaY] = Bierki[i, j];
            Bierki[i, j] = tmp;
        }
        return(false);
    }
예제 #7
0
    private bool CzyKolorMaRuch(bool bialy)
    {
        //sprawdzamy wszystkie bierki innego koloru czy maja ruch ktory blokuje szach
        for (int k = 0; k < 8; k++)
        {
            for (int j = 0; j < 8; j++)
            {
                Bierki b = Bierki[j, k];

                if (b == null || b.czyBialy == bialy)
                {
                    continue;
                }

                var tmpX = wybraneX;
                var tmpY = wybraneY;
                wybraneX = j;
                wybraneY = k;
                var dr = RuchyZUwzglednieneimSzachu(b.MozliweRuchy(), b);
                wybraneY = tmpY;
                wybraneX = tmpX;
                for (int x = 0; x < 8; x++)
                {
                    for (int y = 0; y < 8; y++)
                    {
                        //bierka ma ruch ktora blokuje szach - mata nie ma
                        if (dr[x, y])
                        {
                            return(true);
                        }
                    }
                }
            }
        }
        return(false);
    }
예제 #8
0
 private bool CzyMat(Bierki bierka)
 {
     return(!CzyKolorMaRuch(bierka.czyBialy) && sprawdzSzachCalosc());
 }
예제 #9
0
 private bool CzyPat(Bierki bierka)
 {
     return(!CzyKolorMaRuch(bierka.czyBialy) && !sprawdzSzachCalosc());
     //return false;
 }
예제 #10
0
    private bool[,] RuchyZUwzglednieneimSzachu(bool[,] dozwoloneRuchy, Bierki wybranaBierka)
    {
        bool[,] ruchy = new bool[8, 8];
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                ruchy[i, j] = dozwoloneRuchy[i, j];
            }
        }

        //nie ma szachu - sprawdzamy czy nei ma szachu po ruchu
        if (!czyBialySzach && !czyCzarnySzach)
        {
            //bierka znika z pola czy jest szach
            if (!TestujPoleBrakBierki())
            {
                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        ruchy[i, j] = false;
                    }
                }
            }

            sprawdzSzachCalosc();
            //czy ruch króla spowoduje szach
            var krol = wybranaBierka as Krol;
            if (krol != null)
            {
                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        if (ruchy[i, j])
                        {
                            if (szachKrola(i, j, krol))
                            {
                                ruchy[i, j] = false;
                            }
                        }
                    }
                }
            }
            sprawdzSzachCalosc();
            return(ruchy);
        }

        if (szachujacaBierka == null)
        {
            return(ruchy);
        }
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                if (ruchy[i, j] == false)
                {
                    continue;
                }


                ruchy[i, j] = TestujPole(i, j, ruchy[i, j]);
            }
        }
        //pozycja wyjscia szach
        sprawdzSzachCalosc();
        return(ruchy);
    }
예제 #11
0
    private void RuchBierka(int x, int y)
    {
        if (dozwoloneRuchy[x, y] == true)
        {
            Point  przedRuchem = new Point(wybranaBierka.pozycjaX, wybranaBierka.pozycjaY);
            Bierki b           = Bierki[x, y];
            if (b != null && b.czyBialy != czyRuchBialego)
            {
                BierkiwGrze.Remove(b.gameObject);
                Destroy(b.gameObject);
            }
            if (x == zPrzelotem[0] && y == zPrzelotem[1])
            {
                if (czyRuchBialego == true)
                {
                    b = Bierki[x, y - 1];
                    BierkiwGrze.Remove(b.gameObject);
                    Destroy(b.gameObject);
                }
                else
                {
                    b = Bierki[x, y + 1];
                    BierkiwGrze.Remove(b.gameObject);
                    Destroy(b.gameObject);
                }
            }
            zPrzelotem[0] = -1;
            zPrzelotem[1] = -1;

            if (wybranaBierka.GetType() == typeof(Pionek) && mojRuch)
            {
                if (czyRuchBialego == true && y == 7)
                {
                    BierkiwGrze.Remove(wybranaBierka.gameObject);
                    Destroy(wybranaBierka.gameObject);
                    StartCoroutine(CorPromocja(x, y));
                }
                else if (czyRuchBialego != true && y == 0)
                {
                    BierkiwGrze.Remove(wybranaBierka.gameObject);
                    Destroy(wybranaBierka.gameObject);
                    StartCoroutine(CorPromocja(x, y));
                }
            }
            if (wybranaBierka.GetType() == typeof(Pionek))
            {
                if (wybranaBierka.pozycjaY == 1 && y == 3)
                {
                    zPrzelotem[0] = x;
                    zPrzelotem[1] = y - 1;
                }
                else if (wybranaBierka.pozycjaY == 6 && y == 4)
                {
                    zPrzelotem[0] = x;
                    zPrzelotem[1] = y + 1;
                }
            }

            if (czyRuchBialego && (bialyDlugaRoszada == true || bialyKrotkaRoszada == true))
            {
                if (wybranaBierka.pozycjaX == 4 && wybranaBierka.pozycjaY == 0)
                {
                    bialyDlugaRoszada  = false;
                    bialyKrotkaRoszada = false;
                }
                else if (wybranaBierka.pozycjaX == 7 && wybranaBierka.pozycjaY == 0)
                {
                    bialyKrotkaRoszada = false;
                }
                else if (wybranaBierka.pozycjaX == 0 && wybranaBierka.pozycjaY == 0)
                {
                    bialyDlugaRoszada = false;
                }
            }
            else if (czyRuchBialego != true && (czarnyDlugaRoszada == true || czarnyKrotkaRoszada == true))
            {
                if (wybranaBierka.pozycjaX == 4 && wybranaBierka.pozycjaY == 7)
                {
                    czarnyDlugaRoszada  = false;
                    czarnyKrotkaRoszada = false;
                    Debug.Log("czarni // Ruch krolem, obie roszady false");
                }
                else if (wybranaBierka.pozycjaX == 7 && wybranaBierka.pozycjaY == 7)
                {
                    czarnyKrotkaRoszada = false;
                    Debug.Log("czarni // Ruch wieza blizej krola // roszada false");
                }
                else if (wybranaBierka.pozycjaX == 0 && wybranaBierka.pozycjaY == 7)
                {
                    czarnyDlugaRoszada = false;
                    Debug.Log("czarni // Ruch wieza dalej krola // roszada false");
                }
            }
            Bierki[wybranaBierka.pozycjaX, wybranaBierka.pozycjaY] = null;
            wybranaBierka.transform.position = GetPosition(x, y);
            wybranaBierka.zmienUstawienie(x, y);
            Bierki[x, y]           = wybranaBierka;
            wybranaBierka.pozycjaX = x;
            wybranaBierka.pozycjaY = y;
            czyRuchBialego         = !czyRuchBialego;

            if (sprawdzSzachCalosc())
            {
                szachujacaBierka = Bierki[x, y];

                if (CzyMat(szachujacaBierka))
                {
                    myHub.Invoke <string>("Send", playerName, new[] { -1, -1, -1, -1 }).ContinueWith(task1 =>
                    {
                        if (task1.IsFaulted)
                        {
                            Debug.Log($"There was an error calling send: {task1.ToString()}");
                        }
                        else
                        {
                            Debug.Log(task1.Result);
                        }
                    });
                }
            }
            else
            {
                if (CzyPat(Bierki[x, y]))
                {
                    myHub.Invoke <string>("Send", playerName, new[] { -2, -1, -1, -1 }).ContinueWith(task1 =>
                    {
                        if (task1.IsFaulted)
                        {
                            Debug.Log($"There was an error calling send: {task1.ToString()}");
                        }
                        else
                        {
                            Debug.Log(task1.Result);
                        }
                    });
                }
            }

            if (mojRuch)
            {
                var points = new Point[] { przedRuchem, new Point(x, y) };
                myHub.Invoke <string>("Send", playerName, new[] { points[0].X, points[0].Y, points[1].X, points[1].Y }).ContinueWith(task1 =>
                {
                    if (task1.IsFaulted)
                    {
                        Debug.Log($"There was an error calling send: {task1.ToString()}");
                    }
                    else
                    {
                        Debug.Log(task1.Result);
                    }
                });


                mojRuch = false;
                wybranaBierka.GetComponent <MeshRenderer>().material = nieWybranyMat;
                MozliweRuchy.Instance.ukryjMozliweRuchy();
            }



            wybranaBierka = null;
        }
        else
        {
            wybranaBierka.GetComponent <MeshRenderer>().material = nieWybranyMat;
            MozliweRuchy.Instance.ukryjMozliweRuchy();

            wybranaBierka = null;
        }
    }
예제 #12
0
    private void poczatekGry()
    {
        czyRuchBialego = true;
        BierkiwGrze    = new List <GameObject>();
        Bierki         = new Bierki[8, 8];
        zPrzelotem     = new int[2] {
            -1, -1
        };

        //biali

        BierkaSpawn(0, 4, 0, -90f, 0);

        BierkaSpawn(1, 3, 0, -90f, 0);

        BierkaSpawn(2, 0, 0, -90f, 0);
        BierkaSpawn(2, 7, 0, -90f, 0);

        BierkaSpawn(4, 5, 0, -90f, 0);
        BierkaSpawn(4, 2, 0, -90f, 0);


        BierkaSpawn(3, 1, 0, -90f, 0);
        BierkaSpawn(3, 6, 0, -90f, 0);

        BierkaSpawn(5, 0, 1, 0, 0);
        BierkaSpawn(5, 1, 1, 0, 0);
        BierkaSpawn(5, 2, 1, 0, 0);
        BierkaSpawn(5, 3, 1, 0, 0);
        BierkaSpawn(5, 4, 1, 0, 0);
        BierkaSpawn(5, 5, 1, 0, 0);
        BierkaSpawn(5, 6, 1, 0, 0);
        BierkaSpawn(5, 7, 1, 0, 0);

        //czarni

        BierkaSpawn(6, 4, 7, -90f, 0);

        BierkaSpawn(7, 3, 7, -90f, 0);

        BierkaSpawn(8, 0, 7, -90f, 0);
        BierkaSpawn(8, 7, 7, -90f, 0);

        BierkaSpawn(10, 5, 7, -90f, 180f);
        BierkaSpawn(10, 2, 7, -90f, 180f);


        BierkaSpawn(9, 1, 7, -90f, 180f);
        BierkaSpawn(9, 6, 7, -90f, 180f);

        BierkaSpawn(11, 0, 6, 0, 0);
        BierkaSpawn(11, 1, 6, 0, 0);
        BierkaSpawn(11, 2, 6, 0, 0);
        BierkaSpawn(11, 3, 6, 0, 0);
        BierkaSpawn(11, 4, 6, 0, 0);
        BierkaSpawn(11, 5, 6, 0, 0);
        BierkaSpawn(11, 6, 6, 0, 0);
        BierkaSpawn(11, 7, 6, 0, 0);

        //rozowy
        nieWybranyMat = Bierki[0, 0].GetComponent <MeshRenderer>().material;
    }
예제 #13
0
    private void Start()
    {
        Instance       = this;
        dozwoloneRuchy = new bool[8, 8];
        poczatekGry();
        var connection = new HubConnection(String.Concat("http://", MenuManager.ip1, ":", MenuManager.port1, "/"));

        myHub = connection.CreateHubProxy("MyHub");

        connection.Start().Wait();
        myHub.On <Guid, int[]>("addMessage", (s1, message) =>
        {
            if (message[0] == -1)
            {
                queue.Add(new Task(() =>
                {
                    Debug.Log("MAT");
                    GameObject go = Instantiate(matokno) as GameObject;
                    go.SetActive(true);
                    //queue.Clear();
                }));
            }
            else if (message[0] == -2)
            {
                queue.Add(new Task(() =>
                {
                    Debug.Log("PAT");
                    // throw new Exception("pat");
                    GameObject go = Instantiate(patokno) as GameObject;
                    go.SetActive(true);
                    //queue.Clear();
                }));
            }

            else if (s1 != playerName && message[0] >= 0)
            {
                queue.Add(new Task(() =>
                {
                    wybranaBierka = Bierki[message[0], message[1]];
                    wybraneX      = message[0];
                    wybraneY      = message[1];
                    dozwoloneRuchy[message[2], message[3]] = true;
                    Roszada(message[2], message[3]);
                    RuchBierka(message[2], message[3]);
                    mojRuch = true;
                }));
            }
            else if (message[0] == -3 && s1 != playerName)
            {
                queue.Add(new Task(() =>
                {
                    BierkiwGrze.Remove(Bierki[message[2], message[3]].gameObject);
                    Destroy(Bierki[message[2], message[3]].gameObject);
                    BierkaSpawn(message[1], message[2], message[3], -90f, 0);
                    if (sprawdzSzachCalosc())
                    {
                        szachujacaBierka = Bierki[message[2], message[3]];
                    }
                }));
            }
        });
    }