love2d制作俄罗斯方块1

(现在有点时间了,继续进行love2d,先做个俄罗斯方块玩玩,由于我是第一次做俄罗斯

方块,可能要几天,你若不想等,就自己写一个吧!2013-5-28)

常见的俄罗斯方块游戏一共有7种方块,每种方块还可以旋转,下图是我绘制的7种方块

的形状和变化,变化时采取顺时针旋转。(我在linux下先用wps画表格,再导出pdf,

最后用gimp处理的,不知到是否有更好的工具)

如上图,我们以向右、向下来设置俄罗斯方块在4×4方块里的坐标,那么第一个方块的坐标即

{0,0,1,0,0,1,1,1} ,分就可以别表示四个点的坐标。我们再给每种方块标号,这样就可以方便旋

转了,另外还可以加上颜色。

那么这七种方块十九个方块的相对坐标为:(方块太多了,点坐标有点乱)

注意,这里的点是有顺序的第一个为x最小点、第二个为y最大点、第三个随便、第四个为y最大点

--颜色
c1={255,0,0}
c2={0,255,0}
c3={0,0,255}
c4={0,255,255}
c5={255,0,255}
c6={255,255,0}
c7={210,180,140}
c8={0,0,0}
--方块坐标 颜色、方块下一个形状在els表里的序号
--两个数字为一个坐标
--第一个为x最小点、第二个为y最大点、第三个随便、第四个为y最大点
Els_a1={0,0,0,1,1,0,1,1,c1,1}

Els_b1={0,0,1,0,2,0,3,0,c2,3}
Els_b2={0,0,0,3,0,1,0,2,c2,2}

Els_c1={0,0,1,1,1,0,2,1,c4,7}
Els_c2={0,1,0,2,1,0,1,1,c4,6}

Els_d1={0,1,1,0,1,1,2,0,c3,5}
Els_d2={0,0,1,2,0,1,1,1,c3,4}

Els_e1={0,0,1,1,1,0,2,0,c5,9}
Els_e2={0,1,1,2,1,1,1,0,c5,10}
Els_e3={0,1,1,1,1,0,2,1,c5,11}
Els_e4={0,1,0,2,0,0,1,1,c5,8}

Els_f1={0,0,0,1,1,0,2,0,c7,17}
Els_f2={0,0,1,2,1,0,1,1,c7,18}
Els_f3={0,1,2,1,1,1,2,0,c7,19}
Els_f4={0,0,0,2,0,1,1,2,c7,16}

Els_g1={0,0,2,1,1,0,2,0,c6,13}
Els_g2={0,2,1,2,1,0,1,1,c6,14}
Els_g3={0,1,1,1,0,0,2,1,c6,15}
Els_g4={0,0,0,2,0,1,1,0,c6,10}

--所有的俄罗斯方块表
els={Els_a1,Els_b1,Els_b2,
    Els_c1,Els_c2,Els_d1,Els_d2,
    Els_e1,Els_e2,Els_e3,Els_e4,
    Els_f1,Els_f2,Els_f3,Els_f4,
    Els_g1,Els_g2,Els_g3,Els_g4}

那么画一个方块的代码如下:

--画一个方块t方块表,x、y在屏幕上的位置
function drawRect(t,x,y)
--保存以前的颜色
    local r,g,b,a=love.graphics.getColor()
    love.graphics.setColor(unpack(t[9]))
    for i=1,8,2 do
    love.graphics.rectangle( "line", x+t[i]*size, y+t[i+1]*size, size, size )
    end
--恢复以前的颜色
    love.graphics.setColor(r,g,b,a)
end

做一个测试,main.lua如下

--方块的大小
size=10 
--颜色
c1={255,0,0}
c2={0,255,0}
c3={0,0,255}
c4={0,255,255}
c5={255,0,255}
c6={255,255,0}
c7={210,180,140}
c8={0,0,0}
--方块坐标 颜色、方块下一个形状在els表里的序号
--两个数字为一个坐标
--第一个为x最小点、第二个为y最大点、第三个随便、第四个为y最大点
Els_a1={0,0,0,1,1,0,1,1,c1,1}

Els_b1={0,0,1,0,2,0,3,0,c2,3}
Els_b2={0,0,0,3,0,1,0,2,c2,2}

Els_c1={0,0,1,1,1,0,2,1,c4,7}
Els_c2={0,1,0,2,1,0,1,1,c4,6}

Els_d1={0,1,1,0,1,1,2,0,c3,5}
Els_d2={0,0,1,2,0,1,1,1,c3,4}

Els_e1={0,0,1,1,1,0,2,0,c5,9}
Els_e2={0,1,1,2,1,1,1,0,c5,10}
Els_e3={0,1,1,1,1,0,2,1,c5,11}
Els_e4={0,1,0,2,0,0,1,1,c5,8}

Els_f1={0,0,0,1,1,0,2,0,c7,17}
Els_f2={0,0,1,2,1,0,1,1,c7,18}
Els_f3={0,1,2,1,1,1,2,0,c7,19}
Els_f4={0,0,0,2,0,1,1,2,c7,16}

Els_g1={0,0,2,1,1,0,2,0,c6,13}
Els_g2={0,2,1,2,1,0,1,1,c6,14}
Els_g3={0,1,1,1,0,0,2,1,c6,15}
Els_g4={0,0,0,2,0,1,1,0,c6,10}

--所有的俄罗斯方块表
els={Els_a1,Els_b1,Els_b2,
    Els_c1,Els_c2,Els_d1,Els_d2,
    Els_e1,Els_e2,Els_e3,Els_e4,
    Els_f1,Els_f2,Els_f3,Els_f4,
    Els_g1,Els_g2,Els_g3,Els_g4}


--画一个方块t方块表,x、y在屏幕上的位置
function drawRect(t,x,y)
--保存以前的颜色
    local r,g,b,a=love.graphics.getColor()
    love.graphics.setColor(unpack(t[9]))
    for i=1,8,2 do
    love.graphics.rectangle( "line", x+t[i]*size, y+t[i+1]*size, size, size )
    end
--恢复以前的颜色
    love.graphics.setColor(r,g,b,a)
end

function love.draw()
  drawRect(Els_d1,100,100)
end

未完待续!


作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/xdao/p/love2d_Tetris_1.html