home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 81 / IOPROG_81.ISO / soft / Tools / GLBasic / Esempi_GLBasic / lovegame / Pia3D.gbas < prev    next >
Encoding:
Text File  |  2004-04-28  |  4.9 KB  |  236 lines

  1. // --------------------------------- //
  2. // Project: LoveGame - a 3D sample
  3. // Start: Sunday, January 26, 2003
  4.  
  5. // Settings
  6. MAX_HEARTS = 20
  7.  
  8. // memory used
  9. DIM heart_pos[MAX_HEARTS+1][3]
  10. DIM heart_spd[MAX_HEARTS+1]
  11. DIM girl_pos[2]
  12. DIM girl_ani[2]
  13.  
  14.  
  15.     // Start game
  16.     GOSUB InitGame
  17.     GOSUB MainGame
  18.     
  19.     // highscore table...
  20.     PRINT "Enough love", 50, 100
  21.     SHOWSCREEN
  22.     MOUSEWAIT
  23. END
  24.  
  25.  
  26. // ------------------------------------------------------------- //
  27. // -=#  INITGAME  #=-
  28. // ------------------------------------------------------------- //
  29. SUB InitGame:
  30.  
  31. LOCAL i
  32.     FOR i=0 TO MAX_HEARTS
  33.         heart_pos[i][0] = RND(200) - 100 // X: -1000 <-> +1000
  34.         heart_pos[i][1] = RND(200) - 100 // Y:
  35.         heart_pos[i][2] = RND(1000) + 800 // Z:  800 <-> 1800
  36.         heart_spd[i]    = RND(4)+1
  37.     NEXT
  38.     
  39.     X_LOADOBJ    "heart.ddd", 0
  40.     X_LOADOBJ    "pia.ddd",   1
  41.     LOADSPRITE    "pia.bmp", 1 // Texture for obj. 1
  42.     
  43.     // Background
  44.     LOADBMP "sky.bmp"
  45.     love = 0
  46.     gameover = FALSE
  47.     
  48.     WideScroller("text.txt")
  49. ENDSUB // INITGAME
  50.  
  51.  
  52.  
  53.  
  54. // ------------------------------------------------------------- //
  55. // -=#  MAINGAME  #=-
  56. // ------------------------------------------------------------- //
  57. SUB MainGame:
  58.  
  59.     WHILE TRUE
  60.         GOSUB MoveAll
  61.         GOSUB Show3D
  62.         IF gameover THEN RETURN
  63.     WEND
  64. ENDSUB // MAINGAME
  65.  
  66.  
  67.  
  68. // ------------------------------------------------------------- //
  69. // -=#  MOVEALL  #=-
  70. // ------------------------------------------------------------- //
  71. SUB MoveAll:
  72.  
  73.     delta_time = GETTIMER()
  74. // heartids:
  75.     FOR i=0 TO MAX_HEARTS
  76.         heart_pos[i][2] = heart_pos[i][2] - heart_spd[i]*delta_time/50
  77.         IF heart_pos[i][2] < 0 THEN heart_pos[i][2] = 1000
  78.     NEXT
  79.     
  80. // Ship
  81.     MOUSESTATE mx, my, b1, b2
  82.     IF mx > 110 THEN mx = 110
  83.     IF mx < 90  THEN mx = 90
  84.     IF my > 110 THEN my = 110
  85.     IF my < 90  THEN my = 90
  86.     SETMOUSE 100, 100
  87.  
  88.     mx = (mx-100)/250
  89.     my = (my-100)/250
  90.  
  91. limspeed = 2
  92.  
  93.     girl_ani[0]=girl_ani[0]+mx*delta_time/10
  94.     girl_ani[1]=girl_ani[1]+my*delta_time/10
  95.     IF girl_ani[0]>limspeed  THEN girl_ani[0]=limspeed
  96.     IF girl_ani[0]<-limspeed THEN girl_ani[0]=-limspeed
  97.     IF girl_ani[1]>limspeed  THEN girl_ani[1]=limspeed
  98.     IF girl_ani[1]<-limspeed THEN girl_ani[1]=-limspeed
  99.     girl_pos[0] = girl_pos[0] - girl_ani[0]
  100.     girl_pos[1] = girl_pos[1] - girl_ani[1]
  101.     IF girl_pos[0]<-100 THEN girl_pos[0]=-100
  102.     IF girl_pos[0]> 100 THEN girl_pos[0]= 100
  103.     IF girl_pos[1]<-100 THEN girl_pos[1]=-100
  104.     IF girl_pos[1]> 100 THEN girl_pos[1]= 100
  105.     
  106. // Collision
  107.     FOR i=0 TO MAX_HEARTS
  108.         dp = DistPt(heart_pos[i][0], heart_pos[i][1], heart_pos[i][2], girl_pos[0], girl_pos[1], 0)
  109.         IF (dp < 13)
  110.             love=love + 2
  111.         ENDIF
  112.     NEXT
  113.  
  114. // Game over??
  115.     IF love > 100 THEN gameover = TRUE
  116. ENDSUB // MOVEALL
  117.  
  118.  
  119.  
  120. // ------------------------------------------------------------- //
  121. // -=#  SHOW3D  #=-
  122. // ------------------------------------------------------------- //
  123. SUB Show3D:
  124.     X_MAKE3D 1, 1000, 45
  125.     X_CAMERA girl_pos[0],girl_pos[1],0, 0,0,1000
  126.     ALPHAMODE .1
  127.     fc = .5
  128.     X_SCALING fc, fc, fc
  129.     X_SETTEXTURE 0
  130.     FOR i = 0 TO MAX_HEARTS
  131.         X_MOVEMENT heart_pos[i][0], heart_pos[i][1], heart_pos[i][2]
  132.         X_ROTATION heart_pos[i][2], 100, heart_pos[i][0],heart_pos[i][1]
  133.         X_DRAWOBJ 0, 0
  134.     NEXT
  135.     ALPHAMODE 0
  136.  
  137.     X_SETTEXTURE 1
  138.     fc = .1
  139.     X_SCALING fc, fc, fc
  140.     X_MOVEMENT girl_pos[0], girl_pos[1], 10
  141.     X_ROTATION  60*girl_ani[0]/limspeed+90, 1, 0, 0 // Wings up/down
  142.     X_ROTATION -15*girl_ani[0]/limspeed+90, 0, 1, 0 // Pointing of nose
  143.     X_ROTATION  20*girl_ani[1]/limspeed-150, 1, 0, 0
  144.     X_DRAWOBJ 1, 79
  145.     
  146.     X_MAKE2D
  147.  
  148.     // Energy bar
  149.     ALPHAMODE 1
  150.     FILLRECT 10,10,10+love,30,RGB(255, 0, 0)
  151.     ALPHAMODE 0
  152.     DRAWLINE 10,10, 110,10,RGB(255,255,255)
  153.     DRAWLINE 10,30, 110,30,RGB(255,255,255)
  154.     DRAWLINE 10,10,  10,30,RGB(255,255,255)
  155.     DRAWLINE 110,10,110,30,RGB(255,255,255)
  156.     PRINT "Love", 20, 10
  157.     MOUSESTATE mx, my, b1, b2
  158.     SHOWSCREEN
  159. ENDSUB // SHOW3D
  160.  
  161.  
  162.  
  163.  
  164. // ------------------------------------------------------------- //
  165. // -=#  DISTPT  #=-
  166. // ------------------------------------------------------------- //
  167. FUNCTION DistPt: x1, y1, z1, x2, y2, z2
  168.     // LOCAL def:
  169.     // x1, y1, z1, x2, y2, z2, 
  170.  
  171.     LOCAL dx, dy, dz
  172.     dx = x1-x2
  173.     dy = y1-y2
  174.     dz = z1-z2
  175.     
  176.     // ( sqr(dx^2+dy^2) )^2 + dz^2
  177.     dist = SQR(dx*dx + dy*dy)
  178.     RETURN SQR(dist*dist + dz*dz)
  179. ENDFUNCTION // z2
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188. // ------------------------------------------------------------- //
  189. //   --- WIDESCROLLER ---
  190. // ------------------------------------------------------------- //
  191. FUNCTION WideScroller: filename$
  192.     // Diese Variablen sind als LOCAL definiert:
  193.     // filename$, void
  194.     LOCAL text$[], a$, maxline, z, dz, dx, y, fx, fy
  195.     DIM text$[256]
  196.  
  197.     GETFONTSIZE fx, fy // Neuer, guter Befehl / New and good command (24.10.01)
  198.  
  199.     fy=fy+8 // Platz lassen / Leave space
  200.  
  201.     FOR i=0 TO 255
  202.         GETFILE filename$, i, a$
  203.         IF a$="NO_FILE" THEN RETURN
  204.         IF a$="NO_DATA" THEN GOTO skip
  205.         text$[i]=a$
  206.         maxline=maxline+1
  207.     NEXT
  208.  
  209.     skip:
  210.     FOR zt=480 TO 0-maxline*fy STEP -0.4 // AufwΣrts / Move upwards
  211.         FOR z=0 TO maxline-1
  212.             dz=z*20+zt
  213.             dx=(640-LEN(text$[z])*fx)/2
  214.             IF dz<480 AND dz>-20 THEN PRINT text$[z], dx, dz
  215.         NEXT
  216.         SHOWSCREEN
  217.         MOUSESTATE mx, my, b1, b2
  218.         IF b1 THEN RETURN
  219.     NEXT
  220. ENDFUNCTION // WIDESCROLLER
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.