我最近做了一个Java版的俄罗斯方块,
有兴趣的朋友可以去http://code.google.com/p/java-tetris-game/下载啊。

解决方案 »

  1.   

    谢谢,已经下载,并且play。
    可以提点小意见
    1.每次出现的图形颜色最好可以随机。
    2.一般情况当用户按向下键是,应当让方块立即移动到,最下面而不是慢慢地移动。
    谢谢。
      

  2.   

    下载下来的JAR文件中已经包含了源文件
    因为实在太小了,所以就一起打包
      

  3.   

    问的很好,我也在思考这两个问题,我再补充几点:
    1、方块可以是很炫的PNG图片,每种类型都不同,未完成
    2、方块下落速度应该快一点,我也意识到了,谢谢提醒
    3、程序还有一个bug,就是方块在快要接近下面时,如果不停的按向上键,会出现“意想不到”的情况,这个也未解决
      

  4.   

    挺好玩的,不过一直按上确实出bug了。可以把其他的方块打没。建议改成加强版俄罗斯方块
      

  5.   

    我也在现学现用JavaME做个手机版的,我安装了Nokia和Motorola的模拟器,故而每开发一步都要在两个模拟器上跑跑,做的还真挺慢的,没有成型,所以也就没有放上去
      

  6.   

    我前不久写过  所以下第二个方块就给你找到个bug  
    偶不是来拆台的 呵呵  你也可以试试  就是方块在变形的时候   没有做判断  
    当旁边有方块时  如果下落的方块变形  会重叠在一起
      

  7.   

    我开了new feature 给你 呵呵
      

  8.   

    之前我也做过一个
    你这个换肤是一大亮点,学到了一招不过:
    功能暂且不说,我是来学习的,Down下来点几下就看源代码了
    14个java文件,居然没有一行注释,不会是发布出来之前删掉了吧?
    14个文件居然没有组织一下包结构,连java和class都放在一起!
    如果楼主是新手,应该表扬基本功不错,钻得够深!
    否则也没什么好说的啦回头我也发一下我做的那个,共同探讨......
      

  9.   

    谢谢,我在这个过程中遇到的最大困难是:
    1、如何引用第三方jar包,这个问题我在CSDN上问了好几次了,可惜最终还是不得其解,因为我只用到一个substance皮肤包,后来我用Eclipse的fat-jar插件创建打包,fat-jar会将substance解压开来,这不是我本意,可也解决不了,留待解决!
    2、第二个困难是一直困扰我的一个bug,上面也说了,是快接近底层时一直按上键会把其他的方块打没,一直没解决,困扰了快一个月了,没办法,还是上传到网上向各位请教请教。
    以上两个是最大的难题了,至于UI设计方面,虽然没有使用很炫的方块图片,但总体上我觉得还不错,故而才敢冒昧让大家用用。
      

  10.   

    谢谢,你的回复让我很受用:
    一、原来我编了好多Java桌面程序,很多固定的代码模式使得我没有添加任何注释,编一个Java桌面程序模式都是很固定的,所以没有考虑到阅读代码的人的感受,这是我的错。
    二、其实源代码就只有那14个java文件,其他的都是substance皮肤包解压后生成的文件夹,以及这14个java文件生成的class文件,就是这些。
    三、因为一看到java文件名就就能知道个大概,所以我就没有放一个包里,正如上面所说,我也正为如何“优雅”的引用第三方jar包而苦苦求索,然终不得其解。
    四、说句不着边的话,我刚开始只是跟一同学比试着看看谁能做出个俄罗斯方块游戏来,他用C#,我用Java,后来做着做着一个一个解决了难题,也越来越像个样子了,所以发到网上,这一切问题的根源,都是当初定位为玩具而已,不过我没有注释意识和包组织意识,这倒是个大毛病呀。
      

  11.   

    之前我也做过一个,放到CSDN资源下载频道了
    http://download.csdn.net/user/zhaohuihua
    详细介绍看这里
    http://blog.csdn.net/zhaohuihua/archive/2010/05/23/5617640.aspx
      

  12.   


    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/
      

  13.   

    Java俄罗斯方块的最新修改版本——0.1版,已经上传到项目主页(http://code.google.com/p/java-tetris-game/),欢迎大家去下下看啊^_^
      

  14.   

    想下载到手机里就不你那jdk了,该用wtk了,那是J2ME的范畴了!!
      

  15.   

    楼主的方块应该不是直接画上去的吧,是不是加上了什么渲染呢?看起来比较柔和,我也在写小游戏,但是只会用SWing组件,所以看起来很单一
      

  16.   

    Java Swing,很好很强大,真希望能用Java做desktop应用啊
      

  17.   

    弱弱问一句,运行报版本错误, 我用jdk1.5