赞 | 0 |
VIP | 133 |
好人卡 | 5 |
积分 | 1 |
经验 | 15036 |
最后登录 | 2017-9-12 |
在线时间 | 190 小时 |
Lv1.梦旅人 彩色的银子
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 190 小时
- 注册时间
- 2006-6-13
- 帖子
- 1361

|
汗``
美兽殿不介意的话看一下我最初的原版
- module STG
- Player = [
- [28, 6],[28, 7],[28, 8],[28, 9],[28,10],[28,11],[28,12],[28,13],
- [28,14],[28,15],[28,16],[28,17],[28,18],[28,19],[28,20],[28,21],
- [29, 6],[30, 6],[31, 6],[31, 7],[31, 8],[31, 9],[31,10],[31,11],
- [31,12],[31,13],[31,14],[31,15],[31,16],[31,17],[31,18],[31,19],
- [31,20],[31,21],[32,21],[33,21],[34,21],[35,21],[36,21],[37,21],
- [37,22],[37,23],[37,24],[37,25],[37,26],[37,27],[38,27],[39,27],
- [40,27],[40,28],[40,29],[40,30],[40,31],[40,32],[40,33],[40,34],
- [41,34],[42,34],[43,34],[43,35],[43,36],[43,37],[43,38],[44,38],
- [45,38],[46,38],[47,38],[48,38],[49,38],[50,38],[51,38],[51,37],
- [51,36],[51,35],[51,34],[51,33],[51,32],[52,32],[53,32],[54,32],
- [54,33],[54,34],[54,35],[54,36],[54,37],[54,38],[54,39],[54,40],
- [54,41],[54,42],[53,42],[52,42],[51,42],[50,42],[49,42],[48,42],
- [47,42],[46,42],[45,42],[44,42],[43,42],[42,42],[41,42],[40,42],
- [39,42],[38,42],[37,42],[36,42],[35,42],[34,42],[33,42],[32,42],
- [31,42],[30,42],[29,42],[28,42],[27,42],[26,42],[25,42],[24,42],
- [23,42],[22,42],[21,42],[20,42],[19,42],[18,42],[17,42],[16,42],
- [15,42],[14,42],[13,42],[12,42],[11,42],[10,42],[9, 42],[8, 42],
- [8, 41],[8, 40],[8, 39],[9, 39],[10,39],[8, 38],[8, 37],[8, 36],
- [8, 35],[8, 34],[8, 33],[8, 32],[8, 31],[9, 31],[10,31],[10,32],
- [10,33],[10,34],[10,35],[10,36],[10,37],[11,37],[12,37],[13,37],
- [14,37],[15,37],[16,37],[17,37],[17,36],[17,35],[17,34],[17,33],
- [17,32],[18,32],[19,32],[19,31],[19,30],[19,29],[20,29],[21,29],
- [21,28],[21,27],[21,26],[21,25],[22,25],[23,25],[24,25],[24,24],
- [24,23],[24,22],[25,22],[26,22],[27,22],[28,22]]
- Enemy = [
- [16, 8],[16, 9],[16,10],[16,11],[16,12],[16,13],[16,14],[16,15],
- [16,16],[15,16],[14,16],[13,16],[12,16],[11,16],[10,16],[9, 16],
- [8, 16],[7, 16],[6, 16],[6, 17],[6, 18],[6, 19],[6, 20],[6, 21],
- [6, 22],[6, 23],[6, 24],[6, 25],[6, 26],[6, 27],[6, 28],[6, 29],
- [6, 30],[6, 31],[6, 32],[6, 33],[6, 34],[6, 35],[7, 35],[8, 35],
- [8, 34],[8, 33],[8, 32],[8, 31],[8, 30],[8, 29],[8, 28],[8, 27],
- [8, 26],[9, 26],[10,26],[11,26],[12,26],[13,26],[14,26],[15,26],
- [15,27],[15,28],[15,29],[15,30],[15,31],[15,32],[15,33],[15,34],
- [15,35],[15,36],[15,37],[15,38],[15,39],[15,40],[15,41],[15,42],
- [16,42],[17,42],[18,42],[19,42],[20,42],[21,42],[22,42],[23,42],
- [24,42],[25,42],[26,42],[27,42],[27,41],[27,40],[27,39],[27,38],
- [27,37],[27,36],[27,35],[27,34],[27,33],[27,32],[27,31],[27,30],
- [27,29],[27,28],[27,27],[27,26],[27,25],[28,25],[29,25],[30,25],
- [31,25],[32,25],[32,26],[32,27],[32,28],[32,29],[32,30],[32,31],
- [32,32],[32,33],[32,34],[32,35],[33,35],[34,35],[35,35],[36,35],
- [36,34],[36,33],[36,32],[36,31],[36,30],[36,29],[36,28],[36,27],
- [36,26],[36,25],[36,24],[36,23],[36,22],[36,21],[36,20],[36,19],
- [36,18],[36,17],[35,17],[34,17],[33,17],[32,17],[31,17],[30,17],
- [29,17],[28,17],[27,17],[26,17],[25,17],[24,17],[24,16],[24,15],
- [24,14],[24,13],[24,12],[24,11],[24,10],[24, 9],[24, 8],[24, 7],
- [24, 6],[24, 5],[24, 4],[24, 3],[24, 2],[23, 2],[22, 2],[21, 2],
- [20, 2],[19, 2],[18, 2],[18, 3],[18, 4],[18, 5],[18, 6],[18, 7],
- [18, 8],[18, 9],[17, 9],[12,27],[12,28],[12,29],[12,30],[29,26],
- [29,27],[16,34],[17,34],[18,34],[18,35],[18,36],[18,37],[18,38],
- [18,39],[18,40],[18,41],[23,41],[23,40],[23,39],[23,38],[23,37],
- [23,36],[23,35],[23,34],[23,33],[24,33],[25,33],[17,26],[18,26],
- [19,26],[20,26],[21,26],[22,26],[23,26],[24,26],[15, 9],[15, 8],
- [15, 7],[15, 6],[15, 5],[15, 4],[15, 3],[16, 3],[17, 3],[20, 3],
- [20, 4],[20, 5],[20, 6],[20, 7],[20, 8],[21, 8],[22, 8],[23, 8]]
- Back = []
- end
-
-
-
-
- module STG
- module Draw
- module_function
- def get_player
- pixel = STG::Player
- bitmap = Bitmap.new(64,64)
- for xy in pixel
- bitmap.set_pixel(xy[0],xy[1],Color.new(255,0,0))
- end
- return bitmap
- end
- def get_enemy
- pixel = STG::Enemy
- bitmap = Bitmap.new(48,48)
- for xy in pixel
- bitmap.set_pixel(xy[0],xy[1],Color.new(255,0,0))
- end
- return bitmap
- end
- def get_bullet
- bitmap = Bitmap.new(2,4)
- bitmap.fill_rect(bitmap.rect, Color.new(0,0,255))
- return bitmap
- end
- def get_back
- bitmap = Bitmap.new(640,480)
- bitmap.fill_rect(bitmap.rect,Color.new(255,255,0))
- return bitmap
- end
- def draw_bitmap(bitmap)
- data = []
- sprite = Sprite.new
- sprite.bitmap = Bitmap.new(2,2)
- sprite.bitmap.fill_rect(sprite.bitmap.rect,Color.new(255,0,0))
- while true
- Graphics.update
- Input.update
- if Input.press?(Input::C)
- bitmap.fill_rect(sprite.x,sprite.y,1,1,Color.new(255,0,0))
- data.push([sprite.x,sprite.y]) if !data.include?([sprite.x,sprite.y])
- end
- if Input.press?(Input::B)
- save_data(data, "pixel.rxdata")
- exit
- end
- case Input.dir4
- when 2
- sprite.y += 1
- when 4
- sprite.x -= 1
- when 6
- sprite.x += 1
- when 8
- sprite.y -= 1
- end
- end
- end
- end
- end
-
-
- module STG
- class Sprite < ::Sprite
- attr_accessor :speed
- attr_accessor :hp
- def initialize(v,type)
- super(v)
- case type
- when 0
- self.bitmap = Draw.get_player
- self.x = 320 - 32
- self.y = 480 - 64
- when 1
- self.bitmap = Draw.get_enemy
- self.y = 0
- self.x = rand(600) + 10
- when 2
- self.bitmap = Draw.get_bullet
- end
- @speed = 2
- end
- def update
- super
- end
- def move_down
- self.y += @speed
- end
- def move_left
- self.x -= @speed
- end
- def move_right
- self.x += @speed
- end
- def move_up
- self.y -= @speed
- end
- def move_lower_left
- self.x -= @speed
- self.y += @speed
- end
- def move_lower_right
- self.x += @speed
- self.y += @speed
- end
- def move_upper_left
- self.x -= @speed
- self.y -= @speed
- end
- def move_upper_right
- self.x += @speed
- self.y -= @speed
- end
- end
- class Bullet < Sprite
- attr_reader :direction
- def initialize(v,d, x, y, target_x=0, target_y=0)
- super(v,2)
- @direction = d
- @speed = 6
- self.x = x
- self.y = y
- if d == 2
- @sx = @speed*(target_x-x) / Math.sqrt((target_x-x)**2+(target_y-y)**2)
- @sy = @speed*(target_y-y) / Math.sqrt((target_x-x)**2+(target_y-y)**2)
- end
- end
- def update
- super
- case @direction
- when 2
- self.x += @sx
- self.y += @sy
- when 8
- move_up
- end
- end
- end
- class Battler
- attr_reader :player
- def initialize
- @viewport1 = Viewport.new(0, 0, 640, 480)
- @back = ::Sprite.new(@viewport1)
- @back.bitmap = STG::Draw.get_back
- @player = Sprite.new(@viewport1, 0)
- @player.speed = 4
- @player.hp = 100
- enemy = Sprite.new(@viewport1, 1)
- enemy.hp = 30
- @enemys = [enemy]
- @bullets = []
- @hpbarsprite = ::Sprite.new(@viewport1)
- @hpbarsprite.bitmap = Bitmap.new(128,16)
- @hpbarsprite.bitmap.fill_rect(@hpbarsprite.bitmap.rect, Color.new(255,255,255))
- @hpsprite = ::Sprite.new(@viewport1)
- @hpsprite.bitmap = Bitmap.new(128,16)
- w = 128 * @player.hp / 100
- @hpsprite.bitmap.fill_rect(0,0,w,16,Color.new(255,0,0))
- main
- end
- def main
- while true
- update
- end
- end
- def update
- rm_update
- player_update
- enemy_update
- input_update
- bullet_update
- end
- def input_update
- if Input.trigger?(Input::C)
- @bullets << Bullet.new(@viewport1,8,(@player.x + @player.bitmap.width / 2) - 4, @player.y)
- end
- end
- def enemy_update
- for enemy in @enemys
- enemy.move_down
- if enemy.hp <= 0
- enemy.dispose
- @enemys.delete(enemy)
- next
- end
- if !enemy.x.between?(0,650) or !enemy.y.between?(0,490)
- enemy.dispose
- @enemys.delete(enemy)
- next
- end
- if (Graphics.frame_count % (rand(30) + 30)) == 0
- @bullets << Bullet.new(@viewport1,2,(enemy.x + enemy.bitmap.width / 2) - 4, enemy.y + enemy.bitmap.height, @player.x, @player.y)
- end
- end
- add_enemy if Graphics.frame_count % 60 == 0
- end
- def add_enemy
- enemy = Sprite.new(@viewport1, 1)
- enemy.hp = 30
- @enemys << enemy
- end
- def bullet_update
- for b in @bullets
- t = false
- b.update
- if b.direction == 2
- if b.x.between?(@player.x,@player.x + @player.bitmap.width)
- if b.y.between?(@player.y,@player.y + @player.bitmap.height)
- @player.hp -= 10
- w = 128 * @player.hp / 100
- @hpsprite.src_rect.set(0,0,w,16)
- b.dispose
- @bullets.delete(b)
- next
- end
- end
- end
- for enemy in @enemys
- if b.direction == 2
- break
- end
- if b.x.between?(enemy.x,enemy.x + enemy.bitmap.width)
- if b.y.between?(enemy.y,enemy.y + enemy.bitmap.height)
- #if enemy.bitmap.get_pixel((enemy.x - b.x).abs, (enemy.y - b.y).abs).alpha != 0
- b.dispose
- @bullets.delete(b)
- enemy.hp -= 10
- t = true
- break
- #end
- end
- end
- end
- if !t and (!b.x.between?(0,644) or !b.y.between?(0,484))
- b.dispose
- @bullets.delete(b)
- end
- end
- end
- def player_update
- if @player.hp <= 0
- exit
- return
- end
- case Input.dir8
- when 2 # 向下移动
- @player.move_down
- when 4 # 向左移动
- @player.move_left
- when 6 # 向右移动
- @player.move_right
- when 8 # 向上移动
- @player.move_up
- when 1 # 向左下移动
- @player.move_lower_left
- when 3 # 向右下移动
- @player.move_lower_right
- when 7 # 向左上移动
- @player.move_upper_left
- when 9 # 向右上
- @player.move_upper_right
- end
- @player.x = [@player.x, 0].max
- @player.x = [@player.x, ([email protected]) + 10].min
- @player.y = [@player.y, 0].max
- @player.y = [@player.y, ([email protected]) + 22].min
- end
- def rm_update
- Graphics.update
- Input.update
- end
- end
- end
- STG::Battler.new
复制代码
除了@speed*(target_x-x) / Math.sqrt((target_x-x)**2+(target_y-y)**2)这个公式外
还要说我其他的在模仿美兽殿的话-__-~||我实在无法接受
其实最开始我是写成
@sx = (@speed / 2) * (target_x - x) / 100
@sy = (@speed / 2) * (target_y - y) / 100
来着``{/pz}
后来觉得很不妥..看了美兽殿的后觉得美兽殿比较好就直接套用了```{/gg}
|
|