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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。