吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3572|回复: 40
收起左侧

[易语言 原创] 俄罗斯方块1.0

[复制链接]
gulang20230313 发表于 2023-3-18 19:17
本帖最后由 gulang20230313 于 2023-3-23 19:34 编辑

小伙伴们,闲来无事,和大家一起来玩俄罗斯方块啦
QQ截图20230318185101.jpg
大家都知道,俄罗斯方块是要反转成合适的方向,从而消失得分的,这是主线,
因此,只需要记录每类块的 4 种 4 X 4 翻转结构。
如果某种翻转结构数据以 255 开头,表示该结构不存在。
那么,就得到了块数据:

块数据 = { 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }  ' 竖条, 255 表示无此翻转状态。
块数据 = 块数据 + { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }  ' 2 字形
块数据 = 块数据 + { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }  ' 7 字形
块数据 = 块数据 + { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }  ' 丁字形
块数据 = 块数据 + { 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }  ' 反 7 字形
块数据 = 块数据 + { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }  ' 反 2 字形
块数据 = 块数据 + { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }  ' 方块
有了主线,就好办了,咱们做一个尺寸为7X4X4,分别记录7种块的4种位置数据(记录画各种块时所使用的画板)
0 为第 1 关,依此类推
那么,先建立七个画板:
连续赋值 (#背景图片, 底图, 当前关标签.底图, 提示画板.底图, 标题标签.底图, 标签1.底图, 总分标签.底图, 过关还差分数标签.底图)  ' 添加底图。
方块画板 [1] = 画板1
方块画板 [2] = 画板2
方块画板 [3] = 画板3
方块画板 [4] = 画板4
方块画板 [5] = 画板5
方块画板 [6] = 画板6
方块画板 [7] = 画板7
初始化块数据 (块数据)
微信截图_20230318185035.jpg
检查正确得分及设置落下的方向

检查 (欲进入关 ≥ 0 且 欲进入关 < 15)
暂停 = 假
置随机数种子 ()
当前关 = 欲进入关
过关还差分数 = 欲进入关 × 500 + 500  ' 过关分数
下落时钟.时钟周期 = 500 - 欲进入关 × 25  ' 下落速度
当前关标签.标题 = “第” + 数值到大写 (当前关 + 1, 真) + “关”
过关还差分数标签.标题 = “ 过关还差 ” + 到文本 (过关还差分数) + “ 分”
数组清零 (游戏区堆积块)  ' 将所有现有堆积块清除
游戏区画板.清除 ()
初始堆积层数 = 欲进入关 \ 2  ' 根据当前关来设置初始堆积块。
.变量循环首 (21 - 初始堆积层数, 20, 1, 垂直位置)
    .计次循环首 (10, 水平位置)
        .如果真 (水平位置 ≠ 垂直位置 且 取随机数 (0, 2) = 0)
            游戏区堆积块 [垂直位置] [水平位置] = 1
            画方块 (游戏区画板, 1, (水平位置 - 1) × 20, (垂直位置 - 1) × 20, 真)
        .如果真结束


    .计次循环尾 ()
.变量循环尾 ()
即将下落块 = 0
准备下落 ()
游戏区画板.获取焦点 ()  ' 将输入焦点转移到游戏区画板。
下落块位置选择:
下落块 = 选择 (即将下落块 ≠ 0, 即将下落块, 取随机数 (0, 6) × 4 + 1)  ' 取得当前下落块。
即将下落块 = 取随机数 (0, 6) × 4 + 1  ' 准备即将下落块。

下落垂直位置 = 1  ' 初始下落位置

下落水平位置 = 4

' 查看是否还可以下落。

偏移值 = (下落块 - 1) × 16 + 1

.变量循环首 (下落垂直位置, 下落垂直位置 + 3, 1, 垂直位置)

    .变量循环首 (下落水平位置, 下落水平位置 + 3, 1, 水平位置)

        .如果真 (块数据 [偏移值] ≠ 0)

            .如果真 (游戏区堆积块 [垂直位置] [水平位置] ≠ 0)

                ' 如果不能下落则说明已经堆满。

                .如果真 (音乐暂停 = 假)

                    播放音乐 (#失败, )

                .如果真结束

                下落时钟.时钟周期 = 0

                游戏区画板.定位写出 (20, 180, “你输掉了此局!”)

                开始按钮.获取焦点 ()

                返回 ()

            .如果真结束

            游戏区堆积块 [垂直位置] [水平位置] = 1

        .如果真结束

        偏移值 = 偏移值 + 1

    .变量循环尾 ()

.变量循环尾 ()

画方块 (游戏区画板, 下落块, 60, 0, 假)

提示画板.重画 ()

循环往复
.判断开始 (方块类型 = 0)  ' 如果为空块,则返回。
    返回 ()
.默认
    图片画板 = 方块画板 [当前关 % 7 + 1]  ' 取得画当前关的块的画板。
    .如果 (仅画单一方块 = 真)
        图片画板.复制 (0, 0, 20, 20, 画板, 绘画左边, 绘画顶边, )
    .否则
        偏移值 = (方块类型 - 1) × 16 + 1
        .计次循环首 (4, 垂直位置)
            .计次循环首 (4, 水平位置)
                .如果真 (块数据 [偏移值] ≠ 0)
                    图片画板.复制 (0, 0, 20, 20, 画板, 绘画左边 + (水平位置 - 1) × 20, 绘画顶边 + (垂直位置 - 1) × 20, )
                .如果真结束
                偏移值 = 偏移值 + 1
            .计次循环尾 ()
        .计次循环尾 ()
    .如果结束
.判断结束
上一关、下一关判断:

垂直位置 = 下落垂直位置 + 3
.如果真 (垂直位置 > 20)
    垂直位置 = 20
.如果真结束
容器3 = 下落垂直位置
.判断循环首 (垂直位置 ≥ 容器3)
    .计次循环首 (10, 水平位置)
        .如果真 (游戏区堆积块 [垂直位置] [水平位置] = 0)
            跳出循环 ()
        .如果真结束


    .计次循环尾 ()
    .如果 (水平位置 > 10)  ' 此层是否被堆满
        消除层数 = 消除层数 + 1
        游戏区画板.复制 (0, 0, 200, (垂直位置 - 1) × 20, 游戏区画板, 0, 20, )  ' 下移上面的所有层。
        .如果真 (音乐暂停 = 假)
            播放音乐 (#消层, )
        .如果真结束
        .计次循环首 (10, 容器2)  ' 清除顶层。
            .如果真 (游戏区堆积块 [1] [容器2] ≠ 0)
                游戏区画板.填充矩形 ((容器2 - 1) × 20, 0, 容器2 × 20 + 1, 21)
            .如果真结束


        .计次循环尾 ()
        .变量循环首 (垂直位置 - 1, 1, -1, 容器1)  ' 下移上面层的数据。
            .计次循环首 (10, 容器2)
                游戏区堆积块 [容器1 + 1] [容器2] = 游戏区堆积块 [容器1] [容器2]
            .计次循环尾 ()
        .变量循环尾 ()
        .计次循环首 (10, 容器2)  ' 清除顶层的数据。
            游戏区堆积块 [1] [容器2] = 0
        .计次循环尾 ()
        容器3 = 容器3 + 1  ' 下移目的层
    .否则
        垂直位置 = 垂直位置 - 1
    .如果结束


.判断循环尾 ()
' 根据一次消除层的数目来给出不同的分数。
.如果真 (消除层数 = 0)
    返回 (假)
.如果真结束
.判断开始 (消除层数 = 1)
    容器1 = 10
.判断 (消除层数 = 2)
    容器1 = 40
.判断 (消除层数 = 3)
    容器1 = 80
.默认
    容器1 = 160
.判断结束
总分 = 总分 + 容器1
总分标签.标题 = “ 总分: ” + 到文本 (总分)
过关还差分数 = 过关还差分数 - 容器1
.如果 (过关还差分数 ≤ 0)  ' 是否已经过关
    .如果 (当前关 = 14)  ' 是否为最后一关
        下落时钟.时钟周期 = 0
        游戏区画板.定位写出 (0, 180, “恭喜你全部通关!”)
        图片框1.可视 = 真
        图片框1.刷新显示 ()
        延时 (3000)
        图片框1.可视 = 假
        开始按钮.获取焦点 ()
    .否则
        ' 寻找有块的最顶层
        .计次循环首 (20, 垂直位置)
            .计次循环首 (10, 水平位置)
                .如果真 (游戏区堆积块 [垂直位置] [水平位置] ≠ 0)
                    跳出循环 ()
                .如果真结束


            .计次循环尾 ()
            .如果真 (水平位置 ≤ 10)
                跳出循环 ()
            .如果真结束


        .计次循环尾 ()
        ' 动态消层,表示过关。
        .变量循环首 (20, 垂直位置, -1, 容器1)
            游戏区画板.复制 (0, 0, 200, 380, 游戏区画板, 0, 20, )
            延时 (50)
        .变量循环尾 ()
        延时 (500)
        .如果真 (音乐暂停 = 假)
            播放音乐 (#过关, )
        .如果真结束
        ' 本关已过
        进入游戏指定关 (当前关 + 1)  ' 进入下一关
    .如果结束
    返回 (真)
.否则
    过关还差分数标签.标题 = “ 过关还差 ” + 到文本 (过关还差分数) + “ 分”
.如果结束
返回 (假)
偏移值设置

.如果真 (暂停 = 真 或 下落块 = 0)
    返回 ()

.如果真结束

偏移值2 = (下落块 - 1) × 16 + 1

偏移值1 = 偏移值2 + 16

.计次循环首 (4, 水平位置)

    .计次循环首 (4, 垂直位置)

        .如果真 (块数据 [偏移值1 - 垂直位置 × 4] ≠ 0)

            垂直位置 = 5 - 垂直位置

            .如果真 (下落垂直位置 + 垂直位置 > 20 或 游戏区堆积块 [下落垂直位置 + 垂直位置] [下落水平位置 + 水平位置 - 1] ≠ 0)

                .如果真 (消除整层 () = 假)

                    下落块 = 0

                    准备下落 ()

                .如果真结束

                返回 ()

            .如果真结束

            跳出循环 ()

        .如果真结束


    .计次循环尾 ()

    偏移值1 = 偏移值1 + 1

.计次循环尾 ()

偏移值1 = 偏移值2

.变量循环首 (下落垂直位置, 下落垂直位置 + 3, 1, 垂直位置)

    .变量循环首 (下落水平位置, 下落水平位置 + 3, 1, 水平位置)

        .如果真 (块数据 [偏移值1] ≠ 0)

            游戏区堆积块 [垂直位置] [水平位置] = 0

            .如果真 (垂直位置 = 下落垂直位置 或 块数据 [偏移值1 - 4] = 0)

                游戏区画板.填充矩形 ((水平位置 - 1) × 20, (垂直位置 - 1) × 20, 水平位置 × 20 + 1, 垂直位置 × 20 + 1)

            .如果真结束


        .如果真结束

        偏移值1 = 偏移值1 + 1

    .变量循环尾 ()

.变量循环尾 ()

下落垂直位置 = 下落垂直位置 + 1

.变量循环首 (下落垂直位置, 下落垂直位置 + 3, 1, 垂直位置)

    .变量循环首 (下落水平位置, 下落水平位置 + 3, 1, 水平位置)

        .如果真 (块数据 [偏移值2] ≠ 0)

            游戏区堆积块 [垂直位置] [水平位置] = 1

            .如果真 (垂直位置 = 下落垂直位置 + 3 或 块数据 [偏移值2 + 4] = 0)

                画方块 (游戏区画板, 下落块, (水平位置 - 1) × 20, (垂直位置 - 1) × 20, 真)

            .如果真结束


        .如果真结束

        偏移值2 = 偏移值2 + 1

    .变量循环尾 ()

.变量循环尾 ()

下落水平、垂直位置及偏移值
.如果真 (下落水平位置 = 10)
    返回 ()
.如果真结束
偏移值1 = (下落块 - 1) × 16 + 1
偏移值2 = 偏移值1
.计次循环首 (4, 垂直位置)
    .变量循环首 (4, 1, -1, 水平位置)
        .如果真 (块数据 [偏移值1 + 水平位置 - 1] ≠ 0)
            .如果真 (下落水平位置 + 水平位置 > 10 或 游戏区堆积块 [下落垂直位置 + 垂直位置 - 1] [下落水平位置 + 水平位置] ≠ 0)
                返回 ()
            .如果真结束
            跳出循环 ()
        .如果真结束


    .变量循环尾 ()
    偏移值1 = 偏移值1 + 4
.计次循环尾 ()
偏移值1 = 偏移值2
.变量循环首 (下落水平位置, 下落水平位置 + 3, 1, 水平位置)
    .变量循环首 (下落垂直位置, 下落垂直位置 + 3, 1, 垂直位置)
        .如果真 (块数据 [偏移值1 + (垂直位置 - 下落垂直位置) × 4] ≠ 0)
            游戏区堆积块 [垂直位置] [水平位置] = 0
            .如果真 (水平位置 = 下落水平位置 或 块数据 [偏移值1 + (垂直位置 - 下落垂直位置) × 4 - 1] = 0)
                游戏区画板.填充矩形 ((水平位置 - 1) × 20, (垂直位置 - 1) × 20, 水平位置 × 20 + 1, 垂直位置 × 20 + 1)
            .如果真结束


        .如果真结束


    .变量循环尾 ()
    偏移值1 = 偏移值1 + 1
.变量循环尾 ()
下落水平位置 = 下落水平位置 + 1
.变量循环首 (下落水平位置, 下落水平位置 + 3, 1, 水平位置)
    .变量循环首 (下落垂直位置, 下落垂直位置 + 3, 1, 垂直位置)
        .如果真 (块数据 [偏移值2 + (垂直位置 - 下落垂直位置) × 4] ≠ 0)
            游戏区堆积块 [垂直位置] [水平位置] = 1
            .如果真 (水平位置 = 下落水平位置 + 3 或 块数据 [偏移值2 + (垂直位置 - 下落垂直位置) × 4 + 1] = 0)
                画方块 (游戏区画板, 下落块, (水平位置 - 1) × 20, (垂直位置 - 1) × 20, 真)
            .如果真结束


        .如果真结束


    .变量循环尾 ()
    偏移值2 = 偏移值2 + 1
.变量循环尾 ()
就是这个思路,就可以开心的玩啦,这里给大家把源码和成品软件都奉上,知道了思路,学习起来就更容易上手啦

源码:https://wwdy.lanzouf.com/iRDP70qfzdoj
易语言编译的成品软件容易感染病毒,给大家带来不便,这里不在发表成品,提供源码和大家一起学习编程的思路
我也会不时的进行电脑全盘杀毒,谢谢大家的支持!

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
Natura + 1 你当我傻..... e\samples\游戏软件\其它\俄罗斯方块.e 吴涛编写的专业级俄.
junjia215 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

云在天 发表于 2023-3-19 00:37
经人工核查,该用户发布的成品捆绑1-2个蠕虫,远控木马

请使用者使用杀毒软件全盘杀毒。

免费评分

参与人数 1吾爱币 +1 收起 理由
kk1212 + 1 谢谢@Thanks!

查看全部评分

kk1212 发表于 2023-3-19 07:45
 楼主| gulang20230313 发表于 2023-3-18 21:03
sjt5396 发表于 2023-3-18 20:26
带病毒?????

楼主担心可以尽量少下载易语言类程序杀毒软件检查报毒通常是特征扫描,只有满足特征符合就会报毒,不会管你是用什么语言编写的。但通常易语言编译生成的EXE在运行时,绝大多数情况下CPU指令运行在支持库领空(仅少数在EXE领空,这与其它编译器生成的EXE的行为有很大不同),给杀毒软件查杀和机器分析造成了较大阻力,而且由于易语言影响力远不如JAVA/C/C++,很难吸引杀软厂商重视,从而导致误报时有发生。
wdz2018 发表于 2023-3-18 19:38
受教了,成品源码和整个流程明明白白
 楼主| gulang20230313 发表于 2023-3-18 19:43
wdz2018 发表于 2023-3-18 19:38
受教了,成品源码和整个流程明明白白

大佬言重啦
wdz2018 发表于 2023-3-18 19:47

不敢不敢,说实在的我不懂这方面的
 楼主| gulang20230313 发表于 2023-3-18 19:51
wdz2018 发表于 2023-3-18 19:47
不敢不敢,说实在的我不懂这方面的

相互学习,共同进步
yestodayonece 发表于 2023-3-18 19:56
学习了,我也来试试。
kk159 发表于 2023-3-18 19:59
这么复杂么
chizha 发表于 2023-3-18 20:00
感谢分享,学习了
头像被屏蔽
mokson 发表于 2023-3-18 20:01
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| gulang20230313 发表于 2023-3-18 20:03
mokson 发表于 2023-3-18 20:01
楼主这几天真高产。

被你发现啦周末嘛,给大家分享一些好的东西,独乐乐不如众乐乐
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表