Skip to content

Instantly share code, notes, and snippets.

@nicklegr
Created April 21, 2012 10:09
Show Gist options
  • Save nicklegr/2436327 to your computer and use it in GitHub Desktop.
Save nicklegr/2436327 to your computer and use it in GitHub Desktop.
enchant.js haiyoru_something
enchant()
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
class UhNyah extends Game
constructor: () ->
super(SCREEN_WIDTH, SCREEN_HEIGHT)
@enemies = []
@fps = 60
@scale = 1
@preload('player.png')
@preload('enemy.png')
@preload('bullet.png')
@preload('effect_die.png')
@onload = () ->
new Player(this)
new Generator(this)
@rootScene.backgroundColor = '#ffffff'
add_enemy: (enemy) ->
@enemies.push(enemy)
@rootScene.addChild(enemy)
remove_enemy: (enemy) ->
@enemies = @enemies.filter (x) -> x isnt enemy
@rootScene.removeChild(enemy)
class Player extends Sprite
WIDTH = 128
HEIGHT = 32
constructor: (game, x, y) ->
super(WIDTH, HEIGHT)
@x = 8;
@y = 8;
@image = game.assets['player.png'];
@frame_count = 0
on_enterframe = (e) ->
# anim
if @frame_count < 30
@frame = 0
else
@frame = 1
if @frame_count == 30
new Bullet(game, @x + 100, @y, 4, -2)
if @frame_count >= 60
@frame_count = 0
@frame_count++
# check input (from key or pad) on every frame
if game.input.right
@x += 2
if game.input.left
@x -= 2
if game.input.up
@y -= 2
if game.input.down
@y += 2
# 画面外に出ないように
@x = 0 if @x < 0
@x = SCREEN_WIDTH - WIDTH if @x >= SCREEN_WIDTH - WIDTH
@y = 0 if @y < 0
@y = SCREEN_HEIGHT - HEIGHT if @y >= SCREEN_HEIGHT - HEIGHT
@addEventListener('enterframe', on_enterframe)
game.rootScene.addChild(this)
class Enemy extends Sprite
STATE_WAIT = 0
STATE_MOVE = 1
STATE_DAMAGE = 2
constructor: (game, x, y) ->
super(140, 32)
@game = game
@x = x
@y = y
@sx = 0
@sy = 0
@hp = 3
@image = game.assets['enemy.png']
@frame_count = 0
@state = STATE_WAIT
on_enterframe = (e) ->
switch @state
# 待機
when STATE_WAIT
if @frame_count > 30
@state = STATE_MOVE
@frame_count = 0
# もぞもぞ動く
when STATE_MOVE
if @frame_count > 15
@state = STATE_WAIT
@frame = 0
@frame_count = 0
if @frame_count % 4 < 2
@frame = 0
else
@frame = 1
if @frame_count % 2 == 0
@x -= (1 + Math.random() * 0.5) * 4
@y -= (Math.random() * 2 - 0.5) * 4
# ダメージノックバック
when STATE_DAMAGE
if @frame_count > 15
@state = STATE_WAIT
@frame_count = 0
@x += @sx
@y += @sy
@sx *= 0.8
@sy *= 0.8
# 画面外で自滅
if @x < -140
game.remove_enemy(this)
@frame_count++
@addEventListener('enterframe', on_enterframe)
game.add_enemy(this)
damage: (sx, sy) ->
@hp--
if @hp == 0
@game.rootScene.addChild(new EffectDie(@game, @x, @y))
@game.remove_enemy(this)
else
@state = STATE_DAMAGE
@sx = sx
@sy = sy
@frame_count = 0
class Bullet extends Sprite
constructor: (game, x, y, sx, sy) ->
super(20, 20)
@x = x
@y = y
@sx = sx
@sy = sy
@image = game.assets['bullet.png']
@frame_count = 0
on_enterframe = (e) ->
@x += @sx
@y += @sy
@sy += 0.08
for enemy in game.enemies
if @intersect(enemy)
enemy.damage(@sx, @sy)
game.rootScene.removeChild(this)
break
@addEventListener('enterframe', on_enterframe)
game.rootScene.addChild(this)
class EffectDie extends Sprite
constructor: (game, x, y) ->
super(100, 75)
@x = x
@y = y
@scale_delta = 0.05
@image = game.assets['effect_die.png']
@frame_count = 0
on_enterframe = (e) ->
@scaleX += @scale_delta
@scaleY += @scale_delta
@scale_delta *= 0.8
if @frame_count == 45
game.rootScene.removeChild(this)
@frame_count++
@addEventListener('enterframe', on_enterframe)
game.rootScene.addChild(this)
class Generator extends Sprite
constructor: (game) ->
super(1, 1)
@frame_count = 0
on_enterframe = (e) ->
if @frame_count > 120
new Enemy(game, 500, 240 + Math.random() * 240)
@frame_count = 0
@frame_count++
@addEventListener('enterframe', on_enterframe)
game.rootScene.addChild(this)
window.onload = () ->
game = new UhNyah()
game.start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment