Problem mit Array Abfragen und Vergleichen (if)

Umut1983

Mitglied
Hallo Leute
Hab ein Spiel entwickelt in Flash und nun stehe ich vor folgendem Problem, ich hoffe ihr könnt mir helfen:
Ich hab ein dynamisches Array. Das hat ungeföhr 3-6 Elemente
Z.B. ["g_6","g_7","g_9"] und ein zweites meinetwegen ["s_7","g_7",b_7"]

Ich teile das Element wieder in g und 6 z.b. und möchte nun vergleichen ob die anderen Elemente auch das g haben. Wie könnte ich das anstellen?

Ich hab so einen Gedanken:

if (element1[1]==element2[1] && element3[1])
{ function...}
das würde zwar klappen aber!... die Elementenanzahl ist dynamisch... da ist mein Problem.

Jemand Rat und Tat?
 
Hi,

ich muss gestehen, ich verstehe Dein Problem nicht ganz. Kannst Du es vielleicht anhand eines konkreten Beispiels erläutern?

Gruß
.
 
ich habe Steine ( gelbe, blaue, rote und schwarze ) die eine bestimmte Nummer aufweisen.
Die habe ich in ein Array gespeichert z.B. so:

var meineersteSteingruppe:Array =["g_6","g_7","g_9"];

Diese will ich nun Prüfen auf gleiche Farbe. Dafür teile ich das einzelne Element . Unzwar so :

var meineinzelner1Stein:String = meineersteSteingruppe[0].split("_");
..
..
und will dann alle Steine auf diesen Buchstaben g überprüfen ob sie gleich sind!
in der Art:
if (meineinzelner1Stein == meineinzelner2Stein && meineinzelner3Stein )
{ mache dies und das}

Das funktioniert ja so auch ABER mein Problem ist:
Das mein Array oben "meineersteSteingruppe" dynamisch ist. Also es könnten auch 4 Elemente drin sein.
Und wie mach ich das dann mit der IF Abfrage? Kann man da Variablen reinbringen in die IF Abfrage.
 
Hi,

1. So etwas:
Code:
meineersteSteingruppe[0].split("_");
gibt keinen String, sondern ein Array zurück.

2. Vielleicht meinst Du so etwas:
Code:
var matching = true;

var matchColor = "g";

for (var i=0; i<meineersteSteingruppe.length; i++) {
  var einStein = meineersteSteingruppe[i].split("_")[0];
  if (einStein != matchColor) {
    matching = false;
  }
}

trace("alle Steine gleich: " + matching);

Gruß
.
 
Ja haste Recht da war natürlich ein Array gemeint.

Klasse Lösung, genau sowas hab ich mir gedacht. Das mit den true und false Ereignissen check ich nicht so ganz sonst wär ich schon drauf gekommen :D.

Danke ;)
 
Oh Tobi eine Frage hätte ich noch :D
Wie könnt ich das gleiche lösen um festzustellen ob alle Farben verschieden sind?
 
Hi,

sprich: keine zwei dürfen sich gleichen?
Code:
var matchnone = true;

for (var i=0; i<meineersteSteingruppe.length; i++) {
  var einStein = meineersteSteingruppe[i].split("_")[0];
  for (var h=0; h<meineersteSteingruppe.length; h++) {
    if (i != h) {
      var nocheinStein = meineersteSteingruppe[h].split("_")[0];
      if (einStein == nocheinStein) matchnone = false;
    }
  }
}

trace("alle Steine verschieden: " + matchnone );

Gruß
.
 
Hi nochmal Tobi :)

sorry wenn ich nochmal störe mit dem Problem. Aber ich komm grad bei meinen Schleifen nimmer ganz zurecht.
Ich will wie oben schon beschrieben eine Zahlenfolge feststellen.. aber dieses Mal mit einem Joker. Und die Folge darf von 1-13 sein und nochmal ne 1 am Ende.. egal ob rückwärts oder vorwärts.
Das heißt ich hab ein Array das lautet zum Beispiel:
var newmeinarray:Array= ["8","9","j","11","12","13","1"]

Dafür muss jetzt true angezeigt werden. Ich habs mal so probiert... aber wie du selbst siehst ist das ein wirkliches Kudelmudel geworden...Einmal klappt einmal nicht in meinem Spiel ( sowas wie Romee bloß mit Steinen)

Hier der Code:

PHP:
for (k=1; k<i; k++) {
				var meineersteSteingruppe:Array =this["tassammlung"+k];
				var matching:Boolean = true;
				matching2 = true;
				var matchingZiffer:Boolean = true;
				var matchColor:String;
				var matchZiffer:String;
				var ziffervergleich:Number;
				var zifferrichtig:Number;

				if (meineersteSteingruppe[0].split("_")[0]=="j") {
					matchColor = meineersteSteingruppe[1].split("_")[0];
				}
				if (meineersteSteingruppe[0].split("_")[0]=="j" && meineersteSteingruppe[1].split("_")[0]=="j") {
					matchColor = meineersteSteingruppe[2].split("_")[0];
				}
				if (meineersteSteingruppe[0].split("_")[0]!="j") {
					matchColor = meineersteSteingruppe[0].split("_")[0];
				}


				for (var p=0; p<meineersteSteingruppe.length; p++) {
					var einStein:String = meineersteSteingruppe[p].split("_")[0];

					if (einStein != matchColor && einStein != "j") {
						matching = false;
					}
				}

				if (matching == true) {
					var richtung:String="positiv";
					var firstZiffer;
					var secondZiffer;
					for (var c=0; c<meineersteSteingruppe.length-1; c++) {
						if (meineersteSteingruppe[ c].split("_")[1]==1 && meineersteSteingruppe[c+1].split("_")[1]==13 || meineersteSteingruppe[ c].split("_")[1]==1 && meineersteSteingruppe[c+2].split("_")[1]==12 && meineersteSteingruppe[c+1].split("_")[1]=="j") {
							firstZiffer = 14;
							secondZiffer = 13;
						}
						if (meineersteSteingruppe[ c].split("_")[1]==13 && meineersteSteingruppe[c+1].split("_")[1]==1 || meineersteSteingruppe[ c].split("_")[1]=="j" && meineersteSteingruppe[c-1].split("_")[1]==12 && meineersteSteingruppe[c+1].split("_")[1]==1) {
							firstZiffer = 13;
							secondZiffer = 14;
						} else {
							firstZiffer = meineersteSteingruppe[ c].split("_")[1];
							secondZiffer = meineersteSteingruppe[c+1].split("_")[1];
						}
						if (c<1) {
							var thirdZiffer = meineersteSteingruppe[c+2].split("_")[1];
							if (meineersteSteingruppe.length>3) {
								var forthZiffer = meineersteSteingruppe[c+3].split("_")[1];
							}
							if (firstZiffer!="j") {
								if (secondZiffer!=j) {
									if (firstZiffer<secondZiffer) {
										richtung="positiv";
									} else {
										richtung="negativ";
									}
								} else {
									if (thirdZiffer!="j") {
										if (firstZiffer<thirdZiffer) {
											richtung="positiv";
										} else {
											richtung="negativ";
										}
									} else {
										if (meineersteSteingruppe.length>3 && firstZiffer<forthZiffer) {
											richtung="positiv";
										} else {
											richtung="negativ";
										}
									}
								}
							} else {
								if (secondZiffer!=j) {
									if (secondZiffer<thirdZiffer) {
										richtung="positiv";
									} else {
										richtung="negativ";
									}
								} else {
									if (meineersteSteingruppe.length>3 && thirdZiffer<forthZiffer) {
										richtung="positiv";
									} else {
										richtung="negativ";
									}
								}
							}
						}

						if (richtung=="positiv") {
							if (c<1) {

								if (firstZiffer =="j") {
									if (secondZiffer=="j") {
										firstZiffer = meineersteSteingruppe[c+2].split("_")[1]-2;
										secondZiffer = meineersteSteingruppe[c+2].split("_")[1]-1;
									} else {
										firstZiffer = meineersteSteingruppe[c+1].split("_")[1]-1;
									}
								}
								if (firstZiffer !="j" && secondZiffer =="j") {

									secondZiffer = Number(meineersteSteingruppe[ c].split("_")[1])+1;

								}
							}
							if (c>=1) {


								if (firstZiffer =="j") {
									if (meineersteSteingruppe[c+1].split("_")[1] !="j") {
										firstZiffer = meineersteSteingruppe[c+1].split("_")[1]-1;

									}
									if (meineersteSteingruppe[c-1].split("_")[1] !="j") {
										firstZiffer = Number(meineersteSteingruppe[c-1].split("_")[1])+1;
									}
								}
								if (secondZiffer =="j") {
									secondZiffer = Number(firstZiffer)+1;

								}
							}
							ziffervergleich = firstZiffer;
							zifferrichtig= secondZiffer-1;
						}
						if (richtung=="negativ") {
							if (c<1) {

								if (firstZiffer =="j") {
									if (secondZiffer=="j") {
										firstZiffer = Number(meineersteSteingruppe[c+2].split("_")[1])+2;
										secondZiffer = Number(meineersteSteingruppe[c+2].split("_")[1])+1;
									} else {
										firstZiffer = Number(meineersteSteingruppe[c+1].split("_")[1])+1;
									}
								}
								if (firstZiffer !="j" && secondZiffer =="j") {

									secondZiffer = Number(meineersteSteingruppe[ c].split("_")[1])-1;

								}
							}
							if (c>=1) {


								if (firstZiffer =="j") {
									if (meineersteSteingruppe[c+1].split("_")[1] !="j") {
										firstZiffer = Number(meineersteSteingruppe[c+1].split("_")[1])+1;

									}
									if (meineersteSteingruppe[c-1].split("_")[1] !="j") {
										firstZiffer = Number(meineersteSteingruppe[c-1].split("_")[1])-1;
									}
								}
								if (secondZiffer =="j") {
									secondZiffer = Number(firstZiffer)-1;

								}
							}
							ziffervergleich = firstZiffer;
							zifferrichtig = Number(secondZiffer)+1;
						}
						if (ziffervergleich != zifferrichtig) {
							matching2 = false;
							fehler2.text="Farben ok aber Zahlenfolge in der "+k+". Gruppe ist falsch!";

						}
					}
				}
										
								
						}
					}


P.s. Ist rauskopiert weiß leider nicht ob des mit den Klammer ganz stimmt. Uuund meineersteSteingruppe war ein Array wie z.B. s_7 für die schwarze sieben. wurde also getrennt.. Farben wurden bestätigt... fehlt eben nur noch diese Folge mit "j" auch inbegriffen (Joker).

Mein Versuchsaufbau ist so aufgebaut das ich zuerst feststelle ob die erste und zweite Ziffer eine 1 und 13 ist... falls ya dann soll eine Runde weiterspringen.. und dann wird festgestellt ob die Folge in negativer oder positiver Richtung geht... und dannnnn kommen die eigentlichen Tests :S
Ich hoffe du kommst da noch mit.

mfg Umut
 
Zuletzt bearbeitet:
Hi,

Du hast ein Array, welches z.B. so aussieht:
Code:
var newmeinarray:Array= ["8","9","j","11","12","13","1"]
... und womit willst Du es nun vergleichen, um den Wert "true" herauszubekommen? :confused:

Aus Deinem Code werde ich insgesamt nicht schlau - bitte poste ein exemplarisches Beispiel der zu vergleichenden Arrays und die Regeln, nach denen das geschehen soll.

Gruß
.
 
Stimmt hast Recht mein Fehler, das kommt davon wenn man Stunden lang davor sitzt und die Krise irgendwann bekommt ;)

Anhang anzeigen testfertig.txt

Also ich hab jetzt mal den fla code einfch in die Textdatei rein.. da es zu groß ist.
Da muss nur ein Button mit instanznamen "tester" auf die Bühne und eine Textfeld mit Instanznamen "fehler2"

Der Code is in CS3 geschrieben müsstest eigentlich nur eventuell halt am anfang den addEventListener umschreiben. dann müsste das gehen.



Also nochmal ein Erläuterung worums geht.

In meiner fla sind 4 Arrays. Bei dem ersten ist es eine einfach Folge von Zahlen die die gleiche Farbe haben. Das heiße wenn die Folge korrekt ist... also ohne eine Zahl zu übersrpringen... und die Farben alle gleich sind dann soll es true anzeigen!
Tut es aber nicht........
Im zweiten Array genau dasselbe dieses Mal ist aber noch der JOKER mit drin.. das heißt da muss er so tun als wäre es die Richtige Zahl... und am Ende eben noch die 1 die sollte auch richtig sein.. also sollte nciht false ausgeben.

Im 3. und 4. Array ist es richtig.. die brauchste dir nich anzuschaun. Die hab ich ja dank dir gelöst kappt. Da wird nämlich auf verschiedene Farben überprüft und auf die gleiche Zahl.

So ich hoffe jetzt hast mein Problem mitbekommen, sorry nochmal das war echt unverständlich :S
 

Neue Beiträge

Zurück