Schiffe dürfen sich nicht berühren[Noch nicht gelöst!!]
Übersicht

![]() |
mas93Betreff: Schiffe dürfen sich nicht berühren[Noch nicht gelöst!!] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Da ich progge ja gerade an einem schiffe versenken. Es geht schon fast alles nur möchte ich jetzt machen, dass der computergegner seine Schiffe zufällig platziert. Ich hab mir da auch schon was ausgedacht, aber leider funktioniert das noch nicht so, wie es soll. Ich weiss aber nicht, woran das liegt. Hier mal der code wo man die schiffe platziert: Code: [AUSKLAPPEN] ;2er
b=Rnd(1,2) If b=1 Then x=Rnd(0,9) y=Rnd(1,9) g.gegnership=New gegnership g\x=x g\y=y g\art=1 g\richtung=1 g\px=x*40 g\py=y*40 enemiemap(x,y)=1 enemiemap(x,y-1)=2 vw.besetzt=New besetzt vw\xxx=x vw\yyy=y vw.besetzt=New besetzt vw\xxx=x vw\yyy=y-1 EndIf If b=2 Then x=Rnd(0,8) y=Rnd(0,9) g.gegnership=New gegnership g\x=x g\y=y g\art=1 g\richtung=2 g\px=X*40 g\py=Y*40 enemiemap(x,y)=1 enemiemap(x+1,y)=2 vw.besetzt=New besetzt vw\xxx=x vw\yyy=y vw.besetzt=New besetzt vw\xxx=x+1 vw\yyy=y EndIf b=0 ;3er b=Rnd(1,2) If b=1 Then For vw.besetzt=Each besetzt Repeat x=Rnd(0,9) y=Rnd(2,9) Until x<>vw\xxx And y<>vw\yyy And y-1<>vw\yyy And y-2<>vw\yyy Next g.gegnership=New gegnership g\x=x g\y=y g\art=2 g\richtung=1 g\px=x*40 g\py=y*40 enemiemap(x,y)=3 enemiemap(x,y-1)=4 enemiemap(x,y-2)=5 vw.besetzt=New besetzt vw\xxx=x vw\yyy=y vw.besetzt=New besetzt vw\xxx=x vw\yyy=y-1 vw.besetzt=New besetzt vw\xxx=x vw\yyy=y-2 EndIf If b=2 Then For vw.besetzt=Each besetzt Repeat x=Rnd(0,7) y=Rnd(0,9) Until x<>vw\xxx And y<>vw\yyy And x+1<>vw\xxx And x+2<>vw\xxx Next g.gegnership=New gegnership g\x=x g\y=y g\art=2 g\richtung=2 g\px=x*40 g\py=y*40 enemiemap(x,y)=3 enemiemap(x+1,y)=4 enemiemap(x+2,y)=5 vw.besetzt=New besetzt vw\xxx=x vw\yyy=y vw.besetzt=New besetzt vw\xxx=x+1 vw\yyy=y vw.besetzt=New besetzt vw\xxx=x+2 vw\yyy=y EndIf b=0 und hier der code zum anzeigen des schiffes: Code: [AUSKLAPPEN] For g.gegnership=Each gegnership
For i=0 To 9 For j=0 To 9 If g\art=1 Then If enemiemap(i,j)=1 Then If g\richtung=1 Then DrawImageRect zweier(1),g\px+40,g\py+40,0,0,40,40 If enemiemap(i,j)=2 Then If g\richtung=1 Then DrawImageRect zweier(1),g\px+40,g\py+40+40,0,40,40,40 If enemiemap(i,j)=1 Then If g\richtung=2 Then DrawImageRect zweier(0),g\px,g\py+40,0,0,40,40 If enemiemap(i,j)=2 Then If g\richtung=2 Then DrawImageRect zweier(0),g\px+40,g\py+40,40,0,40,40 EndIf If g\art=2 Then If enemiemap(i,j)=3 Then If g\richtung=1 Then DrawImageRect dreier(1),g\px+40,g\py+40,0,0,40,40 If enemiemap(i,j)=4 Then If g\richtung=1 Then DrawImageRect dreier(1),g\px+40,g\py+40+40,0,40,40,40 If enemiemap(i,j)=5 Then If g\richtung=1 Then DrawImageRect dreier(1),g\px+40,g\py+40+40+40,0,80,40,40 If enemiemap(i,j)=3 Then If g\richtung=2 Then DrawImageRect dreier(0),g\px,g\py+40,0,0,40,40 If enemiemap(i,j)=4 Then If g\richtung=2 Then DrawImageRect dreier(0),g\px+40,g\py+40,40,0,40,40 If enemiemap(i,j)=5 Then If g\richtung=2 Then DrawImageRect dreier(0),g\px+80,g\py+40,80,0,40,40 EndIf next next next so, ich weiss, dass ist viel code für nichts, aber normal müsste es funktionieren. Normal dürfte jetzt der 3er nie auf dem 2er sein. Es passiert aber trotzdem. könnt ihr mir da helfen? mfg mas93 |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
- Zuletzt bearbeitet von mas93 am So, Sep 09, 2007 20:19, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meinst du berühren (also direkt aneinander angrenzen) oder überlappen ?
Du musst die Felder markieren die nicht mehr besetzt werden sollen und bei der Erstellung eines Schiffes darauf prüfen. Wo du das machst ist mir auf den ersten Blick noch nicht ganz klar. |
||
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) |
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
sie sollen sich nicht überlappen.
Also hier erstell ich ein type mit den feldern die schon besetzt sind: Code: [AUSKLAPPEN] vw.besetzt=New besetzt
vw\xxx=x vw\yyy=y vw.besetzt=New besetzt vw\xxx=x vw\yyy=y-1 und hier lass ich x un y hoffentlich solange random bis es nicht mit dem type über einstimmt: Code: [AUSKLAPPEN] For vw.besetzt=Each besetzt
Repeat x=Rnd(0,9) y=Rnd(2,9) Until x<>vw\xxx And y<>vw\yyy And y-1<>vw\yyy And y-2<>vw\yyy Next mfg mas93 Also der obere code ist daraus, wo der 2er erstellt wird und der untere ist von da wo gecheckt werden soll ob der 3er den 2er überlappt |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] For vw.besetzt=Each besetzt
Repeat x=Rnd(0,9) y=Rnd(2,9) Until x<>vw\xxx And y<>vw\yyy And y-1<>vw\yyy And y-2<>vw\yyy Next Du must das so machen : Code: [AUSKLAPPEN] Repeat For vw.besetzt=Each besetzt x=Rnd(0,9) y=Rnd(2,9) If x<>vw\xxx And y<>vw\yyy And y-1<>vw\yyy And y-2<>vw\yyy then Exit Next ForEver Beim ersten wird immer nur der ERSTE untersucht, bei meiner Version werden immer ALLE Untersucht ! mfg Crack93 |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gute idee!
so, ich habs mal eingebaut, aber es kommt trotzdem noch vor dass sie sich überlappen. Ich habs so gemacht: Code: [AUSKLAPPEN] ;3er b=Rnd(1,2) If b=1 Then Repeat For vw.besetzt=Each besetzt x=Rnd(0,9) y=Rnd(2,9) If x<>vw\xxx And y<>vw\yyy And y-1<>vw\yyy And y-2<>vw\yyy Then Exit Next Exit Forever g.gegnership=New gegnership g\x=x g\y=y g\art=2 g\richtung=1 g\px=x*40 g\py=y*40 enemiemap(x,y)=3 enemiemap(x,y-1)=4 enemiemap(x,y-2)=5 vw.besetzt=New besetzt vw\xxx=x vw\yyy=y vw.besetzt=New besetzt vw\xxx=x vw\yyy=y-1 vw.besetzt=New besetzt vw\xxx=x vw\yyy=y-2 EndIf If b=2 Then Repeat For vw.besetzt=Each besetzt x=Rnd(0,7) y=Rnd(0,9) If x<>vw\xxx And y<>vw\yyy And y-1<>vw\yyy And y-2<>vw\yyy Then Exit Next Exit Forever mfg mas93 |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
![]() |
LordArtus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
es ist keine Lösung für deinen Code (du kennst ihn ja besser ![]() Ich hoffe du verstehst was ich meine: Code: [AUSKLAPPEN] SuperStrict SeedRnd MilliSecs() Local Testmap:Byte[10,10] ' 50x zufällig +1(markieren) in Testmap schreiben For Local i:Byte=0 To 49 Local x:Byte=Rand(0,9) Local y:Byte=Rand(0,9) Testmap[x,y]=Testmap[x,y]+1 Next ' Ausgabe For Local x:Byte=0 To 9 For Local y:Byte=0 To 9 WriteStdout Testmap[x,y] Next WriteStdout("~n") Next ' Testmap auf 0 setzen For Local x:Byte=0 To 9 For Local y:Byte=0 To 9 Testmap[x,y]=0 Next Next ' Nochmal 50x zufällig +1(markieren) in Testmap schreiben(diesmal mit Überprüfung) For Local i:Byte=0 To 49 Local x:Byte=Rand(0,9) Local y:Byte=Rand(0,9) '------------------------------ If Testmap[x,y]>0 i=i-1 Else Testmap[x,y]=Testmap[x,y]+1 EndIf '------------------------------ Next ' Nochmal Ausgabe WriteStdout("~n") For Local x:Byte=0 To 9 For Local y:Byte=0 To 9 WriteStdout Testmap[x,y] Next WriteStdout("~n") Next Ist zwar in BlitzMax geschrieben , aber sollte verständlich sein , oder leicht umzusetzten sein. MfG LordArtus p.s. ich denke mit Code kann man etwas besser erklären , als mit Worten , ausserdem hat es Xeres schon erwähnt. |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verstehe auch nicht, warum du für die besetzten Felder in Types speicherst. So ein Feld schreit geradezu nach einem Array. Denn ein zweidimensionales Array repräsentiert das Feld perfekt und das Feld wird wohl das gesamte Spiel über seine Ausmaße behalten.
LordArtus machts vor. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau, ein Array sollte die Lösung all deiner Probleme sein. Wenn Du die eingetragenen Schiffe unterscheiden willst kannst du ihnen ja verschiedene Werte zuweisen (Freises Wasser = 0,U-Boot =1, Zerstörer = 2 ...)
So lässt sich auf einen Blich erkennen ob und wenn ja mit was ein Feld belegt ist. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielen vielen dank, es hat funktioniert!!!
Man, warum bin ich ncht gleich draufgekommen ![]() Vielen dank! mfg mas93 |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group