Menu

Show posts

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 Menu

Topics - Kitty Hello

#521
Code Snippets / JumpFrog
2005-Jul-02
Hmm... nachdem sich keiner traut, leg ich mal einen vor. Ein 2 Spieler "JumpFrog". Die Grafik ist etwas.. ähh.. ;)

Spieler 1: Space oder linke Maustaste
Spieler 2: Linke CTRL oder rechte Maustaste

Compiliert man unter 320x240 oder 640x480 - nicht höher :P

Es wundere sich keiner, dass er nix kapiert, so geht's mir nach einer Woche auch :D. Musste halt mal wieder schnell gehen.

Code (glbasic) Select
// --------------------------------- //
// Project: JumpFrog
// Start: Tuesday, May 10, 2005
// IDE Version: 2.50405

LIMITFPS -1

DIM frog_jump[2]
DIM frog_x[2] // offset to current platform - if jumping, real position
DIM frog_y[2] // on what platform
DIM frog_col[2]
frog_col[0] = RGB(0,255,0)
frog_col[1] = RGB(255,0,0)
GETSCREENSIZE screenx, screeny
MAX_PLATFORM = 50
JUMP_HEIGHT = screeny/8

frog_x[0] = 0.1
frog_x[1] = -0.1

WHILE TRUE
dtime = GETTIMERALL()*3
IF ( MOUSEAXIS(3) OR KEY(57) ) AND frog_jump[0] = 0 THEN JumpFrog(0, dtime)
IF ( MOUSEAXIS(4) OR KEY(29) ) AND frog_jump[1] = 0 THEN JumpFrog(1, dtime)
HandleFrog(0, dtime)
HandleFrog(1, dtime)
ShowAll(dtime)
WEND

// ------------------------------------------------------------- //
// -=#  SHOWALL  #=-
// ------------------------------------------------------------- //
FUNCTION ShowAll: dtime
LOCAL i, pos[], fx, nicecam
DIM pos[5]
GetPlatformPos(frog_y[0], dtime, pos[])

scale = 0.9 // dynamic camera speed
nicecam = -pos[1]*JUMP_HEIGHT + screeny*2/3
yoffset = yoffset*scale + (1-scale)*nicecam
FILLRECT 0,0, screenx, screeny, RGB(96,128,255)

// FROGGERS
FOR i=0 TO BOUNDS(frog_x[], 0)-1
GetPlatformPos(frog_y[i], dtime, pos[])
IF frog_jump[i]
fx = frog_x[i]
ELSE
fx = pos[0] + frog_x[i]
ENDIF

IF frog_jump[i] >= 0
dy = frog_jump[i]
ELSE
dy = SIN(90*frog_jump[i])
ENDIF

FILLRECT fx*screenx-16, (pos[1]+dy)*JUMP_HEIGHT+yoffset-32, _
fx*screenx   , (pos[1]+dy)*JUMP_HEIGHT+yoffset, frog_col[i]
DRAWLINE fx*screenx-14, (pos[1]+dy)*JUMP_HEIGHT+yoffset-30, _
fx*screenx -2, (pos[1]+dy)*JUMP_HEIGHT+yoffset-30, RGB(255,255,255)
NEXT

// PLATFORMS
FOR i = 0 TO MAX_PLATFORM
GetPlatformPos(i, dtime, pos[])
IF pos[4]=FALSE // not hidden
ALPHAMODE pos[3]
width = pos[2]*screenx/2
FILLRECT pos[0]*screenx-width, pos[1]*JUMP_HEIGHT+yoffset, _
pos[0]*screenx+width, pos[1]*JUMP_HEIGHT+yoffset + 0.2*JUMP_HEIGHT, _
RGB(200,96,0)
FILLRECT pos[0]*screenx-width, pos[1]*JUMP_HEIGHT+yoffset, _
pos[0]*screenx+width, pos[1]*JUMP_HEIGHT+yoffset + 2, _
RGB(0,128,0)
ALPHAMODE 0
PRINT INTEGER(MAX_PLATFORM-i+1), 0, pos[1]*JUMP_HEIGHT+yoffset
ENDIF // hidden
NEXT

IF bestlevel PRINT "Position: " + frog_y[0] + " Best: " + bestlevel, 0, 0
PRINT "GLBasic.com", GLOBAL screenx-220, GLOBAL screeny-30

dtime=GETTIMERALL()
IF dtime>lasttime+1000
fps = numframes/(dtime-lasttime)*1000
lasttime=dtime
numframes=0
ENDIF
numframes=numframes+1
PRINT "FPS:" +FORMAT$(0, 1, fps), 20, 25 // + dtime, 0,0

SHOWSCREEN
ENDSUB // SHOWALL


// ------------------------------------------------------------- //
// -=#  HANDLEFROG  #=-
// ------------------------------------------------------------- //
FUNCTION HandleFrog: num, dtime
// Diese Variablen sind als LOCAL definiert:
// num, dtime
LOCAL pos[]
DIM pos[5]
SELECT frog_jump[num]
CASE <0 // jumping
frog_jump[num] = frog_jump[num] - GETTIMER()/500
SetOnPlatform(num, dtime)
CASE >0 // falling
frog_jump[num] = frog_jump[num] + GETTIMER()/700
SetOnPlatform(num, dtime)
CASE 0 // standing
GetPlatformPos(frog_y[num], dtime, pos[])
IF pos[4] // toggling platform - is gone!
FallFrog(num, dtime)
ENDIF
ENDSELECT
ENDFUNCTION // HANDLEFROG

// ------------------------------------------------------------- //
// -=#  JUMPFROG  #=-
// Make frog jumping
// ------------------------------------------------------------- //
FUNCTION JumpFrog: num, dtime
LOCAL pos[]
DIM pos[5]
IF frog_jump[num] <> 0 THEN RETURN
GetPlatformPos(frog_y[num], dtime, pos[])
frog_jump[num] = -0.01
frog_x[num] = pos[0] + frog_x[num]
PLAYSOUND 0, (2*frog_x[num])-1, 1
ENDFUNCTION

// ------------------------------------------------------------- //
// -=#  FALLFROG  #=-
// Make frog falling
// ------------------------------------------------------------- //
FUNCTION FallFrog: num, dtime
LOCAL pos[]
DIM pos[5]
IF frog_jump[num] <> 0 THEN RETURN
GetPlatformPos(frog_y[num], dtime, pos[])
frog_jump[num] = 0.01
frog_x[num] = pos[0] + frog_x[num]
ENDFUNCTION

// ------------------------------------------------------------- //
// -=#  SETONPLATFORM  #=-
// Try to attach a frog to the next closest platform
// ------------------------------------------------------------- //
FUNCTION SetOnPlatform: num, dtime
LOCAL frogx
LOCAL pos[]
DIM pos[5]
IF ABS(frog_jump[num])>1
IF frog_jump[num] > 1 THEN frog_y[num]=frog_y[num]-1
IF frog_jump[num] <-1 THEN frog_y[num]=frog_y[num]+1
frog_jump[num] = 0
// check if you're on a platform now
GetPlatformPos(frog_y[num], dtime, pos[])
frogx = frog_x[num]
frog_x[num] = frog_x[num]-pos[0]
IF pos[4] OR (ABS(pos[0] - frogx) > pos[2]/2)
FallFrog(num, dtime)
ENDIF
ENDIF
ENDFUNCTION


FUNCTION PseudoRand: num
LOCAL ps_rnd, i
ps_rnd = 1247
FOR i=0 TO ABS(num+1)
// ps_rnd = qCOS(360*(ps_rnd+i))+qSIN(ps_rnd*i)*i
SELECT MOD(i, 4)
CASE 0; ps_rnd=ps_rnd+1027*i
CASE 1; ps_rnd=ps_rnd*21+MOD(i, ps_rnd)
CASE 2; ps_rnd=ps_rnd*i+13
CASE 3; ps_rnd=MOD(ps_rnd, i)
ENDSELECT
NEXT
RETURN ABS(INTEGER(ps_rnd))
ENDFUNCTION

// ------------------------------------------------------------- //
// -=#  GetPlatformPos  #=-
// pos[0] = x [0; 1] or -1000 if invisible
// pos[1] = y [0; n] 1 unit = 1 storey heigth
// pos[2] = width [0; 1]
// pos[3] = alphamode (for vanishing blocks)
// pos[4] = is hidden?
// ------------------------------------------------------------- //
FUNCTION GetPlatformPos: num, dtime, pos[]
// Diese Variablen sind als LOCAL definiert:
// num, dtime
LOCAL x
IF BOUNDS(pos[], 0) < 5 THEN DIM pos[5]

dtime = dtime * (5+num/MAX_PLATFORM)/40
pos[2] = 0.15 + (MAX_PLATFORM-num)/MAX_PLATFORM*0.30
pos[3] = 0
pos[4] = FALSE

SELECT MOD(PseudoRand(num),5) // MOD(num-1, 4)
CASE 0 // linear motion
x = MOD(dtime*(num+10)/MAX_PLATFORM, 1000)
IF x>500
x = (1000-x)/500
ELSE
x = x/500
ENDIF
CASE 1 // disapear in the center
x = MOD(dtime*num/MAX_PLATFORM, 1000)
IF x>700
pos[4]=TRUE
ENDIF
SELECT x
CASE <100
pos[3] = -x/100 + 0.001
CASE >600
pos[3] = -(700-x)/100 + 0.001
ENDSELECT
x = 0.5
CASE 2 // sin
x = (1+SIN(dtime*num/MAX_PLATFORM))/2
CASE 3 // whacky
x = ABS(COS(dtime*num/13/MAX_PLATFORM) + SIN(dtime*num/MAX_PLATFORM))/2
CASE 4 // sin + hide
x = MOD(dtime*num/MAX_PLATFORM, 1000)
IF x>700
pos[4] = TRUE
ENDIF
SELECT x
CASE <100
pos[3] = -x/100 + 0.001
CASE >600
pos[3] = -(700-x)/100 + 0.001
ENDSELECT
x = (1+SIN(0.5 * dtime*num/MAX_PLATFORM))/2
ENDSELECT

pos[0] = (1-pos[2]) * x + pos[2]/2
pos[1] = -num //*JUMP_HEIGHT
IF num = 0; pos[2]=1; pos[0]=0.5; pos[3]=0; pos[4]=FALSE; ENDIF
ENDFUNCTION // GETPLATFROMPOS
#522
Yes, GLBasic does 3D with the new update. It's not optimized to the max, yet, but hey: It's 3D for the PocketPC! Muhahaha.

Greetz,
Gernot
#523
...mit dem neuen Update! Noch nicht optimal, aber: GLBasic macht 3D auf dem PocketPC! Muhahaha.

-Gernot
#524
Für PocketPC 2002 und 2003, 2003SE:
http://www.glbasic.com/files/glbasic2.tsk

Hier noch einen Screenshot:




Hier die neue Version:



[attachment deleted by admin]
#525
For PocketPC 2002 and 2003, 2003SE:
http://www.glbasic.com/files/glbasic2.tsk

Here's a screenshot:

#526
GLBasic - de / News
2005-Apr-05
Die GLBasic News-Seite hat nun die aktuelle Log-Datei enthalten. Ihr solltet besser http://www.glbasic.com/log_e.html in eure Browser Startseite integrieren. ;)
Updates kommen sehr heufig - etwa alle 14 Tage.

Bye,
Gernot
#527
Announcements / News
2005-Apr-05
The GLBasic news-page features the latest log file from now on.
You'd better put a link to http://www.glbasic.com/log_e.html to your browser's start page ;)
Updates come very frequently, every 2 weeks in general.
Bye,
Gernot
#528
online
#529
Code Snippets / Ellipses
2005-Feb-18
If you want to fill ellipses on PocketPC, where the POLYVECTOR does not work, try this:
Code (glbasic) Select
// ------------------------------------------------------------- //
// -=#  ELLPISE  #=-
// ------------------------------------------------------------- //
FUNCTION Ellipse: x, y, w, h, col
LOCAL dy, xi
w=w/2
h=h/2
x=x+w
FOR dy = -h TO h
xi = w/h * SQR(h*h - dy*dy)
DRAWRECT x-xi, y+dy+h, xi+xi, 1, col
NEXT
ENDFUNCTION // ELLIPSE
#530
Code Snippets / Ellipsen
2005-Feb-18
So zeichnet man schnell gefüllte Ellipsen (auch unter PocketPC, wo POLYVECTOR nicht funktioniert).

Code (glbasic) Select
// ------------------------------------------------------------- //
// -=#  ELLPISE  #=-
// ------------------------------------------------------------- //
FUNCTION Ellipse: x, y, w, h, col
LOCAL dy, xi
w=w/2
h=h/2
x=x+w
FOR dy = -h TO h
xi = w/h * SQR(h*h - dy*dy)
DRAWRECT x-xi, y+dy+h, xi+xi, 1, col
NEXT
ENDFUNCTION // ELLIPSE
#531
Ja, da war ein Datenbakfehler. Ich hab die Zeit gleich genutzt um eine neue Version von PunBB zu installieren.
Wenn's irgendwo fehlt, bitte Bescheid geben.
#532
Kurz vor den Feiertagen ist es so weit: Das große GLBasic Update. Wir haben so viel geändert, dass nicht alles dokumentiert ist. Jetzt da wir an Wumbo3D schreiben, wurde der 3D Kern total überarbeitet.
Linux Programme lassen sich jetzt per Knopfdruck erstellen - kein nerviges neubooten, keine Scripts mehr.
Kompilieren, (Neustart unter Linux, Testen), Verschicken.
Das Update gibt's hier:
http://www.glbasic.com/files/glbasic_sdk.exe
#533
Announcements / Huge update
2004-Dec-12
Hi,

shortly before X-Mas it's there - the biggest update ever. We've changed lot's of internal stuff, so it's not all documented. The 3D kernel gained a nice cleanup now that we started writing Wumbo3D. Linux compilation is now on board as you are used to it. No more scripts, no nothing.
Compile, (reboot Linux, test), ship.

The update is here: http://www.glbasic.com/files/glbasic_sdk.exe
#534
GLBasic - de / X-Mas Special
2004-Nov-25
Ho-ho-ho. Für den rest des Jahres bieten wir einen 25% Preisnachlass :D auf GLBasic SDK premium:
https://secure.shareit.com/shareit/checkout.html?PRODUCT[190536]=1&cartcoupon=1&COUPON1=xmas2004&DELIVERY[190536]=EML&pc=9no1l
Angebot endet am 01-jan-2005.

Grüße,
Gernot
#535
Snowy greeting from Germany, for the rest of the year we offer a 25% price off :D for GLBasic SDK premium:
https://secure.shareit.com/shareit/checkout.html?PRODUCT[190536]=1&cartcoupon=1&COUPON1=xmas2004&DELIVERY[190536]=EML&pc=9no1l
Offer ends 01-jan-2005.

Greetings,
Gernot
#536
Announcements / Linux
2004-Nov-09
Hi,

finally the X-Compiler got finished. Soon, very soon, you can work on Windows, ceate and test your games and for the final release, simply check the "Linux" button and the game will be compiled as a running Linux version. No more version lacks features that your Windows game have. The same version leaves house on the same day. You can use all the Windows files without any changes (bmp - Graphics, ddd - 3D Objects, sbx - Shoeboxes, txt - Ascii text files).
Only networking is not poerted so far, but it's in work already.
Later,
Gernot
#537
Hallo,

endlich geschafft. Es wird eine Linux-X-Compiler Version in kürze geben. D.h. dass man unter Windows programmieren kann, dann die Option "Linux" im Projekt anhakt und voila' - fertig ist das Linux Spiel. Nichts hinkt mehr hinterher, Win und Linux Version gehen Hand-in-Hand aus dem Haus!
Volle Kompatibilität mit allen Windows Dateien (bmp-Grafiken, ddd-3D Objekte, sbx-Schuhschachteln, txt-Ascii Textdateien)
Lediglich das Netzwerk ist noch nicht 'drin. Aber daran wird schon gearbeitet.
Bis bald,
Gernot
#538
Code Snippets / Coffee Break
2004-Sep-30
...requires 3D addon... and update to 2.40930
Code (glbasic) Select
// --------------------------------- //
// 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
#539
Code Snippets / Kaffepause
2004-Sep-30
...braucht 3D addon und Update auf >= 2.40930.
Code (glbasic) Select
// --------------------------------- //
// 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
#540
GLBasic - de / Showroom
2004-Aug-30
Eigene Spiele veröffentlichen unter:
http://www.glbasic.com/showroom/index.php?lang=de