"nachrutschen" der nachbarn

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Vidde

Betreff: "nachrutschen" der nachbarn

BeitragDi, Feb 24, 2009 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
in meinem spiel stehen mehrere häuser nebeneinander. wenn ein haus abbrennt (wert des hauses sinkt auf 0) sollen alle anderen daneben stehenden häuser nachrücken um die lücke zu schließen. ich überleg schon seit tagen, aber ich find keinen programmieransatz. kann mir jemand einen denkanstoß verpassen oder gab es schon ein solches oder ähnliches problem in einem anderen traed?
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.

Xeres

Moderator

BeitragDi, Feb 24, 2009 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Nebeneinander in welcher Dimension? Eine Linie (Links-Rechts), ein Feld 2D? Von jeder Seite gleichmäßig nachrücken, eine von beiden Seiten?
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Vidde

BeitragDi, Feb 24, 2009 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ganz simpel halt - eine linie. ich machs mal mit zahlen deutlich:

H1(wert 789) H2(wert 456) H3(wert 123) H4(wert 258) H5(wert 369)

in der folgenden runde brennt H3 komplet ab und hat den wert 0. nun sollen die rechten häuser diese lücke mit auffüllen und es sollte so aussehen.

H1(wert 789) H2(wert 456) H3(wert 258) H4(wert 369)

die werte sollen also mitrutschen und ein spieler am ende wegfallen.
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.

Goodjee

BeitragDi, Feb 24, 2009 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
nimm types und lösch mit delete einfach einen raus
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Vidde

BeitragDi, Feb 24, 2009 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ich arbeite in diesem projekt mit Dim...
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.

SpionAtom

BeitragDi, Feb 24, 2009 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/foru...hp?t=30806

Das Problem ist dasselbe. Versuch mal alleine es auf dein Spiel zu übertragen.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Vidde

BeitragDi, Feb 24, 2009 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
danke SpionAtom und auch danke an alle anderen.

also dieses beispiel überfordert mich maßlos aber ich wills trotzdem ernsthaft versuchen - werde dann wohl nächste woche dieses thema neu ansprechen da der erfolg sicher ausbleibt...
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.
 

da_poller

BeitragDi, Feb 24, 2009 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
wie die erste antwort schon sagte:

nimm Types

da du objekte zwischendrin rauslöschen willst die nachrücken und es sich offensichtlcih nur um eine reihe(zeile) handelt sind Arrays(Dim) die schlechtere wahl.

pile

BeitragMi, Feb 25, 2009 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder fang einfach an den Code auf dein Beispiel zu übertragen und wenn du nicht weiterkommst poste den Code hier mal bis dahin wo du gerade bist.
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

TimBo

BeitragDo, Feb 26, 2009 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,


wenn es nur um das darstellen geht, mach das:

Code: [AUSKLAPPEN]
For i=0 to anzahl_haus
  if haus(wert)<>0 then
     d=d+1
     drawimage hausimg,0+d*20,0
  endif

next


ich hoffe, ich habe das problem so richtig verstanden.

TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Vidde

BeitragDo, Feb 26, 2009 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
danke TimBo - so in die richtung dachte ich auch schon mehrfach.

wie ich aber aus den anderen antworten herauslese, ist das mit Dim wohl sehr schwer bis nahezu unmöglich.
habe auch schon in types geschuppert, aber die überfordern mich noch restlos. bin froh dass das programm so erst mal mit Dim läuft und versuche mich dort nochmal an einer lösung...
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.

TimBo

BeitragDo, Feb 26, 2009 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
meine Lösung ist doch für Dims?
Jetzt bin ich wohl total verpeilt.

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

da_poller

BeitragDo, Feb 26, 2009 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
es geht um das nachrücken denke ich.. (und evtl resizen des arrays weil der rest sonst leer(0) ist..)

für types findest du per forensuche ein sehr gutes und verständlcihes tutorial("type tut für dummies") glaub nach sowas musste mal suchen hier.. hat mir damals auch geholfen.

Vidde

BeitragDo, Feb 26, 2009 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ja schon - aber so funzt es noch nicht.

ich erkläre das problem nochmal bildlich anders (2D):

ein hochhaus hat 10, oder 15 oder 20 etagen. jede etage hat noch mehere eigenschaften. nun soll eine etage verschwinden - sagen wir etage 3. nun sollen alle anderen etage (mit all ihren werten) um 1 nach unten rutschen um die 3. zu ersetzen. danach ist also die vorher 4. etage plötzlich die 3.; die vorher 5. ist nun die 4. and so on... und dem haus fehlt am ende ingesamt nur die letzte etage (haus hat dann nur noch 9 oder 14 oder 19 etagen.

@ da_poller: genau das ist mein problem - die etage bleibt sonst leer. oder ich ich entsorge nur die letzte etage. ist aber unfair, denn die kann nix dafür, dass die 3. etage so doof war Smile
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.
  • Zuletzt bearbeitet von Vidde am Do, Feb 26, 2009 16:04, insgesamt einmal bearbeitet
 

da_poller

BeitragDo, Feb 26, 2009 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

type etage
  field eigenschaft1
  field eigenschaft2
...
end type

h.etage=new etage
h\eigenschaft1=bla
h\...

usw...



so würde ich das in etwa lösen..
(pseudo code nciht lauffähig)

SpionAtom

BeitragDo, Feb 26, 2009 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Weißt du denn schon wie man mit mehrdimensionalen Arrays umgeht? Die könnten die Etagen recht gut abbilden. Auch wenn Types zu bevorzugen sind, so ist es mit Arrays nicht unmöglich, ja sogar nicht schwierig.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Vidde

BeitragDo, Feb 26, 2009 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
vidde sitzt kopfschüttelnd vor dem rechner - kein ahnung, noch lange zeit nicht...
ich knobel noch etwas an der Dim-lösung (hab grad bock drauf). ansonsten muss ich mich auf den anderen gebieten wohl mal schlauer machen.
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.

BladeRunner

Moderator

BeitragDo, Feb 26, 2009 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Dim array(10)
For i = 0 To 9
   array(i) =i
Next

Print "vorher:"
For i = 0 To 9
   Print array(i)
Next

entferne(4)
Print "nachher:"
For i = 0 To 9
   Print array(i)
Next

WaitKey()

Function entferne(x)
   If x <9 Then
      For i = x To 9
         array(i)=array(i+1)
      Next
        array(9)=0
   Else
      array(9)=0
   EndIf
End Function


Funzt, ist allerdings sehr ineffizient. Ich kan dir wirklich nur raten dich intensiv mit Types zu beschäftigen, die hier tausendfach besser geeignet sind.
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

Xeres

Moderator

BeitragDo, Feb 26, 2009 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Types ftw!
Code: [AUSKLAPPEN]
Graphics(800, 600, 0, 2)
SetBuffer BackBuffer()
Local timer = CreateTimer(60)
Global mx, my, mh1, mh2

;*** Für das Beispiel sind die Stockwerke nur Bunte Klötze...
Type TStockwerk
   Field r, g, b
End Type


For i = 0 To 5
   Add_Stockwerk(Rand(0,255), Rand(0,255), Rand(0,255))
Next


Repeat
   mx = MouseX()
   my = MouseY()
   mh1 = MouseHit(1)
   mh2 = MouseHit(2)
   
   ;*** Rechte Maustaste fügt ein Stockwerk hinzu:
   If mh2=True Then Add_Stockwerk(Rand(0,255), Rand(0,255), Rand(0,255))
   
   Update_Stockwerke()
   
   Flip(0)
   WaitTimer(timer)
   Cls
Until KeyHit(1)


Function Add_Stockwerk(r, g, b)
   ;*** Ein neues Stockwerk wird hinzugefügt
   Local s.TStockwerk = New TStockwerk
   ;* Und alle benötigten Werte gesetzt
   s\r = r
   s\g = g
   s\b = b
End Function

Function Update_Stockwerke()
   Local s.TStockwerk, i=500
   For s = Each TStockwerk
      ;*** Wir zeichnen von unten nach oben. Neue Stockweke erscheinen Obenauf
      Color(s\r, s\g, s\b)
      Rect(380, i, 40, 40)
      
      ;*** Wenn die Maus sich im Rechteck des Stockwerks befindet, und geklickt wurde,
      ;*** wird das Sockwerk entfernt
      If mouseInRect(380, i, 40, 40) And mh1=True Then
         Delete s
      EndIf
         
      i = i - 40
   Next
End Function

Function mouseInRect(x, y, w, h)
   If mx <= x Then Return False
   If my <= y Then Return False
   If mx >= x + w Then Return False
   If my >= y + h Then Return False
   Return True   
End Function
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Vidde

BeitragDo, Feb 26, 2009 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
unfassbar Xeres - tausend und einen dank! muss das nur noch irgendwie auf mein programm übertragen.

einfach MEGAKLASSE diese community - danke an alle helfer
Gern der Zeiten gedenk ich, als alle Glieder gelenkig - bis auf eins. Diese Zeiten kehren nie wieder, steif sind nun alle Glieder - bis auf eins.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group