Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

JumpAndRun Ansatz der nicht so recht will...

Uploader:Mitgliedflo
Datum/Zeit:21.10.2007 12:37:17

'hi
'also das ding arbeitet mit blöcken... wenn da einer ist,
'sollte die figur nicht weitergehen können und nicht weiter
'fallen... geht auch, aber leider zuckelt sie manchmal durch
'die gegend...
'außerdem krieg ich manchmal grafikfehler (mit put,vlt mit
'dem line befehl immoment nicht?), und kurz darauf schmiert
'er mit speicherzugriffsfehler ab...
'geschrieben und getestet in linux



'bei fall und bewegung zu einer treppe hin (nur nach rechts, da wackelts auch) MANCHMAL 1 pixel zu tief!
'speicherzugriffsfehler oO?

#include "fbgfx.bi"
#define decs declare sub
#define decf declare function
const xlen=24,ylen=24,gravity=75
decs FigurZeichnen()
decf deltaT as double
type TPhysics                                                           'Alles was man f�r die
    x      as double                                                    'Berechnungen braucht:
    y      as double                                                    'x- und y-Koordinaten,
    ax     as double                                                    'Beschleunigung in
    ay     as double                                                    'beide Richtungen
    vx     as double                                                    'Jetzige und vorherige
    vy     as double                                                    'Geschwindigkeiten
    vxalt  as double
    vyalt  as double
    xalt   as double
    yalt   as double
    width  as integer
    height as integer
end type
dim shared Figur as TPhysics
with Figur
    .x=600
    .y=460
    .ax=0
    .ay=0
    .vx=0
    .vy=0
end with
dim as double dT
dim shared as fb.image ptr FigurSprite(1 to 1, 0 to 1)
dim shared as fb.image ptr FigurHG
screenres  800,600,8,2
screenset 1,0
FigurSprite(1,0)=imagecreate (20,20)
FigurSprite(1,1)=imagecreate (20,20)
FigurHG=imagecreate (20,20)
'bload "gfx\test1.bmp", FigurSprite (1,0)
'bload "gfx\test2.bmp", FigurSprite (1,1)

dim shared as byte block(1 to 34, 1 to 25)
dim as integer bx,by,obx,oby
by=1
for by=20 to 1 step -1
    for bx=21-by to 32-20+by
        block (bx,by)=-1
    next
    ?bx,by
    'for bx=5 to 10

    '    block (bx,19)=-1
    'next
next
block (15,2)=-1
sleep
for bx=1 to 34
    for by=1 to 25
        line(bx*24-24,by*24-24)-step(24,24),7,B
        if block (bx,by) then line(bx*24-24,by*24-24)-step(24,24),1,BF else line(bx*24-24,by*24-24)-step(24,24),4,B
    next

next
    pcopy 1,0



get (Figur.x,Figur.y)-step(19,19),FigurHG

'put (1,1),Figursprite(1,1),pset
dT=deltaT
with Figur
.x=600
.y=200
end with
bx=fix(figur.x/24)+1
        by=fix(figur.y/24)+1

obx=bx:oby=by
do

    sleep 10

    dT=deltaT
    FigurZeichnen

    if multikey(&h48) and Figur.ay=0 then Figur.ay=75:Figur.vy=-75
    if multikey(&h4b) then Figur.vx=-50 else if multikey(&h4d) then Figur.vx=50 else Figur.vx=0

    do until inkey="" : loop
    with Figur
        .vx=.vx+.ax*dT
        .vy=.vy+.ay*dT
        .xalt=.x
        .yalt=.y
        .x=.x+(.vxalt+.vx)/2*dT
        .y=.y+(.vyalt+.vy)/2*dT
        .vxalt=.vx
        .vyalt=.vy
        bx=fix(fix(.x+1)/24)+1
        by=fix(fix(.y)/24)+1

        if .vy>0 then
         if block (bx,by) and block (bx+1,by) then
             .y=by*ylen-ylen-1:.vy=0:.ay=0:.vyalt=0
         end if
        end if
        if .vx>0 then
            if block(bx+1,by) or block(bx+1,by-1) then .x=bx*xlen-xlen-1:.vx=0:.ax=0:.vxalt=0
        end if
        bx=fix(fix(.x)/24)+1
        by=fix(fix(.y)/24)+1
        if .vx<0 then
            if block(bx,by) or block(bx,by-1) then .x=bx*xlen:.vx=0:.ax=0:.vxalt=0
        end if
        bx=fix(fix(.x)/24)+1
        by=fix(fix(.y)/24)+1


        if .vy>0 then

        if block (bx,by) or block (bx+1,by)  then
            .y=by*ylen-ylen-1:.vy=0:.ay=0:.vyalt=0
            end if
        end if
        bx=fix(fix(.x)/24)+1
        by=fix(fix(.y)/24)+1
        if .vy<0 then
            if block (bx,by-1) or block (bx+1,by-1) then .y=by*ylen:.vy=0:.ay=gravity
        end if
        bx=fix(fix(.x)/24)+1
        by=fix(fix(.y)/24)+1


        if .ay=0 then
            if block(bx,by+1)=0 and block (bx+1,by+1)=0 then .ay=gravity
        end if

    end with
    locate 1,1:?bx,by,figur.vy;"  ";,figur.ay;"  "
    locate 2,1:?fix(1/dT) ; "FPS"
    pcopy 1,0
    'screensync

    'vsync
loop


function deltaT as double
    static altezeit as double
    deltaT=timer-altezeit
    altezeit=timer
end function
sub FigurZeichnen
    put (Figur.xalt,Figur.yalt-24),FigurHG,pset
    get (Figur.x,Figur.y-24)-step(23,23),FigurHG

    'put (Figur.x,Figur.y-24),FigurSprite(1,1),or
    'put (Figur.x,Figur.y-24),FigurSprite(1,0),and
    line(figur.x,figur.y-24)-step(23,23),3,BF
end sub