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

Wisielec losowanie hasła

Object Storage Arubacloud
0 głosów
4,107 wizyt
pytanie zadane 2 sierpnia 2019 w JavaScript przez SzymonZbir Nowicjusz (150 p.)

Witam. Chciałem zmodyfikować kod z odcinka 3 kursu JS od pana Mirka dotyczący wisielca. Chciałem dodać losowanie hasło. Niestety podczas gry w momencie sprawdzania odpowiedzi od użytkownika poprawnie sprawdzana jest tylko pierwsza litera w haśle. Następnie jakąkolwiek literę klikniemy to i tak pokazuje nam że w haśle jej nie ma i gra zawsze jest przegrana bo nie sprawdza poprawnie liter, Liczę na pomoc.

var haslo5 = new Array(5);
haslo5[0]="Bez pracy nie ma kołaczy";
haslo5[1]="konstantynopolitański";
haslo5[2]="gżegżółka";
haslo5[3]="żółć";
haslo5[4]="pszenżyto";
function losowanie()
{
	var numer=Math.round(Math.random()*haslo5.length);
	return haslo5[numer];
}
var haslo= losowanie();
var haslo1 = "";
var dlugosc = haslo.length;
var ile_skuch = 0;
var yes = new Audio("yes.wav");
var no = new Audio("no.wav");
var fail = new Audio("fail.mp3");
var win = new Audio("win.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] = "Ź";

function start()
{
	var tresc_diva = "";
	
	for(i=0; i<=34;i++)
	{
		var element = "lit"+i;
		tresc_diva=tresc_diva+'<div class="litera" onclick="sprawdz('+i+')"  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.length-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 = "#00C000";
		document.getElementById(element).style.border = "3px solid #00C000";
		document.getElementById(element).style.cursor = "default";
		wypiszhaslo();
	}
	else
	{
		no.play();
		var element = "lit"+nr;
		document.getElementById(element).style.background = "#330000";
		document.getElementById(element).style.color = "#C00000";
		document.getElementById(element).style.border = "3px solid #C00000";
		document.getElementById(element).style.cursor = "default";
		document.getElementById(element).style.cursor = "default";
		document.getElementById(element).setAttribute("onclick",";");
		wypiszhaslo();
		
		//skucha
		ile_skuch++;
		document.getElementById("szubienica").innerHTML = '<img src="img/s'+ile_skuch+'.jpg"/>';
	}
  
  //wygrana
  if(haslo==haslo1)
  {
	  win.play();
	  document.getElementById("alfabet").innerHTML = 'Tak jest! Podano prawidłowe hasło: '+haslo+'<br/><br/>                               <span class="reset" onclick="location.reload()">JESZCZE RAZ?</span>';
  }
  
  //przegrana
  if(ile_skuch>=9)
  {
	  fail.play();
	  document.getElementById("alfabet").innerHTML = 'Przegrana! Prawidłowe hasło to: '+haslo+'<br/><br/>                                   <span class="reset1" onclick="location.reload()">JESZCZE RAZ?</span>';
  }
}

 

1 odpowiedź

+1 głos
odpowiedź 3 sierpnia 2019 przez pablop76 VIP (123,120 p.)
wybrane 3 sierpnia 2019 przez SzymonZbir
 
Najlepsza

Problem jest w tym, ze porównujesz hasła, które w tablicy są wypisane małą literą a w abecadle wielką. Zamień w porównaniu znaki np. na małe. Czasami podczas losowania dostaje undefined. Jest to spowodowane użyciem metody Match.round(), która zaokrągla do najbliższej  liczby całkowitej w górę i w dół, więc czasami przekracza długość tablicy. Lepiej użyj  Match.floor(), która zaokrągla zawsze w dół.

1
komentarz 3 sierpnia 2019 przez SzymonZbir Nowicjusz (150 p.)
Dzięki. Pomogło. Głowiłem się nad tym kilka godzin :)

Podobne pytania

0 głosów
2 odpowiedzi 963 wizyt
pytanie zadane 16 lutego 2018 w JavaScript przez Juniore Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 407 wizyt
pytanie zadane 24 lutego 2022 w JavaScript przez Tankista Początkujący (280 p.)
0 głosów
1 odpowiedź 249 wizyt

92,556 zapytań

141,404 odpowiedzi

319,562 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!

...