Harmony鸿蒙实战开发-五子棋小游戏app「双人对战」【源码在文末】


运行工具:DevEco Studio

一、运行演示

1、首页

image-20240721000003871

2、双人对战

3、获胜判断

image-20240721000221940

4、游戏设置

image-20240721000309086

二、部分代码

export function gobangCheck(x: number, y: number, result: number[][]) {
  //横(从这个点开始往前数5个,往后数5个,看看有没有5子相连的,记得判断边界情况,不能溢出)
  let startx = (x - 4) > 0 ? (x - 4) : 0;
  for (let i = startx; i <= x; i++) {
    if (i + 4 > 15) {
      break;
    }
    if (result[i][y] * result[i + 1][y] * result[i + 2][y] * result[i + 3][y] * result[i + 4][y] == 32) {
      return { res: 2, val: new Array(5).fill(0).map((v, index) => [i + index, y]) }
    }
    else if (result[i][y] * result[i + 1][y] * result[i + 2][y] * result[i + 3][y] * result[i + 4][y] == 1) {
      return { res: 1, val: new Array(5).fill(0).map((v, index) => [i + index, y]) }
    }
  }

  //纵(同横)
  let starty = y - 4;
  for (let i = starty; i <= y; i++) {
    if (i + 4 > 15) {
      break;
    }
    if (result[x][i] * result[x][i + 1] * result[x][i + 2] * result[x][i + 3] * result[x][i + 4] == 32) {
      return { res: 2, val: new Array(5).fill(0).map((v, index) => [x, i + index]) }
    }
    else if (result[x][i] * result[x][i + 1] * result[x][i + 2] * result[x][i + 3] * result[x][i + 4] == 1) {
      return { res: 1, val: new Array(5).fill(0).map((v, index) => [x, i + index]) }
    }
  }

  //正斜(x,y都在增加,判断边界情况,x大还是y大)
  if (x > y) {
    starty = y - 4 > 0 ? y - 4 : 0;
    startx = y - 4 > 0 ? (x - 4) : (x - (y - starty));
  } else {
    startx = x - 4 > 0 ? x - 4 : 0;
    starty = x - 4 > 0 ? (y - 4) : (y - (x - starty));
  }
  for (let i = startx; i <= x; i++) {
    if (i + 4 > 15 || starty + 4 > 15) {
      break;
    }
    if (result[i][starty] * result[i + 1][starty + 1] * result[i + 2][starty + 2] * result[i + 3][starty + 3] * result[i + 4][starty + 4] == 32) {
      return { res: 2, val: new Array(5).fill(0).map((v, index) => [i + index, starty + index]) }
    } else if (result[i][starty] * result[i + 1][starty + 1] * result[i + 2][starty + 2] * result[i + 3][starty + 3] * result[i + 4][starty + 4] == 1) {
      return { res: 1, val: new Array(5).fill(0).map((v, index) => [i + index, starty + index]) }
    }
    starty++;
  }

  //反斜(x在增加,y在减少,临界记得判断(0,15)-(15,0))
  startx = x - 4;
  starty = y + 4;
  if (startx < 0) {
    startx = 0;
    starty = y + (x - startx)
  }
  if (starty > 15) {
    starty = 15;
    startx = x - (15 - starty)
  }
  for (let i = startx; i <= x; i++) {
    if (i + 4 > 15 || starty - 4 < 0) {
      break
    }
    if (result[i][starty] * result[i + 1][starty - 1] * result[i + 2][starty - 2] * result[i + 3][starty - 3] * result[i + 4][starty - 4] == 32) {
      return { res: 2, val: new Array(5).fill(0).map((v, index) => [i + index, starty - index]) }
    } else if (result[i][starty] * result[i + 1][starty - 1] * result[i + 2][starty - 2] * result[i + 3][starty - 3] * result[i + 4][starty - 4] == 1) {
      return { res: 1, val: new Array(5).fill(0).map((v, index) => [i + index, starty - index]) }
    }
    starty--;
  }
}

三、源码

相关鸿蒙项目点此专栏

image-20241020235757199

通过百度网盘分享的文件:…zip 链接:百度网盘 请输入提取码

文件已经加密,请点击下方名片获取源码

或:Lvnvn0508

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐