Computer Science Canada 3d version of my 2d space game(incomplete) |
Author: | Homer_simpson [ Sat Jan 10, 2009 2:17 am ] |
Post subject: | 3d version of my 2d space game(incomplete) |
it's still not finished controls are : arrow keys to change direction w speed up s slow down a,d are strafe buttons for now all you can do is chase the other ship in 3d space but i'll update it soon |
Author: | Homer_simpson [ Sat Jan 10, 2009 6:44 pm ] |
Post subject: | Re: 3d version of my 2d space game(incomplete) |
i realized that in turing this will turn up really slow so i'll remake this in c++ here's version with more airplane like controls |
Author: | saltpro15 [ Sat Jan 10, 2009 7:25 pm ] |
Post subject: | Re: 3d version of my 2d space game(incomplete) |
well, that just made my day. Can I have a hint as to how you made it? I'd like to do something like this for my final project |
Author: | Zren [ Mon Jan 12, 2009 2:34 am ] |
Post subject: | Re: 3d version of my 2d space game(incomplete) |
Funky, but what's the point of the game (not that flying around in space isn't awesome)? |
Author: | Homer_simpson [ Mon Jan 12, 2009 9:19 pm ] |
Post subject: | Re: 3d version of my 2d space game(incomplete) |
well i was going to make it a dogfight style game but turing is very slow with graphics specially 3d graphics so i decided to make it with c++, but here's the code if any1's interested : Quote: class Homer3Dengine export loadarf, loadraw, moveobject, drawobject, camera, obj, movecamera, vector type dot : record x, y, z : real end record proc assign3d (var d : dot, x, y, z : real) d.x := x d.y := y d.z := z + 10 end assign3d type object : record axy, axz, ayz, cx, cy, cz : real maxpoly : int poly : array 1 .. 1000, 1 .. 3 of dot col : array 1 .. 1000 of int end record var obj : object var vector : dot type cam : record axy, axz, ayz, cx, cy, cz, zoom : real end record var camera : cam camera.cx := 0 camera.cy := 0 camera.cz := 0 camera.axy := 0 camera.axz := 0 camera.ayz := 0 camera.zoom := 300 proc loadarf (filename : string) var file, i : int := 0 var x1, y1, z1, x2, y2, z2, x3, y3, z3 : real var col : int vector.x := 0 vector.y := 0 vector.z := -1 open : file, filename, read loop exit when eof (file) i += 1 read : file, x1, y1, z1, x2, y2, z2, x3, y3, z3, col assign3d (obj.poly (i, 1), x1, y1, z1) assign3d (obj.poly (i, 2), x2, y2, z2) assign3d (obj.poly (i, 3), x3, y3, z3) obj.col (i) := col end loop obj.maxpoly := i /* for i2 : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i2, ii).z += 200 end for end for*/ obj.axy := 0 obj.axz := 0 obj.ayz := 0 end loadarf proc loadraw (filename : string, lines : int) var file : int var x1, y1, z1, x2, y2, z2, x3, y3, z3 : real open : file, filename, get obj.maxpoly := lines for i : 1 .. lines get : file, x1, y1, z1, x2, y2, z2, x3, y3, z3 assign3d (obj.poly (i, 1), x1, y1, z1) assign3d (obj.poly (i, 2), x2, y2, z2) assign3d (obj.poly (i, 3), x3, y3, z3) end for for i : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i, ii).z += 200 end for end for obj.axy := 0 obj.axz := 0 obj.ayz := 0 end loadraw proc rotate (OriginX, OriginY : real, var secondpartX, secondpartY : real, Rotaion : real) var tempx := (((OriginX - secondpartX) * cosd (Rotaion)) + ((OriginY - secondpartY) * sind (Rotaion))) var tempy := (((OriginY - secondpartY) * cosd (Rotaion)) - ((OriginX - secondpartX) * sind (Rotaion))) secondpartY := OriginY - tempy secondpartX := OriginX - tempx end rotate proc findcenter (var x, y, z : real) x := 0.0 y := 0.0 z := 0.0 for i : 1 .. obj.maxpoly for ii : 1 .. 3 x += obj.poly (i, ii).x y += obj.poly (i, ii).y z += obj.poly (i, ii).z end for end for x /= (obj.maxpoly * 3) y /= (obj.maxpoly * 3) z /= (obj.maxpoly * 3) %drawfilloval (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, 10, 10, 12) end findcenter proc draw3ddot (d1, d2, d3 : dot, c, c2 : int, filled : boolean) if d1.z not= 0 and d2.z not= 0 and d3.z not= 0 then % drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, c) % drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c) % drawline (round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c) %drawline (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, 12) var xx : array 1 .. 3 of int var yy : array 1 .. 3 of int xx (1) := round ((d1.x - camera.cx) / ((d1.z - camera.cz) / camera.zoom)) + 320 xx (2) := round ((d2.x - camera.cx) / ((d2.z - camera.cz) / camera.zoom)) + 320 xx (3) := round ((d3.x - camera.cx) / ((d3.z - camera.cz) / camera.zoom)) + 320 yy (1) := round ((d1.y - camera.cy) / ((d1.z - camera.cz) / camera.zoom)) + 200 yy (2) := round ((d2.y - camera.cy) / ((d2.z - camera.cz) / camera.zoom)) + 200 yy (3) := round ((d3.y - camera.cy) / ((d3.z - camera.cz) / camera.zoom)) + 200 Draw.Dot (xx (1), yy (1), white) Draw.Dot (xx (2), yy (2), white) Draw.Dot (xx (3), yy (3), white) end if end draw3ddot proc draw3dpolygon (d1, d2, d3 : dot, c, c2 : int, filled : boolean) var draw := false if d1.z not= 0 and d2.z not= 0 and d3.z not= 0 then % drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, c) % drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c) % drawline (round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c) %drawline (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, 12) var xx : array 1 .. 3 of int var yy : array 1 .. 3 of int if d1.z not= camera.cz and d2.z not= camera.cz and d3.z not= camera.cz and d1.z > camera.cz and d2.z > camera.cz and d3.z > camera.cz then xx (1) := round ((d1.x - camera.cx) / ((d1.z - camera.cz) / camera.zoom)) + 320 xx (2) := round ((d2.x - camera.cx) / ((d2.z - camera.cz) / camera.zoom)) + 320 xx (3) := round ((d3.x - camera.cx) / ((d3.z - camera.cz) / camera.zoom)) + 320 yy (1) := round ((d1.y - camera.cy) / ((d1.z - camera.cz) / camera.zoom)) + 200 yy (2) := round ((d2.y - camera.cy) / ((d2.z - camera.cz) / camera.zoom)) + 200 yy (3) := round ((d3.y - camera.cy) / ((d3.z - camera.cz) / camera.zoom)) + 200 for ii : 1 .. 3 if xx (ii) > 0 and xx (ii) < maxx and yy (ii) > 0 and yy (ii) < maxy then draw := true else draw := false end if end for if draw then if filled then Draw.FillPolygon (xx, yy, 3, c) end if Draw.Polygon (xx, yy, 3, c2) end if end if end if end draw3dpolygon proc drawobject (col, col2, typ : int) if typ = 1 then for i : 1 .. obj.maxpoly draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), col, col2, true) end for end if if typ = 2 then var cc : real for i : 1 .. obj.maxpoly cc := (obj.poly (i, 2).z + obj.poly (i, 1).z + obj.poly (i, 3).z) / 3 draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), (16 + (14 - (round ((cc / 31) mod 14)))), col2, true) end for end if if typ = 3 then for i : 1 .. obj.maxpoly draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), col, col2, false) end for end if if typ = 4 then for i : 1 .. obj.maxpoly draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), obj.col (i), col2, true) end for end if if typ = 5 then var cc : real for i : 1 .. obj.maxpoly cc := (obj.poly (i, 2).z + obj.poly (i, 1).z + obj.poly (i, 3).z) / 3 draw3ddot (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), (16 + (14 - (round ((cc / 31) mod 14)))), col2, false) end for end if end drawobject proc moveobject (s : string, d : real) findcenter (obj.cx, obj.cy, obj.cz) case s of label "xy" : obj.axy += d rotate (0, 0, vector.x, vector.y, d) for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (obj.cx, obj.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d) end for end for label "xz" : rotate (0, 0, vector.x, vector.z, d) obj.axz += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (obj.cx, obj.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d) end for end for label "yz" : rotate (0, 0, vector.y, vector.z, d) obj.ayz += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (obj.cy, obj.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d) end for end for label "x" : for i : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i, ii).x += d end for end for label "y" : for i : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i, ii).y += d end for end for label "z" : for i : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i, ii).z += d end for end for label : end case end moveobject proc movecamera (s : string, d : real) findcenter (obj.cx, obj.cy, obj.cz) var dis := sqrt (((camera.cx - obj.cx) ** 2) + ((camera.cz - obj.cz) ** 2)) case s of label "xy" : camera.axy += d rotate (0, 0, vector.x, vector.y, d) for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (camera.cx, camera.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d) end for end for label "xz" : %vector.x += camera.cx - obj.cx %vector.z += camera.cz - obj.cz rotate (0, 0, vector.x, vector.z, d) %vector.x -= sind (d) * dis %vector.z -= cosd (d) * dis camera.axz += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (camera.cx, camera.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d) %rotate (camera.cx, camera.cz, vector.x, vector.z, d) end for end for label "yz" : camera.ayz += d rotate (0, 0, vector.y, vector.z, d) for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (camera.cy, camera.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d) %rotate (camera.cy, camera.cz, vector.y, vector.z, d) end for end for label "x" : camera.cx += d label "y" : camera.cy += d label "z" : camera.cz += d label "zoom" : camera.zoom += d if camera.zoom = 0 then camera.zoom += d end if label : end case end movecamera end Homer3Dengine class MainEngine export InitiateStars, loadraw, moveobject, drawobject, camera, obj, movecamera const MaxStars := 5 type dot : record x, y, z : real end record proc assign3d (var d : dot, x, y, z : real) d.x := x d.y := y d.z := z + 10 end assign3d type object : record axy, axz, ayz, cx, cy, cz : real maxpoly : int poly : array 1 .. 1000, 1 .. 3 of dot col : array 1 .. 1000 of int end record var obj : object type cam : record axy, axz, ayz, cx, cy, cz, zoom : real end record var camera : cam camera.cx := 0 camera.cy := 0 camera.cz := 0 camera.axy := 0 camera.axz := 0 camera.ayz := 0 camera.zoom := 300 proc InitiateStars () var x1, y1, z1, x2, y2, z2, x3, y3, z3 : real var col : int for i : 1 .. MaxStars for ii : 1 .. 3 assign3d (obj.poly (i, ii), Rand.Int (-5000, 5000), Rand.Int (-5000, 5000), Rand.Int (50, 5000)) end for obj.col (i) := 0 obj.maxpoly := i end for for i2 : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i2, ii).z += 200 end for end for obj.axy := 0 obj.axz := 0 obj.ayz := 0 end InitiateStars proc loadraw (filename : string, lines : int) var file : int var x1, y1, z1, x2, y2, z2, x3, y3, z3 : real open : file, filename, get obj.maxpoly := lines for i : 1 .. lines get : file, x1, y1, z1, x2, y2, z2, x3, y3, z3 assign3d (obj.poly (i, 1), x1, y1, z1) assign3d (obj.poly (i, 2), x2, y2, z2) assign3d (obj.poly (i, 3), x3, y3, z3) end for for i : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i, ii).z += 200 end for end for obj.axy := 0 obj.axz := 0 obj.ayz := 0 end loadraw proc rotate (OriginX, OriginY : real, var secondpartX, secondpartY : real, Rotaion : real) var tempx := (((OriginX - secondpartX) * cosd (Rotaion)) + ((OriginY - secondpartY) * sind (Rotaion))) var tempy := (((OriginY - secondpartY) * cosd (Rotaion)) - ((OriginX - secondpartX) * sind (Rotaion))) secondpartY := OriginY - tempy secondpartX := OriginX - tempx end rotate proc findcenter (var x, y, z : real) x := 0.0 y := 0.0 z := 0.0 for i : 1 .. obj.maxpoly for ii : 1 .. 3 x += obj.poly (i, ii).x y += obj.poly (i, ii).y z += obj.poly (i, ii).z end for end for x /= (obj.maxpoly * 3) y /= (obj.maxpoly * 3) z /= (obj.maxpoly * 3) %drawfilloval (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, 10, 10, 12) end findcenter proc draw3ddot (d1, d2, d3 : dot, c, c2 : int, filled : boolean, i : int) if d1.z not= 0 and d2.z not= 0 and d3.z not= 0 then % drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, c) % drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c) % drawline (round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c) %drawline (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, 12) var xx : array 1 .. 3 of int var yy : array 1 .. 3 of int if d1.z not= camera.cz and d2.z not= camera.cz and d3.z not= camera.cz and d1.z > camera.cz and d2.z > camera.cz and d3.z > camera.cz then xx (1) := round ((d1.x - camera.cx) / ((d1.z - camera.cz) / camera.zoom)) + 320 xx (2) := round ((d2.x - camera.cx) / ((d2.z - camera.cz) / camera.zoom)) + 320 xx (3) := round ((d3.x - camera.cx) / ((d3.z - camera.cz) / camera.zoom)) + 320 yy (1) := round ((d1.y - camera.cy) / ((d1.z - camera.cz) / camera.zoom)) + 200 yy (2) := round ((d2.y - camera.cy) / ((d2.z - camera.cz) / camera.zoom)) + 200 yy (3) := round ((d3.y - camera.cy) / ((d3.z - camera.cz) / camera.zoom)) + 200 for ii : 1 .. 3 if xx (ii) > 0 and xx (ii) < maxx and yy (ii) > 0 and yy (ii) < maxy then Draw.Dot (xx (ii), yy (ii), white) else assign3d (obj.poly (i, ii), camera.cx + Rand.Int (-4500, 4500), camera.cy + Rand.Int (-2500, 2500), camera.cz + Rand.Int (4000, 5000)) end if end for end if end if end draw3ddot proc draw3dpolygon (d1, d2, d3 : dot, c, c2 : int, filled : boolean) if d1.z not= 0 and d2.z not= 0 and d3.z not= 0 then % drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, c) % drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c) % drawline (round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c) %drawline (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, 12) var xx : array 1 .. 3 of int var yy : array 1 .. 3 of int xx (1) := round ((d1.x - camera.cx) / ((d1.z - camera.cz) / camera.zoom)) + 320 xx (2) := round ((d2.x - camera.cx) / ((d2.z - camera.cz) / camera.zoom)) + 320 xx (3) := round ((d3.x - camera.cx) / ((d3.z - camera.cz) / camera.zoom)) + 320 yy (1) := round ((d1.y - camera.cy) / ((d1.z - camera.cz) / camera.zoom)) + 200 yy (2) := round ((d2.y - camera.cy) / ((d2.z - camera.cz) / camera.zoom)) + 200 yy (3) := round ((d3.y - camera.cy) / ((d3.z - camera.cz) / camera.zoom)) + 200 if filled then Draw.FillPolygon (xx, yy, 3, c) end if Draw.Polygon (xx, yy, 3, c2) end if end draw3dpolygon proc drawobject (col, col2, typ : int) if typ = 1 then for i : 1 .. obj.maxpoly draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), col, col2, true) end for end if if typ = 2 then var cc : real for i : 1 .. obj.maxpoly cc := (obj.poly (i, 2).z + obj.poly (i, 1).z + obj.poly (i, 3).z) / 3 draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), (16 + (14 - (round ((cc / 31) mod 14)))), col2, true) end for end if if typ = 3 then for i : 1 .. obj.maxpoly draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), col, col2, false) end for end if if typ = 4 then for i : 1 .. obj.maxpoly draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), obj.col (i), col2, true) end for end if if typ = 5 then var cc : real for i : 1 .. obj.maxpoly cc := (obj.poly (i, 2).z + obj.poly (i, 1).z + obj.poly (i, 3).z) / 3 draw3ddot (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), (16 + (14 - (round ((cc / 31) mod 14)))), col2, false, i) end for end if end drawobject proc moveobject (s : string, d : real) findcenter (obj.cx, obj.cy, obj.cz) case s of label "xy" : obj.axy += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (obj.cx, obj.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d) end for end for label "xz" : obj.axz += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (obj.cx, obj.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d) end for end for label "yz" : obj.ayz += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (obj.cy, obj.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d) end for end for label "x" : for i : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i, ii).x += d end for end for label "y" : for i : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i, ii).y += d end for end for label "z" : for i : 1 .. obj.maxpoly for ii : 1 .. 3 obj.poly (i, ii).z += d end for end for label : end case end moveobject proc movecamera (s : string, d : real) case s of label "xy" : camera.axy += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (camera.cx, camera.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d) end for end for label "xz" : camera.axz += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (camera.cx, camera.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d) end for end for label "yz" : camera.ayz += d for i : 1 .. obj.maxpoly for ii : 1 .. 3 rotate (camera.cy, camera.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d) end for end for label "x" : camera.cx += d label "y" : camera.cy += d label "z" : camera.cz += d label "zoom" : camera.zoom += d if camera.zoom = 0 then camera.zoom += d end if label : end case end movecamera end MainEngine const maxenemy := 10 var chars : array char of boolean var main : ^MainEngine var spike : array 1 .. maxenemy of ^Homer3Dengine for i : 1 .. maxenemy new Homer3Dengine, spike (i) spike (i) -> loadarf ("box.arf") spike (i) -> moveobject ("z", Rand.Int (5000, 10000)) spike (i) -> moveobject ("x", Rand.Int (-500, 500)) spike (i) -> moveobject ("y", Rand.Int (-500, 500)) spike (i) -> moveobject ("yz", Rand.Int (0, 360)) spike (i) -> moveobject ("xz", Rand.Int (0, 360)) spike (i) -> moveobject ("xy", Rand.Int (0, 360)) end for new MainEngine, main main -> InitiateStars colorback (black) cls View.Set ("offscreenonly") color (white) var velocity : real := 40 var tvelocityx, tvelocityy : real := 0 loop Input.KeyDown (chars) if chars (KEY_LEFT_ARROW) then if tvelocityx < 4 then tvelocityx += .4 end if end if if chars (KEY_RIGHT_ARROW) then if tvelocityx > -4 then tvelocityx -= .4 end if end if if chars (KEY_UP_ARROW) then if tvelocityy < 4 then tvelocityy += .4 end if end if if chars (KEY_DOWN_ARROW) then if tvelocityx > -4 then tvelocityy -= .4 end if end if if chars ('a') then for i : 1 .. maxenemy spike (i) -> movecamera ("x", -100) %moves camera in z axis end for main -> movecamera ("x", -100) %moves camera in z axis end if if chars ('d') then for i : 1 .. maxenemy spike (i) -> movecamera ("x", 100) %moves camera in z axis end for main -> movecamera ("x", 100) %moves camera in z axis end if if chars ('w') then if velocity < 150 then velocity += 4 end if end if if chars ('s') then if velocity > 10 then velocity -= 10 end if end if for i : 1 .. maxenemy end for for i : 1 .. maxenemy spike (i) -> moveobject ("xz", 1) spike (i) -> moveobject ("yz", 1) spike (i) -> moveobject ("x", (spike (i) -> vector.x * 50)) %moves camera in z axis spike (i) -> moveobject ("z", (spike (i) -> vector.z * 50)) %moves camera in z axis spike (i) -> moveobject ("y", (spike (i) -> vector.y * 50)) %moves camera in z axis %spike (i) -> moveobject ("z", cosd (spike (i) -> obj.ayz) * 50) %moves camera in z axis spike (i) -> movecamera ("z", velocity) %moves camera in z axis if tvelocityx not= 0 then spike (i) -> movecamera ("xy", tvelocityx) %moves camera in z axis end if if tvelocityy not= 0 then spike (i) -> movecamera ("yz", tvelocityy) %moves camera in z axis end if end for main -> movecamera ("z", velocity) %moves camera in z axis if tvelocityy not= 0 then main -> movecamera ("yz", tvelocityy) %moves camera in z axis tvelocityy += - (tvelocityy / abs (tvelocityy)) / 5 end if if tvelocityx not= 0 then main -> movecamera ("xy", tvelocityx) %moves camera in z axis tvelocityx += - (tvelocityx / abs (tvelocityx)) / 5 end if locate (1, 1) %put "Object coords : ", spike (1) -> vector.x, " / ", spike (1) -> vector.y, " / ", spike (1) -> vector.z, " / " % put "Object angles : ", spike -> obj.axy mod 360, " / ", spike -> obj.axz mod 360, " / ", spike -> obj.ayz mod 360, " / " /*put "Camera coords : ", main -> camera.cx, " / ", main -> camera.cy, " / ", main -> camera.cz, " / " put "Camera angles : ", main -> camera.axy mod 360, " / ", main -> camera.axz mod 360, " / ", main -> camera.ayz mod 360, " / " put "Camera zoom : ", main -> camera.zoom, "X" %*/ % spike -> moveobject ("xz", 1) %rotates the object in xz axis % spike -> moveobject ("yz", 1) %moves object in x axis main -> drawobject (2, 2, 5) %draws the object with color 1 and 10 and in method 1 for i : 1 .. maxenemy spike (i) -> drawobject (2, 14, 1) %draws the object with color 1 and 10 and in method 1 end for View.Update %delay (5) cls end loop |