Dim Frage
Übersicht

speerBetreff: Dim Frage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
benötige ein Dim Feld und komme damit irgendwie mit der Erklärung nicht klar. Als Beispiel: dim zahl(6,5) Kann man doch folgendermaßen lesen: Zeile 0: 0, 1, 2, 3, 4, 5, 6 Zeile 1: 0, 1, 2, 3, 4, 5, 6 Zeile 2: 0, 1, 2, 3, 4, 5, 6 Zeile 3: 0, 1, 2, 3, 4, 5, 6 Zeile 4: 0, 1, 2, 3, 4, 5, 6 Zeile 5: 0, 1, 2, 3, 4, 5, 6 Also kann ich quasi folgendermaßen auf Zeile 5, Spalte 0 darauf zugreifen zahl(0,5) oder? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, genauso ist es ![]() dim zahl(6,5) x: 0-6 und y: 0-5 |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
speer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, danke.
Dann ist irgendwas faul in meinem Programm ![]() |
||
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
poste doch mal dein programm, vlt können wir dir dann noch weiter helfen | ||
![]() |
Dice of Darkness |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Xeres: Das stimmt glaub ich nicht ganz. Du hast geschrieben: Für x von 0 bis 6 und für y von 0 bis 5. Ich würde sagen, bei einem 6x5 - Array wäre das entweder: x = 1-6 und y = 1-5 oder: x = 0-5 und y = 0-4.
Kleinigkeit, aber ich wollts nur erwähnen ![]() MfG Dice of Darkness |
||
Gratis Spiele, Musik, Tools |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du dim zahl(5) angibst, bekommst du 6 "Plätze": 0,1,2,3,4,5
beginnend immer bei 0 und endet bei deiner Angabe. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Dice of Darkness |
![]() Antworten mit Zitat ![]() |
---|---|---|
ehrlich? ok, dann nehm ich alles zurück... ich dachte immer, er fängt bei 1 an zu zählen...
naja, in zukunft sollte ich sowas wohl besser erst testen und dann behaupten ![]() mfg Dice |
||
Gratis Spiele, Musik, Tools |
speer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
finde den Fehler einfach nicht. Es kommt immer ein Array out of Index. Hier mal den Code: Code: [AUSKLAPPEN] ; Vier Gewinnt Global breite = 800 Global hoehe = 600 Global x1 = 100 Global x11 = 650 Global y1 = 100 Global y11 = 280 Global trenner= 5 Global stein_x= 40 Global stein_y= 40 Global steine = 0 Global win = 0 Global pos = 0 Global Player = 1 Global a = 6 Global b = 5 Dim spiel(a,b) Dim hoehe1(b) Graphics breite, hoehe SetBuffer BackBuffer() Cls zeichneSpielfeld() Stein(255,0,0,pos) Repeat ; Hauptschleife linksrechts() Flip Until KeyHit(1) Function Stein(FarbeA, FarbeB, FarbeC, xpos) ; Farbe des Spielsteines setzen Color FarbeA, FarbeB, FarbeC ; Setze Stein an die Spalte definiert durch xpos tempa1 = (x1 * xpos) + x1 Oval tempa1+8, y1-stein_y, stein_x-10, stein_y-10, 1 End Function Function linksrechts() If KeyHit(203) If pos >= 0 Stein(0,0,0,pos) If pos <> 0 Then pos = pos - 1 If Player = 1 Stein(255,0,0,pos) Else Stein(0,255,0,pos) EndIf EndIf EndIf If KeyHit(205) If pos < 6 Stein(0,0,0,pos) pos = pos + 1 If Player = 1 Stein(255,0,0,pos) Else Stein(0,255,0,pos) EndIf EndIf EndIf If KeyHit(28) temp = 0 For anzahl = b To 0 Step - 1 If spiel(pos,anzahl) = 0 Or spiel(pos,anzahl) = 0 And temp = 0 temp = 1 spiel(pos,anzahl) = Player steinSetzen(pos,anzahl) EndIf Next ;For xxx = 0 To a Step +1 ; For yyy = 0 To b Step +1 ; Print spiel(a,b) ; Next ;Next End If End Function Function steinSetzen(xpos,zeile) tempa1 = (x1 * xpos) + x1 ;tempy1 = ((zeile/stein_y)+y11) ;tempy1 = y1 * zeile + y11 If Player = 1 Stein(255,0,0,xpos) Player=2 Else Stein(0,255,0,xpos) Player=1 EndIf Oval tempa1+trenner, hoehe1(zeile-1)+trenner, stein_x, stein_y, 1 ;Oval tampa1+trenner, 100, stein_x, stein_y, 1 linksrechts() End Function Function zeichneSpielfeld() Color 64,64,255 Rect x1, y1, x11, y11, 1 tempx1 = x1 tempy1 = y1 i = 0 j = 0 Color 128, 128, 128 Repeat Oval tempx1+trenner, tempy1+trenner, stein_x, stein_y, 1 tempx1 = (x1 * i) + x1 i = i + 1 steine = steine + 1 If steine Mod 8 = 0 tempy1 = tempy1 + trenner + stein_y hoehe1(j)=tempy1 j=j+1 tempx1 = x1 i = 0 EndIf Until steine = 48 End Function Bitte um Nachsicht wegen dem Code. Bin noch Anfänger ![]() Wer meinen Denkfehler findet, bitte keine Lösung posten sondern nur einen Hinweis. Bin noch am lernen ![]() Speer |
||
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wo kommt der fehler denn bitte? Ich hab den nämlich nicht... | ||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
speer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
er kommt wenn ein Stein gesetzt wird (Enter drücken). Das Problem scheint hier zu liegen: Code: [AUSKLAPPEN] For anzahl = b To 0 Step - 1
If spiel(pos,anzahl) = 0 Or spiel(pos,anzahl) = 0 And temp = 0 temp = 1 spiel(pos,anzahl) = Player steinSetzen(pos,anzahl) EndIf Allerdings tritt der Fehler erst an der obersten Reihe auf. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bei mir kommt zwar auch ein Fehler, aber in dieser Zeile:
Zitat: Oval tempa1+trenner, hoehe1(zeile-1)+trenner, stein_x, stein_y, 1
Weil es da hoehe1(zeile-1) nicht gibt. Ist auch klar, denn ganz oben ist zeile-1=-1 und es gibt kein Dimfeld, dass von -1 aus geht. |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Fehler ist in Zeile 123:
Code: [AUSKLAPPEN] Oval tempa1+trenner, hoehe1(zeile-1)+trenner, stein_x, stein_y, 1
Wenn zeile=0 ist, dann versuchst du, auf das Feld -1 zuzugreifen. -> Fehler Wenn du doch schon in dem Array "spiel" speicherst, wieso zeichnest du nicht alle Spielsteine mit Hilfe dieser Informationen? Dann hast du auch kein Problem mit disem Fehler. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
speer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jungs, ihr seit Klasse ! ![]() ![]() Doch eine Frage noch, wie habt ihr so schnell herausgefunden in welcher Zeile der Fehler auftrat? Bei mir kommt lediglich eine Messagebox mit dem Fehler. Also ohne weitere Hinweise. Habt ihr vielleicht eine spezielle IDE? Speer ![]() |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst in deiner IDE oben auf "Program" und dann auf "Debug Enabled?" klicken ![]() Dann geht der Debugmodus an, und wenn mal ein Mav kommen sollte, ect, zeigt dir der debugger immer die Zeile an. Natürlich sollte man den Debugger zum kompilieren besser ausschalten... |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] spiel(pos,anzahl) = 0 Or spiel(pos,anzahl) = 0 Zwei mal das gleiche...? Das kannst du kürzen.
Und gewöhne dir gleich an Flip(0) und waittimer zu benutzen, siehe -> Hurra, 100 % Auslastung |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
speer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
benötige bei einem Problem nochmals Eure Hilfe bzw. ein Tip. Habe ein Dim (6,5). Das Spiel heißt vier gewinnt. Nun sollte das Programm überprüfen ob von einem Spieler 4 Stein neben, über oder schräg liegen. Habe das Dim gewählt weil ich dort die Steine für die Spieler abspeichere. So steht die 0 für ein leeres, die 1 für Spieler 1 und die 2 für Spieler 2 Stein. Hab jetzt mal über eine verschachtelte for schleife und 4 unschönen if Bedingungen die Steine waagrecht und senkrecht hinbekommen. Grüble nun seit mehreren Stunden darüber und mir fällt einfach nichts ein. Wahrscheinlich liegt auch das Problem daran, dass ich ein Neuling in der Programmierung bin ![]() Gibt es vielleicht einen eleganteren Lösungsweg? Hat mir vielleicht jemand einen Ansatz? Speer |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Grobbeispiel, was du noch an dein Projekt anpassen könntest:
Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer FrontBuffer() Local S$="100110110001101011110001011110001010011" Local C%,V% For C=1 To Len(S) If Mid(S,C,1)="1" Then V=V+1 Else V=0 If V=>4 Then Print "Es wurden 4 '1'en in Folge gefunden" Next WaitKey |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
speer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
komme nicht weiter, entweder kapiere ich es nicht oder ich hab irgendwo einen Denkfehler drin: Hier mal der Code: Code: [AUSKLAPPEN] Function checkStein()
temp1 = 0 zaehler = 0 For i = 0 To b For j = 0 To a temp1=spiel(j,i) ; Print temp1 If temp1 <> 1 Or temp1 <> 2 Then temp1 = 0 And zaehler = 0 If temp1 = 1 Then zaehler = temp1 +1 If temp1 = 2 Then zaehler = temp1 +2 If zaehler = 4 Then Color 255,0,0: Print "Spieler 1 hat gewonnen" If zaehler = 8 Then Color 0,0,255: Print "Spieler 2 hat gewonnen" j = j + 1 Next i = i + 1 Next End Function Nun sollten die beiden Schleifen durch das DIM (6,5) durchgehen. In der ersten Schleife setze ich auf y = 0. Die innere Schleife läuft x ab und startet bei 0. Nach das Ende erreicht ist, erhöht sich y um 1 und startet erneut bei x = 0. Ist das mit der if Bedingung eigentlich so ok oder könnte/liese sich das auch anders lösen? Sorry wenn ich nerve aber hab mir dieses vorgehen gestern abend lange überlegt und heute versucht umzusetzen. Leider ohne Erfolg und das würde frustrieren... aber nur ohne Eure Tips ![]() Nochmals ein dickes Danke an alle helfenden Hände ![]() Speer |
||
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du brauchst deine Zählvariable am Ende der For-Next-Schleife nicht erhöhen, das wird automatisch gemacht. Ich wundere mich nur, dass es keinen Fehler gibt, da ja früher oder später die Zählvariablen über die Arraygrenzen hinausgehen. War da irgendetwas zum Thema Debugger? | ||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, das Schöne an 4 gewinnt, ist doch, dass ein neuer Stein nicht die gesamte Spielsituation ändert (wie beim Schach), sondern nur dort ein Gewinnen möglich ist, wo der neue Stein zu liegen kam.
Daher würde ich vorschlagen, ausgehend von dem neuen Stein in 4 Richtung zu suchen: 1. abnehmendes X bis man zu einem Gegner oder leeren Feld kommen würde, von da aus wieder nach rechts, bis entweder 4 eigene steine oder ein leeres Feld oder ein gegnerstein kommt. 2. war das erfolglos, dann das gleiche in y-richtung. 3. dann das Ganze in die diagonale: Gleichzeitg abnehmendes X und abnehmendes y, bis man zu einem Gegner oder leeren Feld kommen würde, von da aus wieder nach rechts unten, bis entweder 4 eigene steine oder ein leeres Feld oder ein Gegnerstein kommt. 4. Gleichzeitg abnehmendes X und ZUnehmendes y, bis man zu einem Gegner oder leeren Feld kommen würde, von da aus wieder nach rechts OBEN, bis entweder 4 eigene steine oder ein leeres Feld oder ein Gegnerstein kommt. Nicht vergessen, darf man dabei, dass auch der Rand kommen könnte! Sowas löst man immer mit einem Trick. Dann muss man hier nichts spezielles programmieren: Du braucht eine Matrix von x=6 und Y=5? Dann mach eine mit X=8 und Y=6 ->Dim Feld(8,6) Code: [AUSKLAPPEN] 9 0 0 0 0 0 0 9 9 0 0 0 0 0 0 9 9 0 0 0 0 0 0 9 9 0 0 0 0 0 0 9 9 0 0 0 0 0 0 9 9 0 0 0 0 0 0 9 9 9 9 9 9 9 9 9 die Neuner auf Spalten Feld(0,n) und Feld(0,7) sind der Rand, die Steine werden also bei den Spalten Feld(1,n) bis Feld(6,n) eingeworfen. Und fallen dann bis zur Y-Reihe 5 durch. Die Feld(n,6)-Reihe ist wieder Rand. Code: [AUSKLAPPEN] Function TesteWaagrecht%(locX%,locY%) Local locSpieler%, StartPunkt%, EndPunkt% locSpieler=Feld(locX,locY) 'Startpunkt suchen: For I=AktX To 1 Step -1 If Feld(i-1,locY)<>locspieler Then Exit Next StartPunkt=i 'von da aus nach rechts: For I=StartPunkt To 6 If Feld(i,locY)<>locspieler Then Exit Next EndPunkt=i If (EndPunkt-StartPunkt)< 4 Then Return False Else DEBUGLOG "Gewonnen" Return True Endif End Function Kriegst Du die anderen 3 Routinen selber hin? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group