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

Usuwanie elementu po jego wylosowaniu z tablicy

VPS Starter Arubacloud
0 głosów
1,116 wizyt
pytanie zadane 28 października 2018 w JavaScript przez Mikołaj Użytkownik (780 p.)

Witam,

Zacząłem tworzyć grę w Wisielca wg. poradnika JS Pana Zelenta. Po napisaniu kodu losującego, chciałbym stworzyć skrypt, który usuwałby już wylosowane elementy z tablicy. Chodzi mi o to, że jeżeli dane hasło zostało już wylosowane, nie może się ono powtórzyć. Użyć funkcji slice?

var hasla = new Array(11);
hasla[0] = "GDYBY KÓZKA NIE SKAKAŁA TO BY NÓŻKI NIE ZŁAMAŁA";
hasla[1] = "BEZ PRACY NIE MA KOŁACZY";
hasla[2] = "NIE RÓB DRUGIEMU CO TOBIE NIE MIŁE";
hasla[3] = "GDZIE KUCHAREK SZEŚĆ TAM NIE MA CO JEŚĆ";
hasla[4] = "NIE OCENIAJ KSIĄŻKI PO OKŁADCE";
hasla[5] = "NIE DZIEL SKÓRY NA NIEDŹWIEDZIU";
hasla[6] = "CEL UŚWIĘCA ŚRODKI";
hasla[7] = "DO WESELA SIĘ ZAGOI";
hasla[8] = "KŁAMSTWO MA KRÓTKIE NOGI";
hasla[9] = "JEDNA JASKÓŁKA WIOSNY NIE CZYNI";
hasla[10] = "TRAFIŁO SIĘ ŚLEPEJ KURZE ZIARNO";
hasla[11] = "NIE CHWAL DNIA PRZED ZACHODEM SŁOŃCA";
var x = Math.floor((Math.random() * 12));
var haslo = hasla[x];


var dlugosc = haslo.length;
var ile_skuch = 0;

var yes = new Audio("yes.wav");
var no = new Audio("no.wav");

var win = new Audio("win.wav");
var loose = new Audio("loose.wav");

var haslo1 = "";

for (i=0; i<dlugosc; i++)
{
	if (haslo.charAt(i)==" ") haslo1 = haslo1 + " ";
	else haslo1 = haslo1 + "-";
}

function wypisz_haslo()
{
	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;
	
	
	wypisz_haslo();
}

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";
		
		wypisz_haslo();
	}
	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).setAttribute("onclick",";");		
		
		//skucha
		ile_skuch++;
		var obraz = "img/s"+ ile_skuch + ".jpg";
		document.getElementById("szubienica").innerHTML = '<img src="'+obraz+'" alt="" />';
	}
	
	//wygrana
	if (haslo == haslo1)	
	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)
	document.getElementById("alfabet").innerHTML  = "Przegrana! Prawidłowe hasło: "+haslo+'<br /><br /><span class="reset" onclick="location.reload()">JESZCZE RAZ?</span>';


	if (haslo==haslo1)
	win.play();


	if(ile_skuch>=9)
	loose.play();
}

 

4 odpowiedzi

0 głosów
odpowiedź 29 października 2018 przez C.J Obywatel (1,370 p.)
1. Jako zakres losowania zamiast liczby, podaj zmienną równą na początku 12

2. Kiedy wylosujesz numerek, stwórz nową tablicę (o 1 komórkę mniejszą, od poprzedniej)

3. Przepisz jedną tablice do drugiej (pomijając wylosowany element)

4. Zmniejsz zmienną (odpowiedzialną za zakres) o jeden
0 głosów
odpowiedź 29 października 2018 przez MrxCI Dyskutant (8,260 p.)
// jakies elementy
const x = [1,2,3,6,8,8,12,11,454,"element"];

// wylosowany element ktorego chcemy sie pozbyc, tu przypisany testowo.
const w =  6;



const y = x.filter(e=>(e!=w)); // kasowanie wylosowanego elementu (w) z tablicy (x)


console.log(y); // output [1,2,3,8,8,12,11,454,"element"]

 

Można to chyba zrobić na wiele sposobów, to jest mój ulubiony, czy wydajny nie mam pojęcia, ktoś kto się zna lepiej może ocenić to rozwiązanie =)

0 głosów
odpowiedź 30 października 2018 przez X3h Dyskutant (9,540 p.)

https://codepen.io/Elek/pen/qJGgLB

Zrobiłem losowanie kolejnych haseł trochę inaczej. Na początku pobieram przemieszane z ogólnej puli. Iteruje je od końca. Jak dojdę do indeksu ujemnego zapisuje ostatnie hasło od którego startowałem, żeby pod koniec losowania uniknąć możliwego wylosowania tego samego drugi razy pod rząd. Usuwam ostatnie hasło z obecnej puli. Mieszam obecną pulę. Wrzucam zapisane hasło pomiędzy 0, a przedostatni indeks. Całość dzieje się w 

setCurrentCrossword()

Znalazłem dłuższą chwilkę i napisałem całość.

Z poprzedniej rozmowy wynika, że ludzie tutaj: nie wiedzą na jakich zasadach działa stackoverflow, oczekują gotowców jak na stackoverflow mimo tego, że problemy tutaj odnoszą się do wielu informacji na raz, a nie do jednego konkretnego, narzekają na złe odpowiedzi i mimo, że mogliby pomóc, ale nic dalej nie robią, widzą w odpowiedziach coś czego tam nie ma. Dodatkowo: system zarządzania odpowiedziami powinien być taki sam jak na stacku, powinien istnieć system uprzywilejowań jak na stacku. Inaczej to forum będzie na dnie.

–1 głos
odpowiedź 28 października 2018 przez X3h Dyskutant (9,540 p.)
przywrócone 30 października 2018 przez X3h
Po przepisaniu kodu z filmu na yt chciałbyś kontynuacji na podobnym poziomie aranżacji. Tak, slice jest metodą, która zwraca kopię z pierwszego poziomu tablicy. Potrafi nawet wybrać elementy od indeksu startowego bez lub z podaniem końcowego. Wpisz w Google js array slice. Zrozum regulamin.
2
komentarz 28 października 2018 przez Tomek Sochacki Ekspert (227,490 p.)
kod z tych kursow ma wiele wad ale to nieważne, ciekawo mnie co ludziom przeszkadza to dawanie gotowych kodów... kurde na SO to czestor norma że ludzie w odpowiedzi dają gotowy kod i pod nim są różne ciekawe dyskusje... ehh nie rozumiem czasem tego forum...
komentarz 28 października 2018 przez X3h Dyskutant (9,540 p.)
Tam regulamin jest dużo ostrzejszy. Nie możesz dać łapki od tak. Najpierw przechodzisz przez pewne sito, a potem dowiadujesz się, że dziurki są coraz mniejsze. Dyskutują tylko ci najlepsi. A tutaj to jest dno. Ale wracając. Co w ogóle oznacza komentarz wyżej do mojej odpowiedzi?
komentarz 28 października 2018 przez Mikołaj Użytkownik (780 p.)

@X3h, 

1. Tak, użyłem tego samego kodu co P. Zelent, ale nie rozumiem co w tym złego? Dodałem do niego jeszcze swoje modyfikacje, więc nie rozumiem w czym problem.

2. Nie rozumiem komentarzy do posta, w którym ktoś się pyta jak to zrobić, a odpowiedź to "Tak, sprawdź sobie w internecie". Właśnie jesteśmy w internecie i po przeczytaniu dużej ilości informacji na ten temat nadal nie rozumiem, więc proszę o pomoc.

komentarz 28 października 2018 przez X3h Dyskutant (9,540 p.)
Nie, nie miałem zamiaru, ani nawet na myśli powiedzieć czegoś złego o kimś i nie powiedziałem. To tylko fakty pozwalające rozwiązać problem. Dałem rozwiązanie, opisałem i pokazałem gdzie będzie więcej informacji.
2
komentarz 28 października 2018 przez ScriptyChris Mędrzec (190,190 p.)

@X3h,

Nie możesz dać łapki od tak

Na StackOverflow nie możesz dać łapki ot tak?

Dyskutują tylko ci najlepsi

Możesz podać jakiś przykład? Po czym rozpoznajesz "tych najlepszych"?

A tutaj to jest dno

Jeśli odnosisz się do poziomu kultury, to zacznij od poprawy jej u siebie.

komentarz 28 października 2018 przez X3h Dyskutant (9,540 p.)

Thanks for the feedback! Votes cast by those with less than 15 reputation are recorded, but do not change the publicly displayed post score.

Przykład: https://stackoverflow.com/questions/18262306/quicksort-with-python/48093329#

Powiedziałem wszystko ok co potwierdził autor pytania. Moje inne odpowiedzi pomagają i jakoś idzie się dogadać.

komentarz 28 października 2018 przez Mikołaj Użytkownik (780 p.)
No dobrze, ale mi nie pomogłeś. I z tego co widzę to podałeś mu kod

Podobne pytania

+1 głos
2 odpowiedzi 161 wizyt
0 głosów
2 odpowiedzi 6,585 wizyt
pytanie zadane 13 kwietnia 2018 w C i C++ przez antek782 Początkujący (490 p.)
0 głosów
2 odpowiedzi 221 wizyt
pytanie zadane 21 lipca 2018 w C i C++ przez MAXIM7 Obywatel (1,990 p.)

92,950 zapytań

141,909 odpowiedzi

321,133 komentarzy

62,284 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...