吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3626|回复: 12
收起左侧

[Java 原创] 【JAVA】第一次发帖,分享下自己多年前写的桌面小游戏,也可让刚入门Java的借鉴

  [复制链接]
lsy_loren 发表于 2022-9-3 11:45
本帖最后由 lsy_loren 于 2022-9-3 13:58 编辑

源码地址:https://gitee.com/lsy_loren/loren-tetris.git

程序截图:

1

1

2

2



因为第一次发帖,不太知道要注意啥,版规说要贴源码。那就贴一下消行的处理吧。

[Java] 纯文本查看 复制代码
private int removeLine() {
        Block[][] gameMap = this.gameData.getGameMap();
        // 存储需要消除行的Y坐标
        List<Integer> removeYList = new ArrayList<>();
        for (int y = 0; y < gameMap[0].length; y++) {
            boolean remove = true;
            for (Block[] blocks : gameMap) {
                if (blocks[y] == null || !blocks[y].isFrozen()) {
                    remove = false;
                    break;
                }
            }
            if (remove) {
                removeYList.add(y);
            }
        }
        int removeLineCount = removeYList.size();
        if (removeLineCount > 0) {
            if (DataConstant.ENABLE_TWINKLE) { // 消行闪烁
                this.removeLineTwinkle(gameMap, removeYList);
            }
            for (Integer count : removeYList) {
                for (int y = count; y >= 0; y--) {
                    for (int x = 0; x < gameMap.length; x++) {
                        if (y - 1 >= 0) {
                            gameMap[x][y] = gameMap[x][y - 1];
                        } else {
                            gameMap[x][y] = null;
                        }
                    }
                }
            }
        }
        return removeLineCount;
    }




[Java] 纯文本查看 复制代码
/**
     * 消行闪烁
     */
    private void removeLineTwinkle(Block[][] gameMap, List<Integer> removeYList) {
        for (int count = 0; count < DataConstant.REMOVE_LINE_TWINKLE_COUNT; count++) { // 使要消除的行闪烁
            for (int y : removeYList) {
                for (int x = 0; x < gameMap.length; x++) {
                    gameMap[x][y] = (count % 2 == 0) ? null : Block.blockFrozen(x, y);
                }
            }
            // repaint不会立即重绘,有个延时的过程,所以要用paintImmediately立即重绘
            this.gamePanel.paintImmediately(0, 0, this.gamePanel.getWidth(), this.gamePanel.getHeight());
            try {
                TimeUnit.MILLISECONDS.sleep(DataConstant.REMOVE_LINE_TWINKLE_TIME);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

免费评分

参与人数 4威望 +1 吾爱币 +17 热心值 +3 收起 理由
CarlosTo2023 + 1 + 1 这个游戏看起来对入门来说挺实用的
weakUp1 + 1 谢谢@Thanks!
zwhy211 + 1 我很赞同!
苏紫方璇 + 1 + 15 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

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

 楼主| lsy_loren 发表于 2022-11-22 16:37
二十瞬 发表于 2022-11-22 00:21
感觉很多年前 我在贴吧看到有个老哥出了一个 俄罗斯方块的教程视频 和你这个做出来的风格很像啊。

翼神吗?我也看到那个帖子,这个游戏布局就是仿照他的。
二十瞬 发表于 2022-11-22 16:40
lsy_loren 发表于 2022-11-22 16:37
翼神吗?我也看到那个帖子,这个游戏布局就是仿照他的。

哈哈  忘记了  太久了
helloworld2022 发表于 2022-9-3 14:27
hxd97244 发表于 2022-9-3 19:14
很老的游戏啊
ccc007 发表于 2022-9-4 16:19
自制俄罗斯方块
曙光牛 发表于 2022-11-19 10:16
正好现在大三正在学习JAVA  不过现在还没有学完基础,先收藏了- -
dadaliya 发表于 2022-11-20 11:26
值得借鉴,感谢大佬
二十瞬 发表于 2022-11-22 00:21
感觉很多年前 我在贴吧看到有个老哥出了一个 俄罗斯方块的教程视频 和你这个做出来的风格很像啊。  
YouMingChen 发表于 2022-11-23 09:03
这个做了多久,Java图形化好像挺复杂的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

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

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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