WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术程序开发MIDP1.0小游戏入门-五子棋1.1

MIDP1.0小游戏入门-五子棋1.1
作者:yinowl  来源:J2MEDV  发布时间:2005-9-7 12:57:48

游戏输赢
最后要说的是判断游戏的输赢。我的思路是,每次在玩家着棋(按下5)时,判断棋局的输赢,然后用一个 Alert 显示哪一方赢了以及当前的比分,返回后开始新的一局。判断的逻辑是,在当前所下的棋子的0/180度、90/270度、45/225度、135/315度四个方向上分别往两头按照由近至远的顺序判断各5个棋子是否是当前下棋方的棋子,如果是则累加到一个变量上,如果在到达5之前出现“否”的情况,则中止在这一方向或这一角度的判断,变量归1(应为当前棋子肯定是当前下棋方下完的棋子)并进行下一个方向或角度。在判断是否是当前方时,用当前 isPlayer1 变量和棋子对象的 isPlayer1 变量进行比交。源代码如下:

    int player1win,player2win;
    protected synchronized void keyPressed(int keyCode) {
        
        ...
        
        else if (action == Canvas.FIRE) {
            if(chesses[selectedY][selectedX]==null){
                chesses[selectedY][selectedX]=new Chesses(this.isPlayer1);
                if(checkWin()){
                    String winner;
                    if(isPlayer1){
                        winner="白方胜利";
                        player1win++;
                    }
                    else{
                        winner="红方胜利";
                        player2win++;
                    }
                    try{
                        Thread.sleep(3000);
                    }catch(Exception e){
                    }
                    Alert winAlert=new Alert("",
                                winner+"\n白方  "+player1win+" : "+player2win+"  红方",
                                null,AlertType.INFO);
                    winAlert.setTimeout(Alert.FOREVER);
                    Display.getDisplay(gobang).setCurrent(winAlert,this);
                    init();
                    repaint();
                }
                this.isPlayer1=!this.isPlayer1;//切换下棋方
            }
        }
        repaint();
    }
    private boolean checkWin(){
        int num=1;
        if(num<5){
            num=1;
            for(int i=1;i<=4;i++){
                if(isPlayer1(selectedX-i,selectedY)){
                num++;
                }
                else break;
            }
            for(int i=1;i<=4;i++){
                if(isPlayer1(selectedX+i,selectedY)){
                num++;
                }
                else break;
            }
        }
        if(num<5){
            num=1;
            for(int i=1;i<=4;i++){
                if(isPlayer1(selectedX,selectedY-i)){
                num++;
                }
                else break;
            }
            for(int i=1;i<=4;i++){
                if(isPlayer1(selectedX,selectedY+i))
                    num++;
                else break;
            }
        }
        if(num<5){
            num=1;
            for(int i=1;i<=4;i++){
                if(isPlayer1(selectedX-i,selectedY-i))
                    num++;
                else break;
            }
            for(int i=1;i<=4;i++){
                if(isPlayer1(selectedX+i,selectedY+i))
                    num++;
                else break;
            }
        }
        if(num<5){
            num=1;
            for(int i=1;i<=4;i++){
                if(isPlayer1(selectedX+i,selectedY-i))
                    num++;
                else break;
            }
            for(int i=1;i<=4;i++){
                if(isPlayer1(selectedX-i,selectedY+i))
                    num++;
                else break;
            }
        }
        if(num>=5)
            return true;
        else
            return false;
    }
    private boolean isPlayer1(int y,int x){
        if(x<=15 && x>=0 && y<=15 && y>=0 && chesses[x][y]!=null){
            if(chesses[x][y].isPlayer1==this.isPlayer1)
                return true;
            else
                return false;
        }
        else return false;
    }


介绍
这是我学习j2me入门后的第一个作品,当然这也是一个极其简单的作品(没有电脑AI,只能是两个人对战),现在我把当时的设计思路写成这篇文档,希望对想入门j2me的朋友在j2me的流程,按键响应绘图等方面有所帮助,同时也希望大家指出错误和改进程序。

注意
代码列出解释的形式仿照《J2ME Game Programming》一书,按照程序功能思路给出相关代码,一个文件的代码会根据功能在不同的小节给出,文章结束了,代码也就完整了。这不同于通常书中的代码以文件为单位一次全部给出,我认为这样更有助于让大家了解一个程序从设计到最后完成的思路。

设计
数据结构:
由于五子棋是一个二维棋类游戏,所有首先想到的是定义一个Chesses类来表示棋子,Chesses有一个boolean型的变量isPlayer1来区分该棋子是哪玩家下的,然后用一个Chess类型的二维数组来包含棋盘上的所有棋子。考虑到移动设备的资源有限,尽可能减少系统资源占用,我考虑不在数组建立后直接生成数组的每一个对象,而是把每一个棋子对象(Chesses)放在游戏的进行中生成,也就是说在游戏进行时,玩家每下一

[1] [2] [3]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码