Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
rythmuskind
Threadersteller
Dabei seit: 04.12.2008
Ort: Köln
Alter: 45
Geschlecht: -
|
Verfasst So 17.04.2011 18:17
Titel Memory programmieren |
|
|
Hallo!
Ich muss für die Schule bis Freitag ein Memory programmieren, dass zwar nicht viel können muss, mich aber trotzdem vor Probleme stellt...
Ich bin soweit gekommen, dass alle meine Bilder mit der Rückseite angezeigt werden und bei click sich umdrehen. Alle Bilder sind je 2x vorhanden. Nun habe ich versucht, die Bilder nicht brav nebeneinander abzulegen, sondern die Reihenfolge zu randomisieren. Leider kann ich die Häufigkeit nicht kontrollieren, also wie oft jedes Bild zufällig angezeigt wird. Demnach habe ich nun 5 mal Bild_5.jpg, 3x Bild_2.jpg, 7x BIld_13.jpg etc...
Kann ich das irgendwie kontrollieren? Setze ich den Zufallsgenerator (also Math.random) an der falschen Stelle an?
Zusätzlich muss ich auch noch einrichten, dass wenn ich 2 gleiche Bilder aufdecke, diese verschwinden sollen... geht das mit delete oder so? Wie gehe ich das an?
Ich habe leider echt wenig Ahnung vom programmieren und wäre sehr froh, wenn mir jemand leicht verständlich (for dummies) erklären kann was ich tun muss...
Danke!!
Mein Code:
<script type="text/javascript">
//Initialisierung
var bilder = new Array();
$(document).ready(function(){
for (var i = 1; i < 13; i++ )
{
bilder[i] = new Image();
bilder[i].src = "Bilder/Bild_"+i+".jpg";
}
zeigeBilder();
});
function zeigeBilder(){
for (var i= 1; i < 13; i++ ){
$('#memory').append('<img id="'+i+'A" class="imageDrehbar" src="Bilder/rueckseite.jpg" >');
$('#memory').append('<img id="'+i+'B" class="imageDrehbar" src="Bilder/rueckseite.jpg" >');
}
//hier wird der Handler fuer das Drehen bei onclick angehaengt
$(".imageDrehbar").toggle(
function(){
var id = $(this).attr("id"); //id des geclickten
//alert(id);
var idWert = parseInt(id); //daraus die Nummer entnehmen (ersten Buchstaben)
idWert = Math.floor(13*Math.random());
$(this).attr("src","Bilder/Bild_"+idWert+".jpg");
},
function(){
$(this).attr("src","Bilder/rueckseite.jpg");
}
);
}
</script>
|
|
|
|
|
qualidat
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht:
|
Verfasst So 17.04.2011 18:50
Titel
|
|
|
Wie du das in JS konkret machst, kann ich dir nicht erklären, aber ich kann dir einen allgemeinen Algorithmus vorschlagen.
Du musst den Vorrat an Bildern und die zur Verfügung stehenden Ablageplätze jeweils als Liste betrachten.
Die Plätze sind entweder leer (0) oder enthalten die Nummer des abgelegten Bildes ... d.h. dein Programm arbeitet in Wirklichkeit ("intern") mit den Listen (Arrays) und Bildnummern, das tatsächliche grafische Darstellen ist quasi nur Beiwerk und kann auch erst danach vorgenommen werden.
0. setze Bildnummer auf 1
1. gehe zum Bild mit aktueller Nummer in der Bilderliste
2. erstelle eine Zufallszahl für den "Parkplatz 1" von akt. Bild
3. sollte dieser Platz schon belegt sein, gehe zu 2
4. lege das aktuelle Bild auf diesem Platz ab
5. erstelle eine Zufallszahl für den "Parkplatz 2" von akt. Bild
6. sollte dieser Platz schon belegt sein, gehe zu 5
7. lege das aktuelle Bild auf diesem Platz ab
8. bist du am Ende der Bilderliste?
9. wenn Nein, Bildnummer um eins erhöhen, gehe zu 1
Hoffe, geholfen zu haben ...
Zuletzt bearbeitet von qualidat am So 17.04.2011 18:56, insgesamt 4-mal bearbeitet
|
|
|
|
|
Anzeige
|
|
|
pantonine
Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
|
Verfasst So 17.04.2011 20:11
Titel
|
|
|
Das finde ich nicht sehr elegant, qualidat , oder ich habs falsch verstanden.
Ich würde die Karten als Liste betrachten. Alle x Karten machst Du einen Zeilenumbruch, so dass x Karten jeweils nebeneinander liegen.
Um eine gemischte Menge von Karten zu erzeugen, würde ich
1. Ein Array erzeugen, in dem aller Elemente 2 mal vorhanden sind.
2. Dieses Array durchlaufen, solange es nicht leer ist
3. pro Durchlauf eine Zufallszahl zwischen 0 und length-1 generieren
4. den entspr. Index aus dem Ausgangsarray ausschneiden (slice) und im Zielarray einfügen (push)
|
|
|
|
|
choise
Dabei seit: 01.02.2007
Ort: Würzburg
Alter: 35
Geschlecht:
|
|
|
|
|
qualidat
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht:
|
Verfasst So 17.04.2011 22:28
Titel
|
|
|
Zitat: | Das finde ich nicht sehr elegant, qualidat , oder ich habs falsch verstanden. |
Du hast recht, es ist nicht elegant - aber einfach zu verstehen. Bei der Leistungsfähigkeit der heutigen Rechner und wenn es nicht wirklich darauf ankommt, ziehe ich es vor, simple und leicht nachvollziehbare Algorithmen an andere zu vermitteln. Der TE scheint nicht erfahren und kann meine Methode möglicherweise eher nachvollziehen als deine. Und was macht es schon, wenn die Initialisierung des Spieles zu Beginn 1 s dauert, statt nur 1/10 s ... ?
|
|
|
|
|
pantonine
Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
|
Verfasst So 17.04.2011 23:45
Titel
|
|
|
Naja, wenn ich das richtig verstehe könnte die Initialisierung auch ewig laufen, oder?
|
|
|
|
|
qualidat
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht:
|
Verfasst Mo 18.04.2011 00:53
Titel
|
|
|
pantonine hat geschrieben: | Naja, wenn ich das richtig verstehe könnte die Initialisierung auch ewig laufen, oder? |
Nö, das geht schon. Ich kann kein JS, aber ich habe gerade ein par Zeilen RealBasic zusammengetippt. Also mit 100 Bildern (auf insgesamt 200 Plätzen) braucht der primitive Algorithmus auf einem MacBook Pro mit 2,4 GHz ca. 0,45 Sekunden.
(ohne Bilder zu malen, nur die Positionen zu bestimmen)
Wenn du es nicht glaubst, ich kann auch eine kleine Mac/Win-App compilieren, die kannst du gerne testen.
Zuletzt bearbeitet von qualidat am Mo 18.04.2011 00:56, insgesamt 1-mal bearbeitet
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 18.04.2011 12:30
Titel
|
|
|
Vielleicht kannste die Laufzeit ja durch möglichst effiziente GOTOs nochmal so optimieren, dass dieser "Algorithmus" performancemäßig total durch die Decke geht
|
|
|
|
|
|
|
|
Ähnliche Themen |
Memory Spiel
Cinema 4D - not enough memory ???
javascript memory mit nur 12 karten statt mit 18
Simples Memory-Game in Flash
Fatal Error: Allowd Memory Size
Suche Software für Online Schiebe Puzzle, Memory, etc.
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|