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); }
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); }
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); }
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); }
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); }
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); }
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); }
private bool CzyMat(Bierki bierka) { return(!CzyKolorMaRuch(bierka.czyBialy) && sprawdzSzachCalosc()); }
private bool CzyPat(Bierki bierka) { return(!CzyKolorMaRuch(bierka.czyBialy) && !sprawdzSzachCalosc()); //return false; }
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); }
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; } }
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; }
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]]; } })); } }); }