Dim-Felder

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

 

sprime

Betreff: Dim-Felder

BeitragSa, Nov 28, 2009 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallöle...


Ich sitz ja schon seit ner Weile an einem Jump'n'run Spiel, habe jetz aber alles umstrukturiert und bin jetz auf ein Problem gestoßen. In meinem Spiel kann man Bananen aufsammeln (so wie münzen bei anderen spielen). Die bananen hab ich in ein dimfeld gespeichert:

dim bananen(38,16)


hab sie auch gemalt, sie sind auf dem bildschirm angezeigt, aber ich weiß nicht wie ich das umsetzen soll, das die verschwinden wenn ich die berühre, ich habs schon versucht mit banane(bananex,bananey) = 0 , aber i.wie hat das nicht funtkoiniert, könnt ihr mir helfen ?

Nicdel

BeitragSa, Nov 28, 2009 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Mehr Code wär ganz gut. Ansonsten: Versuch mal bananen(bananex/tilesize,bananey/tilesize) =0 oder so ähnlich...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Tankbuster

BeitragSa, Nov 28, 2009 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie werden die Bananen denn gezeichnet?
Und was für Informationen stehen im Dimfeld?
Wie verwaltest du die Bananen eigentlich?

So al'la "Banane(ID,Sonstiges)" oder anders?
Twitter
Download Jewel Snake!
Windows|Android
 

sprime

BeitragSa, Nov 28, 2009 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
naya ich speicher das dimfeld halt mit dim banane(x,y) malen tu ichs mit

For x = 0 To 37
For y = 1 To 15
DrawImage tileset,x*32,y*32, banane(x,y)
Next
Next



wo die bananen liegen mach ich halt ausm leveleditor raus in datafeldern
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0

zb. und ja, mehr hab ich eig nich

Nicdel

BeitragSa, Nov 28, 2009 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch mal
BlitzBasic: [AUSKLAPPEN]

For x = 0 To 37
For y = 1 To 15
If banane(x,y) >= 0
DrawImage tileset,x*32,y*32, banane(x,y)
EndIf
If eingesammelt = True
banane(x,y) = -1
EndIf
Next
Next
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Tankbuster

BeitragSa, Nov 28, 2009 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Schaumal, du könntest es auch so machen:


Achtung, pseudocode!
Zitat:

Const draw=0
Const x_pos=1
Const y_pos=2

Dim Banane(100,2)
Bild=LoadImage("banane.png")

create_Bananen()

While ....

[...]
If Bananeeingesammelt(i) Then Banane(i,draw)=0
[...]

For i=1 to BananenAnzahl
If Banane(i,draw)=1 Then DrawImage Bild,Banane(i,x_pos),Banane(i,y_pos),0
Next
Wend...


Du musst nicht für jede Banane ein Bild laden, du kannst ein geladenes mehrfach einzeichnen. Ist aber ein Fehler, der von Anfängern häufig gemacht wird Wink

Wobei Nicdels Lösung Einfacher ist.
Meine ist nur bei größeren Maps toll, da man nicht für jedes Feld eine Banane braucht ( Laughing ) ^^
Twitter
Download Jewel Snake!
Windows|Android
 

sprime

BeitragSa, Nov 28, 2009 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ich brech gleich zusammen, ich bekomms i.wie nich hin, ich hab versucht die einfachere lösung zu nehmen aber es funktioniert immernoch nicht.. ich hab jetz so gemalt:

Code: [AUSKLAPPEN]
For x = 0 To 37
For y = 1 To 15
If banane(x,y)>=1 Then
DrawImage tileset,x*32,y*32,banane(x,y)
EndIf
If banane((Player_pos_x +16) /32,(Player_pos_y +32) /32)>=1 Or banane((Player_pos_x +16) /32,Player_pos_y /32)>=1 Then
banane(x,y) = -1

EndIf

Next
Next



es geht immer noch nicht, ich laufe durch die bananen durch und es passiert nichts..

TimBo

BeitragSa, Nov 28, 2009 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso arbeitest du nicht mit types ?
dann kannst du die banane einfach löschen und dein Programm würde sogar umso weniger bananen da sind, schneller werden Wink

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.
 

sprime

BeitragSa, Nov 28, 2009 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
die idee hat ich ja auch schon aber ich wusste nicht wie ich das in meinen leveleditor einbauen kann, das heißt wie ich im leveleditor die bananen aufmalen kann, der die dann speichert und dann im richtigen spiel malt
 

Lion

BeitragSa, Nov 28, 2009 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
naja zum malen einfach statt den zwei for schleifen
Code: [AUSKLAPPEN]
for banane.banane=each banane
Drawimage bananenbild,banane\x,banane\y
next


Speichern würd ich so machen...
Code: [AUSKLAPPEN]
map=writefile("mapname.blubb")
i=0
for banane.banane=each banane
i=i+1
next
writeint map,i ;zählt die anzahl der bananen insgesamt und speichert den wert
for banane.banane=each banane;für jede banane jetzt die daten speichern
writeint map,banane\x
writeint map,banane\y
next


Wenn dus dann lädst...
Code: [AUSKLAPPEN]
map=readfile("mapname.blubb")
counter=readint(map) ;anzahl auslesen
for i=0 to counter ;für die anzahl mal wiederholen
banane.banane=new banane;erstellen
banane\x=readint(map);und die daten entsprechend auslesen
banane\y=readint(map)
next
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

TimBo

BeitragSa, Nov 28, 2009 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Speichern speicherst du die Anzahl der Types und dann die Attribute.
Dass kann dann (achtung Skizze) so aussehen

Code: [AUSKLAPPEN]
3
X
Y
Leben
X
Y
Leben
X
Y
Leben
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.
 

sprime

Betreff: ..

BeitragMo, Dez 21, 2009 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
war jetz 4 wochen nicht mehr am pc.. nun seh ich die antworten.. ich verzweifel leute.. ich scheiter schon daran die bananen im leveleditor sehen zu lassen.. eure antworten sind gut aber i.wie klappt das bei meinem spezifischen fall nicht.. vielleicht könnt ihr mir genau den code sagen damit ich vielleicht verstehe was mein problem ist.. also ganz von vorne im editor..:

Code: [AUSKLAPPEN]
Global anzahl=0
Global info.banane

Type banane
Field Pos_x
Field Pos_y
End Type


so ist mein type...


soo, jetz will ich machen das wenn ich im level editor auf eine stelle klicke das dann da eine banane ist und wenn ich dann speicher das er die anzahl und die stelle der banane speichert.. schon beim malen scheitere ich.. ich habe gemacht :

Code: [AUSKLAPPEN]
If MouseDown(1) And my<512 And layer = 4 Then
   
For info.banane = Each banane               
      DrawImage tileset, info\Pos_x, info\Pos_y,tile4   
   Next

   
End If


doch es passiert nichts !

hab ich was vergessen, was falsch gemacht oder so ??

bitte helft mir, ich werd echt verrückt..
vielleicht sind das dumme fragen/fehler von mir aber irgentwie muss man es ja lernen ^^
versucht es mir einfach idiotensicher zu erklären


ich danke euch im vorraus

Xeres

Moderator

BeitragMo, Dez 21, 2009 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Willst du die Bananen wirklich nur zeichnen lassen, wenn man die Maus gedrückt hält, unter diesen Koordinaten ist und der 4. Layer ausgewählt ist?
Das mit dem Layer verstehe ich ja noch - aber den Rest finde ich unlogisch. Versuchs doch erst mal ohne diese Bedingungen.

Und nenne das teil nicht "info" - das ist die sinnloseste Bezeichnung überhaupt... Bei mehr als einem Type weißt du sicher nicht mehr ob "info" eine Banane, ein Auto oder sonst was ist...
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)

Midimaster

BeitragMo, Dez 21, 2009 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Gedankengang ist schon falsch:

Zitat:
...dass, wenn ich im level editor auf eine stelle klicke, dass dann da eine banane ist...


Wenn Du klickst, willst Du doch eigentlich, dass da eine neue Banane ensteht. Natürlich soll sie auch noch da sein, wenn Du dann anschließend nicht mehr klickst.

du musst als das Zeichnen der Bananen von der Maus-Eingabe trennen.
Code: [AUSKLAPPEN]
Hauptschleife
----------
    If MausIrgendwas Then
       Neue Banane dort erstellen
    endif

    For Each Banane...
       Zeichnet alle Bananen, die schon erstellt wurden
    Next
   
   Flip
------------

Jamagin

Betreff: alles banane

BeitragMo, Dez 21, 2009 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu gibt es Variablen?

Wenn ich die Maustaste drücke, Wert = NOT Wert und immer wenn der Wert = true dann ZEICHNE Banane sonst nicht. Weiters mußt du dann aber auch überprüfen, ob auf dem Feld X, Y schon eine Banane liegt, sonst würdest ja viel. 2 oder mehr Bananen auf ein Feld legen!!

lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte

Midimaster

BeitragMo, Dez 21, 2009 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
@sprime
Wieviel Codezeilen hast Du denn von diesem Projekt schon fertig geschrieben? Ich frage deshalb, weil ich glaube, dass Du ohne Types alleine besser zurecht kämst. Wenn natürlich schon das Spiel läuft und nur noch der Editor geschrieben werden muss, dann bleib bei den Types.

Wenn aber der Editor das erste ist, was Du jetzt von dem Projekt anpackst, dann würde ich an Deiner Stelle zu Deinem ersten Gedanke vom 28.Nov zurückkehren.

@alle
mensch, nicht jeder der gerade mit dem programmieren anfängt muss doch gleich TYPES anfangen. Das macht es echt nicht leichter für nen Neuling. Einige haben hier echt einen Narren an Types gefressen. Für die alle hier der ultimative Type Wink :
Code: [AUSKLAPPEN]
TYPE MY_INTEGER
    Field Zahl%
End TYPE

A.MY_INTEGER = NEW MY_INTEGER
A\Zahl=5
PRINT A\Zahl
End


...wundert mich, dass das eigentlich noch keiner vorgeschlagen hatte bisher...

Jamagin

Betreff: types

BeitragMo, Dez 21, 2009 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@midimaster

haha, auf jedenfall schneller als Print A.

Spaß beiseite! Mit Types arbeiten ist klasse, mit Dim genauso. Aber man sollte doch alles in Betracht ziehen und dann seine für sich persönlich bessere Methode wählen. Wie auch immer, in meinem Vorschlag hab ich nichts von Types erwähnt, lediglich von Variablen und diese müssen nicht unbedingt ein Type sein.

Andererseits kann er mit Types aber den Bananen zusätzliche Eigenschaften mitgeben, wie zB. Energie oder Extrapunkte oder ein Freileben, was auch immer!

lg. Jamagin Cool

NB: Aber dein Ultimatives Type das hat was...!
Bevor du etwas neues beginnst, erledige das alte
 

sprime

BeitragMo, Dez 21, 2009 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
sagen wir so, ich könnte dieses problem schon auf dim's ändern, das hat ich ja vorher, aber da saß ich vor dem problem das ich nich hinbekommen habe die bananen verschwinden zu lassen wenn ich durchlaufe.. geht das mit dim feldern ?? ihr könnt ja oben nochmal mein problem betrachten

Jamagin

Betreff: nochmals

BeitragMo, Dez 21, 2009 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

For item.banane = Each banane
   If ImagesCollide(BANANE, item\x, item\y, 0, FIGUR, player\x, player\y, player\frame)
      PlaySound FX_COLLECTING      ; --> Einen Sound abspielen
      SC = SC + 10                            ; Punkte gutschreiben
      Delete item                               ; Banane löschen
     exit                                            ; Schleife verlassen
   EndIf
Next


Beispiel mit Type...


lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte

Alfadur

BeitragMo, Dez 21, 2009 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
sprime hat Folgendes geschrieben:
sagen wir so, ich könnte dieses problem schon auf dim's ändern, das hat ich ja vorher, aber da saß ich vor dem problem das ich nich hinbekommen habe die bananen verschwinden zu lassen wenn ich durchlaufe.. geht das mit dim feldern ?? ihr könnt ja oben nochmal mein problem betrachten



Das du das nicht hingekriegt hast liegt womöglich hierdran: (code vom 28.11.)
Code: [AUSKLAPPEN]

If banane((Player_pos_x +16) /32,(Player_pos_y +32) /32)>=1 Or banane((Player_pos_x +16) /32,Player_pos_y /32)>=1 Then
banane(x,y) = -1


Du checkst ob an der Spielerposition eine Banane ist, falls ja, und hier kommt der Fehler, setzt du einfach das Array an der Stelle auf -1 an welcher sich gerade deine Hinmalschleife befindet. Ist das sinnig?
Wenn an der Stelle an der der Spieler ist ((Player_pos_x +16) /32,(Player_pos_y +32) /32) eine Banane ist, dann solltest du auch das Array an der Stelle an der der Spieler ist auf 0 oder -1 setzen. Und nicht an relativ zufälligen X/Y Werten.

Außerdem ist die Kollisionsprüfung innerhalb dieser zwei For Schleifen auch unsinnig.
A Cray is the only computer that runs an endless loop in less than four hours.

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group