Oh. weia. Das ist ein OpenGL Problem. Bitte versuch auf 32 Bit Farbiefe zu spielen. Wenn 16 Bit verwendet wird, muss ich mir was einfallen lassen, aber das wird übel langsam...
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts MenuFUNCTION SaveMap: file$, map[]
FOR y=0 TO maxy-1
line$=""
FOR x=0 TO maxx-1
line$=line$+FORMAT$(3,0,map[x][y])
NEXT
PUTFILE file$, y, line$
NEXT
ENDFUNCTION
FUNCTION GetNumFromStr: str$, index
LOCAL a$
a$=MID$(str$, INTEGER(index*3), 3)
RETURN a$
ENDFUNCTION
FUNCTION ReadMap: file$, map[]
FOR y=0 TO maxy-1
GETFILE file$, y, line$
FOR x=0 TO maxx-1
map[x][y]=GetNumFromStr(line$, x)
NEXT
NEXT
ENDFUNCTION
// --------------------------------- //
// Project:Cubies
// Start: Thursday, September 30, 2004
// IDE Version: 2.40930
LIMITFPS 80
MAXCUBIE=8
DIM cubie_pos [MAXCUBIE+1][3]
DIM cubie_mov [MAXCUBIE+1][3]
DIM cubie_dirx[MAXCUBIE+1]
DIM cubie_ani [MAXCUBIE+1]
DIM cubie_life[MAXCUBIE+1]
DIM cols[4]
cols[0]=RGB(0x00, 0xff, 0x80)
cols[1]=RGB(0xff, 0xff, 0x40)
cols[2]=RGB(0xff, 0xff, 0xff)
cols[3]=RGB(0x00, 0x00, 0x80)
FOR all=0 TO MAXCUBIE
CreateCube(all, 1, cols[MOD(all, 4)])
dx=RND(12); dy=RND(25)+10
x=dx+INTEGER(dy/2)
y=dy
z=dy-dx-INTEGER(dy/2)
cubie_pos[all][0]=x
cubie_pos[all][1]=y
cubie_pos[all][2]=z
cubie_dirx[all] =0
cubie_ani[all] =RND(100)/100
cubie_life[all] =RND(200)-40
NEXT
CreateStairs(MAXCUBIE+1, 1)
camx = 6; camy = 19; camz = 0
WHILE TRUE
dpos = GETTIMER()/1200
ani=ani+dpos
camy=camy-dpos
camx=camx-dpos/2
camz=camz-dpos/2
IF ani>2
ani=ani-2
FOR num=0 TO MAXCUBIE
cubie_pos[num][0]=cubie_pos[num][0]+1
cubie_pos[num][1]=cubie_pos[num][1]+2
cubie_pos[num][2]=cubie_pos[num][2]+1
cubie_mov[num][0]=cubie_mov[num][0]+1
cubie_mov[num][1]=cubie_mov[num][1]+2
cubie_mov[num][2]=cubie_mov[num][2]+1
NEXT
camx=camx+1
camy=camy+2
camz=camz+1
ENDIF
FOR all=0 TO MAXCUBIE
cubie_ani[all]=cubie_ani[all]+dpos
cubie_life[all]=cubie_life[all]+dpos*10
IF cubie_ani[all]>1 AND cubie_life[all]>=0
cubie_ani[all]=cubie_ani[all]-1
cubie_pos[all][0]=cubie_pos[all][0]-1
cubie_pos[all][1]=cubie_pos[all][1]-1
cubie_pos[all][2]=cubie_pos[all][2]-1
IF cubie_dirx[all]
cubie_pos[all][0]=cubie_pos[all][0]+1
ELSE
cubie_pos[all][2]=cubie_pos[all][2]+1
ENDIF
cubie_dirx[all] = 1 - cubie_dirx[all]
ENDIF
IF cubie_life[all]>400 THEN cubie_life[all]=-50 // Poof
NEXT
phi=phi + GETTIMER()/27/5
psi=psi + GETTIMER()/13/5
RenderScene(-ABS(30*SIN(phi)), 7+7*(SIN(phi)+COS(psi)), -ABS(30*COS(psi)))
SHOWSCREEN
WEND
FUNCTION RenderScene: x, y, z
X_MAKE3D 1, 500, 35
X_CAMERA camx+x, camy+y, camz+z, camx, camy, camz
X_SPOT_LT 0, RGB(255,255,255), camx,camy,camz-5, 1,-1, 1, 75
FOR num=0 TO MAXCUBIE
DrawCubie(num, cubie_pos[num][0], cubie_pos[num][1], cubie_pos[num][2], cubie_ani[num], cubie_dirx[num])
NEXT
X_SCALING 1,1,1
X_MOVEMENT 0,-1,0
X_DRAWOBJ MAXCUBIE+1, 0
ENDFUNCTION
FUNCTION CreateStairs: num, sz
LOCAL x, y, z, dx, dy, col
sz=sz/2
X_AUTONORMALS 1
X_OBJSTART num
FOR dx=0 TO 12
FOR dy=4 TO 35
col=RGB(0, 0, 255)
IF MOD(dx*dy, 2)=0 THEN col=RainbowColour(dx/12)
// +->X
// |\
// V Y
// Z
//
//111111
//222222
//333333
//x = dx
//y = dy
//z = dy
//
// 12345
// 12345
// 12345
//12345
// x=dx
// y=dy
// z=dy-dx
//
// 1
// 123
// 12345
//123456
// 3456
// 56 -x+z
//
x=dx+INTEGER(dy/2)
y=dy
z=dy-dx-INTEGER(dy/2)
x=x*sz*2
y=y*sz*2
z=z*sz*2
// Back Face
X_OBJADDVERTEX -sz+x, sz+y, -sz+z, 1, 1, col
X_OBJADDVERTEX -sz+x, -sz+y, -sz+z, 1, 0, col
X_OBJADDVERTEX sz+x, sz+y, -sz+z, 0, 1, col
X_OBJADDVERTEX sz+x, -sz+y, -sz+z, 0, 0, col
X_OBJNEWGROUP
// Top Face
X_OBJADDVERTEX -sz+x, sz+y, sz+z, 0, 0, col
X_OBJADDVERTEX -sz+x, sz+y, -sz+z, 0, 1, col
X_OBJADDVERTEX sz+x, sz+y, sz+z, 1, 0, col
X_OBJADDVERTEX sz+x, sz+y, -sz+z, 1, 1, col
X_OBJNEWGROUP
// Left Face
X_OBJADDVERTEX -sz+x, -sz+y, sz+z, 1, 0, col
X_OBJADDVERTEX -sz+x, -sz+y, -sz+z, 0, 0, col
X_OBJADDVERTEX -sz+x, sz+y, sz+z, 1, 1, col
X_OBJADDVERTEX -sz+x, sz+y, -sz+z, 0, 1, col
X_OBJNEWGROUP
NEXT
NEXT
X_OBJEND
ENDFUNCTION
// ------------------------------------------------------------- //
// -=# CREATECUBE #=-
// ------------------------------------------------------------- //
FUNCTION CreateCube: num, sz, col
// Diese Variablen sind als LOCAL definiert:
// num, sz,
sz=sz/2
X_AUTONORMALS 1
X_OBJSTART num
// Front Face
X_OBJADDVERTEX sz, -sz, sz, 1, 0, col
X_OBJADDVERTEX -sz, -sz, sz, 0, 0, col
X_OBJADDVERTEX sz, sz, sz, 1, 1, col
X_OBJADDVERTEX -sz, sz, sz, 0, 1, col
X_OBJNEWGROUP
// Back Face
X_OBJADDVERTEX -sz, sz, -sz, 1, 1, col
X_OBJADDVERTEX -sz, -sz, -sz, 1, 0, col
X_OBJADDVERTEX sz, sz, -sz, 0, 1, col
X_OBJADDVERTEX sz, -sz, -sz, 0, 0, col
X_OBJNEWGROUP
// Top Face
X_OBJADDVERTEX -sz, sz, sz, 0, 0, col
X_OBJADDVERTEX -sz, sz, -sz, 0, 1, col
X_OBJADDVERTEX sz, sz, sz, 1, 0, col
X_OBJADDVERTEX sz, sz, -sz, 1, 1, col
X_OBJNEWGROUP
// Bottom Face
X_OBJADDVERTEX sz, -sz, -sz, 0, 1, col
X_OBJADDVERTEX -sz, -sz, -sz, 1, 1, col
X_OBJADDVERTEX sz, -sz, sz, 0, 0, col
X_OBJADDVERTEX -sz, -sz, sz, 1, 0, col
X_OBJNEWGROUP
// Right face
X_OBJADDVERTEX sz, sz, -sz, 1, 1, col
X_OBJADDVERTEX sz, -sz, -sz, 1, 0, col
X_OBJADDVERTEX sz, sz, sz, 0, 1, col
X_OBJADDVERTEX sz, -sz, sz, 0, 0, col
X_OBJNEWGROUP
// Left Face
X_OBJADDVERTEX -sz, -sz, sz, 1, 0, col
X_OBJADDVERTEX -sz, -sz, -sz, 0, 0, col
X_OBJADDVERTEX -sz, sz, sz, 1, 1, col
X_OBJADDVERTEX -sz, sz, -sz, 0, 1, col
X_OBJNEWGROUP
X_OBJEND
ENDFUNCTION // sz
// ------------------------------------------------------------- //
// -=# DRAWCUBIE #=-
// ------------------------------------------------------------- //
FUNCTION DrawCubie: num, x, y, z, pos, dirx
// Diese Variablen sind als LOCAL definiert:
// num, x, y, z, dirx
IF cubie_life[num]<0
cubie_ani[num]=.8
pos = 0.75
y = y-cubie_life[num]/3
ENDIF
IF pos<0.5
X_SCALING 1,1,1
IF dirx
cubie_mov[num][0] = x
cubie_mov[num][1] = y
cubie_mov[num][2] = z-2*pos
X_MOVEMENT cubie_mov[num][0], cubie_mov[num][1], cubie_mov[num][2]
X_ROTATION -90*pos*2, 1,0,0
ELSE
cubie_mov[num][0] = x-2*pos
cubie_mov[num][1] = y
cubie_mov[num][2] = z
X_MOVEMENT cubie_mov[num][0], cubie_mov[num][1], cubie_mov[num][2]
X_ROTATION 90*pos*2, 0,0,1
ENDIF
ELSE
IF dirx
cubie_mov[num][0] = x
cubie_mov[num][1] = y+COS((pos-.5)*180)*1-1
cubie_mov[num][2] = z-1
ELSE
cubie_mov[num][0] = x-1
cubie_mov[num][1] = y+COS((pos-.5)*180)*1-1
cubie_mov[num][2] = z
ENDIF
X_MOVEMENT cubie_mov[num][0], cubie_mov[num][1], cubie_mov[num][2]
X_SCALING 1, 1+SIN((pos-.5)*360)*.3, 1
ENDIF
X_DRAWOBJ num,0
ENDFUNCTION // DRAWCUBIE
FUNCTION RainbowColour: pos
npos=pos
WHILE npos>0.2
npos=npos-0.2
WEND
npos=npos*5.0
SELECT pos
CASE 0 TO 0.2
r=1; g=0; b=1-npos
CASE 0.2 TO 0.4
r=1; g=npos; b=0
CASE 0.4 TO 0.6
r=1-npos; g=1; b=0
CASE 0.6 TO 0.8
r=0; g=1-npos; b=npos
CASE 0.8 TO 1.0
r=npos; g=0; b=1
ENDSELECT
RETURN RGB(147+108*r, 147+108*g, 147+108*b)
ENDFUNCTION
// --------------------------------- //
// Project:Cubies
// Start: Thursday, September 30, 2004
// IDE Version: 2.40930
LIMITFPS 80
MAXCUBIE=8
DIM cubie_pos [MAXCUBIE+1][3]
DIM cubie_mov [MAXCUBIE+1][3]
DIM cubie_dirx[MAXCUBIE+1]
DIM cubie_ani [MAXCUBIE+1]
DIM cubie_life[MAXCUBIE+1]
DIM cols[4]
cols[0]=RGB(0x00, 0xff, 0x80)
cols[1]=RGB(0xff, 0xff, 0x40)
cols[2]=RGB(0xff, 0xff, 0xff)
cols[3]=RGB(0x00, 0x00, 0x80)
FOR all=0 TO MAXCUBIE
CreateCube(all, 1, cols[MOD(all, 4)])
dx=RND(12); dy=RND(25)+10
x=dx+INTEGER(dy/2)
y=dy
z=dy-dx-INTEGER(dy/2)
cubie_pos[all][0]=x
cubie_pos[all][1]=y
cubie_pos[all][2]=z
cubie_dirx[all] =0
cubie_ani[all] =RND(100)/100
cubie_life[all] =RND(200)-40
NEXT
CreateStairs(MAXCUBIE+1, 1)
camx = 6; camy = 19; camz = 0
WHILE TRUE
dpos = GETTIMER()/1200
ani=ani+dpos
camy=camy-dpos
camx=camx-dpos/2
camz=camz-dpos/2
IF ani>2
ani=ani-2
FOR num=0 TO MAXCUBIE
cubie_pos[num][0]=cubie_pos[num][0]+1
cubie_pos[num][1]=cubie_pos[num][1]+2
cubie_pos[num][2]=cubie_pos[num][2]+1
cubie_mov[num][0]=cubie_mov[num][0]+1
cubie_mov[num][1]=cubie_mov[num][1]+2
cubie_mov[num][2]=cubie_mov[num][2]+1
NEXT
camx=camx+1
camy=camy+2
camz=camz+1
ENDIF
FOR all=0 TO MAXCUBIE
cubie_ani[all]=cubie_ani[all]+dpos
cubie_life[all]=cubie_life[all]+dpos*10
IF cubie_ani[all]>1 AND cubie_life[all]>=0
cubie_ani[all]=cubie_ani[all]-1
cubie_pos[all][0]=cubie_pos[all][0]-1
cubie_pos[all][1]=cubie_pos[all][1]-1
cubie_pos[all][2]=cubie_pos[all][2]-1
IF cubie_dirx[all]
cubie_pos[all][0]=cubie_pos[all][0]+1
ELSE
cubie_pos[all][2]=cubie_pos[all][2]+1
ENDIF
cubie_dirx[all] = 1 - cubie_dirx[all]
ENDIF
IF cubie_life[all]>400 THEN cubie_life[all]=-50 // Poof
NEXT
phi=phi + GETTIMER()/27/5
psi=psi + GETTIMER()/13/5
RenderScene(-ABS(30*SIN(phi)), 7+7*(SIN(phi)+COS(psi)), -ABS(30*COS(psi)))
SHOWSCREEN
WEND
FUNCTION RenderScene: x, y, z
X_MAKE3D 1, 500, 35
X_CAMERA camx+x, camy+y, camz+z, camx, camy, camz
X_SPOT_LT 0, RGB(255,255,255), camx,camy,camz-5, 1,-1, 1, 75
FOR num=0 TO MAXCUBIE
DrawCubie(num, cubie_pos[num][0], cubie_pos[num][1], cubie_pos[num][2], cubie_ani[num], cubie_dirx[num])
NEXT
X_SCALING 1,1,1
X_MOVEMENT 0,-1,0
X_DRAWOBJ MAXCUBIE+1, 0
ENDFUNCTION
FUNCTION CreateStairs: num, sz
LOCAL x, y, z, dx, dy, col
sz=sz/2
X_AUTONORMALS 1
X_OBJSTART num
FOR dx=0 TO 12
FOR dy=4 TO 35
col=RGB(0, 0, 255)
IF MOD(dx*dy, 2)=0 THEN col=RainbowColour(dx/12)
// +->X
// |\
// V Y
// Z
//
//111111
//222222
//333333
//x = dx
//y = dy
//z = dy
//
// 12345
// 12345
// 12345
//12345
// x=dx
// y=dy
// z=dy-dx
//
// 1
// 123
// 12345
//123456
// 3456
// 56 -x+z
//
x=dx+INTEGER(dy/2)
y=dy
z=dy-dx-INTEGER(dy/2)
x=x*sz*2
y=y*sz*2
z=z*sz*2
// Back Face
X_OBJADDVERTEX -sz+x, sz+y, -sz+z, 1, 1, col
X_OBJADDVERTEX -sz+x, -sz+y, -sz+z, 1, 0, col
X_OBJADDVERTEX sz+x, sz+y, -sz+z, 0, 1, col
X_OBJADDVERTEX sz+x, -sz+y, -sz+z, 0, 0, col
X_OBJNEWGROUP
// Top Face
X_OBJADDVERTEX -sz+x, sz+y, sz+z, 0, 0, col
X_OBJADDVERTEX -sz+x, sz+y, -sz+z, 0, 1, col
X_OBJADDVERTEX sz+x, sz+y, sz+z, 1, 0, col
X_OBJADDVERTEX sz+x, sz+y, -sz+z, 1, 1, col
X_OBJNEWGROUP
// Left Face
X_OBJADDVERTEX -sz+x, -sz+y, sz+z, 1, 0, col
X_OBJADDVERTEX -sz+x, -sz+y, -sz+z, 0, 0, col
X_OBJADDVERTEX -sz+x, sz+y, sz+z, 1, 1, col
X_OBJADDVERTEX -sz+x, sz+y, -sz+z, 0, 1, col
X_OBJNEWGROUP
NEXT
NEXT
X_OBJEND
ENDFUNCTION
// ------------------------------------------------------------- //
// -=# CREATECUBE #=-
// ------------------------------------------------------------- //
FUNCTION CreateCube: num, sz, col
// Diese Variablen sind als LOCAL definiert:
// num, sz,
sz=sz/2
X_AUTONORMALS 1
X_OBJSTART num
// Front Face
X_OBJADDVERTEX sz, -sz, sz, 1, 0, col
X_OBJADDVERTEX -sz, -sz, sz, 0, 0, col
X_OBJADDVERTEX sz, sz, sz, 1, 1, col
X_OBJADDVERTEX -sz, sz, sz, 0, 1, col
X_OBJNEWGROUP
// Back Face
X_OBJADDVERTEX -sz, sz, -sz, 1, 1, col
X_OBJADDVERTEX -sz, -sz, -sz, 1, 0, col
X_OBJADDVERTEX sz, sz, -sz, 0, 1, col
X_OBJADDVERTEX sz, -sz, -sz, 0, 0, col
X_OBJNEWGROUP
// Top Face
X_OBJADDVERTEX -sz, sz, sz, 0, 0, col
X_OBJADDVERTEX -sz, sz, -sz, 0, 1, col
X_OBJADDVERTEX sz, sz, sz, 1, 0, col
X_OBJADDVERTEX sz, sz, -sz, 1, 1, col
X_OBJNEWGROUP
// Bottom Face
X_OBJADDVERTEX sz, -sz, -sz, 0, 1, col
X_OBJADDVERTEX -sz, -sz, -sz, 1, 1, col
X_OBJADDVERTEX sz, -sz, sz, 0, 0, col
X_OBJADDVERTEX -sz, -sz, sz, 1, 0, col
X_OBJNEWGROUP
// Right face
X_OBJADDVERTEX sz, sz, -sz, 1, 1, col
X_OBJADDVERTEX sz, -sz, -sz, 1, 0, col
X_OBJADDVERTEX sz, sz, sz, 0, 1, col
X_OBJADDVERTEX sz, -sz, sz, 0, 0, col
X_OBJNEWGROUP
// Left Face
X_OBJADDVERTEX -sz, -sz, sz, 1, 0, col
X_OBJADDVERTEX -sz, -sz, -sz, 0, 0, col
X_OBJADDVERTEX -sz, sz, sz, 1, 1, col
X_OBJADDVERTEX -sz, sz, -sz, 0, 1, col
X_OBJNEWGROUP
X_OBJEND
ENDFUNCTION // sz
// ------------------------------------------------------------- //
// -=# DRAWCUBIE #=-
// ------------------------------------------------------------- //
FUNCTION DrawCubie: num, x, y, z, pos, dirx
// Diese Variablen sind als LOCAL definiert:
// num, x, y, z, dirx
IF cubie_life[num]<0
cubie_ani[num]=.8
pos = 0.75
y = y-cubie_life[num]/3
ENDIF
IF pos<0.5
X_SCALING 1,1,1
IF dirx
cubie_mov[num][0] = x
cubie_mov[num][1] = y
cubie_mov[num][2] = z-2*pos
X_MOVEMENT cubie_mov[num][0], cubie_mov[num][1], cubie_mov[num][2]
X_ROTATION -90*pos*2, 1,0,0
ELSE
cubie_mov[num][0] = x-2*pos
cubie_mov[num][1] = y
cubie_mov[num][2] = z
X_MOVEMENT cubie_mov[num][0], cubie_mov[num][1], cubie_mov[num][2]
X_ROTATION 90*pos*2, 0,0,1
ENDIF
ELSE
IF dirx
cubie_mov[num][0] = x
cubie_mov[num][1] = y+COS((pos-.5)*180)*1-1
cubie_mov[num][2] = z-1
ELSE
cubie_mov[num][0] = x-1
cubie_mov[num][1] = y+COS((pos-.5)*180)*1-1
cubie_mov[num][2] = z
ENDIF
X_MOVEMENT cubie_mov[num][0], cubie_mov[num][1], cubie_mov[num][2]
X_SCALING 1, 1+SIN((pos-.5)*360)*.3, 1
ENDIF
X_DRAWOBJ num,0
ENDFUNCTION // DRAWCUBIE
FUNCTION RainbowColour: pos
npos=pos
WHILE npos>0.2
npos=npos-0.2
WEND
npos=npos*5.0
SELECT pos
CASE 0 TO 0.2
r=1; g=0; b=1-npos
CASE 0.2 TO 0.4
r=1; g=npos; b=0
CASE 0.4 TO 0.6
r=1-npos; g=1; b=0
CASE 0.6 TO 0.8
r=0; g=1-npos; b=npos
CASE 0.8 TO 1.0
r=npos; g=0; b=1
ENDSELECT
RETURN RGB(147+108*r, 147+108*g, 147+108*b)
ENDFUNCTION