mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 06:29 Benutzername: Passwort: Auto-Login

Thema: Memory programmieren vom 17.04.2011


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Memory programmieren
Seite: 1, 2  Weiter
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

Antworten mit Zitat Zum Seitenanfang

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!! Lächel

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>
  View user's profile Private Nachricht senden
qualidat

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst So 17.04.2011 18:50
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst So 17.04.2011 20:11
Titel

Antworten mit Zitat Zum Seitenanfang

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)
  View user's profile Private Nachricht senden
choise

Dabei seit: 01.02.2007
Ort: Würzburg
Alter: 35
Geschlecht: Männlich
Verfasst So 17.04.2011 22:24
Titel

Antworten mit Zitat Zum Seitenanfang

bei so plain js sachen schau ich öfters mal bei php.js nach. php bietet ja shuffle, von daher: http://phpjs.org/functions/shuffle:514
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
qualidat

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst So 17.04.2011 22:28
Titel

Antworten mit Zitat Zum Seitenanfang

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 ... ?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst So 17.04.2011 23:45
Titel

Antworten mit Zitat Zum Seitenanfang

Naja, wenn ich das richtig verstehe könnte die Initialisierung auch ewig laufen, oder?
  View user's profile Private Nachricht senden
qualidat

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Mo 18.04.2011 00:53
Titel

Antworten mit Zitat Zum Seitenanfang

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. Grins
(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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 18.04.2011 12:30
Titel

Antworten mit Zitat Zum Seitenanfang

Vielleicht kannste die Laufzeit ja durch möglichst effiziente GOTOs nochmal so optimieren, dass dieser "Algorithmus" performancemäßig total durch die Decke geht *zwinker*
  View user's profile Private Nachricht senden
 
Ä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.
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


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.