Einsteigerfragen zur PROFAN Programmierung
  Suchen
 Zurück zur Übersicht
 AutorThema: DLL
Johann Olaf
Datum:21.06.02 20:12 Antwortenals Email verschicken  


Hallo,
ich habe schon viele Beispiele zu DLLs gefunden, aber verstehe sie immer noch nicht. Einen Eintrag hab ich auch schon durchgelesen und hilft mir auch nix. Könnt ihr mir ein Beispiel
geben um ein SNAKE Spiel zu machen (Mit PROSPEED.DLL) Nur das ein teil der Schlange immer hinter dem Kopf hinter her rennt?
Bitte, wäre toll?
Johann


Frank Abbing
Datum:23.06.02 14:13 Antwortenals Email verschicken  


Hallo Johann,

hier ist mal ein Beispiel:



Window 0,0-800,600
Declare neu&

$I Prospeed_Funktionen.inc ' Datei mit Funktionen einbinden
neu&=usedll("ProSpeed.dll") ' Dll öffnen

' *** Hier geht jetzt dein eigentliches Programm los.
' *** Ab hier kannst du alle Funktionen der Dll nutzen.
'
WaitInput

freedll neu& ' Dll schliessen
End



Wichtig ist, das sich die Datei "ProSpeed_Funktionen.inc" im gleichen Ordner befindet, wie dein Sourcecode, die ProSpeed.dll natürlich auch !!!

Gruß, Frank


Rolf Koch
Datum:23.06.02 23:08 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hi hab mal auf die schnelle ein Beispiel geschrieben.
Bitte Pfade anpassen und Dein eigenes Bild anpassen.
Hier wird aus Windows ein Bild benutzt.
DECLARE teststatus%,prospeed$,pfad$,prospeed&
Declare spritep&,Kopf&,bereich#,kopf&,KOPF2&
Declare fensterkopie1&,fensterkopie2&
dim bereich#,10000
teststatus%=1			'EXEPFAD ABFRAGEN
if teststatus%=1
   let pfad$=@getdir$("@")      'INTERPRETERMODUS
elseif teststatus%=2
   let pfad$=@Par$(0)
   let pfad$=@upper$(pfad$)     'FÜR EXE
   let pfad$=@Translate$(pfad$,"\XXX.EXE","")
endif
' HIER ANPASSEN
Prospeed$=pfad$;"\Prospeed.dll"
$I C:\PROFAN\AKTUELLE PROJEKTE\LOS\INC\Prospeed_Funktionen.inc
prospeed&=usedll(prospeed$)

Windowstyle $F0
WINDOW %0,0-%maxx,%maxy
CLS RGB(0,0,0)

fensterkopie1&=CreateExtBmp(%HDC,%maxx,%maxy)
fensterkopie2&=CreateExtBmp(%HDC,%maxx,%maxy)
string bereich#,0="C:\WINDOWS\KACHELN.BMP"	'ALS BEISPIEL
spritep&=LoadExtImage(bereich#)
kopf&=InitSprite(spritep&,%HDC,fensterkopie1&,fensterkopie2&,0,0,48,48,1,1,10,110,245,1,1)

string bereich#,0="C:\WINDOWS\KACHELN.BMP"
spritep&=LoadExtImage(bereich#)
kopf2&=InitSprite(spritep&,%HDC,fensterkopie1&,fensterkopie2&,0,0,48,48,1,1,10,160,245,1,1)

Whilenot equ(%scankey,27)
waitinput
MoveSprite(kopf&,%mousex,%mousey)
AttachSprite(kopf2&,kopf&,5,5) 'Hier natürlich passende Werte
Wend	
FreeExtBmp(fensterkopie1&)
FreeExtBmp(fensterkopie2&)
FreeExtBmp(spritep&)
FreeExtBmp(kopf&)
FreeExtBmp(kopf2&)
freedll prospeed&
dispose bereich#

Hoffe Deine Snake macht nun was Du willst ;)
Rolf


Frank Abbing
Datum:24.06.02 18:27 Antwortenals Email verschicken  


Hallo,

hier kommt der Snake-Effekt noch etwas besser zum Ausdruck. Es werden 31 Sprites benutzt.
Bilddaten für das Sprite bitte anpassen.

Declare prospeed&
Declare spritep&,Kopf&,bereich#,kopf&,KOPF2&
Declare fensterkopie1&,fensterkopie2&,x&,y&

dim bereich#,10000

ChDir GetDir$("@")
$I Prospeed_Funktionen.inc
prospeed&=usedll("prospeed.dll")

Windowstyle $F0
WINDOW 0,0-%maxx,%maxy
CLS RGB(0,0,0)

fensterkopie1&=CreateExtBmp(%HDC,%maxx,%maxy)
fensterkopie2&=CreateExtBmp(%HDC,%maxx,%maxy)

string bereich#,0="C:\WINDOWS\Granit.BMP" 'ALS BEISPIEL, EINFACH IRGENDEIN BILD VERWENDEN

spritep&=LoadExtImage(bereich#)
kopf&=InitSprite(spritep&,%HDC,fensterkopie1&,fensterkopie2&,0,0,16,16,1,1,10,110,245,8,8)

y&=kopf&
Whileloop 30
x&=CopySprite(y&)
AttachSprite(x&,y&,0,0)
y&=x&
EndWhile

Whilenot equ(%scankey,27)
MoveSprite(kopf&,Rnd(%maxx),Rnd(%maxy))
Sleep 250
Wend

DeleteAllSprites()
FreeExtBmp(fensterkopie1&)
FreeExtBmp(fensterkopie2&)
FreeExtBmp(spritep&)
FreeExtBmp(kopf&)
FreeExtBmp(kopf2&)
freedll prospeed&

dispose bereich#

Gruß, Frank


Frank Abbing
Datum:24.06.02 20:56 Antwortenals Email verschicken (frankabbing@12move.de) 


Hallo nochmal,

hier noch eine bessere Version, fehlerbereinigt und ohne das ein Bild benötigt wird.



Declare prospeed&,kopf&,fensterkopie1&,fensterkopie2&,x&,y&

ChDir GetDir$("@")
$I Prospeed_Funktionen.inc
prospeed&=usedll("prospeed.dll")

Windowstyle $F0
WINDOW 0,0-%maxx,%maxy
CLS RGB(0,0,0)

fensterkopie1&=CreateExtBmp(%HDC,%maxx,%maxy)
fensterkopie2&=CreateExtBmp(%HDC,%maxx,%maxy)

UseBrush 1,Rgb(255,0,0)
Ellipse 0,0-32,32

kopf&=InitSprite(%hdc2,%HDC,fensterkopie1&,fensterkopie2&,0,0,32,32,1,1,10,110,245,12,12)

y&=kopf&
Whileloop 30
x&=CopySprite(y&)
AttachSprite(x&,y&,0,0)
y&=x&
EndWhile

Whilenot equ(%scankey,27)
MoveSprite(kopf&,Rnd(%maxx),Rnd(%maxy))
Sleep 250
EndWhile

DeleteAllSprites()
FreeExtBmp(fensterkopie1&)
FreeExtBmp(fensterkopie2&)
FreeExtBmp(kopf&)
freedll prospeed&
End



Gruß, Frank


Johann Olaf
Datum:25.06.02 18:28 Antwortenals Email verschicken  


Ich bins nochmal.
Jetzt versteh ich die DLLs! Danke
Aber ich wollte ein richtiges SNKAESpiel machen, wo etwas passiert wenn man den Schwanz berührt. Das letzte Beispiel war schon super(!!!), aber besteht nur aus kopf&. Also werd ich mit Collision (usw.) immer gameover...
Kann man den Schwanz richtig nachlaufen lassen, und jedem Teil einzeln programmieren?


Frank Abbing
Datum:25.06.02 19:50 Antwortenals Email verschicken  


Hallo Johann,

es gibt mehrere Methoden, um ein Snake Spiel zu realisieren, die Sourcecodes waren nur ein Beispiel, zuende entwickeln mußt du es schon selber.
Ich persönlich würde mit Tabellen (Bereiche) oder Array's arbeiten, z.B. für ein Spielfeld von 32 x 32 Kästchen würdest du dann eine 1024 Byte langen Bereich benötigen.
Werte für die Tabelle wären z.B.:

0 = freie Stelle
1 = Mauer / Hinderniss
3 = Kopf
4 = Teil des Schwanzes

Jetzt bearbeitest du diese Tabelle, z.B. Kopf geht weiter nach links usw.
Nach jedem Ändern der Tabelle mußt du dann diese Daten auf den Bildschirm bringen. Wie du das genau machst, liegt aber bei dir...

Gruß, Frank


Johann Olaf
Datum:26.06.02 18:12 Antwortenals Email verschicken  


Ok, aber ich versteh nicht ganz was du meist...
Wie soll ich so eine Tabelle machen?


Frank Abbing
Datum:26.06.02 20:32 Antwortenals Email verschicken  


Hallo,

hier mal ein anschauliches Beispiel:




' *** Das Spielfeld besteht hier aus 16 x 16 Feldern, also aus einer Tabelle (Bereich)
' *** mit 256 bytes.
' *** Sichtbar wird das Spielfeld hier mit simplen Buchstaben gemacht, du solltest
' *** stattdessen Grafikplättchen (Tiles) verwenden
' *** Eine große Auswahl Tiles kannst du z.B. von meiner Homepage herunter laden.
' *** http://www.12move.de/home/frankabbing/

Declare bereich#,x&,y&,z&,text$
Dim bereich#,257

Cls

' *** Rahmen erstellen
'
Whileloop 16
Byte bereich#,&loop=1
Byte bereich#,&loop+240=1
Wend
y&=0
Whileloop 16
Byte bereich#,y&=1
Byte bereich#,y&+15=1
y&=y&+16
Wend

' *** Kopf und Schwanz erstellen
'
Byte bereich#,68=3
Byte bereich#,69=4
Byte bereich#,70=4
Byte bereich#,71=4
Byte bereich#,87=4
Byte bereich#,103=4
Byte bereich#,119=4

' *** Tabelle sichtbar machen
'
x&=0
y&=0
Whileloop 16
Whileloop 16
z&=Byte(bereich#,(x&+y&))+48
x&=x&+1
text$=Chr$(z&)
Print text$;
Wend
x&=0
y&=y&+16
Print
Wend

WaitInput

Dispose bereich#
End



Gruß, Frank


Johann Olaf
Datum:30.06.02 15:20 Antwortenals Email verschicken  


Hi, ich bins nochmal
Das haut einfach nicht so hin wie ich es haben will. Ich hab ja schon viel gemeistert, aber das ist eine Spur zu hoch für mich. Grafik einfügen usw kann ich nicht....
Kann mir jemand irgendwie weiterhelfen (verzweifelt)


Frank Abbing
Datum:30.06.02 22:37 Antwortenals Email verschicken  


Hallo Johann,

probier's doch mal erst an etwas leichterem.
Stück für Stück geht's besser als mit der Holzhammer-Methode.

Gruß, Frank


Frank Abbing
Datum:04.07.02 15:08 Antwortenals Email verschicken (frankabbing@12move.de) 


Hallo Johann,

in der nächsten ProSpeed Version gibt es eine Funktion, um solche Maptabellen grafisch darzustellen.
Die Maptabellen können bequem mit einem Mapeditor erstellt, z.B. mit Mappy (auf meiner Homepage).
Ein Aufruf der Funktion SetTiles() reicht aus, um eine beliebig große Landschaft (zusammengestellt aus Grafikstückchen (Tiles)) darzustellen. Und das Beste ist, es können auch scheinbar 3-dimensionale Landschaften erstellt werden (Transparenz-Modus), z.B. große Bäume oder Berge usw. verdecken die dahinterliegende Landschaft...
Und die Funktion ist sehr schnell.
Sobald ich die Anleitung für SetTiles() fertig habe, schicke ich dir gerne die Betaversion der ProSpeed.dll, wenn du möchtest.

Gruß, Frank


Sven Schmidts
Datum:04.07.02 19:14 Antwortenals Email verschicken (schmidts@flat2serv.de) 


Wow, daraus wird ja noch ein Game-Studio ... respekt.


Rolf Koch
Datum:06.07.02 01:01 Antwortenals Email verschicken (webmaster@rokosoft.de) 


@Sveni
Dann warte ab, das Paket wird auch noch den Speed@animator erhalten:

Rolf :)


Frank Abbing
Datum:06.07.02 10:22 Antwortenals Email verschicken  


*freu!*

Gruß, Frank


Florian May
Datum:06.07.02 15:33 Antwortenals Email verschicken  


@ svenschmidt

Wow, daraus wird ja noch ein Game-Studio ... respekt

meinst du 3dgs?

mfg


Frank Abbing
Datum:12.07.02 14:16 Antwortenals Email verschicken  


Hi Florian,

reg' dich ab, es gibt 'zig Gamecreator und die meisten sind besser als 3dgs...

Gruß, Frank


Florian May
Datum:12.07.02 16:43 Antwortenals Email verschicken  


@ Frank Abbing

???????ß Warum so sauer?

war in keinster weise negative oder beleidigend gemeint!

und die aussage das es einige bessere gibt als 3dgs, würde ich nicht sagen, ok wenn man von reinen programmieren spricht schon aber von der einfachheit und der leistung ist 3dgs bestimmt unschlagbar, habe auch schon mal Bb und blitz3d, gamemaker, dark basic usw probiert aber alles "zu schwer"


Frank Abbing
Datum:12.07.02 20:34 Antwortenals Email verschicken  


Hi,

ich sauer ? Nene, da hast du was mißverstanden ;-))
Gamemaker ist schon cool, ist der Beste würd' ich sagen.
Je komplexer das Programm, desto leistungsfähiger ist es.
Komplexer heißt nicht schlechter...

Gruß, Frank


Florian May
Datum: 13.07.02 13:57 Antwortenals Email verschicken  


Ok gamemaker ist ja wohl ...... hehe

naja


 Zurück zur Übersicht
 

 Ein kostenloses WebMart Forum
WebMart Homepage Tools kostenlos
eBay