赞 | 472 |
VIP | 56 |
好人卡 | 75 |
积分 | 409 |
经验 | 124650 |
最后登录 | 2025-3-4 |
在线时间 | 7552 小时 |
Lv5.捕梦者 (管理员) 老黄鸡
- 梦石
- 0
- 星屑
- 40853
- 在线时间
- 7552 小时
- 注册时间
- 2009-7-6
- 帖子
- 13509
 
|
本帖最后由 fux2 于 2011-8-21 16:54 编辑
以下脚本插入到所有脚本最上方XD
传说中因为各种BUG坑了的弹球- class Ball
- attr_accessor:x
- attr_accessor:y
- attr_accessor:vx
- attr_accessor:vy
- attr_accessor:size
- attr_accessor:pass
- attr_accessor:fucked
- def initialize(x=10,y=550,vx=5,vy=-25)
- @x = x
- @y = y
- @vx = vx+rand(7)
- @vy = vy-3+rand(7)
- @size = 5
- @last_size = -1
- @pass = false
- @fucked = false
- @sprite = Sprite.new
- @sprite.bitmap = Bitmap.new(10,10)
- update
- end
- def update
- if @last_size != @size
- re
- @last_size = @size
- end
- @sprite.x = @x unless @sprite.disposed?
- @sprite.y = @y unless @sprite.disposed?
- end
- def re
- @sprite.dispose unless @sprite.disposed?
- @sprite = Sprite.new
- @sprite.bitmap = Bitmap.new(@size*2,@size*2)
- @x -= @size-@last_size
- @y -= @size-@last_size
- for i in 0...360
- @sprite.bitmap.set_pixel(Math::sin(i)*@size+@size,Math::cos(i)*@size+@size,Color.new(255,255,255,255))
- end
- end
- def fuck
- @sprite.dispose
- @fucked = true
- end
- end
- class Block
- attr_accessor:x
- attr_accessor:y
- attr_accessor:width
- attr_accessor:height
- attr_accessor:life
- attr_accessor:last_life
- attr_accessor:fucked
- def initialize(x,y,l)
- @life = l
- @last_life = -1
- @x = x
- @y = y
- @fucked = false
- @width = 40
- @height = 10
- @sprite = Sprite.new
- @sprite.bitmap = Bitmap.new(@width,@height)
- update
- end
- def fuck
- @sprite.dispose
- @fucked = true
- end
- def update
- if @last_life != @life
- re
- @last_life = @life
- end
- @sprite.x = @x if @sprite
- @sprite.y = @y if @sprite
- end
- def re
- @sprite.dispose unless @sprite.disposed?
- @sprite = Sprite.new
- @sprite.bitmap = Bitmap.new(@width,@height)
- @sprite.bitmap.fill_rect(0,0,@width,10,Color.new(150,255,150,255))
- end
- end
- class Player
- attr_accessor:x
- attr_accessor:y
- attr_accessor:width
- attr_accessor:height
- attr_accessor:vx
- attr_accessor:vy
- attr_accessor:ly
- attr_accessor:oriy
- attr_accessor:last_y
- def initialize(x=180,y=440)
- @x = x
- @y = y
- @vx = 0
- @vy = 0
- @oriy = y
- @ly = y+20
- @last_y = 0
- @width = 80
- @height = 10
- @last_width = -1
- @sprite = Sprite.new
- @sprite.bitmap = Bitmap.new(@width,height)
- update
- end
- define_method(:maxspeed){20}
- def update
- if @last_width != @width
- re
- @last_width = @width
- end
- @sprite.x = @x
- @sprite.y = @y
- end
- def re
- @sprite.dispose unless @sprite.disposed?
- @sprite = Sprite.new
- @sprite.bitmap = Bitmap.new(@width,@width)
- @x -= (@width-@last_width)/2
- @sprite.bitmap.fill_rect(0,0,@width,10,Color.new(255,255,255,255))
- end
- end
- class Game
- def initialize
- @ball = []
- @player = Player.new
- @block = Block.new(50,50,1)
- start
- end
- def start
- shoot
- Graphics.freeze
- Graphics.transition
- loop do
- Graphics.update
- Input.update
- update
- end
- end
- def shoot
- @ball<<Ball.new
- end
- def update
- @player.update if @player
- @ball.each{|i| i.update} if @ball
- @block.update if @block
- update_player
- update_ball
- end
- def gameover
- print "GAMEOVER"
- exit
- end
- def update_player
- @player.last_y = @player.y
- case Input.dir4
- when 4
- @player.vx > [email protected] ? @player.vx -= 2 : @player.vx = [email protected]
- when 6
- @player.vx < @player.maxspeed ? @player.vx += 2 : @player.vx = @player.maxspeed
- end
- if Input.press?(Input::C)
- if @player.y < @player.ly
- @player.y +=4
- else
- @player.y = @player.ly
- end
- else
- if @player.y > @player.oriy
- @player.y -=4
- else
- @player.y = @player.oriy
- end
- end
- if Input.press?(Input::B)
- shoot
- end
- if Input.press?(Input::A)
- @player.width+=5
- end
- case @player.vx<=>0
- when -1
- @player.vx += 1
- when 1
- @player.vx -= 1
- end
- if @[email protected]<0
- @player.x = 0
- @[email protected]
- elsif @[email protected][email protected]>640
- @player.x = [email protected]
- @[email protected]
- end
- @player.x += @player.vx
- end
- def update_ball
- power = @player.y - @player.last_y
- @ball.each_with_index{|i,j|
- i.fuck if i.y >= 550
- if i.fucked
- @ball.delete_at(j)
- next
- end
- i.vy += 1
- if i.vy == 0
- case i.vy<=>0
- when -1..0
- i.vy = 1
- when 1
- i.vy = -1
- end
- end
- temp = ytouch(i,@player)
- if i.x+i.size*2+i.vx>@player.x && i.x+i.vx<@[email protected] && temp
- case temp
- when 8
- i.y = @player.y-i.size*2
- i.vy=-i.vy+2+power*2
- i.x+=i.vx
- i.vx+=rand(3)-1
- when 4
- i.x = @player.x-i.size*2
- i.vx=-i.vx
- i.y+=i.vy
- when 6
- i.x = @[email protected]
- i.vx=-i.vx
- i.y+=i.vy
- when 2
- i.y = @player.y+10
- i.vy=-i.vy+2+power*2
- i.x+=i.vx
- i.vx+=rand(3)-1
- end
- else
- i.x+=i.vx
- i.y+=i.vy
- end
- if i.x+i.vx<0
- i.x=0
- i.vx=-i.vx
- end
- if i.x+i.size*2+i.vx>640
- i.x=640-i.size*2
- i.vx=-i.vx
- end
- if i.y+i.vy<0
- i.y=0
- i.vy=-i.vy
- end}
- end
- def ytouch(i,q)
- if i.y+i.vy+i.size*2>=q.y
- for j in [i.y,i.y+i.vy].min..[i.y,i.y+i.vy].max
- if j+i.size*2>=q.y && j<=q.y+q.height
- adax = (j-i.y-i.vy-i.size)*i.vx/i.vy
- return 8 if j+i.size*2==q.y
- return 2 if j == q.y+q.height
- return 4 if i.x+adax<q.x+q.width/2
- return 6 if i.x+adax>=q.x+q.width/2
- end
- end
- end
- return false
- end
- end
- print "press left,right to move , X for shoot, C for beat ,Z for stretch"
- Game.new
复制代码 |
|