精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

經(jīng)典小游戲之掃雷[初版]

系統(tǒng) OpenHarmony
本節(jié)實(shí)現(xiàn)"掃雷"小游戲并運(yùn)行在DAYU200開(kāi)發(fā)板上。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

1992年4月6日,"掃雷"小游戲首次搭載在Windows3.1,至今正好30周年,如今被貼上了"暴露年齡"標(biāo)簽????,本節(jié)實(shí)現(xiàn)"掃雷"小游戲并運(yùn)行在DAYU200開(kāi)發(fā)板上。

環(huán)境

  • 開(kāi)發(fā)板:DAYU200
  • 系統(tǒng)版本:OpenHarmony v3.2 Beta1
  • Sdk版本:ohos-sdk 3.2.2.5
  • 開(kāi)發(fā)工具:DevEco Studio 3.0.0.901(For OpenHarmony)

實(shí)現(xiàn)過(guò)程

  1. 創(chuàng)建MineSweeping項(xiàng)目。
  2. 修改index.ets頁(yè)面代碼,使用Stack容器、Image組件、Text組件構(gòu)建開(kāi)始游戲按鈕。
Stack({alignContent: Alignment.Center}) {
Image($r('app.media.start_game'))
.width(240)
.height(120)
Text('開(kāi)始游戲')
.fontSize(18)
.fontColor(Color.White)
.fontWeight(FontWeight.Bold)
}
  1. 點(diǎn)擊"開(kāi)始游戲"進(jìn)行初始化棋盤、棋盤格埋雷、計(jì)算棋盤格周邊雷數(shù)。
  • 初始化棋盤當(dāng)前以4*4棋盤格為例,使用Grid網(wǎng)格容器,由"行"和"列"分割的單元格組成棋盤。定義棋盤格類Board如下:
class Board {
x: number // 棋盤格行標(biāo)識(shí)
y: number // 棋盤格列標(biāo)識(shí)
content: string // 周邊雷數(shù)
isCover: boolean // 默認(rèn)顯示圖片
isMine: boolean // 是否雷區(qū)
isClick: boolean // 是否點(diǎn)擊

constructor(x: number, y: number, content: string, isCover: boolean, isMine: boolean, isClick: boolean) {
this.x = x;
this.y = y;
this.content = content;
this.isCover = isCover;
this.isMine = isMine;
this.isClick = isClick;
}
}

通過(guò)循環(huán)渲染ForEach方式,構(gòu)建Grid網(wǎng)格容器中的單元格GridItem。

Grid() {
ForEach(this.boards, (item: Board) => {
GridItem() {
Stack({alignContent: Alignment.Center}) {
Image(item.isCover ? $r('app.media.loading_icon') : (item.isMine ? $r('app.media.app_icon') : $r('app.media.click_bg')))
.width((!item.isCover && item.isMine) ? 80 : '100%')
Text(item.isClick ? ((item.content === '9' || item.content === '0') ? '' : item.content) : '')
.fontSize(26).fontWeight(FontWeight.Bold)
}
.width('100%').height(100)
}
}, (item: Board) => (item.x + ',' + item.y).toString())
}
.width('95%')
.columnsTemplate(this.gridFr)
.columnsGap(0)
.rowsGap(0)
.height(500)
  • 棋盤格埋雷
    使用隨機(jī)方式,進(jìn)行埋雷,代碼如下:
// 埋雷
setMine = (rows: number, cols: number) => {
// 當(dāng)達(dá)到設(shè)定的數(shù)量時(shí)跳出
if (this.mineCount >= this.maxMineNum) {
return false;
}
// 隨機(jī)獲取坐標(biāo)值
let randomX = Math.floor(Math.random() * rows);
let randomY = Math.floor(Math.random() * cols);
// 埋雷
this.boards.forEach(item => {
if (item.x === randomX && item.y === randomY) {
if (!item.isMine) {
item.isMine = true;
this.mineCount++;
}
}
})
this.setMine(rows, cols);
}
  • 計(jì)算棋盤格周邊雷數(shù)
    周邊雷數(shù)的計(jì)算,使用9宮格的方式,以中間方格為基準(zhǔn),周邊存在雷的方格數(shù)量累加在一起即為當(dāng)前基準(zhǔn)格的周邊雷數(shù)。同時(shí)在計(jì)算時(shí)不能超出給定的行數(shù)和列數(shù)。

// 統(tǒng)計(jì)周邊雷數(shù)
boardAreaMine = (rows: number, cols: number) => {
// 判斷周邊雷,并計(jì)數(shù)
let boards = this.boards;
for (let i = 0; i < boards.length; i++) {
let cell = boards[i];
if (cell.isMine) {
continue;
}
let count = 0;
// 左上
let leftTopCellX = cell.x - 1, leftTopCellY = cell.y - 1;
if (leftTopCellX >= 0 && leftTopCellY >= 0 && leftTopCellX < rows && leftTopCellY < cols) {
boards.filter(item => {
if (item.x === leftTopCellX && item.y === leftTopCellY && item.isMine) {
count++;
}
})
}
// 上
let topCellX = cell.x - 1, topCellY = cell.y;
if (topCellX >= 0 && topCellY >= 0 && topCellX < rows && topCellY < cols) {
boards.filter(item => {
if (item.x === topCellX && item.y === topCellY && item.isMine) {
count++;
}
})
}
// 右上
let rightTopCellX = cell.x - 1, rightTopCellY = cell.y + 1;
if (rightTopCellX >= 0 && rightTopCellY >= 0 && rightTopCellX < rows && rightTopCellY < cols) {
boards.filter(item => {
if (item.x === rightTopCellX && item.y === rightTopCellY && item.isMine) {
count++;
}
})
}
// 右
let rightCellX = cell.x, rightCellY = cell.y + 1;
if (rightCellX >= 0 && rightCellY >= 0 && rightCellX < rows && rightCellY < cols) {
boards.filter(item => {
if (item.x === rightCellX && item.y === rightCellY && item.isMine) {
count++;
}
})
}
// 右下
let rightBottomCellX = cell.x + 1, rightBottomCellY = cell.y + 1;
if (rightBottomCellX >= 0 && rightBottomCellY >= 0 && rightBottomCellX < rows && rightBottomCellY < cols) {
boards.filter(item => {
if (item.x === rightBottomCellX && item.y === rightBottomCellY && item.isMine) {
count++;
}
})
}
// 下
let bottomCellX = cell.x + 1, bottomCellY = cell.y;
if (bottomCellX >= 0 && bottomCellY >= 0 && bottomCellX < rows && bottomCellY < cols) {
boards.filter(item => {
if (item.x === bottomCellX && item.y === bottomCellY && item.isMine) {
count++;
}
})
}
// 左下
let leftBottomCellX = cell.x + 1, leftBottomCellY = cell.y - 1;
if (leftBottomCellX >= 0 && leftBottomCellY >= 0 && leftBottomCellX < rows && leftBottomCellY < cols) {
boards.filter(item => {
if (item.x === leftBottomCellX && item.y === leftBottomCellY && item.isMine) {
count++;
}
})
}
// 左
let leftCellX = cell.x, leftCellY = cell.y - 1;
if (leftCellX >= 0 && leftCellY >= 0 && leftCellX < rows && leftCellY < cols) {
boards.filter(item => {
if (item.x === leftCellX && item.y === leftCellY && item.isMine) {
count++;
}
})
}
if (count === 0) {
count = 9;
}
cell.content = count.toString();
}
this.boards = boards;
}
  1. 給"開(kāi)始游戲"按鈕添加點(diǎn)擊效果。
Stack({alignContent: Alignment.Center}) {
}
.onClick(() => {
// 此處編寫邏輯代碼
this.init();
})
// 初始化棋盤,埋雷,計(jì)算棋盤格周邊雷數(shù)初始化方法
init = () => {
this.initBoard(this.boardRowsNum, this.boardColsNum);
this.setMine(this.boardRowsNum, this.boardColsNum);
this.boardAreaMine(this.boardRowsNum, this.boardColsNum);
}
  1. 點(diǎn)擊棋盤格處理方式。
// 需要引入prompt
import prompt from '@ohos.prompt';
GridItem() {...}
.onClick(() => {
if ((this.clickCount - 1) === this.maxMineNum) {
prompt.showToast({
message: '恭喜你,成功排雷!',
duration: 2000
})
this.boards = [];
return false;
}
let tempBoards = this.boards;
this.boards = new Array<Board>();
tempBoards.forEach(temp => {
if (temp.x === item.x && temp.y === item.y) {
temp.isClick = true;
temp.isCover = false
if (temp.isMine) {
AlertDialog.show({
message: '您踩雷了,游戲結(jié)束~',
autoCancel: false,
primaryButton: {
value: '重新開(kāi)始',
action: () => {
this.init();
}
},
secondaryButton: {
value: '不玩了~',
action: () => {
this.boards = [];
}
},
alignment: DialogAlignment.Center
})
} else {
this.clickCount--;
}
}
})
this.boards = tempBoards;
})

預(yù)覽效果

#DAYU200體驗(yàn)官# 經(jīng)典小游戲之掃雷[初版]-開(kāi)源基礎(chǔ)軟件社區(qū)

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載:

https://ost.51cto.com/resource/2157。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??。

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2012-09-11 09:19:35

JavaScriptJSjQ

2022-03-29 07:40:23

H5游戲開(kāi)發(fā)掃雷游戲

2023-10-17 10:20:53

VueReact

2021-01-12 12:16:55

鴻蒙HarmonyOS游戲

2022-10-28 16:20:10

JS鴻蒙小游戲

2011-03-15 13:19:11

jQuery

2021-08-25 09:54:51

鴻蒙HarmonyOS應(yīng)用

2022-11-01 15:17:48

JS鴻蒙小游戲

2012-01-10 12:48:52

Java

2015-09-29 09:38:50

Java程序猜大小

2023-08-07 15:18:29

游戲開(kāi)發(fā)鴻蒙Arkts

2022-10-31 15:22:37

JS鴻蒙小游戲

2019-10-08 15:27:18

掃雷BashLinux

2012-07-18 14:02:54

銳捷網(wǎng)絡(luò)

2022-07-29 14:47:34

數(shù)獨(dú)Sudoku鴻蒙

2024-07-31 09:46:13

2022-03-23 08:01:36

CSSGrid小游戲

2020-12-09 11:42:18

WiFi IoT鴻蒙開(kāi)發(fā)

2022-08-25 21:41:43

ArkUI鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久久婷婷综合激情| 日韩三级网址| 中文字幕不卡三区| 成人免费高清完整版在线观看| 粉嫩精品久久99综合一区| 精品视频一区二区三区四区五区| 中文字幕五月欧美| 国语精品免费视频| 亚洲性猛交富婆| 国产高清一区二区三区视频| 国产厕拍一区| 欧美性欧美巨大黑白大战| 国产成人精品av| 无码国产精品一区二区免费式直播| 欧美videossex| 波多野洁衣一区| 国产999精品久久久久久绿帽| 第一福利永久视频精品| 亚洲欧洲精品一区二区三区波多野1战4| a天堂视频在线| 老**午夜毛片一区二区三区 | 欧美孕妇性xx| 国产中文字幕久久| 日韩av中文字幕一区| 欧美日韩精品免费观看视频| 人妻av中文系列| 99热精品免费| 亚洲日本三级| 亚洲第一福利网| 亚洲一级免费观看| 成人做爰视频www网站小优视频| 夜夜精品浪潮av一区二区三区| 亚洲日本无吗高清不卡| 国产又爽又黄网站亚洲视频123| 国产裸体歌舞团一区二区| 国产精品高潮呻吟久久av野狼| 亚洲一区 视频| 午夜视频一区| 久久精品小视频| 91精品国自产在线| 亚洲色图美女| 精品视频在线播放| 美女伦理水蜜桃4| 欧美成人精品午夜一区二区| 国产亚洲高清一区| 国产色产综合色产在线视频| 麻豆av一区| 天堂网在线观看视频| 成人中文字幕在线| 91久久国产综合久久蜜月精品| 一本一道精品欧美中文字幕| 蜜臀av一区二区在线观看| 欧美最顶级的aⅴ艳星| 可以免费看的av毛片| 亚洲国内自拍| 97久久久久久| 国产香蕉视频在线| 国产精品一卡| 国产91在线视频| а中文在线天堂| 蜜臀精品一区二区三区在线观看 | 国产原创中文在线观看| 91在线三级| 激情亚洲一区二区三区四区| 国产精品69久久久| 成人ssswww在线播放| 五月天激情综合| 中国丰满人妻videoshd| 性欧美1819sex性高清| 欧美性一级生活| 57pao国产成永久免费视频| 99综合99| 亚洲第一综合天堂另类专| 无码人妻精品一区二区三区温州| 亚洲免费毛片| 色爱精品视频一区| 久久久久成人片免费观看蜜芽| 第一sis亚洲原创| 美日韩丰满少妇在线观看| 久草免费在线观看视频| 国产欧美一区二区色老头| 国产精品h在线观看| 亚洲无码久久久久久久| 日韩黄色影院| 成人高清视频免费观看| 久久这里精品国产99丫e6| 高清性色生活片在线观看| 亚洲欧洲日韩女同| 又大又硬又爽免费视频| 亚洲一二三四| 这里只有精品99re| 国产美女视频免费观看下载软件| 精品国产一区二区三区久久久樱花 | 久久激情中文| 不卡电影一区二区三区| 亚洲一区二区在线免费观看视频 | 欧美岛国激情| 中文字幕在线成人| 国产肥白大熟妇bbbb视频| 小说区亚洲自拍另类图片专区| 最近2019年日本中文免费字幕| 翔田千里88av中文字幕| 久久aⅴ乱码一区二区三区| 国产日韩欧美另类| 姝姝窝人体www聚色窝| 国产亚洲va综合人人澡精品| 四虎精品欧美一区二区免费| 97成人资源| 日本伊人色综合网| 欧美一区二区视频观看视频| 日韩aaaaa| 国产精品99久久| 欧美自拍大量在线观看| 国产黄色一级大片| 国产欧美视频一区二区| 亚洲精品成人自拍| 探花视频在线观看| 国产不卡免费视频| 亚洲精品在线视频观看| 日韩在线伦理| 精品欧美一区二区久久| 欧美视频一区二区在线| 麻豆亚洲精品| 久久av二区| 青草在线视频在线观看| 欧美日韩午夜影院| 中文字幕一区二区人妻在线不卡| 欧美精品国产一区二区| 51ⅴ精品国产91久久久久久| 国产成人三级在线播放| 国产精品久久久久久久久久免费看 | 古典武侠综合av第一页| 永久av在线| 欧美一a一片一级一片| 久久丫精品国产亚洲av不卡| 影音先锋亚洲电影| 超碰97人人在线| www亚洲人| 欧美中文字幕一二三区视频| 午夜理伦三级做爰电影| 色欲av无码一区二区三区| 色综合中文网| 日韩av第一页| 欧美日韩激情视频一区二区三区| 婷婷国产v国产偷v亚洲高清| 日韩精品视频一区二区| 伊人久久成人| 国产乱码精品一区二区三区不卡| 久久av色综合| 亚洲电影成人av99爱色| 日本一级淫片免费放| 成人一级片网址| 国产精品69久久久| 米奇精品关键词| 9.1国产丝袜在线观看 | 亚洲精品乱码日韩| 日韩综合中文字幕| 国产日产亚洲系列最新| 1000部国产精品成人观看| 中文字幕在线视频一区二区三区| 1024精品久久久久久久久| 91免费版网站入口| 深夜福利视频在线免费观看| 91久久精品一区二区三区| av电影网站在线观看| 日日摸夜夜添夜夜添精品视频| 日韩三级电影网站| 日韩三级成人| 欧美极品第一页| 国产又大又粗又长| 一个色在线综合| 极品人妻一区二区三区| 日韩精品午夜视频| 一区二区三区偷拍| 一级毛片精品毛片| 欧美在线观看网站| 91在线视频| 日韩欧美你懂的| 精品人伦一区二区| 国产一区在线观看麻豆| 国产免费黄色一级片| 高h视频在线播放| 欧美日韩另类一区| 久久丫精品久久丫| 亚洲一区二区日韩| 色婷婷激情综合| 成人精品999| 粉嫩一区二区| 国产91精品一区二区| 天天在线免费视频| 男人久久天堂| 日韩欧美二区三区| 久久精品视频6| 国产欧美一区二区精品仙草咪| 自拍偷拍视频在线| 亚洲精品aaaaa| 成人免费午夜电影| 中文字幕成在线观看| 久久精品欧美视频| 伊人22222| 亚洲图片一区二区| 亚洲激情 欧美| 久久99九九99精品| 国产精品视频在线免费观看 | 欧美国产日本在线| 国产主播福利在线| 日韩欧美专区在线| 欧美成人三级在线观看| 成人福利视频在线看| www.com黄色片| 日韩中文字幕高清在线观看| 精品999在线观看| 国产欧美自拍| 日韩av不卡电影| 天天色天天射天天综合网| 中文国产成人精品| 神马久久精品| 亚洲第五色综合网| 99久久夜色精品国产亚洲| 91久久精品一区二区二区| 日本a在线观看| 一区二区视频免费在线观看| 欧日韩不卡视频| 国产亚洲成aⅴ人片在线观看| 波多野结衣有码| 国产凹凸在线观看一区二区| 在线观看国产福利| 奇米影视一区二区三区小说| 免费无码国产v片在线观看| 好看的日韩av电影| 一二三在线视频| 图片区亚洲欧美小说区| 亚洲春色在线视频| 精品免费在线| 日韩高清av| 国产精品免费99久久久| 久久久久久99| 少妇高潮一区二区三区| 国产欧美韩日| 动漫av一区| 福利视频一区二区三区| 综合久久成人| 国产二区一区| 国产suv精品一区二区四区视频| www.av一区视频| 一区二区三区视频免费视频观看网站 | 中文字幕视频网站| 天天操天天干天天综合网| 久草福利资源在线观看| 亚洲国产精品久久人人爱| 九九热精品免费视频| 国产精品毛片高清在线完整版| 成人性生交大免费看| 久久综合久久综合久久| 亚洲精品视频久久久| 久久精品一区二区三区不卡牛牛| 精品国产av无码| 国产视频亚洲色图| 国产7777777| 亚洲视频一区二区在线| 免费视频一二三区| 亚洲一区日韩精品中文字幕| 国产午夜福利片| 狠狠色狠色综合曰曰| 无码日韩精品一区二区| 欧美丝袜自拍制服另类| 在线免费a视频| 日韩一区二区高清| 天天干天天舔天天射| 亚洲国产99精品国自产| 青春草在线观看| 日韩中文在线观看| 青草视频在线免费直播 | 国产欧美视频在线观看| 国产视频精品免费| 亚洲午夜久久久久久久久电影院| av资源免费观看| 欧美日韩国产高清一区二区三区 | 国产精品国产自产拍高清av水多| 日本另类视频| 91在线观看免费高清| 霍思燕三级露全乳照| 国产精品1luya在线播放| 国产成人亚洲综合91| 91丨精品丨国产| 国产啪精品视频| 99久久人爽人人添人人澡| 51国产成人精品午夜福中文下载| 麻豆国产欧美一区二区三区r| 日韩精品久久久免费观看| 自由日本语亚洲人高潮| 国产特级黄色大片| 久久99精品国产麻豆婷婷洗澡| 三大队在线观看| 国产农村妇女毛片精品久久麻豆 | 欧美日韩精品综合在线| 精品人妻一区二区三区换脸明星| 色综合久久99| 在线观看免费av片| 精品国产成人在线| 国产又粗又猛又爽又黄的| 亚洲精品日韩在线| 怡红院av在线| 国产欧美精品在线播放| 国产一区丝袜| 欧美性视频在线播放| 亚洲福利免费| 在线观看国产福利| 久久综合色一综合色88| 久草免费在线观看视频| 欧美日韩一区不卡| 欧美孕妇性xxxⅹ精品hd| 久久av在线看| 激情亚洲小说| 欧美一区国产一区| 亚洲国产二区| 亚洲精品久久久久久| 国产欧美日产一区| 日本一级黄色大片| 精品少妇一区二区三区| 色的视频在线免费看| 国产99久久精品一区二区| jizz18欧美18| 日本美女爱爱视频| 另类欧美日韩国产在线| 性猛交ⅹxxx富婆video| 欧美性猛交xxxx乱大交3| 人人妻人人澡人人爽久久av | 日韩电影中文字幕在线观看| 中文字幕在线观看播放| 国产在线观看一区二区三区| 欧美一级精品片在线看| 一本色道无码道dvd在线观看| 成人av网址在线| 国产一级视频在线| 日韩一区二区中文字幕| 黄色在线观看网站| 成人福利视频网| 欧洲vs亚洲vs国产| 日韩精品―中文字幕| av日韩在线网站| 日韩av电影网址| 精品91自产拍在线观看一区| 手机在线免费av| 99porn视频在线| 国产精品豆花视频| 亚洲图片欧美另类| 性欧美疯狂xxxxbbbb| 视频一区二区免费| 欧美一区二区三区免费观看| 亚洲小说图片视频| aaa毛片在线观看| 国产亚洲成av人在线观看导航| 久久久久亚洲视频| 最近2019中文免费高清视频观看www99 | 亚洲 欧美 变态 另类 综合| 欧美日韩电影在线播放| 久草免费在线观看| 91原创国产| 亚洲精选国产| 91成年人网站| 欧美日韩在线不卡| a视频在线免费看| 成人18视频| 亚洲永久免费| www.黄色在线| 91精品国产综合久久久久久漫画| 中文字幕资源网在线观看| 国产亚洲情侣一区二区无| 亚洲欧美日韩精品一区二区| 国产综合精品在线| 91.com在线观看| 欧美aaaaaaa| 欧美一区二区三区四区夜夜大片| 奇米888四色在线精品| 色在线观看视频| 亚洲国产日韩欧美在线99| 日韩国产激情| 欧美三级午夜理伦三级老人| 成人免费看视频| 中文字幕 国产| 欧美精品久久久久久久| 国产精品视频一区二区三区四蜜臂| 亚洲视频第二页| 午夜视频在线观看一区| 国产综合在线观看| 亚洲xxxxx| 久久久www| 欧美日韩大片在线观看| 亚洲人成网站999久久久综合| 国产精品一区免费在线 | 国产精品99无码一区二区| 亚洲天堂2020| 一本一道久久a久久| 国产理论在线播放| 国产日本欧美一区二区| 亚洲AV无码乱码国产精品牛牛| 国产精品999999| 亚洲一级一区| 男人用嘴添女人下身免费视频|