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

Gra : Szubienica- pobieranie danych z klawiatury.

Object Storage Arubacloud
0 głosów
461 wizyt
pytanie zadane 30 sierpnia 2017 w JavaScript przez laser Początkujący (330 p.)

Witam,

chciałbym udoskonalić grę Szubienica wykonaną na kursie JS w odcinku 3. 

Pierwsze co mi przyszło do głowy to wprowadzanie danych z klawiatury. Problem jest taki, że przy naciśnięciu niektórych klawiszy (np. U) gracz traci wszystkie szanse i następuje koniec gry. Przy reszcie klawiszy nie ma takich problemów. Proszę o pomoc. Mój kod:


var haslo="Bez pracy nie ma kołaczy";
haslo=haslo.toUpperCase();
var haslo1="";
var ile=0;
var dlugosc=haslo.length;
var yes=new Audio("m/yes.wav");
var no=new Audio("m/no.wav");
var win=new Audio("m/win.mp3");
var lose=new Audio("m/lose.mp3");
for(i=0;i<dlugosc;i++)
{ 
	if(haslo.charAt(i)==" "){haslo1=haslo1+" ";}
	else{haslo1=haslo1+"-";}
}
function wypiszhaslo()
{	
	
	document.getElementById("plansza").innerHTML=haslo1;
}

window.onload=start;

var litery= new Array(35);
litery[0] = "A";
litery[1] = "Ą";
litery[2] = "B";
litery[3] = "C";
litery[4] = "Ć";
litery[5] = "D";
litery[6] = "E";
litery[7] = "Ę";
litery[8] = "F";
litery[9] = "G";
litery[10] = "H";
litery[11] = "I";
litery[12] = "J";
litery[13] = "K";
litery[14] = "L";
litery[15] = "Ł";
litery[16] = "M";
litery[17] = "N";
litery[18] = "Ń";
litery[19] = "O";
litery[20] = "Ó";
litery[21] = "P";
litery[22] = "Q";
litery[23] = "R";
litery[24] = "S";
litery[25] = "Ś";
litery[26] = "T";
litery[27] = "U";
litery[28] = "V";
litery[29] = "W";
litery[30] = "X";
litery[31] = "Y";
litery[32] = "Z";
litery[33] = "Ż";
litery[34] = "Ź";

document.onkeyup=function(event){
	var key_press=String.fromCharCode(event.keyCode);
	var key_code=event.keyCode;
	for(i=0;i<35;i++)
	{
		if(litery[i]==key_press)
		{sprawdz(i);}
	}
}

function start()
{
	var tresc_diva="";
	
	for(i=0;i<35;i++)
	{ 	var element="lit"+i;
		tresc_diva=tresc_diva+'<div onclick="sprawdz('+i+')" class="litera" id="'+element+'">'+litery[i]+'</div>';
		if((i+1)%7==0){tresc_diva=tresc_diva+'<div style="clear:both;"></div>';	
		}
	}
	document.getElementById("alfabet").innerHTML=tresc_diva;
		
	wypiszhaslo();
}

String.prototype.ustawZnak=function(miejsce,znak)
{
	if(miejsce>this.lenght-1) return this.toString();
	else return this.substr(0,miejsce)+znak+this.substr(miejsce+1);
	
}


function sprawdz(nr)
{ 
	var trafiona=false;
	for(i=0;i<dlugosc;i++)
	{
		if(haslo.charAt(i)==litery[nr])
		{
			haslo1=haslo1.ustawZnak(i,litery[nr]);
			trafiona=true;
		}
		
	}
	if(trafiona==true)
		{	yes.play();
		var element="lit"+nr;
		document.getElementById(element).style.background="#003300";
		document.getElementById(element).style.color="#93f788";
		document.getElementById(element).style.border="3px solid #93f788";
		document.getElementById(element).style.cursor="default";
		
		wypiszhaslo();}
		else{
			no.play();
			var element="lit"+nr;
		document.getElementById(element).style.background="#5e0b16";
		document.getElementById(element).style.color="#db253d";
		document.getElementById(element).style.border="3px solid #db253d";
		document.getElementById(element).style.cursor="default";
		document.getElementById(element).setAttribute("onclick",";");
		
		ile++;
		var obraz="img/s"+ile+".jpg";
		document.getElementById("szubienica").innerHTML='<img src="'+obraz+'" alt="" />' 
		
		}
		
		if(haslo==haslo1)
		{	win.play();
			document.getElementById("alfabet").innerHTML="BRAWO! WYGRAŁEŚ!</br></br> Prawidłowe hasło to: "+haslo+'</br></br> <span class="reset" onclick="location.reload()"  style="cursor:pointer; color:green;" >Jeszcze raz?</span>';}
		
		
		
		if (ile>8)
			{lose.play();
				document.getElementById("alfabet").innerHTML="Niestety przegrałeś!</br></br> Prawidłowe hasło to: "+haslo+' </br></br> <span class="reset" onclick="location.reload()"  style="cursor:pointer; color:red;">Jeszcze raz?</span>';}
	

}
















 

 

2 odpowiedzi

0 głosów
odpowiedź 30 sierpnia 2017 przez Shiro Stary wyjadacz (10,300 p.)
komentarz 30 sierpnia 2017 przez laser Początkujący (330 p.)

W moim kodzie za pobieranie danych z klawiatury odpowiada fragment:

document.onkeyup=function(event){
    var key_press=String.fromCharCode(event.keyCode);
    var key_code=event.keyCode;
    for(i=0;i<35;i++)
    {
        if(litery[i]==key_press)
        {sprawdz(i);}
    }
}
 

Co tutaj nie gra? 

0 głosów
odpowiedź 30 sierpnia 2017 przez laser Początkujący (330 p.)

Znalazłem błąd.

Przeglądarka głupiała bo w funkcji:

document.onkeyup=function(event){
	var key_press=String.fromCharCode(event.keyCode);
	var key_code=event.keyCode;
	for(i=0;i<35;i++)
	{
		if(litery[i]==key_press)
		{sprawdz(i);}
	}
}

używam zmiennej "i". zmienna ta występuje również w funkcji sprawdz(nr)-[w pętli] Po zmianie w "i" na "k" w wyżej wymienionym kodzie wszystko działa. 

W wyniku tej sytuacji mam kolejne pytanie: dlaczego przeglądarka oszalała? Przecież podczas wywołania funkcji sprawdz(i); argumentem nie jest "i" tylko jakaś konkretna wartość liczbowa. Ktoś może mi to wyjaśnić ? 

Pozdrawiam! 

 

komentarz 30 sierpnia 2017 przez Shiro Stary wyjadacz (10,300 p.)
zobacz cały kod, może gdzieś wyżej jest pętla używająca iteratora i
komentarz 30 sierpnia 2017 przez laser Początkujący (330 p.)
Są pętle for używające tego iteratora, ale wszystkie zostają zamknięte, więc dalej w kodzie  "i" nie powinno istnieć? Mam rację?
1
komentarz 30 sierpnia 2017 przez ScriptyChris Mędrzec (190,190 p.)
for(i=0;i<35;i++)

Zmienna i jest u Ciebie w scope globalnym. Jeśli nigdzie w lokalnym scope nie zadeklarowałeś jawnie tej zmiennej, to masz powód, dla którego dzieją się dziwne rzeczy.

Poczytaj sobie o scope w JavaScript:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_scope

http://2ality.com/2011/02/javascript-variable-scoping-and-its.html

https://scotch.io/tutorials/understanding-scope-in-javascript

https://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/

Podobne pytania

+1 głos
1 odpowiedź 622 wizyt
pytanie zadane 8 sierpnia 2016 w JavaScript przez james30k Bywalec (2,260 p.)
+1 głos
1 odpowiedź 627 wizyt
pytanie zadane 22 lipca 2016 w JavaScript przez Gromixson Początkujący (260 p.)
0 głosów
3 odpowiedzi 2,456 wizyt
pytanie zadane 12 czerwca 2016 w JavaScript przez jelonek2006 Początkujący (420 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 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!

...