精品欧美一区二区三区在线观看 _久久久久国色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)

免费日韩av| 激情综合网五月天| 婷婷丁香在线| 成av人片一区二区| 国产精品91在线观看| 国产视频在线视频| 亚洲综合久久av一区二区三区| 最新中文字幕在线播放| 中文字幕va一区二区三区| 91成人伦理在线电影| 亚洲精品视频在线观看免费视频| 免费欧美视频| 日韩亚洲国产欧美| 精品蜜桃在线看| 噼里啪啦国语在线观看免费版高清版| 麻豆网在线观看| 亚洲欧美综合| 91麻豆123| 日韩免费观看av| 黄色片在线观看网站| 综合综合综合综合综合网| 高清不卡一区二区在线| 日韩美女天天操| 国产极品美女高潮无套久久久| 超碰porn在线| 久久精品一区二区三区四区| 风间由美久久久| 亚洲国产精品久久久久婷婷老年 | 免费成人av| 欧美一区二区国产| 伊人国产在线视频| 国产又大又长又粗| 欧美精品日日操| 国产精品久久久久一区| 欧美日韩综合精品| 日本高清视频免费看| 精品一区二区三区视频| 国产精品扒开腿做| 日韩免费av片| 国产一区日韩欧美| 国产成a人亚洲精| 久久久久久国产精品美女| www.xx日本| 欧美先锋资源| 亚洲色图15p| 特大黑人巨人吊xxxx| 91九色鹿精品国产综合久久香蕉| 极品美女一区二区三区| 欧美一区二区精品在线| 精品综合久久久久| 国产精品第一| 欧美在线观看禁18| 中文字幕乱码人妻综合二区三区 | 亚洲欧美国产三级| 在线观看一区二区三区三州| p色视频免费在线观看| 久久久久国产成人精品亚洲午夜| 精品中文字幕人| 偷拍自拍在线| 91丝袜美腿高跟国产极品老师| 国产日韩欧美一区二区三区四区| 亚洲第一成年人网站| 国产二区国产一区在线观看| 亚洲在线视频福利| 国产欧美久久久| 国产精品乡下勾搭老头1| 亚洲一区二区三区乱码aⅴ蜜桃女| 一级黄色片在线看| 狠狠久久亚洲欧美| 亚洲综合日韩中文字幕v在线| 国产精品一区二区免费视频| 国产一区二三区好的| 91成人免费看| 人人妻人人玩人人澡人人爽| 91伊人久久大香线蕉| 欧洲精品国产| 麻豆影视国产在线观看| 亚洲卡通欧美制服中文| av无码久久久久久不卡网站| 成人ssswww在线播放| 欧美性xxxx极品hd满灌| 久久国产精品国产精品| 国产精品一级在线观看| 日韩免费视频一区| 午夜av免费看| 成人3d动漫在线观看| 久久精品久久久久| 在线观看 中文字幕| 免费在线日韩av| 91沈先生作品| 日韩中文字幕免费观看| 国产欧美中文在线| 国产在线拍揄自揄拍无码| av老司机免费在线| 欧洲另类一二三四区| 欧美xxxxxbbbbb| 希岛爱理av免费一区二区| 色偷偷888欧美精品久久久| 深夜福利影院在线观看| 久久久久看片| 99久热re在线精品996热视频| 午夜性色福利影院| 国产精品电影院| 男人日女人bb视频| 国产精品毛片无码| 亚洲欧美精品一区二区| 久久久精品视频免费观看| 久久综合中文| 97超碰在线播放| 岛国视频免费在线观看| 夜色激情一区二区| 奇米影视四色在线| 天堂99x99es久久精品免费| xxav国产精品美女主播| 天堂网视频在线| 国产69精品久久99不卡| 夜夜爽www精品| 蜜桃麻豆影像在线观看| 制服丝袜在线91| 三上悠亚影音先锋| 国内精品福利| 91精品视频免费看| 国产精品久久久久一区二区国产| 亚洲午夜激情网站| 亚洲图片 自拍偷拍| 国产videos久久| 国模精品一区二区三区色天香| 中文字幕 欧美激情| 久久一区二区三区四区| 国产欧美精品aaaaaa片| 91成人精品观看| 夜夜嗨av色一区二区不卡| 香蕉免费毛片视频| 成人一区二区三区视频| 日本a级片在线观看| 亚洲伦理网站| 色综合伊人色综合网站| 日韩精品在线一区二区三区| 99视频有精品| 日韩视频在线视频| 亚洲三级av| 欧美日韩成人网| 国产精品一区二区黑人巨大 | 视频一区国产精品| 成人欧美大片| 亚洲美女视频网| 日本一区二区三区四区五区| 成人h动漫精品| 欧美激情视频免费看| 综合激情网...| 欧美激情视频一区| 隣の若妻さん波多野结衣| 一区二区免费看| 国偷自产av一区二区三区麻豆| 一区二区蜜桃| av成人午夜| 暖暖在线中文免费日本| 精品国精品自拍自在线| 国产亚洲色婷婷久久99精品| 成人性生交大片免费看视频在线| 青青草视频国产| 91精品啪在线观看国产爱臀| 国内精品伊人久久| 午夜国产在线视频| 在线一区二区三区四区| 精品国产aaa| 久热成人在线视频| 国产免费一区二区三区四在线播放| 日韩国产91| 久久综合五月天| 亚洲va欧美va| 欧美日韩视频免费播放| 精品国产av无码| 蜜臀a∨国产成人精品| 中国成人亚色综合网站| 亚洲一区 二区| 91国内产香蕉| 岛国大片在线观看| 欧美一区二区三区视频| 国产精品1234区| 91色porny在线视频| 精品久久久久久久无码| 我不卡影院28| 国产专区一区二区三区| 99久久伊人| 欧美国产日韩二区| 欧美精品少妇| 欧美一三区三区四区免费在线看 | 欧美一区二区三区另类| 精品国产乱码久久久久| 国产成人免费| 国内伊人久久久久久网站视频 | 亚洲熟妇无码av在线播放| 久久超级碰碰| 国产美女久久久| 丁香花高清在线观看完整版| 一本大道久久加勒比香蕉| 国产特级aaaaaa大片| 午夜不卡在线视频| 国产精品综合激情| caoporn国产精品| 免费一区二区三区在线观看| 影音国产精品| 亚洲一区二区三区四区中文| 九九热播视频在线精品6| 国产精品免费观看在线| av第一福利在线导航| 中文字幕日本精品| 少妇人妻精品一区二区三区| 欧美浪妇xxxx高跟鞋交| 国产又爽又黄的视频| 亚洲日本在线天堂| 性猛交娇小69hd| 成人va在线观看| 一个人看的视频www| 日韩中文欧美在线| 青青在线免费观看| 中文字幕一区二区精品区| 欧美一级日本a级v片| 加勒比色综合久久久久久久久| 国产精品欧美一区二区| yellow字幕网在线| 免费成人高清视频| 91.xxx.高清在线| 日韩精品亚洲元码| www国产在线| 欧美精品久久天天躁| 成人h动漫精品一区二区下载| 午夜久久久久久久久久一区二区| 精品国产视频在线观看| 欧美激情一区二区三区蜜桃视频| 可以直接看的无码av| 成人av高清在线| 欧美一级大片免费看| 国产一区欧美二区| 中日韩av在线播放| 日韩成人午夜电影| 日韩精品一区二区三区在线播放 | 99精品视频播放| 尹人成人综合网| 国产91porn| 国产精品88久久久久久| 亚洲一二区在线| 色喇叭免费久久综合网| 免费成人看片网址| 中文字幕区一区二区三| 国产日韩欧美在线看| 3d性欧美动漫精品xxxx软件| 欧美一区二区三区免费视| 深夜av在线| 国语自产精品视频在免费| www.8ⅹ8ⅹ羞羞漫画在线看| 99精品国产99久久久久久福利| 国产精品精品久久久久久| 日韩欧美看国产| 国产精品精品视频| 天然素人一区二区视频| 国产精品久久久久久久久免费丝袜| 少妇欧美激情一区二区三区| 国产激情一区二区三区四区 | 久久久久国产精品一区二区| 欧美二区在线视频| 国产一区二区三区的电影| 国产爆乳无码一区二区麻豆| 欧美精品97| av女优在线播放| 国产欧美一级| 欧美 日本 亚洲| 婷婷综合在线| 国产自产在线视频| 欧美涩涩网站| 日本不卡在线观看视频| 久久亚洲不卡| 99精品视频播放| 久久av中文字幕片| 中文字幕在线播放一区二区| 国产精品一区二区三区乱码| 国产大学生视频| 99精品欧美一区二区三区综合在线| 三级黄色片网站| 久久婷婷久久一区二区三区| 性欧美丰满熟妇xxxx性仙踪林| 欧美精彩视频一区二区三区| 中文字幕美女视频| 亚洲成av人片一区二区梦乃| www欧美在线| 欧美男生操女生| 蜜桃视频久久一区免费观看入口 | 在线免费观看成年人视频| 久久综合色一综合色88| 国产一二三av| 午夜一区二区三区视频| 亚洲视频在线免费播放| 精品精品欲导航| 91在线不卡| 久久久久久久久久国产精品| 日韩精品一区二区三区| 91久久偷偷做嫩草影院| 亚洲福利天堂| japanese在线播放| 日韩中文字幕1| 色哟哟无码精品一区二区三区| 国产亚洲精久久久久久| 精品少妇久久久| 欧美亚洲日本国产| 人人妻人人玩人人澡人人爽| 日韩在线视频播放| 极品美鲍一区| 96国产粉嫩美女| 精品freesex老太交| 国产美女在线一区| 另类欧美日韩国产在线| 超碰caoprom| 《视频一区视频二区| 欧美黄色一级大片| 精品日韩欧美一区二区| 日本中文字幕在线播放| 7777精品视频| 香蕉成人app| 一区二区三区四区五区视频| 国产精品综合| 四虎1515hh.com| 国产精品国产三级国产有无不卡| 91丝袜一区二区三区| 日韩免费观看高清完整版在线观看| 国产精品视频二区三区| 欧美一级大胆视频| 一区视频网站| mm131午夜| 久久99九九99精品| 日本一卡二卡在线播放| 欧美网站在线观看| 天天操天天操天天| 久久精品国亚洲| 欧美性猛交xxx高清大费中文| 国产三级精品在线不卡| 久久久久电影| 亚洲色图偷拍视频| 欧美国产一区二区在线观看| 午夜影院在线看| 亚洲成色777777女色窝| 国产第一页在线| av在线不卡一区| 欧美国产先锋| 国产黄色一区二区三区| 中文字幕在线一区| 91激情在线观看| 日韩一区二区久久久| 成人1区2区| 伊人狠狠色丁香综合尤物| 老司机午夜精品99久久| 男人天堂资源网| 91麻豆精品国产91久久久久久久久 | 日韩制服一区| 欧美日韩亚洲一区二区三区四区| 亚洲永久网站| 亚洲av无码一区二区二三区| 一本久道久久综合中文字幕| 欧美成熟毛茸茸| 人人爽久久涩噜噜噜网站| 亚洲亚洲免费| 欧美黑人又粗又大又爽免费| 中文字幕的久久| 6—12呦国产精品| 久久成人综合视频| 51vv免费精品视频一区二区| 国产不卡一区二区视频| 91一区一区三区| 中文字幕在线播放不卡| 久久精品视频99| 国产成人aa在线观看网站站| 成人一对一视频| 中文字幕av资源一区| 99视频免费看| 97精品国产97久久久久久| 自拍亚洲一区| 97超碰成人在线| 亚洲一区在线观看网站| 日本国产在线| 91精品久久久久久久久久| 欧美成人精品| 日韩中文字幕电影| 欧美日韩高清一区二区三区| a级毛片免费观看在线| 极品尤物一区二区三区| 天堂影院一区二区| 午夜黄色福利视频| 精品免费99久久| 日韩精品免费观看视频| 亚洲免费视频播放| 97se亚洲国产综合自在线| 欧美一级做a爰片免费视频| 久久福利视频网| 夜夜躁狠狠躁日日躁2021日韩| 成年人三级黄色片| 五月婷婷综合在线| 黄色在线免费网站| 蜜桃av噜噜一区二区三| 国产一区91精品张津瑜| 国产在线观看黄色|