• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JS - Kółko i krzyżyk, źle działający kod

Object Storage Arubacloud
+1 głos
1,048 wizyt
pytanie zadane 27 marca 2016 w JavaScript przez Bornegio Obywatel (1,070 p.)

Cześć. Naskrobałem sobie w ramach ćwiczeń kółko i krzyżyk w JSsie w opcji na 2 graczy i mój problem polega na tym, że po skończonym meczu i wywołaniu funkcji czyszczącej plansze, kółko jest stawiane samo w miejscu, gdzie został wykonany ostatni ruch poprzedniej gry. Problem występuje tylko w przypadku, gdy zaczyna gracz drugi (kółko). W przypadku, gdy grę zaczyna gracz pierwszy (krzyżyk) to wszystko jest w porządku. Ktoś może domyśla się dlaczego?

Oto kod JS:

var player = 1;

function wypelnij_plansze()
{
	
	/* Czyści planszę */
	
	document.getElementById("game").innerHTML = " ";
	
	/* Wypełnia planszę, pustymi divami */
	for (i = 1; i <= 9; i++)
	{
		document.getElementById("game").innerHTML = document.getElementById("game").innerHTML + 
		'<div id="' + i + '" class="pole" onclick="klick(' + i + ')"> </div>';
		if (i % 3 == 0) document.getElementById("game").innerHTML = document.getElementById("game").innerHTML + '<div style="clear:both"></div>';
	}
}

function klick(a)
{
	
	if (document.getElementById(a).innerHTML == " " & player == 1)
	{		
		document.getElementById(a).innerHTML = "X";
		player = 2;
		koniec();
	}
	if (document.getElementById(a).innerHTML == " " & player == 2)
	{
		document.getElementById(a).innerHTML = "O";
		player = 1;
		koniec();
	}
}

function koniec()
{
	var koniec = true;
	var zwyciezca = 0;
	/*sprawdza, czy wszystkie pola są wypełnione */
	for (i = 1; i <= 9; i++)
	{
		if (document.getElementById(i).innerHTML == " ") koniec = false;
	}
	
	/* sprawdza, czy nie jest spełniony warunek zwycięztwa*/	
	for (i = 0; i <= 2; i++)
	{
		/* sprawdza w poziomie */
		var x = i *  3 + 1;
		if(document.getElementById(x).innerHTML == document.getElementById(x+1).innerHTML & document.getElementById(x).innerHTML == document.getElementById(x+2).innerHTML & document.getElementById(x).innerHTML != " ")
		{
			koniec = true;
			if (document.getElementById(x).innerHTML == "X") zwyciezca = 1;
			if (document.getElementById(x).innerHTML == "O") zwyciezca = 2;	
		}
		/*sprawdza w pionie */
		var o = i + 1;
		if(document.getElementById(o).innerHTML == document.getElementById(o+3).innerHTML & document.getElementById(o).innerHTML == document.getElementById(o+6).innerHTML & document.getElementById(o).innerHTML != " ")
		{
			koniec = true;
			if (document.getElementById(o).innerHTML == "X") zwyciezca = 1;
			if (document.getElementById(o).innerHTML == "O") zwyciezca = 2;	
		}
	}
	/* sprawdza w skosie */
	if (document.getElementById("5").innerHTML == document.getElementById("1").innerHTML & document.getElementById("5").innerHTML == document.getElementById("9").innerHTML & document.getElementById(5).innerHTML != " ")
	{
		koniec = true;
		if (document.getElementById("5").innerHTML == "X") zwyciezca = 1;
		if (document.getElementById("5").innerHTML == "O") zwyciezca = 2;
	}
	if (document.getElementById("5").innerHTML == document.getElementById("3").innerHTML & document.getElementById("5").innerHTML == document.getElementById("7").innerHTML & document.getElementById(5).innerHTML != " ")
	{
		koniec = true;
		if (document.getElementById("5").innerHTML == "X") zwyciezca = 1;
		if (document.getElementById("5").innerHTML == "O") zwyciezca = 2;
	}
	
	if (koniec)
	{
		if (zwyciezca == 0) alert("REMIS!");
		else if (zwyciezca == 1) alert("Zwycięża gracz 1 (X)");
		else if (zwyciezca == 2) alert("Zwycięża gracz 2 (O)");
		
		wypelnij_plansze();
	}
}


function start()
{
	wypelnij_plansze();
}

window.onload = start;

 

plik html zawiera tylko jednego diva o id="game".

2 odpowiedzi

0 głosów
odpowiedź 27 marca 2016 przez Comandeer Guru (600,810 p.)

Prawdę mówiąc dziwię się, że to wgl działa, gdyż pomylileś operatory. Operator & to bitowe i. Normalne i, czyli te, którego potrzebujesz, to &&

0 głosów
odpowiedź 27 marca 2016 przez Mr. Mustache Początkujący (350 p.)

W funkcji klick, w linijce 28 dodaj else przed if'em:
 

function klick(a)
{
     
    if (document.getElementById(a).innerHTML == " " && player == 1)
    {       
        document.getElementById(a).innerHTML = "X";
        player = 2;
        koniec();
    }
    else if (document.getElementById(a).innerHTML == " " && player == 2)
    {
        document.getElementById(a).innerHTML = "O";
        player = 1;
        koniec();
    }
}

 

komentarz 29 marca 2016 przez niezalogowany
jak zrobiłeś to zaznaczenie??
komentarz 29 marca 2016 przez Mr. Mustache Początkujący (350 p.)

Dodajesz kod przez: "Add or update a code snippet". W okienku, które Ci się wyświetli zmieniasz zakładkę na "Advanced" i w polu "Highlight lines" wpisujesz numery linii po przecinku, które mają zostać wyróżnione.

komentarz 29 marca 2016 przez niezalogowany
ooo... dzięki wielkie :)

Podobne pytania

+1 głos
6 odpowiedzi 2,441 wizyt
pytanie zadane 16 kwietnia 2018 w C i C++ przez macias17 Nowicjusz (190 p.)
0 głosów
1 odpowiedź 953 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)
0 głosów
0 odpowiedzi 512 wizyt
pytanie zadane 26 października 2019 w JavaScript przez Kuba Romańczuk Początkujący (320 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...