MIDP1.0游戏完整实现-双人扫雷1.0(二)

文章来源:J2ME开发网

帮助界面
帮助界面很简单,把需要的文字排好宽度放在一个String数组里,然后绘制在屏幕上,如果一屏放不下就增加按键响应来翻屏,其实只是重新画出数组前面或后面的几个值,源代码如下:

在MiningCanvas.java中添加如下代码
final String[] strGamehelp =new String[10];
public MiningCanvas(MiningMIDlet miningMIDlet){
    ...
    strGamehelp[0]="此游戏为双人对战游戏";
    strGamehelp[1]=",和经典的扫雷不同,这";
    strGamehelp[2]="个游戏中,我们要挖出";
    strGamehelp[3]="雷,挖错雷则交换玩家.";
    strGamehelp[4]="一共有52颗雷,256个格";
    strGamehelp[5]="子,最先挖到27颗雷者";
    strGamehelp[6]="获胜.1.上,下,左,右分";
    strGamehelp[7]="别为数字键2,8,4,6,挖";
    strGamehelp[8]="雷为5;2.屏幕外框的颜";
    strGamehelp[9]="色为当前下玩家;";
}
private void paintHelpScreen(Graphics g){
    g.setColor(0x00FFFFFF);
    g.fillRect(0,0,canvasW,canvasH);
    g.setFont(lowFont);
    g.setColor(0x00000000);
    for(int i=0;i<strGamehelp.length;i++){
        g.drawString(strGamehelp[i],5,5+(lowFont.getHeight()+3)*i,Graphics.TOP|Graphics.LEFT);
    }
}
在keyPressed方法中的switch结构中添加
case GAMESTATE_HELP://如果游戏现在的状态为帮助状态,那个不管玩家按哪个键都会跳转到主菜单状态
    gamestate=GAMESTATE_MENU;
    break;

游戏主界面
主界面的绘制分成几个部分,一个是雷区棋盘的绘制,根据雷区二位数组中的每一个Bomb对象中的变量值绘出整个棋盘,如果hasFound值为false,画出;如果hasFound值为true且isBomb值为false,那么会画出这个雷位周围的雷数;如果hasFound值为true且isBomb值为true,那么会画出这个雷位是哪一个玩家所挖出的,分别是。第二个部分是玩家的选择框。第三个部分是游戏的信息框,也就是两个玩家目前的分值,还剩几颗雷,信息框的图片为。最后一个部分是提示当前轮到哪一个玩家扫雷,在雷区的外框用玩家的颜色提示,和在信息框中画出玩家的旗帜
这里有几个注意点:
1.雷区不能全部在屏幕中画下,所以会通过卷轴滚动。整个雷区是16x16,我们的屏幕预备画出10x12,用两个变量(paintX和paintY)来控制当前要画出的雷区左上角的雷位坐标,例如这两个变量的值分别为3和4,那么会画出横轴3-10,纵轴4-13的雷位,选择框的坐标(selectedX和selectedY)不用担心,当他超出了屏幕,只需要增加或减少paintX和paintY的值即可,只要保证选择框的坐标和paintX/Y坐标值得距离不超过9(10-1)和11(12-1)即可。这里要十分小心的是,我们这里所有的坐标值和雷区的二位数组bombs中的坐标正好相反,也就是选择框(5,6)是类位bombs[6][5]。
2.在创建雷区二维Bomb数组时,二位数组的大小是18x18(new Bomb[miningMapGrid+2][miningMapGrid+2]),目的是在大小16x16的真正雷区外加一圈雷位,以避免bombOut()方法和其他需要周边搜索雷位时不会出现超越边界异常。
3.因为bombs数组中的索引1-16才是真正代表雷区中坐标(1,1)至(16,16)的雷位,所以在整个程序中,所有有关坐标和数组索引值的地方都要十分小心,不要出现位置错误
4.消息框中需要绘制的几个数值的坐标变量(Player1X/Y,Player2X/Y,bombnowX/Y)的值都是相对于整个消息框的左上角的相对坐标,我们也可以为消息框的坐标单独定义一对变量,这样就更清晰了。
源代码如下:

在MiningCanvas.java中添加如下代码
int empty;
static final int miningMapGrid=16;//雷区为16格x16格
static final int bombNum=52;//共有52颗雷
int miningMapLength,miningGridLength;//整个雷区的边长,每一个雷位格子的边
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值