zwei Verständnisfragen:
1. Gilt #include "xxx.h" für INLINE .. ENDINLINE ?
2. was steckt hinter libPNG und gilt das nur für OS-X?
1. Gilt #include "xxx.h" für INLINE .. ENDINLINE ?
2. was steckt hinter libPNG und gilt das nur für OS-X?
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 MenuTYPE t_vertex
x; y; z
ENDTYPE
TYPE t_camera
pos AS t_vertex
delta AS t_vertex
phi // angle x-z
psi // angle y-z
ENDTYPE
GLOBAL cam AS t_camera
TYPE t_3dobj
pos AS t_vertex
object
texture
rotate AS t_vertex
angle AS t_vertex
ENDTYPE
GLOBAL new3dobj AS t_3dobj
GLOBAL d3dobj[] AS t_3dobj
TYPE t_ship
speed
max_speed = 5
ENDTYPE
GLOBAL ship AS t_ship
LOADSPRITE "lava01.bmp", 0
FOR i = 0 TO 50
CreateCube(i, RAND(20, 50), RGB(128, 128, 128))
new3dobj.pos.x = RAND(-500, 500)
new3dobj.pos.y = RAND(-400, 400)
new3dobj.pos.z = RAND(-400, 500)
new3dobj.object = i
new3dobj.texture = 0
new3dobj.rotate.x = RAND(-10, 10) / 10
new3dobj.rotate.y = RAND(-10, 10) / 10
new3dobj.rotate.z = RAND(-10, 10) / 10
DIMPUSH d3dobj[], new3dobj
NEXT
GLOBAL KEY_LEFT = 203
GLOBAL KEY_RIGHT = 205
GLOBAL KEY_UP = 200
GLOBAL KEY_DOWN = 208
GLOBAL KEY_W = 17 //accellarate
GLOBAL KEY_S = 31 //break
needcalc = TRUE
WHILE TRUE
WHILE cam.phi > 360; DEC cam.phi, 360; WEND
WHILE cam.phi < 0; INC cam.phi, 360; WEND
WHILE cam.psi > 360; DEC cam.psi, 360; WEND
WHILE cam.psi < 0; INC cam.psi, 360; WEND
IF KEY(KEY_LEFT)
DEC cam.phi, 1
needcalc = TRUE
ENDIF
IF KEY(KEY_RIGHT)
INC cam.phi, 1
needcalc = TRUE
ENDIF
IF KEY(KEY_UP)
DEC cam.psi, 1
needcalc = TRUE
ENDIF
IF KEY(KEY_DOWN)
INC cam.psi, 1
needcalc = TRUE
ENDIF
IF needcalc = TRUE
// IF cam.psi >= 90 AND cam.psi < 270
// cam.delta.x = COS(cam.phi) * -COS(cam.psi)
// cam.delta.y = -SIN(cam.psi)
// cam.delta.z = -SIN(cam.phi) * -COS(cam.psi)
// ELSE
cam.delta.x = COS(cam.phi) * COS(cam.psi)
cam.delta.y = SIN(cam.psi)
cam.delta.z = -SIN(cam.phi) * COS(cam.psi)
// ENDIF
needcalc = FALSE
ENDIF
IF KEY(KEY_W)
INC ship.speed, 0.01
IF ship.speed > ship.max_speed THEN ship.speed = ship.max_speed
ENDIF
IF KEY(KEY_S)
DEC ship.speed, 0.01
IF ship.speed < 0 THEN ship.speed = 0
ENDIF
INC cam.pos.x, cam.delta.x * ship.speed
INC cam.pos.y, cam.delta.y * ship.speed
INC cam.pos.z, cam.delta.z * ship.speed
X_MAKE3D 1, 1000, 45
X_CAMERA cam.pos.x, cam.pos.y, cam.pos.z, cam.pos.x+cam.delta.x, cam.pos.y+cam.delta.y, cam.pos.z+cam.delta.z
FOREACH obj IN d3dobj[]
X_MOVEMENT obj.pos.x, obj.pos.y, obj.pos.z
X_ROTATION obj.angle.x, 1, 0, 0
INC obj.angle.x, obj.rotate.x
X_ROTATION obj.angle.y, 0, 1, 0
INC obj.angle.y, obj.rotate.y
X_ROTATION obj.angle.z, 0, 0, 1
INC obj.angle.z, obj.rotate.z
X_SETTEXTURE obj.texture, -1
X_DRAWOBJ obj.object, 0
NEXT
//X_DRAWAXES 0, 0, 0
X_MAKE2D
PRINT "Speed: " + (INTEGER(ship.speed * 100)), 0, 0
PRINT "PHI: " + cam.phi, 0, 20
PRINT "PSI: " + cam.psi, 0, 40
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// --- RAND ---
// ------------------------------------------------------------- //
FUNCTION RAND: minimum, maximum
RETURN minimum + RND(-minimum + maximum)
ENDFUNCTION // RAND
// flight course
TYPE t_course
x
y
ENDTYPE
LOCAL newcourse AS t_course
LOCAL course[] AS t_course
// the enemies
TYPE t_enemy
sprite
course_index
ENDTYPE
LOCAL newenemy AS t_enemy
LOCAL enemy[] AS t_enemy
LOCAL scx, scy
GETSCREENSIZE scx, scy
// create a new course
LOCAL i
FOR i = 0 TO 89 STEP 2 // flight into the screen
newcourse.x = scx / 2 * SIN(i+270) + scx / 2
newcourse.y = scy / 2 * COS(i+270) + scy / 4
DIMPUSH course[], newcourse
NEXT
LOCAL count
FOR count = 0 TO 2 // then do a circle three times
FOR i = 0 TO 359 STEP 3 // in the center of the screen
newcourse.x = scy / 4 * SIN(i) + scx / 2
newcourse.y = scy / 4 * COS(i) + scy / 2
DIMPUSH course[], newcourse
NEXT
NEXT
FOR i = 0 TO 89 STEP 2 // and say good bye
newcourse.x = scx / 2 * SIN(i) + scx / 2
newcourse.y = scy / 2 * COS(i) + scy / 4
DIMPUSH course[], newcourse
NEXT
// simple enemy sprite
DRAWRECT 0, 0, 20, 20, RGB(196, 196, 196)
GRABSPRITE 0, 0, 0, 20, 20
LOCAL index = 0, delay
LOCAL max_idx = LEN(course[]) - 1
LOCAL max_enemy = 10, count_enemy = 0
// mail loop
WHILE TRUE
// create a new enemy every 350 ms but not more than 10 totally
IF GETTIMERALL() > delay AND count_enemy <= max_enemy
INC count_enemy, 1
newenemy.sprite = 0
newenemy.course_index = 0
DIMPUSH enemy[], newenemy
delay = GETTIMERALL() + 350
ENDIF
// display enemy sprites
FOREACH e IN enemy[]
DRAWSPRITE e.sprite, course[e.course_index].x, course[e.course_index].y
INC e.course_index, 1
IF e.course_index > max_idx THEN DELETE e
NEXT
// start again if all enemies of the previos wave have left
IF LEN(enemy[]) = 0 THEN count_enemy = 0
SHOWSCREEN
WEND
LIMITFPS 20
fac = 50
WHILE TRUE
FOR i = 0 TO 359
x = fac * SIN(i) + 320
y = fac * COS(i) + 240
SETPIXEL x + RAND(-5, 5), y + RAND(-5, 5), RGB(128, 128, 128)
SETPIXEL x + RAND(-10, 10), y + RAND(-10, 10), RGB(176, 176, 176)
SETPIXEL x + RAND(-20, 20), y + RAND(-20, 20), RGB(208, 208, 208)
SETPIXEL x + RAND(-30, 30), y + RAND(-30, 30), RGB(240, 240, 240)
SETPIXEL x + RAND(-40, 40), y + RAND(-40, 40), RGB(255, 255, 255)
NEXT
INC fac, 10
IF fac > 500 THEN fac = 10
SHOWSCREEN
WEND
FUNCTION RAND: minimum, maximum
RETURN minimum + RND(-minimum + maximum)
ENDFUNCTION
// --------------------------------- //
// Project: fire
// Start: Wednesday, January 02, 2008
// IDE Version: 5.110
height = 100
width = 100
startx = 270
starty = 190
DIM fire[width][height]
maxcolor = 127
FOR i = 0 TO width - 1
fire[i][height-1] = 70
NEXT
WHILE TRUE
Kamin()
FOR i = 0 TO height - 2
FOR k = 0 TO width - 1
fire[k][i] = fire[k][i+1] - 2
IF fire[k][i] > 0 THEN SETPIXEL startx + k, starty + i, fire[k][i]
NEXT
NEXT
FOR i = 0 TO width - 1
INC fire[i][height-1], RND(20) - 10
NEXT
FOR i = 1 TO width - 2
fire[i][height-1] = (fire[i-1][height-1] + fire[i][height-1] * 3 + fire[i+1][height-1]) / 5
NEXT
FOR i = 0 TO width - 1
IF fire[i][height-1] > maxcolor THEN fire[i][height-1] = maxcolor
IF fire[i][height-1] > 0 THEN SETPIXEL startx + i, starty + height-1 * 2, fire[i][height-1]
NEXT
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// --- KAMIN ---
// ------------------------------------------------------------- //
FUNCTION Kamin:
DRAWRECT 0, 0, 680, 480, RGB(255, 255, 255)
DRAWRECT 260, 180, 120, 200, RGB(0, 0, 255)
DRAWRECT startx, starty, width, height, RGB(0, 0, 0)
ENDFUNCTION // KAMIN
// --------------------------------- //
// Project: Farbverlauf
// Start: Monday, December 31, 2007
// IDE Version: 5.110
color1 = RGB(255, 0, 10)
color2 = RGB(60, 255, 255)
WHILE TRUE
Farbverlauf(100, 0, 500, 200, color1, color2, 0)
Farbverlauf(100, 220, 500, 450, color2, color1, 1)
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// --- FARBVERLAUF ---
// x1, y1, x2, y2 --- Koordinaten des Rechteckes für den
// Farbverlauf
// co1, col2 --- Farben für den Farbverlauf (von .. bis)
// direction --- 0 = horizontaler Verlauf
// <> 0 = vertikaler Verlauf
// ------------------------------------------------------------- //
FUNCTION Farbverlauf: x1, y1, x2, y2, col1, col2, direction
LOCAL i
LOCAL cr1, cg1, cb1
LOCAL cr2, cg2, cb2
LOCAL dr, dg, db
LOCAL red, green, blue
LOCAL count
SplitColor(col1, cr1, cg1, cb1)
SplitColor(col2, cr2, cg2, cb2)
IF direction = 0
count = x2 - x1 + 1
ELSE
count = y2 - y1 + 1
ENDIF
dr = (cr1 - cr2) / count
dg = (cg1 - cg2) / count
db = (cb1 - cb2) / count
FOR i = 0 TO count
red = cr1 - i * dr
green = cg1 - i * dg
blue = cb1 - i * db
IF direction = 0
DRAWLINE x1 + i, y1, x1 + i, y2, RGB(red, green, blue)
ELSE
DRAWLINE x1, y1 + i, x2, y1 + i, RGB(red, green, blue)
ENDIF
NEXT
ENDFUNCTION // FARBVERLAUF
// ------------------------------------------------------------- //
// --- SPLITCOLOR ---
// ------------------------------------------------------------- //
FUNCTION SplitColor: color, BYREF red, BYREF green, BYREF blue
red = bAND(color, 255)
green = bAND(color / 256, 255)
blue = bAND(color / POW(256, 2), 255)
ENDFUNCTION // SPLITCOLOR
// Beispielsprite erstellen
FOR i = 0 TO 19
DRAWRECT i * 5, i * 5, 200 - i * 10, 200 - i * 10, RGB(RND(255), RND(255), RND(255))
NEXT
// Bild in Zeilen aufteilen
DIM wabbel[100]
FOR i = 0 TO 99
GRABSPRITE i, 0, 2 * i, 200, 2
wabbel[i] = i
NEXT
// Hauptprogramm
WHILE TRUE
INC faktor, 1
FOR i = 0 TO 99
DRAWSPRITE wabbel[i], 100 + SIN(faktor + i) * 50, 100 + 2 * i
NEXT
SHOWSCREEN
WEND
Wenn man die SIN-Funktion durch TAN-Funktion ersetzt, ergibt sich ein weiterer ganz netter Effekt.Quotequalitativ hochwertig, pädagogisch wertvoll und gesellschaftlich erwünschtsein. Was man darunter genau zu verstehen hat, wird wohl erst im neuen Jahr konkretisiert.
DIM a[1000]
FOR i = 0 TO 999
a[i] = RND(1000)
NEXT
t1 = GETTIMERALL()
bubblesort(a[])
t2 = GETTIMERALL()
t3 = t2 - t1
PRINT "Zeit für Bubble Sort: " + FORMAT$(10, 2, t3) + " Millisekunden", 0 ,0
SHOWSCREEN
KEYWAIT
WHILE TRUE
x = 0
y = 0
FOR i = 0 TO 999
PRINT a[i], x, y
INC y, 10
IF y > 470
y = 0
INC x, 30
ENDIF
NEXT
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// -=# BUBBLESORT #=-
// ------------------------------------------------------------- //
FUNCTION bubblesort: array[]
LOCAL count = BOUNDS(array[], 0) - 1
LOCAL notsorted = TRUE
LOCAL i, t
WHILE notsorted
notsorted = FALSE
FOR i = 0 TO count - 1
IF array[i] > array[i+1]
t = array[i]
array[i] = array[i+1]
array[i+1] = t
notsorted = TRUE
ENDIF
NEXT
WEND
ENDFUNCTION // BUBBLESORT