javascript, jeg prøver at blande kort...

Her kan du få hjælp og stille spørgsmål til JavaScript!
Besvar
skills jokes
Nørd
Nørd
Indlæg:125
Tilmeldt:12. sep 2013, 17:03
javascript, jeg prøver at blande kort...

Indlæg af skills jokes » 22. jul 2014, 22:38

hej,
jeg er i gang med at prøve at lave et poker spil med javascript
jeg er kun lige startet men jeg har allerede et problem :lol:

jeg har 52 forskellige kort, så jeg har lavet en array med 52 indexer (0-51) som er skrevet sådan her:

Kode: Vælg alt

var deck = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52];

her kommer mit problem: :D

det jeg prøver på at gøre er at køre en loop igennem arrayet der tager hver index en efter en...så lad os nu sige at vi startede med index 0 som har en værdi af 1.... hvad loopen så skal gøre er at, først vælge et random index fra arrayen, måden jeg har gjort det på er:

Kode: Vælg alt

var random = Math.floor(Math.random() * 51);
så efter at den har valgt et random index skal den tage det første index altså index 0 (i det her tilfælde) og så skal den lave dens værdi om til det random index værdi,
måden jeg har gjort det på er:

Kode: Vælg alt

deck[i] = deck[random];
så på den måde bliver den ved med at tage et index en efter en og lave den om til et andet "kort" / "index"..

først troede jeg at det virkede fint...men så efter at havde prøvet at gøre det et par gange, fandt jeg ud af at man kunne få 2 af de samme kort, for eksempel spar es og spar es...

så efter at havde tænkt lidt over det fandt jeg ud af hvorfor det skete,
grunden til det var at hvis nu loopen kørte igennem index 0 og som så blev lavet om til index 2...
og derefter gik den så igang med index 1..og derefter gik den igang med index 2, men det der så skete nogle gange var at
nogle gange tog den så fks. index 0 som jo var lig med index 2s værdi, altså det random index og det index den var i gang med havde den samme værdi...så på den måde fik jeg nogle gange de samme 2 kort (for eksempel spar es, og spar es) fordi index 0 og 2 var den samme værdi..

så jeg prøvede at skrive:

Kode: Vælg alt

var random = Math.floor(Math.random() * 51)+i;
det "+i" skulle gøre var at:
altså når den køre igennem index 0, kan random vælge et index mellem 0-51 (altså den har frit valg på alle indexer)
og så når index 0 var færdig og det var index 1s tur, kunne random vælge mellem 0-51 + 1 (altså 1-52)
på den her måde kunne random ikke vælge de indexer som allerede var blevet "blandet" , men problemet jeg så har nu er at nu hvor den kan vælge fra index 1-52, og jeg kun har 51 indexer, vælger den nogle gange et index jeg ikke har..... :\

hele min kode ser sådan her ud:

Kode: Vælg alt

<script type="text/javascript">
	
	function start(){
		shuffleCards-and-givePlayer();
	}
	
	function shuffleCards-and-givePlayer(){
		//deck
		var deck = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52];
		
		for(i = 0;i < 52;i++){
		
		//finds a random number between 0-51, total of 52 numbers
			var random = Math.floor(Math.random() * 51);
			
			deck[i] = deck[random];
			
		}
		//display random numbers
		for(i = 0;i < deck.length;i++){
			document.write(deck[i] + " - ");
		}
		//gives player 2 cards
		var firstCard = deck[51];
		var secondCard = deck[50];
		document.write('<img src="cards/'+firstCard+'.png"/>');
		document.write('<img src="cards/'+secondCard+'.png"/>');
	}
		
	</script>
sååå... er det nogle der har en bedre måde at blande "kort" på? for det her ser ikke ud til at virke :P

seerex
Entusiast
Entusiast
Indlæg:37
Tilmeldt:17. apr 2014, 17:23

Re: javascript, jeg prøver at blande kort...

Indlæg af seerex » 23. jul 2014, 10:45

Måske dette her kan hjælpe dig:
http://stackoverflow.com/questions/6274 ... javascript

Har ikke lige nærlæst det, men det er vist en function du kan lave, som tager dit array ind som parameter, og blander det for dig.

Så hvis det var fordi du ville have en bekvem måde at blande på, er det nok en måde :)

MEN, hvis det er fordi du godt vil lave din egen manuelle, så forstår jeg godt (det er nogen gange lidt sjovt og god øvelse).
I så fald, så har du fat i noget med det du laver. Du finder et random index i dit array, tager den værdi, og smider ind et andet sted i dit array. Men jeg tror det du skal huske er, at du skal "bytte rundt". Altså, tager du og indsætter en ny værdi i et index, så skal det "gamle" index, jo indsættes på det nyes plads, for ligesom at have de samme værdier i dit array. Så noget i stil med (lidt pseudo agtig):

Kode: Vælg alt

var random1 = Math.floor(Math.random() * 51);
var random2 = Math.floor(Math.random() * 51);

var oldValue = deck[random1];
deck[random1] = deck[random2]:
deck[random2] = oldValue;
Her tager den 2 tilfældige index værdier i dit array, og "bytter rundt" på dem. Man kunne så placerer det i et loop der kørte 100 gange, som så gennemblandede decket.
Note: Jeg har ikke lige testet det, det er bare lige "on the top of my head" så beklager hvis der er fejl i det :)

skills jokes
Nørd
Nørd
Indlæg:125
Tilmeldt:12. sep 2013, 17:03

Re: javascript, jeg prøver at blande kort...

Indlæg af skills jokes » 23. jul 2014, 17:49

seerex skrev:Måske dette her kan hjælpe dig:
http://stackoverflow.com/questions/6274 ... javascript

Har ikke lige nærlæst det, men det er vist en function du kan lave, som tager dit array ind som parameter, og blander det for dig.

Så hvis det var fordi du ville have en bekvem måde at blande på, er det nok en måde :)

MEN, hvis det er fordi du godt vil lave din egen manuelle, så forstår jeg godt (det er nogen gange lidt sjovt og god øvelse).
I så fald, så har du fat i noget med det du laver. Du finder et random index i dit array, tager den værdi, og smider ind et andet sted i dit array. Men jeg tror det du skal huske er, at du skal "bytte rundt". Altså, tager du og indsætter en ny værdi i et index, så skal det "gamle" index, jo indsættes på det nyes plads, for ligesom at have de samme værdier i dit array. Så noget i stil med (lidt pseudo agtig):

Kode: Vælg alt

var random1 = Math.floor(Math.random() * 51);
var random2 = Math.floor(Math.random() * 51);

var oldValue = deck[random1];
deck[random1] = deck[random2]:
deck[random2] = oldValue;
Her tager den 2 tilfældige index værdier i dit array, og "bytter rundt" på dem. Man kunne så placerer det i et loop der kørte 100 gange, som så gennemblandede decket.
Note: Jeg har ikke lige testet det, det er bare lige "on the top of my head" så beklager hvis der er fejl i det :)
det virker nu, takker :3

Besvar