Spielbrett und fallende Steinchen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

.erazer

Betreff: Spielbrett und fallende Steinchen

BeitragDo, Jun 05, 2008 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir ein Knobelspiel ausgedacht, und fange gerade so mit BB an.

Also ich habe ein 8x8 großes spielbrett, und habe mittels dim dieses dimensioniert.

Auch types habe ich genutzt, um die verschiedenen informationen in jedem feld zu speichern, also was für ein stein in welchem feld gerade ist, position etc.

problem ist folgendes.

durch verschiedene spielzüge werden spielfelder geleert, und die darüberliegenden steine müssen also nachrutschen.

statisch bekomme ich das auch hin, indem ich einfach die spielsteininformation auf das jeweils darunter liegende feld tausche.

aber wie macht man eine fallende bewegung, also dass die spielsteine nach unten gleiten.

ich hab mir schon den kopf zerbrochen, aber es will einfach nicht klappen.

mit code wollte ich etwas knausern, da ich glaube, dass meine idee meines spiels bisher noch niemand hatte.

D2006

Administrator

BeitragDo, Jun 05, 2008 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab das so gelöst, dass im Type der Steine zusätzlich zur Position im Dimfeld noch die eigentliche x- und y- Position in Pixel steht (Ist-Position). Und diese nähert sich immer der X|Y Position an, die anhand der Position im Dimfeld berechnet wird (Soll-Position). Im Normalzustand ändert sich nichts, weil Ist und Soll gleich ist. Fällt ein Stein nach unten, wird nur seine Soll-Position verändert und die Anpassung der Ist-Position übernimmt eine Berechnung (entweder lineare Bewegung, Beschleunigung oder wie auch immer).
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

garret

BeitragDo, Jun 05, 2008 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast ja für jeden Spielstein natürliche Zahlen, die seine Position angeben, also Y = 1,2,3 etc.

Sollen die Steine nun "runtergleiten", könntest du speziell für die Grafik extra Koordinaten vereinbaren, und diese als Zeichenkoordinaten angeben, also:

Code: [AUSKLAPPEN]

Type TSpielstein
  Field X,Y
  Field GrafikX, GrafikY
End Type


Ändern sich jetzt die Positionskoordinaten X oder Y, verschiebst du die Grafikkoordinate GrafikY um z.B. + 2, damit der Spielstein nach unten gleitet. Die Spielsteine zeichnest du dann an GrafikX und GrafikY.

Eine Alternative wäre die Verwendung der jetzigen Positionskoordinaten als Zeichenkoordinaten, also beim Zeichnen der Steine DrawImage Block, X, Y statt DrawImage Block X*32, Y*32.

In deinem Fall, wo sich die Spielsteine ja auf einem gedachten Gitter bewegen, empfiehlt sich auf jeden Fall der Einsatz von Mod.

Edit: Meine Positionskoordinaten entsprechen D2006' Soll-Position, die Zeichenkoordinaten so wie ich sie nenne der Ist-Position. Zeigt wenigstens, dass mein Ansatz nicht verkehrt ist Wink

MfG garret


P.S.: Es gibt (fast) nichts, dass bisher noch nicht gedacht wurde - und Knobelspiele gibt's zuhauf. Ohne dich entmutigen zu wollen, aber deins klingt nach einer Variante von Bejeweled.
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)
 

.erazer

BeitragDo, Jun 05, 2008 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
@garret: nein sowas wie bejeweled wirds nicht, eigentlich hats sogar garnichts damit gemein.


@D2006: könntest du vielleicht nen beispielcode bringen, damit ich das verstehe?wäre megatoll.

edit: habs jetzt mal zusammenhängend gelesen, so den ansatz hab ich verstanden. wozu mod gut sein soll erschliesst sich noch nicht ganz.wegen den bspw. 32x32 und den feldern.
nen klitzekleiner passender code wäre super, so lern ich das ja auch.

garret

BeitragDo, Jun 05, 2008 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, was wir (ich schließe D2006 jetzt mal mit ein Wink) meinen ist Folgendes: Du kannst deinen Spielsteinen zwei Arten von Koordinaten geben. Ich bleibe bei der Erklärung aber bei meinen Begriffen.

1. Positionskoordinaten: Diese sind wie die Felder eines Schachbrettes x,y, also 1,1; 3,4 etc. - wenn du diese jetzt zeichnest, nimmst du ja nicht DrawImage Stein, 1,1 (oder 3,4), sondern multiplizierst diese mit der Pixelgröße des Feldes, also DrawImage Stein x*32, y*32

2. Grafikkoordinaten: Hier stehen X und Y direkt für die Pixel, an deren Position die Grafik gezeichnet wird, also DrawImage Stein, X, Y


Für die Erklärung nehme ich jetzt Grafikkoordinaten: Diese sind für den Ausgangswert sagen wir X = 32, Y = 96. Beide sind jeweils ohne Rest durch 32 teilbar, d.h. 32 Mod 32 = 0, da 32 geteilt durch 32 keinen Rest übrig hat. Bei 40 Mod 32 wäre der Rest 8. Das kannst du nun nutzen, um zu ermitteln, ob sich deine Grafik auf einer Position befindet, die genau durch 32 teilbar ist (und damit genau auf einem Schachbrettfeld steht).

Du hast also eine Grafik mit X=32, Y=96, diese lässt du jetzt 32 Pixel tief fallen, damit sie wieder auf einem Feld steht. Dazu erhöhst du also den Y-Wert um z.B. 2 Pixel pro Durchgang.

Code: [AUSKLAPPEN]

; Pseudo
If SteinFaellt = True  Y = Y + 2
If (Y Mod 32) = 0 SteinFaellt = False


Sprich: Bleibt bei der Mod-Operation kein Rest, steht der Stein genau auf einem Feld und kann sich vorerst nicht weiter bewegen.

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)
 

.erazer

BeitragDo, Jun 05, 2008 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ah das hab ich verstanden.

so nen kleines feld als beispiel wäre das möglich für dich.

so keine ahnung 5x5 felder.

und auf tastendruck fällt unten ein stein weg und alle darüberliegenden fallen nach.

wäre das möglich.

wäre dir zutiefst dankbar.

bin halt noch am anfang vom programmieren.(soll jetzt aber keine ausrede sein)

BladeRunner

Moderator

BeitragDo, Jun 05, 2008 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier es erstmal selbst, und wenn dabei Fehler auftreten zeig den Code und man kann helfen.
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
 

.erazer

BeitragDo, Jun 05, 2008 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
das tue ich natürlich, war nur eine Frage, hätte mir schonmal sehr geholfen.

garret

BeitragDo, Jun 05, 2008 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst das Ganze nur in eine Schleife packen, da sonst nicht viel passiert:

Code: [AUSKLAPPEN]


SetBuffer BackBuffer()

X = 100; Grafikkoordinate (Pixel)
Y = 0; Grafikkoordinate (Pixel)
PosY = 0; Positionskoordinate

Repeat : Cls

If KeyHit(57)  SteinFaellt = True

If SteinFaellt = True

   Y = Y + 2
   
   If (Y Mod 32) = 0
   
      PosY = PosY + 1
      SteinFaellt = False
      
   EndIf
   
EndIf

Delay 100

Rect X, Y, 32, 32

Text 10,10,"Y: "+Y
Text 10,30,"PosY: "+PosY

Flip : Until KeyHit(1) : End


Leertaste drücken. Die Lösung mit Delay ist nicht sehr elegant, sondern nur für das Beispiel als Zeitbegrenzung eingebaut.

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)
  • Zuletzt bearbeitet von garret am Do, Jun 05, 2008 19:30, insgesamt einmal bearbeitet

D2006

Administrator

BeitragDo, Jun 05, 2008 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
.erazer hat Folgendes geschrieben:
bin halt noch am anfang vom programmieren.(soll jetzt aber keine ausrede sein)


Nichts für ungut, aber dann wäre der Beginnerbereich das nächste Mal die erste Wahl für dich. Denn eigentlich hätte meine Beschreibung reichen sollen und auch so: langfristig gesehen bringt es dir gar nichts immer nach Codes zu fragen. Mit fremden Codes ist das lernen viel viel schwieriger als mit Eigeninitiative und rumprobieren.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

.erazer

BeitragDo, Jun 05, 2008 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
mir ging es nur um die funktionsweise, daher wäre code hilfreich gewesen.

@garret: ist dein beispiel auch für ein größeres feld geeignet? also eben ein 5x5 feld, wo irgendwo mittendrin ein stein, oder mehr entfernt werden, und dadurch alles darüberliegende runter fällt.

so, nun nerv ich nicht weiter.

p.s. ich lern schon anderem code, weil mir die funktionsweise dadurch offenbart wird.

garret

BeitragDo, Jun 05, 2008 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein Code sollte dir nur die Funktionsweise für einen Stein zeigen. Was hindert dich daran, es bei den 24 anderen Steinen prinzipiell auch so zu machen? Smile

Aber bitte übernimm den Code jetzt nicht 1:1 und verwende X1, X2 oder so! Dim-Felder und For-Schleifen werden dir hier gute Dienste erweisen, ein komplettes Feld umzusetzen!

-> Ich möchte aber betonen, dass du dich erst dann um das Gleiten der Steine kümmern solltest, wenn du es geschafft hast, dass diese überhaupt fallen, denn Gleiten ist ja nur Kosmetik Wink

Edit: Ich habe obigen Code noch mal überarbeitet, weil die Positionskoordinate ständig stieg. Jetzt ist ihre Bewegung von der Bedingung SteinFaellt = True abhängig.

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)
 

.erazer

BeitragDo, Jun 05, 2008 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
da hab ich schon hinbekommen, hab mittels types die steinfarbe gespeichert, und beim fallen werden die dann eben sozusagen verschoben.

SpionAtom

BeitragFr, Jun 06, 2008 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/foru...hp?t=27622

Zugegeben, leicht zu finden ist es nicht wenn man Bejeweled nicht kennt.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group