做了一个Java版的俄罗斯方块 我最近做了一个Java版的俄罗斯方块,有兴趣的朋友可以去http://code.google.com/p/java-tetris-game/下载啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢,已经下载,并且play。可以提点小意见1.每次出现的图形颜色最好可以随机。2.一般情况当用户按向下键是,应当让方块立即移动到,最下面而不是慢慢地移动。谢谢。 下载下来的JAR文件中已经包含了源文件因为实在太小了,所以就一起打包 问的很好,我也在思考这两个问题,我再补充几点:1、方块可以是很炫的PNG图片,每种类型都不同,未完成2、方块下落速度应该快一点,我也意识到了,谢谢提醒3、程序还有一个bug,就是方块在快要接近下面时,如果不停的按向上键,会出现“意想不到”的情况,这个也未解决 挺好玩的,不过一直按上确实出bug了。可以把其他的方块打没。建议改成加强版俄罗斯方块 我也在现学现用JavaME做个手机版的,我安装了Nokia和Motorola的模拟器,故而每开发一步都要在两个模拟器上跑跑,做的还真挺慢的,没有成型,所以也就没有放上去 我前不久写过 所以下第二个方块就给你找到个bug 偶不是来拆台的 呵呵 你也可以试试 就是方块在变形的时候 没有做判断 当旁边有方块时 如果下落的方块变形 会重叠在一起 我开了new feature 给你 呵呵 之前我也做过一个你这个换肤是一大亮点,学到了一招不过:功能暂且不说,我是来学习的,Down下来点几下就看源代码了14个java文件,居然没有一行注释,不会是发布出来之前删掉了吧?14个文件居然没有组织一下包结构,连java和class都放在一起!如果楼主是新手,应该表扬基本功不错,钻得够深!否则也没什么好说的啦回头我也发一下我做的那个,共同探讨...... 谢谢,我在这个过程中遇到的最大困难是:1、如何引用第三方jar包,这个问题我在CSDN上问了好几次了,可惜最终还是不得其解,因为我只用到一个substance皮肤包,后来我用Eclipse的fat-jar插件创建打包,fat-jar会将substance解压开来,这不是我本意,可也解决不了,留待解决!2、第二个困难是一直困扰我的一个bug,上面也说了,是快接近底层时一直按上键会把其他的方块打没,一直没解决,困扰了快一个月了,没办法,还是上传到网上向各位请教请教。以上两个是最大的难题了,至于UI设计方面,虽然没有使用很炫的方块图片,但总体上我觉得还不错,故而才敢冒昧让大家用用。 谢谢,你的回复让我很受用:一、原来我编了好多Java桌面程序,很多固定的代码模式使得我没有添加任何注释,编一个Java桌面程序模式都是很固定的,所以没有考虑到阅读代码的人的感受,这是我的错。二、其实源代码就只有那14个java文件,其他的都是substance皮肤包解压后生成的文件夹,以及这14个java文件生成的class文件,就是这些。三、因为一看到java文件名就就能知道个大概,所以我就没有放一个包里,正如上面所说,我也正为如何“优雅”的引用第三方jar包而苦苦求索,然终不得其解。四、说句不着边的话,我刚开始只是跟一同学比试着看看谁能做出个俄罗斯方块游戏来,他用C#,我用Java,后来做着做着一个一个解决了难题,也越来越像个样子了,所以发到网上,这一切问题的根源,都是当初定位为玩具而已,不过我没有注释意识和包组织意识,这倒是个大毛病呀。 之前我也做过一个,放到CSDN资源下载频道了http://download.csdn.net/user/zhaohuihua详细介绍看这里http://blog.csdn.net/zhaohuihua/archive/2010/05/23/5617640.aspx public boolean canRotate() { int nextIndex = index; nextIndex++; if (nextIndex % 4 == 0) { nextIndex -= 4; } int n = 0; for (int i = 0; i < boxes.length; i++) { for (int j = 0; j < boxes[i].length; j++) { if (boxes[i][j].isMoving()) { int x = i - TetrisShape.shapes[index][n] + TetrisShape.shapes[nextIndex][n]; int y = j - TetrisShape.shapes[index][n + 1] + TetrisShape.shapes[nextIndex][n + 1]; if (x < 0 || x >= boxes.length || y < 0 || y >= boxes[i].length) { System.out.println("f"); return false; } n += 2; } } } if (canRotateJudging()) return true; else return false; } public boolean canRotateJudging() { int nextIndex = index; nextIndex++; if (nextIndex % 4 == 0) { nextIndex -= 4; } int n = 0; int x1 = 0, y1 = 0, x2 = 0, y2 = 0, x3 = 0, y3 = 0, x4 = 0, y4 = 0; for (int i = 0; i < boxes.length; i++) { for (int j = 0; j < boxes[i].length; j++) { if (boxes[i][j].isMoving()) { switch (n) { case 0: x1 = i - TetrisShape.shapes[index][n] + TetrisShape.shapes[nextIndex][n]; y1 = j - TetrisShape.shapes[index][n + 1] + TetrisShape.shapes[nextIndex][n + 1]; break; case 2: x2 = i - TetrisShape.shapes[index][n] + TetrisShape.shapes[nextIndex][n]; y2 = j - TetrisShape.shapes[index][n + 1] + TetrisShape.shapes[nextIndex][n + 1]; break; case 4: x3 = i - TetrisShape.shapes[index][n] + TetrisShape.shapes[nextIndex][n]; y3 = j - TetrisShape.shapes[index][n + 1] + TetrisShape.shapes[nextIndex][n + 1]; break; case 6: x4 = i - TetrisShape.shapes[index][n] + TetrisShape.shapes[nextIndex][n]; y4 = j - TetrisShape.shapes[index][n + 1] + TetrisShape.shapes[nextIndex][n + 1]; break; default: } n += 2; } } } if ((boxes[x1][y1].isBlank() || boxes[x1][y1].isMoving()) && (boxes[x2][y2].isBlank() || boxes[x2][y2].isMoving()) && (boxes[x3][y3].isBlank() || boxes[x3][y3].isMoving()) && (boxes[x4][y4].isBlank() || boxes[x4][y4].isMoving())) { return true; } else { return false; } }第二个bug帮你修好了 原理很简单你可以看一下 当然判断的依据还是根据你原来的isMoving 和 isBlank我刚刚有小失望一下 因为我用SVN想把你的project checkout出来的时候 发现里面什么也没有from http://java-tetris-game.googlecode.com/svn/trunk/ Java俄罗斯方块的最新修改版本——0.1版,已经上传到项目主页(http://code.google.com/p/java-tetris-game/),欢迎大家去下下看啊^_^ 想下载到手机里就不你那jdk了,该用wtk了,那是J2ME的范畴了!! 楼主的方块应该不是直接画上去的吧,是不是加上了什么渲染呢?看起来比较柔和,我也在写小游戏,但是只会用SWing组件,所以看起来很单一 Java Swing,很好很强大,真希望能用Java做desktop应用啊 弱弱问一句,运行报版本错误, 我用jdk1.5 java 图片拼接 高分奉上 窗口初始化 布局管理器组件的布置问题 请问一下各位关于ServerSocket和jsp页面的问题,急~~~ 急急急急急急急急急, 为何查不出汇总的数据? 为什么我的包does not exist? java ?? 一个关于Visual Age For Java 3.0简体中文企业版 帮助的简单问题,100分轻松拿到!! 请问如何用java 使用 web service,有这方面的好书吗? 求高手点拨一位Java粉丝的技术故障的修改方法。 如何解析这样的日期字符串 dom4j生成xml的问题
可以提点小意见
1.每次出现的图形颜色最好可以随机。
2.一般情况当用户按向下键是,应当让方块立即移动到,最下面而不是慢慢地移动。
谢谢。
因为实在太小了,所以就一起打包
1、方块可以是很炫的PNG图片,每种类型都不同,未完成
2、方块下落速度应该快一点,我也意识到了,谢谢提醒
3、程序还有一个bug,就是方块在快要接近下面时,如果不停的按向上键,会出现“意想不到”的情况,这个也未解决
偶不是来拆台的 呵呵 你也可以试试 就是方块在变形的时候 没有做判断
当旁边有方块时 如果下落的方块变形 会重叠在一起
你这个换肤是一大亮点,学到了一招不过:
功能暂且不说,我是来学习的,Down下来点几下就看源代码了
14个java文件,居然没有一行注释,不会是发布出来之前删掉了吧?
14个文件居然没有组织一下包结构,连java和class都放在一起!
如果楼主是新手,应该表扬基本功不错,钻得够深!
否则也没什么好说的啦回头我也发一下我做的那个,共同探讨......
1、如何引用第三方jar包,这个问题我在CSDN上问了好几次了,可惜最终还是不得其解,因为我只用到一个substance皮肤包,后来我用Eclipse的fat-jar插件创建打包,fat-jar会将substance解压开来,这不是我本意,可也解决不了,留待解决!
2、第二个困难是一直困扰我的一个bug,上面也说了,是快接近底层时一直按上键会把其他的方块打没,一直没解决,困扰了快一个月了,没办法,还是上传到网上向各位请教请教。
以上两个是最大的难题了,至于UI设计方面,虽然没有使用很炫的方块图片,但总体上我觉得还不错,故而才敢冒昧让大家用用。
一、原来我编了好多Java桌面程序,很多固定的代码模式使得我没有添加任何注释,编一个Java桌面程序模式都是很固定的,所以没有考虑到阅读代码的人的感受,这是我的错。
二、其实源代码就只有那14个java文件,其他的都是substance皮肤包解压后生成的文件夹,以及这14个java文件生成的class文件,就是这些。
三、因为一看到java文件名就就能知道个大概,所以我就没有放一个包里,正如上面所说,我也正为如何“优雅”的引用第三方jar包而苦苦求索,然终不得其解。
四、说句不着边的话,我刚开始只是跟一同学比试着看看谁能做出个俄罗斯方块游戏来,他用C#,我用Java,后来做着做着一个一个解决了难题,也越来越像个样子了,所以发到网上,这一切问题的根源,都是当初定位为玩具而已,不过我没有注释意识和包组织意识,这倒是个大毛病呀。
http://download.csdn.net/user/zhaohuihua
详细介绍看这里
http://blog.csdn.net/zhaohuihua/archive/2010/05/23/5617640.aspx
public boolean canRotate() {
int nextIndex = index;
nextIndex++;
if (nextIndex % 4 == 0) {
nextIndex -= 4;
}
int n = 0;
for (int i = 0; i < boxes.length; i++) {
for (int j = 0; j < boxes[i].length; j++) {
if (boxes[i][j].isMoving()) {
int x = i - TetrisShape.shapes[index][n]
+ TetrisShape.shapes[nextIndex][n];
int y = j - TetrisShape.shapes[index][n + 1]
+ TetrisShape.shapes[nextIndex][n + 1];
if (x < 0 || x >= boxes.length || y < 0
|| y >= boxes[i].length) {
System.out.println("f");
return false;
}
n += 2;
}
}
}
if (canRotateJudging())
return true;
else
return false;
} public boolean canRotateJudging() {
int nextIndex = index;
nextIndex++;
if (nextIndex % 4 == 0) {
nextIndex -= 4;
}
int n = 0;
int x1 = 0, y1 = 0, x2 = 0, y2 = 0, x3 = 0, y3 = 0, x4 = 0, y4 = 0;
for (int i = 0; i < boxes.length; i++) {
for (int j = 0; j < boxes[i].length; j++) {
if (boxes[i][j].isMoving()) {
switch (n) {
case 0:
x1 = i - TetrisShape.shapes[index][n]
+ TetrisShape.shapes[nextIndex][n];
y1 = j - TetrisShape.shapes[index][n + 1]
+ TetrisShape.shapes[nextIndex][n + 1];
break;
case 2:
x2 = i - TetrisShape.shapes[index][n]
+ TetrisShape.shapes[nextIndex][n];
y2 = j - TetrisShape.shapes[index][n + 1]
+ TetrisShape.shapes[nextIndex][n + 1];
break;
case 4:
x3 = i - TetrisShape.shapes[index][n]
+ TetrisShape.shapes[nextIndex][n];
y3 = j - TetrisShape.shapes[index][n + 1]
+ TetrisShape.shapes[nextIndex][n + 1];
break;
case 6:
x4 = i - TetrisShape.shapes[index][n]
+ TetrisShape.shapes[nextIndex][n];
y4 = j - TetrisShape.shapes[index][n + 1]
+ TetrisShape.shapes[nextIndex][n + 1];
break;
default:
}
n += 2;
}
}
}
if ((boxes[x1][y1].isBlank() || boxes[x1][y1].isMoving())
&& (boxes[x2][y2].isBlank() || boxes[x2][y2].isMoving())
&& (boxes[x3][y3].isBlank() || boxes[x3][y3].isMoving())
&& (boxes[x4][y4].isBlank() || boxes[x4][y4].isMoving())) {
return true;
} else {
return false;
}
}
第二个bug帮你修好了
原理很简单你可以看一下 当然判断的依据还是根据你原来的
isMoving 和 isBlank我刚刚有小失望一下 因为我用SVN想把你的project checkout出来的时候 发现里面什么也没有
from http://java-tetris-game.googlecode.com/svn/trunk/