【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();
}
}
} 二十瞬 发表于 2022-11-22 00:21
感觉很多年前 我在贴吧看到有个老哥出了一个 俄罗斯方块的教程视频 和你这个做出来的风格很像啊。
翼神吗?我也看到那个帖子,这个游戏布局就是仿照他的。 lsy_loren 发表于 2022-11-22 16:37
翼神吗?我也看到那个帖子,这个游戏布局就是仿照他的。
哈哈忘记了太久了 下载下来用用。。。 很老的游戏啊 自制俄罗斯方块{:1_921:}{:1_921:} 正好现在大三正在学习JAVA不过现在还没有学完基础,先收藏了- - :lol 值得借鉴,感谢大佬 感觉很多年前 我在贴吧看到有个老哥出了一个 俄罗斯方块的教程视频 和你这个做出来的风格很像啊。 这个做了多久,Java图形化好像挺复杂的
页:
[1]
2