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

  • 相关阅读:
    gitlab的数据库磁盘坏了已经没有办法恢复情况下如何恢复git上的代码
    psql: FATAL: the database system is in recovery mode
    k8s 下 jenkins 分布式部署:利用pipeline动态增加slave节点
    pipeline 流水线:持续部署(docker)-企业微信群通知消息
    查看私有仓库镜像的版本列表
    MyBatis与Hibernate比较
    MyBatis与JDBC的对比
    Java_Ant详解(转载)
    IntelliJ Idea 常用快捷键列表
    隔行换色
  • 原文地址:https://www.cnblogs.com/xdao/p/love2d_Tetris_1.html
Copyright © 2011-2022 走看看