#==============================================================================
#
# ●贪吃蛇v1.0
# by 猫哥哥
#==============================================================================
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
#==============================================================================
#
# ●贪吃蛇v1.0
# by 猫哥哥
#==============================================================================
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