千家信息网

J2ME怎么实现扫雷游戏

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"J2ME怎么实现扫雷游戏",在日常操作中,相信很多人在J2ME怎么实现扫雷游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"J2ME怎么实现扫雷游戏"
千家信息网最后更新 2026年11月04日J2ME怎么实现扫雷游戏

这篇文章主要介绍"J2ME怎么实现扫雷游戏",在日常操作中,相信很多人在J2ME怎么实现扫雷游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"J2ME怎么实现扫雷游戏"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

  一般,按照java得开发模式,这种程序一般是分为三个模块来开发。

  如下三个:

  一个程序运作的主文件,也就是一个midlet的继承;

  一个界面的表示类,也就是一个canvas的继承,界面上应该有些菜单,如new、exit 什么的,那就应该要 implements一个 commandListener消息监听类(大家可以把java的消息监听理解为一个线程,一直像倭寇那样对看得顺眼的东西虎视耽耽,当然这里指的是他所能触及到的消息,当收到消息的时候,会调用一个抽象函数public void commandAction(Command c, Displayable d),而这个抽象函数使得我们可以通过对他的实现来处理收到的消息,即消息响应)

  最后一个当然就是与界面无关的逻辑单元了,在这里我们定义整个游戏的逻辑,做到逻辑与界面分开。这是我学java的最大收获,呵呵。

  首先正式开始第一讲 <扫雷游戏的逻辑>

  我的设想是,扫雷的地图一般是一个矩形,因为,圆形屏幕的手机看起来蛮变态的,没有必要迁就他,所以,我用一个a*b的二维数组就完全可以表示整个地图。

  有了地图以后地图里面的类容自然就有一部分是表示地雷啦,既然这样,那不如就这样<废话来的,小朋友不要学>

  /**

  * 20 标志该位置为地雷

  * <=10的数字表示未翻开的方块及周围的地雷数目

  * >=10的数字表示已翻开的方块及周围的地雷数目

  * */

  表示方法就出来了,逻辑也明朗起来了。

  我要将某个块翻开,只要将他加上10就可以了。

  Java编程第一步,当然是先要class啊

  package games;

  import java.util.Random;

  import java.lang.Math;

  class gamelogic {

  /**表示一个10*10的棋盘*/

  private int[][] pan = new int;

  private Random random;//一个随机变量,主要作用是用来指定哪些位置为地雷

  private int BombNum = 0; //统计地雷总数

  /**游戏是否结束*/

  private boolean GameOver;

  接下来就是要初始化地图了,地图首先要扔一个雷在上面啊,不然怎么叫扫雷呢,扔完了地雷以后接下来当然是遍历一次地图(我们还是很仁慈地,我们得告诉扫雷的同志,某某位置,有多少雷,比如这样:"01、01、12点中方向有地雷,14点钟方向有幺鸡,2点钟方向有东风之类的啊")。

  /**初始化数组,生成地图*/

  public void InitArray() {

  for (int i = 0; i < 8; i++) {

  for (int j = 0; j < 8; j++) {

  pan[i][j] = 0;

  }

  }

  RandomArray();

  CountBomb();

  BombNum = Bomb();

  }

  /**统计地雷总数

  * @return int 返回地雷总数 */

  private int Bomb() {

  int count = 0;

  for (int i = 0; i < 8; i++) {

  for (int j = 0; j < 8; j++) {

  if (pan[i][j] == 20) {

  count += 1;

  }

  }

  }

  return count;

  }

  /**随机决定地雷的位置*/

  private void RandomArray() {

  int i, j, k;

  // 先扔15个左右的地雷吧,注意,这里不一定有15个哦,因为随机值可能重复,我不管啦

  for (int r = 0; r < 15; r++) {

  k = java.lang.Math.abs(random.nextInt()) % 64; //random.nextInt(100);

  i = k / 8;

  j = k % 8;

  this.pan[i][j] = 20; //指定该位置为地雷

  }

  }

  /**统计棋盘上的数据*/

  private void CountBomb() {

  for (int i = 0; i < 8; i++) {

  for (int j = 0; j < 8; j++) {

  int count = 0;

  //当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数

  if (pan[i][j] != 20) {

  if ( (i - 1 >= 0) && (j - 1 >= 0)) {

  if (pan[i - 1][j - 1] == 20) {

  count += 1; //检测左上方空格是否是地雷

  }

  }

  if ( (i - 1 >= 0)) {

  if (pan[i - 1][j] == 20) {

  count += 1; //检测上方空格是否为地雷

  }

  }

  if ( (i - 1 >= 0) && (j + 1 <= 7)) {

  if (pan[i - 1][j + 1] == 20) {

  count += 1; //检测右上方是否为地雷

  }

  }

  if ( (j - 1 >= 0)) {

  if (pan[i][j - 1] == 20) {

  count += 1; //检测左边是否为地雷

  }

  }

  if ( (i >= 0) && (j + 1 <= 7)) {

  if (pan[i][j + 1] == 20) {

  count += 1; //右边

  }

  }

  if ( (j - 1 >= 0) && (i + 1 <= 7)) {

  if (pan[i + 1][j - 1] == 20) {

  count += 1; //左下

  }

  }

  if ( (i + 1 <= 7)) {

  if (pan[i + 1][j] == 20) {

  count += 1; //下

  }

  }

  if ( (j + 1 <= 7) && (i + 1 <= 7)) {

  if (pan[i + 1][j + 1] == 20) {

  count += 1; //右下

  }

  }

  pan[i][j] = count;

  }

  }

  }

  }

  /**检测已经被揭开的位置总和

  * @return 返回被揭开的数量 */

  private int countOpen() {

  int count = 0;

  for (int i = 0; i < 8; i++) {

  for (int j = 0; j < 8; j++) {

  if (pan[i][j] < 20 && pan[i][j] > 9) {

  count += 1;

  }

  }

  }

  return count;

  }

  /**检测是否胜利

  * @return 是否胜利boolean值 */

  public boolean isWin() {

  // System.out.println(BombNum +""+ countOpen());

  if ( (BombNum + countOpen()) == 64) {

  this.GameOver = true;

  return true;

  }

  else {

  return false;

  }

  }

  /**选中棋盘上的位置,并翻开

  * @param matrix 位置 */

  public void openpan(int matrix) {

  switch (getBomb(matrix)) {

  case 20: //当选中的位置为地雷,游戏结束

  setGameOver();

  break;

  case 0:

  isNull(matrix); //当选中的位置为空,则翻开周围的地图

  break;

  default:

  this.isNotNull(matrix); //否则,翻开当前位置,并作上翻开的标记

  }

  }

  /**当选中的位置为空,则翻开周围的地图

  * @param matrix 位置 */

  private void isNull(int matrix) {

  int i, j;

  i = matrix / 8;

  j = matrix % 8;

  if (pan[i][j] < 9) {

  pan[i][j] += 10;

  }

  if ( (i - 1 >= 0) && (j - 1 >= 0)) { //检测左上方空格是否是空

  if (pan[i - 1][j - 1] == 0) {

  isNull( (i - 1) * 8 + (j - 1));

  }

  if (pan[i - 1][j - 1] < 9) {

  pan[i - 1][j - 1] += 10;

  }

  }

  if ( (i - 1 >= 0)) { //检测上方空格是否为空

  if (pan[i - 1][j] == 0) {

  isNull( (i - 1) * 8 + j);

  }

  if (pan[i - 1][j] < 9) {

  pan[i - 1][j] += 10;

  }

  }

  if ( (i - 1 >= 0) && (j + 1 <= 7)) { //检测右上方是否为空

  if (pan[i - 1][j + 1] == 0) {

  isNull( (i - 1) * 8 + (j + 1));

  }

  if (pan[i - 1][j + 1] < 9) {

  pan[i - 1][j + 1] += 10;

  }

  }

  if ( (j - 1 >= 0)) { //检测左边是否为空

  if (pan[i][j - 1] == 0) {

  isNull(i * 8 + (j - 1));

  }

  if (pan[i][j - 1] < 9) {

  pan[i][j - 1] += 10;

  }

  }

  if ( (i >= 0) && (j + 1 <= 7)) { //右边

  if (pan[i][j + 1] == 0) {

  isNull(i * 8 + (j + 1));

  }

  if (pan[i][j + 1] < 9) {

  pan[i][j + 1] += 10;

  }

  }

  if ( (j - 1 >= 0) && (i + 1 <= 7)) { //左下

  if (pan[i + 1][j - 1] == 0) {

  isNull( (i + 1) * 8 + (j - 1));

  }

  if (pan[i + 1][j - 1] < 9) {

  pan[i + 1][j - 1] += 10;

  }

  }

  if ( (i + 1 <= 7)) { //下

  if (pan[i + 1][j] == 0) {

  isNull( (i + 1) * 8 + j);

  }

  if (pan[i + 1][j] < 9) {

  pan[i + 1][j] += 10;

  }

  }

  if ( (j + 1 <= 7) && (i + 1 <= 7)) { //右下

  if (pan[i + 1][j + 1] == 0) {

  isNull( (i + 1) * 8 + (j + 1));

  }

  if (pan[i + 1][j + 1] < 9) {

  pan[i + 1][j + 1] += 10;

  }

  }

  }

  /**选中棋盘上的位置,并翻开当前位置

  * @param matrix 位置 */

  private void isNotNull(int matrix) {

  int i, j;

  i = matrix / 8;

  j = matrix % 8;

  pan[i][j] += 10;

到此,关于"J2ME怎么实现扫雷游戏"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

地雷 位置 检测 地图 扫雷 消息 棋盘 界面 空格 逻辑 j++ 学习 统计 接下来 总数 方向 三个 也就是 函数 单元 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会 北京路客互联网科技有限公司 高科技互联网 中国互联网科技工作委员会毛军 互联网和科技技术 A股互联网金融科技公司 互联网科技社 深圳齐家互联网科技 滨湖区互联网智能科技产品供应 农村开互联网科技讲堂 互联网对科技的发展 荆州市昕露互联网络科技有限公司 互联网金融科技展 深圳互联网科技的发展 富国互联网金融科技混合基金 广州梦谷互联网科技有限公司领导 易租星互联网科技有限公司 第三届互联网大会安防黑科技 重庆科技产业互联网有哪些 科技发展第三阶段互联网时代 国智互联网科技 科技类互联网 互联网科技公司怎么样 世界互联网领先科技成果 深圳前海聚择互联网科技有限公司 明优互联网科技有限公司 半导体是互联网高科技吗 有人说阿里系是互联网科技企业 互联网领先科技成果宣传视频 互联网科技快速发展优美句子
0