Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-09-2004, 15:36   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2002
Ort: Bonn-Beuel
Beiträge: 23
Matheproblem: Zahl aus Summanden darstellbar?

Hallo zusammen,

Ich hab ein Kleines Problem. Ich arbeite gerade an einem Spiel, das ähnlich wie Add-it Up funktionieren soll. Link: www.flasharcade.com .
D.h. man hat ein Feld mit 100 anklickbaren Zahlen zwischen 1 und 9, und eine gesuchte zahl zwischen 1 und 20.
Wenn die angeklickten Zahlen in Summe die gesuchte Zahl ergeben, verschwinden sie und eine neue Zahl erscheint.

Das klappt bei mir auch alles soweit. Nur was ich noch brauche ist eine Funktion, die checkt, ob die gesuchte Zahl mit den auf dem Feld verbliebenen Zahlen darstellbar ist. Das mit "roher Gewalt" zu lösen (d.h. Kombination aller Felder miteinander ausprobieren, und aussteigen sobald die Summe gebildet ist) erscheint mir nicht sehr glücklich.

Andere Idee meinerseits, zu jeder Zahl von 1-19 einen 2dimensionales Array anlegen, das hart-codiert alle möglichen Kombinationen zur Summierung der Zahl enthält. Was allerdings ziemlich viel Handarbeit wäre.

Für praktikable Vorschläge wäre ich dankbar,

Grüße,
TokraT
Tokrat ist offline   Mit Zitat antworten
Alt 06-09-2004, 15:57   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
falsche reihenfolge!

erzeuge deine "gesuchte" zahl aus den vorgegebenen möglichkeiten. dann brauchst du hinterher nicht zu prüfen ob man es hätte machen können.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 06-09-2004, 16:35   #3 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Aloha!
Meinst Du sowas ? oder hab ich was falsch verstanden
ActionScript:
  1. var zahlenArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  2. var zufallArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
  3. var rechenwert = 0;
  4. var zufall;
  5. var versuche = 0;
  6. var punkte = 0;
  7. function zufalls() {
  8.     zufall = zufallArray[Math.floor(Math.random()*zufallArray.length)];
  9.     trace(zufall);
  10.     this.Punkte_txt.text = "Punkte = "+punkte;
  11.     this.Versuche_txt.text = "Versuche = "+versuche;
  12.     versuche++;
  13. }
  14. for (var i = 0; i<zahlenArray.length; i++) {
  15.     var mc = this.attachMovie("base", "base"+zahlenArray[i], i+10);
  16.     mc.ID = i;
  17.     mc._y = 300;
  18.     mc._x = 50+(50*i);
  19.     mc.texter.text = zahlenArray[i];
  20.     mc.onPress = function() {
  21.         rechenwert += zahlenArray[this.ID];
  22.         trace(rechenwert+" || "+zufall);
  23.         if (rechenwert<zufall) {
  24.             this._parent.ausgabe.text = "eingabe ist kleiner als vorgabe! nochmal drücken!!";
  25.         }
  26.         if (rechenwert == zufall) {
  27.             this._parent.ausgabe.text = "eingabe ist gleich mit vorgabe! Glückwusch!!";
  28.             punkte++;
  29.             zufalls();
  30.             rechenwert = 0;
  31.         }
  32.         if (rechenwert>zufall) {
  33.             this._parent.ausgabe.text = "eingabe ist größer als vorgabe! Neuer Versuch!!";
  34.             zufalls();
  35.             rechenwert = 0;
  36.         }
  37.     };
  38. }
  39. zufalls();
Angehängte Dateien
Dateityp: zip zufall120.zip (3,5 KB, 4x aufgerufen)
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 06-09-2004, 16:38   #4 (permalink)
Neuer User
 
Registriert seit: Jul 2002
Ort: Bonn-Beuel
Beiträge: 23
Danke für den Tipp.
Dass wäre allerdings eine gute Lösung, wenn auch nur teilweise.
Das Spiel ginge dann ja immer auf.
Ich möchte aber auch erreichen, dass der Spieler versucht, "strategisch vorzugehen" und sich möglichst viele Möglichkeiten offen hält, die kleinen zahlen nicht direkt alle verbrät, etc.
Das ganze hätte so mehr Reiz, wenn man versucht, dass möglichst wenige Zahlen übrig bleiben.
Tokrat ist offline   Mit Zitat antworten
Alt 06-09-2004, 16:46   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2002
Ort: Bonn-Beuel
Beiträge: 23
@rusty
ich fürchte da hast du mich falsch verstanden.
was ich suche ist eine no-Moves-Left-Funktion für das Spiel.
schau mal unter dem Link, wenn man es mal kurz anspielt wird schnell klar was ich meine.

thx,
tokrat
Tokrat ist offline   Mit Zitat antworten
Alt 06-09-2004, 21:11   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..Das Spiel ginge dann ja immer auf.."
aaaahja, klasse spiel, das dann am ende sagt: ätsch, geht ja garnicht!

---
"..wenn man versucht, dass möglichst wenige Zahlen übrig bleiben.."
dazu gibt es nur eine einzige lösung: alle einser, dann alle zweier, dann...

---
"..strategisch vorzugehen.."
("..das ähnlich wie Add-it Up funktionieren soll.." also nicht gleich?)
wäre vielleicht, wenn man gegen den computer spielt (wer die zahl zuerst erreicht) und die anzahl der auswählbaren zahlen geringer ist (also 100 ist zu viel und es sollten auch 10, 11, 12, 13 usw. geben. dafür müssten ein paar zahlen fehlen) weil, wer so aus dem vollen schöpfen kann, der braucht keine strategie.
und weitere spielregel: jede neue zahl MUSS grösser sein als die zuvor genommene. (kommt halt drauf an, ob das spiel für kinder oder für kindische sein soll)

----
"..100 anklickbaren Zahlen zwischen 1 und 9, und eine gesuchte zahl zwischen 1 und 20.."

möglicher algorithmus z.b. backtracking
(ausweg durch einen irrgarten suchen):
alle möglichen zahlen sortieren (von gross nach klein). jetzt der reihe nach aufaddieren, bis die zahl erreicht ist=ende oder überschritten.
wenn überschritten, dann letzte zahl durch eine kleinere ersetzen
wenn keine kleinere mehr da ist, dann vorletzte durch eine kleinere zahl ersetzen und wieder die letzte zahl austauschen.

"beschleunigend" ist, dass man z.b. eine 5 nicht durch eine 5 ersetzen muss ;-)
"beschleunigend" ist, das wenn z.b. die vorletzte zahl ausgetauscht wird, die letzte zahl nicht grösser sein braucht, als die "original" vorletzte.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (06-09-2004 um 21:21 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 07-09-2004, 08:42   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2002
Ort: Bonn-Beuel
Beiträge: 23
Danke für die umfangreiche Antwort.

Du hast recht, ich sollte die Größe des Zahlenfeldes reduzieren, und auch ein paar Zahlen zwischen 1 und 9 komplett rauslassen. (Mit verschienden Beschränkungen lassen sich so auch sehr leicht verschiedene Schwierigkeitsgrade erstellen).

Sonst wär es zu leicht, obwohl es mir auch in der einfachen Variante schon Spass macht ,liegt vielleicht an meiner kindischen Ader .

So jetzt muss ich den Algorithmus nur noch in AS umsetzen aber das krieg ich schon hin.

thx alot,

tokrat
Tokrat ist offline   Mit Zitat antworten
Alt 07-09-2004, 16:41   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..Danke für die umfangreiche Antwort.."
ist halt erfreulich, wenn mal eine andere frage kommt als: "mein preloader geht nicht" u.d.g. schon 10.000mal beantwortete fragen.
die problematik von diesem spiel ist auch für mich interessant.


"..Sonst wär es zu leicht.."
ja, ich habe die "vorlage" 3x gespielt. ist sauber gemacht (da kann man wirklich nicht mäckern), aber sofort langweilig, weils wie "domino" funktioniert: man versucht zuerst die grossen zahlen los zu werden... das spiel wird somit rein mechanisch ausgeführt und bietet keine überraschungsmomente.

bestenfalls für schüler geeignet, zum erlernen der grundrechenart.
oder halt um's programmieren zu lernen ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (07-09-2004 um 16:45 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 07-09-2004, 20:37   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
also das rechnerische würde ich so regeln:

die anzahl der vorhandenen einzelnen zahlen in nem array hinterlegen.
das könnte für die zahlen 1-9 ungefähr so aussehen

zahlen=[2,3,5,3,11,7,5,3,1]
heißt also von n=4 gibt es
zahlen[n-1]->3 Stück.

wenn du nun einen algorythmus findest, der dir für eine beliege zahl n alle möglichen summen zurückgibt kannst du doch die sache wie folgt angehen.
summenalgo(4) liefert dir
[4],[2,1],[1,0,1]

auf deutsch:
1+1+1+1 // 1+1+2 // 1+3
nun kannste doch überprüfen ob alle notwendigen zahlen in dem array oben ("zahlen") vorhanden sind,
schlagen alle fehl,so kann die zahl nicht mehr als summe dargestellt werden.


der summenalgo könnte sicherlich am besten rekursiv beschrieben werden.
oder mit ner geschickten while-schleife.

grüße
deluxe
Deluxe ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele