Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kollisionen in 2D und ein paar andere Probleme

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 25.06.2008, 18:57    Titel: Kollisionen in 2D und ein paar andere Probleme Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 25.06.2008, 19:56    Titel: Antworten mit Zitat

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. lächeln


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
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 25.06.2008, 20:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 25.06.2008, 20:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 25.06.2008, 21:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 26.06.2008, 10:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 26.06.2008, 14:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 26.06.2008, 17:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 26.06.2008, 19:30    Titel: Antworten mit Zitat

@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. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 27.06.2008, 23:50    Titel: Antworten mit Zitat

Werde ich machen und danke für die Hilfe.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz