赞 | 12 |
VIP | 107 |
好人卡 | 6 |
积分 | 4 |
经验 | 31122 |
最后登录 | 2024-6-29 |
在线时间 | 1606 小时 |
Lv2.观梦者 傻♂逼
- 梦石
- 0
- 星屑
- 374
- 在线时间
- 1606 小时
- 注册时间
- 2007-3-13
- 帖子
- 6562
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
作者:猫哥哥
如果作者认为此举有任何不妥,PM我,我亲撤下!
RP爆发!
今天晚上想试写一下贪吃蛇,没想到很容易就写出来了……不知道有没有bug,欢迎大家debug
预览图一张:
- #==============================================================================
- #
- # ●贪吃蛇v1.0
- # by 猫哥哥
- # [email][email protected][/email]
- #==============================================================================
- class Tanchishe
- def initialize
-
- #生成棋盘
- @size = 18
-
- @world = []
- for i in 1..@size
- for j in 1..@size
- @world.push([i,j])
- end
- end
-
- @ox = 60 #原点
- @oy = 40
-
- draw_line((@ox/20)-1 ,(@oy/20)-1)
-
- @worm = {}
- @food = {}
- @balls = []
- @key = 6
- draw_worm(4,8)
- draw_worm(5,8)
- draw_worm(6,8)
- draw_worm(7,8)
- draw_worm(8,8)
- draw_worm(9,8)
- draw_food
- @speed = 5 #值越大,速度越慢
- $FENSHU_WORM = 0
-
- #分数
- @score2 = Sprite.new
- @score2.bitmap = Bitmap.new(200,20)
- @score2.x = @ox +350
- @score2.y = @oy +330
- @score2.bitmap.draw_text(0, 0,200,20,"得分",1)
- @score = Sprite.new
- @score.bitmap = Bitmap.new(200,40)
- @score.x = @ox +350
- @score.y = @oy +350
- score_refresh #刷新分数
-
- @step = 0
- end
-
- def main
-
- loop do
- Graphics.update
- Input.update
- update
- if @step == 1
- move
- end
- end
- end
-
- def score_refresh
- @score.bitmap.clear
- @score.bitmap.draw_text(0, 20,200,20,$FENSHU_WORM.to_s,2 )
- end
- def draw_line(x,y) #描绘边缘
- k = []
- for i in 0..3
- k.push(Sprite.new)
- end
- k[0].bitmap = Bitmap.new(380,10) #上
- k[1].bitmap = Bitmap.new(380,10) #下
- k[2].bitmap = Bitmap.new(10,400) #左
- k[3].bitmap = Bitmap.new(10,400) #右
- for kk in k
- rect = kk.bitmap.rect
- color = Color.new(205,205,205)
- kk.bitmap.fill_rect(rect, color)
- end
- k[0].x = x*20 + 20
- k[0].y = y*20 + 10
- k[1].x = x*20 + 20
- k[1].y = y*20 + 400
- k[2].x = x*20 + 10
- k[2].y = y*20 + 10
- k[3].x = x*20 + 400
- k[3].y = y*20 + 10
- end
-
- def draw(x,y) #描绘形状
- a = Sprite.new
- a.bitmap = Bitmap.new(20,20)
- rect = a.bitmap.rect
- color = Color.new(255,255,255)
- a.bitmap.fill_rect(rect, color)
- a.x = x*20
- a.y = y*20
- end
- def dis_worm(x,y)
- b = @worm[[x,y]]
- b.bitmap.clear
- b.dispose
- @worm.delete([x,y])
- @world.push([x,y])
- end
- def dis_food
- b = @food[1]
- b.bitmap.clear
- b.dispose
- draw_food
- end
-
- def move
- case @key
- when 6
- @head = [@balls[0][0]+1,@balls[0][1]]
- when 2
- @head = [@balls[0][0],@balls[0][1]+1]
- when 4
- @head = [@balls[0][0]-1,@balls[0][1]]
- when 8
- @head = [@balls[0][0],@balls[0][1]-1]
- end
- if @head == @food[0] #吃到食物
- $FENSHU_WORM+=9
- score_refresh
- draw_worm(@head[0],@head[1])
- dis_food
- elsif @balls.include?(@head) == true #碰到自己身体
- finish
- elsif @head[0]<0 or @head[0]>@size or @head[1]<0 or @head[1]>@size #碰到边缘
- finish
- else
- draw_worm(@head[0],@head[1])
- @tail = @balls.pop
- dis_worm(@tail[0],@tail[1])
- end
- wait(@speed)
- end
-
- def wait(n)
- for i in 0..n
- Graphics.update if i > n/2
- end
- end
-
- def update
- if Input.trigger?(Input::C)
- @step = 1
- end
- if Input.trigger?(Input::RIGHT)
- if @key == 4
- @key = 4
- else
- @key = 6
- end
- end
- if Input.trigger?(Input::LEFT)
- if @key == 6
- @key = 6
- else
- @key = 4
- end
- end
- if Input.trigger?(Input::DOWN)
- if @key == 8
- @key = 8
- else
- @key = 2
- end
- end
- if Input.trigger?(Input::UP)
- if @key == 2
- @key = 2
- else
- @key = 8
- end
- end
- end
-
- def draw_worm(x,y) #描绘虫
- a = Sprite.new
- a.bitmap = Bitmap.new(20,20)
- rect = a.bitmap.rect
- color = Color.new(255,255,255)
- color2 = Color.new(155,155,155)
- a.bitmap.fill_rect(rect, color)
- a.bitmap.fill_rect(0,0,20,2,color2)
- a.bitmap.fill_rect(0,18,20,2,color2)
- a.bitmap.fill_rect(0,0,2,20,color2)
- a.bitmap.fill_rect(18,0,2,20,color2)
- a.x = x*20 + @ox
- a.y = y*20 + @oy
- @worm[[x,y]] = a
- @balls.unshift([x,y])
- @world.delete([x,y])
- end
-
- def draw_food #描绘食物
- if @world.size == 0
- finish
- end
- b = @world[rand(@world.size-1)]
- a = Sprite.new
- a.bitmap = Bitmap.new(20,20)
- rect = a.bitmap.rect
- color = Color.new(255,255,255)
- color2 = Color.new(155,155,155)
- a.bitmap.fill_rect(rect, color)
- a.bitmap.fill_rect(0,0,20,2,color2)
- a.bitmap.fill_rect(0,18,20,2,color2)
- a.bitmap.fill_rect(0,0,2,20,color2)
- a.bitmap.fill_rect(18,0,2,20,color2)
- a.x = b[0]*20 + @ox
- a.y = b[1]*20 + @oy
- @food = [b,a]
- end
- def finish
- @score2.dispose
- @score.dispose
- a = "您最后的得分是"
- b = $FENSHU_WORM.to_s
- c = "分"
- p a+b+c
- exit #如果不想游戏结束就退出请把这句##掉
- end
- end
-
- #===========================
- begin
- Font.default_name = (["黑体","宋体"])
- a = Tanchishe.new
- a.main
- end
复制代码 |
|