// title: game title // author: Fabien Freling // desc: (Major Jam 8) // script: wren import "random" for Random var W = 240 var H = 136 var R = Random.new() class Star { construct new(x, y, size, scrollSpeed, color) { _x = x _y = y _size = size _scrollSpeed = scrollSpeed _color = color } update() { _x = _x - _scrollSpeed } draw() { TIC.circ(_x, _y, _size, _color) } expired { _x + _size < 0 } } class Bullet { construct new(x, y) { _x = x _y = y _speed = 5 } update() { _x = _x + _speed } draw() { TIC.rect(_x, _y, 3, 1, 4) } expired { _x > W } } class Ship { construct new(x, y) { _x = x _y = y _speed = 1 _bullets = [] } update() { if (TIC.btn(0)) { _y = _y - _speed } if (TIC.btn(1)) { _y = _y + _speed } if (TIC.btn(2)) { _x = _x - _speed } if (TIC.btn(3)) { _x = _x + _speed } _x.clamp(0, W) _y.clamp(0, H) if (TIC.btnp(4, 5, 10)) { shoot() } for (b in _bullets) { b.update() } while (_bullets.count > 0 && _bullets[0].expired) { _bullets.removeAt(0) } } draw() { TIC.spr(256, _x, _y, 0, 1, 0, 0, 2, 2) for (b in _bullets) { b.draw() } } shoot() { _bullets.add(Bullet.new(_x + 8, _y + 8)) } } class World { construct new() { _t = 0 _stars = [] _player = Ship.new(W / 2, H / 2) _world_x = 0 _world_y = 0 _world_scroll_speed = 60 / 2 // init background for (i in 0..W) { update() } } update() { _player.update() for (s in _stars) { s.update() } // collect passed stars while (_stars.count > 0 && _stars[0].expired) { _stars.removeAt(0) } // small stars if (_t % 30 == 0) { _stars.add(Star.new(W, R.int(0,H), 1, 1, 12)) } // medium stars var width = 10 var spaceBetween = width * 10 var speed = 0.1 var mediumTick = (spaceBetween + width) / speed if (_t % mediumTick == 0) { _stars.add(Star.new(W, R.int(0,H), width, speed, 13)) } _t = _t + 1 if (_t % _world_scroll_speed == 0) { _world_x = _world_x + 1 } } draw() { var sx = (_t % _world_scroll_speed) / (_world_scroll_speed / 8) TIC.map(_world_x, _world_y, 30 + 1, 17 + 1, -sx, 0) for (s in _stars) { s.draw() } _player.draw() } } class Game is TIC{ state { _state } static start { "start" } static game { "game" } construct new() { _t=0 _x=96 _y=24 _state = Game.start _world = World.new() } TIC() { update() draw() _t=_t+1 } update() { _world.update() } draw() { TIC.cls(0) _world.draw() //TIC.spr(1+((_t%60)/30|0)*2,_x,_y,14,3,0,0,2,2) //TIC.print("HELLO WORLD!",84,84) } } // // 001:eccccccccc888888caaaaaaaca888888cacccccccacc0ccccacc0ccccacc0ccc // 002:ccccceee8888cceeaaaa0cee888a0ceeccca0ccc0cca0c0c0cca0c0c0cca0c0c // 003:eccccccccc888888caaaaaaaca888888cacccccccacccccccacc0ccccacc0ccc // 004:ccccceee8888cceeaaaa0cee888a0ceeccca0cccccca0c0c0cca0c0c0cca0c0c // 005:2222222223312331231123112111211122222222233123312311231121112111 // 017:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec // 018:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee // 019:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec // 020:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee // 033:0000000000000000000000000002200000022000000000000000000000000000 // 034:0000000000000000000000000003300000033000000000000000000000000000 // // // 000:00000000000000000ccc000000eccccc00eeeeee4ddddddd4cccccdd43ddddcc // 001:00000000000000000000000000000000ee990000ddaa9900ddaaaa90ccaaaaa9 // 016:43dddddd4ddddddd4eeeeeee0ccccccc00000000000000000000000000000000 // 017:ddccccccddddddd0eeeeee000000000000000000000000000000000000000000 // // // 014:000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000500000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 // 015:000000000000000000000000000000000000000000000000000000000000000000000000505050000000000050505000000000005050500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 // 016:000000000000000000000000000000000000000000000000000000000000505050505050505050505050505050505050505050505050505050505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 // // // 000:00000000ffffffff00000000ffffffff // 001:0123456789abcdeffedcba9876543210 // 002:0123456789abcdef0123456789abcdef // // // 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304000000000 // // // 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 //