 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 25.06.2008, 18:57 Titel: Kollisionen in 2D und ein paar andere Probleme |
|
|
Ich meinem "Spiel" möchte ich dass man nicht mehr über die Wand gehen kann, dass die Schüsse nicht ihre Bahn ändern wenn man sich bewegt, dass es eine Kollision gibt wenn man die Wand oder was anderes trifft und dass es man mehrere schüsse abgeben kann ohne dass der vorheriege gelöscht wird.
Ja, ja ich weiß, alles ist wüßt programmiert, dass leigt zum einen daran dass ich das programm umstrukturiert habe weil es mir für mein erstes richtiges programm zu kompliziert ist.
Bitte schreibt nichts von Trollen!!!
Aber hier nun das "Spiel", ich hoffe ihr könnt mir helfen:
http://www.materialordner.de/mvb8i3h8OzKHjjJqxaDz5b0DAUs7AV9O.html
Ich habe es hochgeladen weil es bilder enthält. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 25.06.2008, 19:56 Titel: |
|
|
Irgendwas funktioniert bei mir (unter Linux) nicht richtig; die Figur macht immer gleich riesige Sätze. Muss mich erst mal ins Programm einarbeiten.
Drei Sachen, die mir aufgefallen sind:
- Wenn du IMAGECREATE verwendest, musst du am Programmende den Speicher auch wieder mit IMAGEDESTROY freigeben - das wird nicht automatisch erledigt!
- Das ständige Neuladen der Grafiken halte ich nicht für so günstig:
Code: | if plrichtung = 9 then bload "img\pl180.bmp", pl1 |
Es reicht, wenn du die Grafik einmal in einen Speicher lädst und dann nur noch dein pl1 auf diesen Speicher setzt.
Statt
Code: | if multikey(fb.sc_w) then xabschuss = ykreuz - (xspielfigur+16)
if multikey(fb.sc_w) then yabschuss = xkreuz - (yspielfigur+16)
if multikey(fb.sc_w) then timeabschuss = timer
|
bevorzuge ich
Code: | if multikey(fb.sc_w) then
xabschuss = ykreuz - (xspielfigur+16)
yabschuss = xkreuz - (yspielfigur+16)
timeabschuss = timer
end if
|
Theoretisch könnte es ja sein, dass die Taste genau zwischen der ersten und zweiten Abfrage losgelassen wird, und dann wird nur ein Teil der Aktion ausgeführt.
Und eine kurze Spielanleitung wäre nicht schlecht.
Zur eigentlichen Frage:
Kollision mit der Wand wurde hier schon mal behandelt - da findest du mehrere Lösungsmöglichkeiten.
Mit den Schüssen würde ich so vorgehen, dass du ein Array anlegst, in dem die Werte der einzelnen Schüsse (x, y, Richtung) gespeichert werden. Bei einem neuen Schuss wird ein neuer Array-Eintrag vorgenommen, bei der Schussberechnung gehst du einfach das komplette Array durch. Am schwierigsten ist wohl das Löschen eines Schusses. Die Schuss-Reihenfolge wird wohl keine große Rolle spielen, deswegen kannst du den letzten Schuss an die Stelle verschieben, an der vorher der zu löschende Schuss eingeragen war. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 25.06.2008, 20:48 Titel: |
|
|
Spielanleitung? Das ist nicht mal ein richtiges Spiel!
Aber danke für deine Hilfe, das mit den Arrays werde ich mir mal angucken.
Das mit dem bload halte ich auch nicht für gut aber ich weiß wie ich das imgehen soll, wenn ich bei einem put befehl einen string als grafik laden will kann ich das nicht kompillieren und ic will lieber erst einmal dass das spiel erstmal richtig klappt. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 25.06.2008, 20:56 Titel: |
|
|
Wegen der Spielanleitung: Damit meine ich, was man bisher alles machen kann (herumlaufen, schießen) und wie man steuert. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 25.06.2008, 21:27 Titel: |
|
|
Hier die Tastenbelegung:
Pfeiltasten: Spielfigurbewegen
q und e Spielfigur drehen
w schießen
Ich habe jetzt das mit den arrays hinzugefügt, im moment kann man gibt es max 10 schüsse zu sehen, aber die werden gleichzeitig abgegeben, das merkt man wenn man q oder e zum drehen gedrückt hält und w zum schießen drückt.
Hier der Code, aber man braucht noch die Bilder aus der Archiv was ich geuploadet habe um es richtig auszuführen:
Code: | screen 21,32, ,1
WINDOWTITLE "Battleworld"
setmouse ,,0
randomize timer
#include "fbgfx.bi"
dim spielfigur as any ptr
dim map as any ptr
dim xmap as integer
dim ymap as integer
dim taste as string
dim xspielfigur as integer
dim yspielfigur as integer
dim w as integer
dim h as integer
dim startfps as single
dim endefps as single
dim fps as single
dim as single spielstartzeit, spielzeit
dim pl1 as any ptr
dim pl2 as any ptr
dim pl3 as any ptr
dim pl4 as any ptr
dim pl5 as any ptr
dim pl6 as any ptr
dim pl7 as any ptr
dim as any ptr pl8, pl9,pl10,pl11,pl12,pl13,pl14,pl15,pl16
dim plrichtung as integer
dim pl as any ptr
DIM AS SINGLE fpc, speedslow
DIM AS INTEGER fpsb, curfps, xabschuss(1 to 10), yabschuss(1 to 10), xschuss(1 to 10), yschuss(1 to 10), timeabschuss(1 to 10)
dim as single speed, xdrehung, ydrehung
dim as integer startx, starty, xkreuz, ykreuz, xscreenmitte, yscreenmitte, xmapschuss, ymapschuss
dim as double timerabschuss, zeit, zeitseitabschuss(1 to 10)
dim as integer xorpl, xolpl, xulpl, xurpl, yorpl, yolpl, yulpl, yurpl, xmpl, ympl
dim as integer counterschuss
spielfigur = imagecreate (50,21)
map = imagecreate (1280,1024)
pl1 = imagecreate (32,32)
pl2 = imagecreate (32,32)
pl3 = imagecreate (32,32)
pl4 = imagecreate (32,32)
pl5 = imagecreate (32,32)
pl6 = imagecreate (32,32)
pl7 = imagecreate (32,32)
pl8 = imagecreate (32,32)
pl9 = imagecreate (32,32)
pl10 = imagecreate (32,32)
pl11 = imagecreate (32,32)
pl12 = imagecreate (32,32)
pl13 = imagecreate (32,32)
pl14 = imagecreate (32,32)
pl15 = imagecreate (32,32)
pl16 = imagecreate (32,32)
bload "img\bild1.bmp", spielfigur
bload "img\fullscreenmap.bmp", map
bload "img\pl00.bmp", pl1
bload "img\pl22.5.bmp", pl2
bload "img\pl45.bmp", pl3
bload "img\pl67.5.bmp", pl4
bload "img\pl90.bmp", pl5
bload "img\pl112.5.bmp", pl6
bload "img\pl135.bmp", pl7
bload "img\pl157.5.bmp", pl8
bload "img\pl180.bmp", pl9
bload "img\pl202.5.bmp", pl10
bload "img\pl225.bmp", pl11
bload "img\pl247.5.bmp", pl12
bload "img\pl270.bmp", pl13
bload "img\pl292.5.bmp", pl14
bload "img\pl315.bmp", pl15
bload "img\pl337.5.bmp", pl16
SCREENINFO w, h
spielstartzeit = timer
startx = w/2-16
starty = h/2-16
xscreenmitte = w/2
yscreenmitte = h/2
xspielfigur = 50
yspielfigur = 50
plrichtung = 1
do
fpsb = fpsb+1
'startfps=timer
'spielzeit = timer - spielstartzeit
screenlock
cls
if plrichtung > 16 then plrichtung = 1
if plrichtung < 1 then plrichtung = 16
if plrichtung = 1 then bload "img\pl00.bmp", pl1
if plrichtung = 2 then bload "img\pl22.5.bmp", pl1
if plrichtung = 3 then bload "img\pl45.bmp", pl1
if plrichtung = 4 then bload "img\pl67.5.bmp", pl1
if plrichtung = 5 then bload "img\pl90.bmp", pl1
if plrichtung = 6 then bload "img\pl112.5.bmp", pl1
if plrichtung = 7 then bload "img\pl135.bmp", pl1
if plrichtung = 8 then bload "img\pl157.5.bmp", pl1
if plrichtung = 9 then bload "img\pl180.bmp", pl1
if plrichtung = 10 then bload "img\pl202.5.bmp", pl1
if plrichtung = 11 then bload "img\pl225.bmp", pl1
if plrichtung = 12 then bload "img\pl247.5.bmp", pl1
if plrichtung = 13 then bload "img\pl270.bmp", pl1
if plrichtung = 14 then bload "img\pl292.5.bmp", pl1
if plrichtung = 15 then bload "img\pl315.bmp", pl1
if plrichtung = 16 then bload "img\pl337.5.bmp", pl1
put (0,0), map, pset
put (xspielfigur,yspielfigur), pl1, trans
pset (ykreuz,xkreuz),15
pset (ykreuz-1,xkreuz),15
pset (ykreuz,xkreuz-1),15
pset (ykreuz+1,xkreuz),15
pset (ykreuz,xkreuz+1),15
pset (ykreuz-2,xkreuz),15
pset (ykreuz,xkreuz-2),15
pset (ykreuz+2,xkreuz),15
pset (ykreuz,xkreuz+2),15
pset (xschuss(1),yschuss(1)),14
pset (xschuss(2),yschuss(2)),14
pset (xschuss(3),yschuss(3)),14
pset (xschuss(4),yschuss(4)),14
pset (xschuss(5),yschuss(5)),14
pset (xschuss(6),yschuss(6)),14
pset (xschuss(7),yschuss(7)),14
pset (xschuss(8),yschuss(8)),14
pset (xschuss(9),yschuss(9)),14
pset (xschuss(10),yschuss(10)),14
locate 1,4
print curfps
locate 1
print "fps:"
'print fps
locate 2
print "x:"
locate 2,3
print -(xmap-startx)
locate 3
print "y:"
locate 3,3
print -(ymap-starty)
screenunlock
'screensync
speed = 200 / curfps
speedslow = 4 / curfps 'geschwindigkeit der drehung
taste = inkey
'if taste = "q" then plrichtung = plrichtung + 1
'if taste = "e" then plrichtung = plrichtung - 1
if multikey(fb.sc_e) then ydrehung = ydrehung + speedslow
if multikey(fb.sc_e) then xdrehung = xdrehung + speedslow
if multikey(fb.sc_q) then ydrehung = ydrehung - speedslow
if multikey(fb.sc_q) then xdrehung = xdrehung - speedslow
if multikey(fb.sc_up) then yspielfigur = yspielfigur - speed
if multikey(fb.sc_left) then xspielfigur = xspielfigur - speed
if multikey(fb.sc_right) then xspielfigur = xspielfigur + speed
if multikey(fb.sc_down) then yspielfigur = yspielfigur + speed
if multikey(fb.sc_escape) then end
if taste = "w" then
counterschuss = counterschuss + 1
if counterschuss = 11 then counterschuss = 1
xabschuss(counterschuss) = ykreuz - (xspielfigur+16)
yabschuss(counterschuss) = xkreuz - (yspielfigur+16)
timeabschuss(counterschuss) = timer
end if
zeitseitabschuss(1) = ((timer - timeabschuss(1)))*5
if zeitseitabschuss(1) < 0 then zeitseitabschuss(1) = 0
xschuss(1) = xspielfigur+16+(((xabschuss(1) *zeitseitabschuss(1))))
yschuss(1) = yspielfigur+16+(((yabschuss(1) *zeitseitabschuss(1))))
zeitseitabschuss(2) = ((timer - timeabschuss(2)))*5
if zeitseitabschuss(2) < 0 then zeitseitabschuss(2) = 0
xschuss(2) = xspielfigur+16+(((xabschuss(2) *zeitseitabschuss(2))))
yschuss(2) = yspielfigur+16+(((yabschuss(2) *zeitseitabschuss(2))))
zeitseitabschuss(3) = ((timer - timeabschuss(3)))*5
if zeitseitabschuss(3) < 0 then zeitseitabschuss(3) = 0
xschuss(3) = xspielfigur+16+(((xabschuss(3) *zeitseitabschuss(3))))
yschuss(3) = yspielfigur+16+(((yabschuss(3) *zeitseitabschuss(3))))
zeitseitabschuss(4) = ((timer - timeabschuss(4)))*5
if zeitseitabschuss(4) < 0 then zeitseitabschuss(4) = 0
xschuss(4) = xspielfigur+16+(((xabschuss(4) *zeitseitabschuss(4))))
yschuss(4) = yspielfigur+16+(((yabschuss(4) *zeitseitabschuss(4))))
zeitseitabschuss(5) = ((timer - timeabschuss(5)))*5
if zeitseitabschuss(5) < 0 then zeitseitabschuss(5) = 0
xschuss(5) = xspielfigur+16+(((xabschuss(5) *zeitseitabschuss(5))))
yschuss(5) = yspielfigur+16+(((yabschuss(5) *zeitseitabschuss(5))))
zeitseitabschuss(6) = ((timer - timeabschuss(6)))*5
if zeitseitabschuss(6) < 0 then zeitseitabschuss(6) = 0
xschuss(6) = xspielfigur+16+(((xabschuss(6) *zeitseitabschuss(6))))
yschuss(6) = yspielfigur+16+(((yabschuss(6) *zeitseitabschuss(6))))
zeitseitabschuss(7) = ((timer - timeabschuss(7)))*5
if zeitseitabschuss(7) < 0 then zeitseitabschuss(7) = 0
xschuss(7) = xspielfigur+16+(((xabschuss(7) *zeitseitabschuss(7))))
yschuss(7) = yspielfigur+16+(((yabschuss(7) *zeitseitabschuss(7))))
zeitseitabschuss(8) = ((timer - timeabschuss(8)))*5
if zeitseitabschuss(8) < 0 then zeitseitabschuss(8) = 0
xschuss(8) = xspielfigur+16+(((xabschuss(8) *zeitseitabschuss(8))))
yschuss(8) = yspielfigur+16+(((yabschuss(8) *zeitseitabschuss(8))))
zeitseitabschuss(9) = ((timer - timeabschuss(9)))*5
if zeitseitabschuss(9) < 0 then zeitseitabschuss(9) = 0
xschuss(9) = xspielfigur+16+(((xabschuss(9) *zeitseitabschuss(9))))
yschuss(9) = yspielfigur+16+(((yabschuss(9) *zeitseitabschuss(9))))
zeitseitabschuss(10) = ((timer - timeabschuss(10)))*5
if zeitseitabschuss(10) < 0 then zeitseitabschuss(10) = 0
xschuss(10) = xspielfigur+16+(((xabschuss(10) *zeitseitabschuss(10))))
yschuss(10) = yspielfigur+16+(((yabschuss(10) *zeitseitabschuss(10))))
ykreuz = (cos(ydrehung))*50+xspielfigur+16
xkreuz = (sin(xdrehung))*50+yspielfigur+16
if multikey(fb.sc_w) then xmapschuss = xmap
if multikey(fb.sc_w) then ymapschuss = ymap
if xspielfigur > 1248 then xspielfigur = 1248
if yspielfigur > 992 then yspielfigur = 992
if yspielfigur < 1 then yspielfigur = 1
if xspielfigur < 1 then xspielfigur = 1
if ydrehung >= 6.2831 then ydrehung = 0
if ydrehung < 0 then ydrehung = 6.2831
if xdrehung >= 6.2831 then xdrehung = 0
if xdrehung < 0 then xdrehung = 6.2831
xmpl = xspielfigur + 16
ympl = yspielfigur + 16
select case xdrehung 'richtung der Spielfigur
case 0 to 0.196
plrichtung = 1
case 0.197 to 0.589
plrichtung = 16
case 0.59 to 0.982
plrichtung = 15
case 0.983 to 1.374
plrichtung = 14
case 1.375 to 1.767
plrichtung = 13
case 1.768 to 2.16
plrichtung = 12
case 2.161 to 2.552
plrichtung =11
case 2.553 to 2.945
plrichtung = 10
case 2.946 to 3.337
plrichtung = 9
case 3.338 to 3.73
plrichtung = 8
case 3.731 to 4.123
plrichtung = 7
case 4.124 to 4.516
plrichtung = 6
case 4.517 to 4.908
plrichtung = 5
case 4.909 to 5.301
plrichtung = 4
case 5.302 to 5.694
plrichtung = 3
case 5.695 to 6.086
plrichtung = 2
case 6.087 to 7
plrichtung = 1
end select
IF TIMER >= fpc THEN
fpc = TIMER + 1
curfps = fpsb
fpsb = 0
END IF
'sleep 1
'fps=1/(endefps-startfps)
'endefps=timer
loop
sleep |
|
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 26.06.2008, 10:25 Titel: |
|
|
Ich hab jetzt das Problem gelößt, dass sich die Schüsse immer mitbewegthaben wenn sich die spielfigur bewegt hat, aber es werden leider immer alle schüsse gleichzeitig abgegeben und ich schaffe es nicht dass immer nur einer in 0.1 sekunden abgegeben wird.
Hier der code:
Code: | screen 21,32, ,1
WINDOWTITLE "Battleworld"
setmouse ,,0
randomize timer
#include "fbgfx.bi"
dim spielfigur as any ptr
dim map as any ptr
dim xmap as integer
dim ymap as integer
dim taste as string
dim xspielfigur as integer
dim yspielfigur as integer
dim w as integer
dim h as integer
dim startfps as single
dim endefps as single
dim fps as single
dim as single spielstartzeit, spielzeit
dim pl1 as any ptr
dim pl2 as any ptr
dim pl3 as any ptr
dim pl4 as any ptr
dim pl5 as any ptr
dim pl6 as any ptr
dim pl7 as any ptr
dim as any ptr pl8, pl9,pl10,pl11,pl12,pl13,pl14,pl15,pl16
dim plrichtung as integer
dim pl as any ptr
DIM AS SINGLE fpc, speedslow
DIM AS INTEGER fpsb, curfps, xabschuss(1 to 10), yabschuss(1 to 10), xschuss(1 to 10), yschuss(1 to 10), timeabschuss(1 to 10)
dim as single speed, xdrehung, ydrehung
dim as integer startx, starty, xkreuz, ykreuz, xscreenmitte, yscreenmitte, xmapschuss, ymapschuss
dim as double timerabschuss, zeit, zeitseitabschuss(1 to 10), timelastschuss
dim as integer xorpl, xolpl, xulpl, xurpl, yorpl, yolpl, yulpl, yurpl, xmpl, ympl
dim as integer counterschuss, xpl(1 to 10), ypl(1 to 10)
spielfigur = imagecreate (50,21)
map = imagecreate (1280,1024)
pl1 = imagecreate (32,32)
pl2 = imagecreate (32,32)
pl3 = imagecreate (32,32)
pl4 = imagecreate (32,32)
pl5 = imagecreate (32,32)
pl6 = imagecreate (32,32)
pl7 = imagecreate (32,32)
pl8 = imagecreate (32,32)
pl9 = imagecreate (32,32)
pl10 = imagecreate (32,32)
pl11 = imagecreate (32,32)
pl12 = imagecreate (32,32)
pl13 = imagecreate (32,32)
pl14 = imagecreate (32,32)
pl15 = imagecreate (32,32)
pl16 = imagecreate (32,32)
bload "img\bild1.bmp", spielfigur
bload "img\fullscreenmap.bmp", map
bload "img\pl00.bmp", pl1
bload "img\pl22.5.bmp", pl2
bload "img\pl45.bmp", pl3
bload "img\pl67.5.bmp", pl4
bload "img\pl90.bmp", pl5
bload "img\pl112.5.bmp", pl6
bload "img\pl135.bmp", pl7
bload "img\pl157.5.bmp", pl8
bload "img\pl180.bmp", pl9
bload "img\pl202.5.bmp", pl10
bload "img\pl225.bmp", pl11
bload "img\pl247.5.bmp", pl12
bload "img\pl270.bmp", pl13
bload "img\pl292.5.bmp", pl14
bload "img\pl315.bmp", pl15
bload "img\pl337.5.bmp", pl16
SCREENINFO w, h
spielstartzeit = timer
startx = w/2-16
starty = h/2-16
xscreenmitte = w/2
yscreenmitte = h/2
xspielfigur = 50
yspielfigur = 50
plrichtung = 1
timelastschuss = 0
do
fpsb = fpsb+1
'startfps=timer
'spielzeit = timer - spielstartzeit
screenlock
cls
if plrichtung > 16 then plrichtung = 1
if plrichtung < 1 then plrichtung = 16
if plrichtung = 1 then bload "img\pl00.bmp", pl1
if plrichtung = 2 then bload "img\pl22.5.bmp", pl1
if plrichtung = 3 then bload "img\pl45.bmp", pl1
if plrichtung = 4 then bload "img\pl67.5.bmp", pl1
if plrichtung = 5 then bload "img\pl90.bmp", pl1
if plrichtung = 6 then bload "img\pl112.5.bmp", pl1
if plrichtung = 7 then bload "img\pl135.bmp", pl1
if plrichtung = 8 then bload "img\pl157.5.bmp", pl1
if plrichtung = 9 then bload "img\pl180.bmp", pl1
if plrichtung = 10 then bload "img\pl202.5.bmp", pl1
if plrichtung = 11 then bload "img\pl225.bmp", pl1
if plrichtung = 12 then bload "img\pl247.5.bmp", pl1
if plrichtung = 13 then bload "img\pl270.bmp", pl1
if plrichtung = 14 then bload "img\pl292.5.bmp", pl1
if plrichtung = 15 then bload "img\pl315.bmp", pl1
if plrichtung = 16 then bload "img\pl337.5.bmp", pl1
put (0,0), map, pset
put (xspielfigur,yspielfigur), pl1, trans
pset (ykreuz,xkreuz),15
pset (ykreuz-1,xkreuz),15
pset (ykreuz,xkreuz-1),15
pset (ykreuz+1,xkreuz),15
pset (ykreuz,xkreuz+1),15
pset (ykreuz-2,xkreuz),15
pset (ykreuz,xkreuz-2),15
pset (ykreuz+2,xkreuz),15
pset (ykreuz,xkreuz+2),15
pset (xschuss(1),yschuss(1)),14
pset (xschuss(2),yschuss(2)),14
pset (xschuss(3),yschuss(3)),14
pset (xschuss(4),yschuss(4)),14
pset (xschuss(5),yschuss(5)),14
pset (xschuss(6),yschuss(6)),14
pset (xschuss(7),yschuss(7)),14
pset (xschuss(8),yschuss(8)),14
pset (xschuss(9),yschuss(9)),14
pset (xschuss(10),yschuss(10)),14
locate 1,4
print curfps
locate 1
print "fps:"
'print fps
locate 2
print "x:"
locate 2,3
print -(xmap-startx)
locate 3
print "y:"
locate 3,3
print -(ymap-starty)
locate 4
print timelastschuss, timer
screenunlock
'screensync
speed = 200 / curfps
speedslow = 4 / curfps 'geschwindigkeit der drehung
taste = inkey
'if taste = "q" then plrichtung = plrichtung + 1
'if taste = "e" then plrichtung = plrichtung - 1
if multikey(fb.sc_e) then ydrehung = ydrehung + speedslow
if multikey(fb.sc_e) then xdrehung = xdrehung + speedslow
if multikey(fb.sc_q) then ydrehung = ydrehung - speedslow
if multikey(fb.sc_q) then xdrehung = xdrehung - speedslow
if multikey(fb.sc_up) then yspielfigur = yspielfigur - speed
if multikey(fb.sc_left) then xspielfigur = xspielfigur - speed
if multikey(fb.sc_right) then xspielfigur = xspielfigur + speed
if multikey(fb.sc_down) then yspielfigur = yspielfigur + speed
if multikey(fb.sc_escape) then end
if multikey(fb.sc_w) then
counterschuss = counterschuss + 1
if counterschuss = 11 then counterschuss = 1
xpl(counterschuss) = xspielfigur
ypl(counterschuss) = yspielfigur
xabschuss(counterschuss) = ykreuz - (xpl(counterschuss)+16)
yabschuss(counterschuss) = xkreuz - (ypl(counterschuss)+16)
timeabschuss(counterschuss) = timer
end if
zeitseitabschuss(1) = ((timer - timeabschuss(1)))*5
if zeitseitabschuss(1) < 0 then zeitseitabschuss(1) = 0
xschuss(1) = xpl(1)+16+(((xabschuss(1) *zeitseitabschuss(1))))
yschuss(1) = ypl(1)+16+(((yabschuss(1) *zeitseitabschuss(1))))
zeitseitabschuss(2) = ((timer - timeabschuss(2)))*5
if zeitseitabschuss(2) < 0 then zeitseitabschuss(2) = 0
xschuss(2) = xpl(2)+16+(((xabschuss(2) *zeitseitabschuss(2))))
yschuss(2) = ypl(2)+16+(((yabschuss(2) *zeitseitabschuss(2))))
zeitseitabschuss(3) = ((timer - timeabschuss(3)))*5
if zeitseitabschuss(3) < 0 then zeitseitabschuss(3) = 0
xschuss(3) = xpl(3)+16+(((xabschuss(3) *zeitseitabschuss(3))))
yschuss(3) = ypl(3)+16+(((yabschuss(3) *zeitseitabschuss(3))))
zeitseitabschuss(4) = ((timer - timeabschuss(4)))*5
if zeitseitabschuss(4) < 0 then zeitseitabschuss(4) = 0
xschuss(4) = xpl(4)+16+(((xabschuss(4) *zeitseitabschuss(4))))
yschuss(4) = ypl(4)+16+(((yabschuss(4) *zeitseitabschuss(4))))
zeitseitabschuss(5) = ((timer - timeabschuss(5)))*5
if zeitseitabschuss(5) < 0 then zeitseitabschuss(5) = 0
xschuss(5) = xpl(5)+16+(((xabschuss(5) *zeitseitabschuss(5))))
yschuss(5) = ypl(6)+16+(((yabschuss(5) *zeitseitabschuss(5))))
zeitseitabschuss(6) = ((timer - timeabschuss(6)))*5
if zeitseitabschuss(6) < 0 then zeitseitabschuss(6) = 0
xschuss(6) = xpl(6)+16+(((xabschuss(6) *zeitseitabschuss(6))))
yschuss(6) = ypl(6)+16+(((yabschuss(6) *zeitseitabschuss(6))))
zeitseitabschuss(7) = ((timer - timeabschuss(7)))*5
if zeitseitabschuss(7) < 0 then zeitseitabschuss(7) = 0
xschuss(7) = xpl(7)+16+(((xabschuss(7) *zeitseitabschuss(7))))
yschuss(7) = ypl(7)+16+(((yabschuss(7) *zeitseitabschuss(7))))
zeitseitabschuss(8) = ((timer - timeabschuss(8)))*5
if zeitseitabschuss(8) < 0 then zeitseitabschuss(8) = 0
xschuss(8) = xpl(8)+16+(((xabschuss(8) *zeitseitabschuss(8))))
yschuss(8) = ypl(8)+16+(((yabschuss(8) *zeitseitabschuss(8))))
zeitseitabschuss(9) = ((timer - timeabschuss(9)))*5
if zeitseitabschuss(9) < 0 then zeitseitabschuss(9) = 0
xschuss(9) = xpl(9)+16+(((xabschuss(9) *zeitseitabschuss(9))))
yschuss(9) = ypl(9)+16+(((yabschuss(9) *zeitseitabschuss(9))))
zeitseitabschuss(10) = ((timer - timeabschuss(10)))*5
if zeitseitabschuss(10) < 0 then zeitseitabschuss(10) = 0
xschuss(10) = xpl(10)+16+(((xabschuss(10) *zeitseitabschuss(10))))
yschuss(10) = ypl(10)+16+(((yabschuss(10) *zeitseitabschuss(10))))
ykreuz = (cos(ydrehung))*50+xspielfigur+16
xkreuz = (sin(xdrehung))*50+yspielfigur+16
if multikey(fb.sc_w) then xmapschuss = xmap
if multikey(fb.sc_w) then ymapschuss = ymap
if xspielfigur > 1248 then xspielfigur = 1248
if yspielfigur > 992 then yspielfigur = 992
if yspielfigur < 1 then yspielfigur = 1
if xspielfigur < 1 then xspielfigur = 1
if ydrehung >= 6.2831 then ydrehung = 0
if ydrehung < 0 then ydrehung = 6.2831
if xdrehung >= 6.2831 then xdrehung = 0
if xdrehung < 0 then xdrehung = 6.2831
xmpl = xspielfigur + 16
ympl = yspielfigur + 16
select case xdrehung 'richtung der Spielfigur
case 0 to 0.196
plrichtung = 1
case 0.197 to 0.589
plrichtung = 16
case 0.59 to 0.982
plrichtung = 15
case 0.983 to 1.374
plrichtung = 14
case 1.375 to 1.767
plrichtung = 13
case 1.768 to 2.16
plrichtung = 12
case 2.161 to 2.552
plrichtung =11
case 2.553 to 2.945
plrichtung = 10
case 2.946 to 3.337
plrichtung = 9
case 3.338 to 3.73
plrichtung = 8
case 3.731 to 4.123
plrichtung = 7
case 4.124 to 4.516
plrichtung = 6
case 4.517 to 4.908
plrichtung = 5
case 4.909 to 5.301
plrichtung = 4
case 5.302 to 5.694
plrichtung = 3
case 5.695 to 6.086
plrichtung = 2
case 6.087 to 7
plrichtung = 1
end select
IF TIMER >= fpc THEN
fpc = TIMER + 1
curfps = fpsb
fpsb = 0
END IF
'sleep 1
'fps=1/(endefps-startfps)
'endefps=timer
loop
sleep |
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 26.06.2008, 14:18 Titel: |
|
|
Hi,
wie nemored dir schon vorgeschlagen hat, kannst du einige Programmteile beschleunigen und besser struckturieren.
Code: | ...
DIM pl100 AS ANY PTR
...
DO
fpsb = fpsb+1
'startfps=TIMER
'spielzeit = TIMER - spielstartzeit
SCREENLOCK
CLS
IF plrichtung > 16 THEN plrichtung = 1
IF plrichtung < 1 THEN plrichtung = 16
IF plrichtung = 1 THEN pl100 = pl1
IF plrichtung = 2 THEN pl100 = pl2
...'usw
PUT (0,0), map, PSET
PUT (xspielfigur,yspielfigur), pl100, TRANS
LINE (ykreuz,xkreuz-2)-(ykreuz,xkreuz+2),15 'senkrechte Linie
LINE (ykreuz+2,xkreuz)-(ykreuz-2,xkreuz),15 'waagerechte Linie
For i as integer = 1 to 10
PSET (xschuss(i),yschuss(i)),14
Next
...
...
For i as integer = 1 to 10
zeitseitabschuss(i) = ((TIMER - timeabschuss(i)))*5
IF zeitseitabschuss(i) < 0 THEN zeitseitabschuss(i) = 0
xschuss(i) = xpl(i)+16+(((xabschuss(i) *zeitseitabschuss(i))))
yschuss(i) = ypl(i)+16+(((yabschuss(i) *zeitseitabschuss(i))))
Next
...
...
LOOP
Imagedestroy (pl1)
Imagedestroy (pl2)
Imagedestroy (pl3)
...'usw
SLEEP
|
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 26.06.2008, 17:49 Titel: |
|
|
Wegen der Wartezeit:
Code: | IF MULTIKEY(fb.sc_w) THEN
IF TIMER - letzterSchuss > Mindestwartezeit THEN
counterschuss = counterschuss + 1
IF counterschuss = 11 THEN counterschuss = 1
xpl(counterschuss) = xspielfigur
ypl(counterschuss) = yspielfigur
xabschuss(counterschuss) = ykreuz - (xpl(counterschuss)+16)
yabschuss(counterschuss) = xkreuz - (ypl(counterschuss)+16)
timeabschuss(counterschuss) = TIMER
letzterSchuss = TIMER
END IF
END IF |
Mindestwartezeit gibt dabei an, wie lange zwischen den Schüssen gewartet werden soll. Ist jedoch ungetestet. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 26.06.2008, 19:30 Titel: |
|
|
@frebas:
Längeren Code wie deinen in Zukunft bitte auf ein NoPaste-System wie z.B. fb:porticula hochladen. Dann braucht man nicht immer so weit scrollen.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 27.06.2008, 23:50 Titel: |
|
|
Werde ich machen und danke für die Hilfe. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|