lsy_loren 发表于 2022-9-3 11:45

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

本帖最后由 lsy_loren 于 2022-9-3 13:58 编辑

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

程序截图:



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

private int removeLine() {
      Block[][] gameMap = this.gameData.getGameMap();
      // 存储需要消除行的Y坐标
      List<Integer> removeYList = new ArrayList<>();
      for (int y = 0; y < gameMap.length; y++) {
            boolean remove = true;
            for (Block[] blocks : gameMap) {
                if (blocks == null || !blocks.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 = gameMap;
                        } else {
                            gameMap = null;
                        }
                  }
                }
            }
      }
      return removeLineCount;
    }



/**
   * 消行闪烁
   */
    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 = (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();
            }
      }
    }

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

自制俄罗斯方块{:1_921:}{:1_921:}

曙光牛 发表于 2022-11-19 10:16

正好现在大三正在学习JAVA不过现在还没有学完基础,先收藏了- - :lol

dadaliya 发表于 2022-11-20 11:26

值得借鉴,感谢大佬

二十瞬 发表于 2022-11-22 00:21

感觉很多年前 我在贴吧看到有个老哥出了一个 俄罗斯方块的教程视频 和你这个做出来的风格很像啊。

YouMingChen 发表于 2022-11-23 09:03

这个做了多久,Java图形化好像挺复杂的
页: [1] 2
查看完整版本: 【JAVA】第一次发帖,分享下自己多年前写的桌面小游戏,也可让刚入门Java的借鉴