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

HarmonyOS - 方舟開發框架ArkUI基于JSAPI實現五子棋游戲

系統 OpenHarmony
最近逛社區發現已經有童鞋實現了java版的五子棋了,作為前端開發人員,怎能沒有js版的五子棋呢,所以趕緊擼起來。

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

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

前言

最近逛社區發現已經有童鞋實現了java版的五子棋了,作為前端開發人員,怎能沒有js版的五子棋呢,所以趕緊擼起來。

效果展示

實現過程

一、 繪制棋盤

首先我們使用css繪制棋盤,繪制一個14*14的正方形格子棋盤,但是需要注意,因為我們落子是落在四個格子之間的交界點上的,而不是落在格子里的,所以怎辦呢?我們可以先繪制一個15*15的輔助正方形格子,然后再在其中間繪制一個14*14,這樣落棋在15*15的格子里,而在14*14的格子里就可以看到落棋是在交界點里。

首先繪制一個15*15的正方形格子。

2. 然后再在其中間繪制一個14*14的正方形格子,這樣的話,棋子就繪制在15*15的格子里,而在14*14的棋盤里就顯示是在格子交界點上了。

最后把15*15的邊距去掉,就得到一個正常的14*14的棋盤了,怎樣是不是很漂亮。

做過前端開發的同學知道其實不需要這么麻煩的,直接繪制一個14*14的格子就可以了,可以使用css的::before和::after選擇器來繪制格子線條。一開始也想用這么這樣處理的,但是發現在目前好像還沒集成這兩個選擇器進來,這個后續估計會更新,敬請期待。

二、實現落棋功能

首先我們在data聲明一個arr為15*15的空數組,也就是長度為225的空數組。數組值只能更新為:

  • 1:存放黑棋。
  • -1:存放白棋。

在標簽里定義兩個class來繪制黑棋和白棋。

<div
class="li{{item == '1' ? 'black' : ''}} {{item == '-1' ? 'white': ''}}"
for="{{(index,item) in arr}}"
tid="item"
onclick="play(index)"
></div>

在點擊play落棋時,傳入當前落棋的位置。

play(e){
// 針對數組內的數據修改,請使用splice方法生效數據綁定變更
this.arr.splice(e,1,'1');
}

上面代碼傳入1,則點擊顯示黑棋,看看效果怎樣。

當然到這里還不行,需要做交換走棋,黑棋走完,到白棋走,并且走過的位置不允許再走棋。

在data定義holder為當前持棋者:

  • 1:存放黑棋,默認持黑棋先走。
  • -1:存放白棋。
play(e){
if(this.arr[e] == '1' || this.arr[e] == '-1'){
console.log('該處已經有棋了');
return false;
}
// 針對數組內的數據修改,請使用splice方法生效數據綁定變更
this.arr.splice(e,1,this.holder);
// 交換走棋
this.holder = this.holder == '1' ? '-1' : '1';
},


三、計算贏棋方式

我們都知道要贏棋就得同色5顆棋子連成一條線,包括橫向,豎向,斜向,斜向左邊和斜向右邊四種方式。那么我們就要把這幾種方式拆分出來一一計算統計。

通過上面的序號,我們不難發現幾個規律。

1、橫向贏棋方式

橫向贏棋方式是五個棋子每兩兩相差一個數值,所以每相鄰棋子就是一個+1和-1的過程。

2、豎向贏棋方式

豎向贏棋方式上下連成一排,我們知道一行只有15個格子,每個棋子都相差15數值,所以每相鄰棋子之間都是+15和-15的過程。

3、左斜向贏棋

左斜方向通過觀察不難發現每兩兩棋子之間相差+14和-14。

4、右斜向贏棋

右邊斜方向也可以看出每相鄰棋子之間相差+16和16。

四、實現贏棋計算

通過上面一比較,是不是瞬間就覺得其實沒那么難了呢,我們只要計算好每次落棋的序號和之前落棋的序號進行一對比,只要滿足條件的五個棋子,就贏棋了。

實現思路: 以黑棋、橫向為例子,通過遞歸算法,通過計算+1 || -1是否都有黑棋的記錄,有則記錄累計一次,每次計算完成,則去判斷當前累計次數是否等于5,如果不是,則還沒有贏,如果為5次,則說明贏棋了。

實現代碼如下:

//id: 當前棋子的序號 d: 計算方式,比如橫向是 +1-1arr是累計下來的序號結果。 
compute(id,d,arr){
id = parseInt(id);
if(this.arr[id + d] && this.arr[id + d] == this.holder){
arr.push(id);
this.compute(id + d, d, arr);
} else{
arr.push(id);
}
},

判斷是否贏棋的方法:

// 判斷是否贏了
getResult(arr){
if(arr.length > 5){
console.log(this.holder + '贏棋'); //this.holder是定義的當前下棋的一方
// 累計清0
arr.length = 0;
} else {
// 累計清0
arr.length = 0;
}
},

我們在每次點擊下棋的時候,都調用一次統計累計次數方法和計算贏棋的方法。

// 橫向贏方法
this.compute(e, 1, this.arr1); //arr1是定義好的累計次數多數組
this.compute(e, -1, this.arr1);
this.getResult(this.arr1);

結合上面計算方式,我們其他的贏棋方式一樣可以這樣統計來計算。

// 點擊下棋方法
play(e){
if(this.isEnd) return;
if(this.arr[e] == '1' || this.arr[e] == '-1'){
console.log('該處已經有棋了');
return false;
}
// 針對數組內的數據修改,請使用splice方法生效數據綁定變更
this.arr.splice(e,1,this.holder);
// 橫向贏方法
this.compute(e, 1, this.arr1);
this.compute(e, -1, this.arr1);
this.getResult(this.arr1);
// 豎向贏方法
this.compute(e, 15, this.arr1);
this.compute(e, -15, this.arr1);
this.getResult(this.arr1);
//右斜贏方法
this.compute(e, 14, this.arr1);
this.compute(e, -14, this.arr1);
this.getResult(this.arr1);
// 左斜贏方法
this.compute(e, 16, this.arr1);
this.compute(e, -16, this.arr1);
this.getResult(this.arr1);
// 交換走棋
this.holder = this.holder == '1' ? '-1' : '1';

下面看看效果。

到這里結束了嗎?不,還沒結束,這里還存在一些bug問題,比如說我們橫向的時候是通過計算兩棋子之間是否存在+1和-1的關系,但是如果兩個棋子是14,15呢?這時候是已經換行了,顯然是不能成立的,但是計算結果這種方式是成立的。所以我們要解決掉這個問題,包括斜向。

五、優化計算方法

其實無非兩種結果,一種就是換行了,+1的時候換行到第一列數值了,-1的時候換行到最后一列數值了,那么我們把第一列和最后一列單獨拉出來,進行比較。

  • 是否在+1、-14,+16的數值是否在第一列存在,如果存在就不進行累計。
  • 是否在-1、+14、-16的數值是否在最后一列存在,如果存在就不進行累計。
  • 這里為什么沒有+15和-15呢,因為豎向不存在這個問題。

下面我們來用代碼實現。

// id: 為原id+d, d: 為計算方式。
scree(id,d){
if((d == 1 && this.colOne.indexOf(id) > -1)
|| (d == -1 && this.colEnd.indexOf(id) > -1)
|| (d == 14 && this.colEnd.indexOf(id) > -1)
|| (d == -14 && this.colOne.indexOf(id) > -1)
|| (d == 16 && this.colOne.indexOf(id) > -1)
|| (d == -16 && this.colEnd.indexOf(id) > -1)){
return false;
}
return true;
},

最后,我們在計算判斷的時候加上這個判斷條件即可 this.scree(id+d,d)。

compute(id,d,arr){
id = parseInt(id);
if(this.arr[id + d] && this.arr[id + d] == this.holder && this.scree(id+d,d)){
arr.push(id);
this.compute(id + d, d, arr);
} else{
arr.push(id);
}
},

最終的效果

源碼地址:

https://gitee.com/yango520/gobang

總結

該方法是使用div+css+js實現的雙人對戰游戲,在使用css的時候發現相比web端的屬性,還是少了很多,比如繪制棋盤的時候想用::before和::after選擇器來繪制,但是發現當前還沒有這個屬性,還有想繪制一個好看有弧度高光的棋子,想使用內陰影實現,但是目前也還并不支持內陰影。不過相信后續會更新,這樣web前端開發上手HarmonyOS JSAPI就容易多了。

??想了解更多內容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術社區??

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

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2010-03-18 17:07:32

2015-01-19 13:42:08

Android游戲源碼藍牙對戰五子棋

2015-06-16 14:24:41

開發五子棋網游

2022-11-09 11:57:17

原生JS五子棋

2022-08-22 17:28:34

ArkUI鴻蒙

2023-10-07 11:58:52

PythonPygame

2015-01-14 14:22:30

Android源碼游戲

2022-06-27 14:12:32

css鴻蒙自定義

2022-05-27 14:55:34

canvas畫布鴻蒙

2022-07-13 16:24:12

ArkUI(JS)打地鼠游戲

2021-12-27 15:10:55

鴻蒙HarmonyOS應用

2024-01-11 15:54:55

eTS語言TypeScript應用開發

2022-04-13 11:40:06

canvas操作系統鴻蒙

2022-12-19 16:56:48

游戲開發鴻蒙

2022-08-04 13:55:08

拼數字小游戲鴻蒙

2011-06-21 15:01:55

2022-10-24 14:49:54

ArkUI心電圖組件

2022-11-02 16:06:54

ArkUIETS

2012-10-08 09:37:14

JSHTML5游戲開發

2022-08-25 21:41:43

ArkUI鴻蒙
點贊
收藏

51CTO技術棧公眾號

欧美最近摘花xxxx摘花| 国产精品久久久久久久久免费桃花 | 97se亚洲国产综合自在线 | 亚洲成人人体| 国产精品日韩精品欧美在线| 成人国产精品日本在线| 久久激情免费视频| 偷拍精品福利视频导航| 欧美亚洲丝袜传媒另类| 国产日韩欧美大片| 日本在线视频1区| 免费看日韩精品| 欧美理论电影在线观看| 中国黄色片视频| 天然素人一区二区视频| 亚洲激情六月丁香| 欧美日韩国产高清视频| 国产激情视频在线播放| 久久久久国内| 欧美区在线播放| 超薄肉色丝袜一二三| 中文字幕视频精品一区二区三区| 色美美综合视频| 99久久99久久精品| 国产爆初菊在线观看免费视频网站| 国产精品 日产精品 欧美精品| 国产99久久精品一区二区 夜夜躁日日躁 | 日本久久久久| 精品动漫一区二区三区| 亚洲成人动漫在线| 成年网站在线| 91免费国产视频网站| 亚洲字幕一区二区| 中文字幕一区二区免费| 国产日韩欧美| 久久久久国产精品免费| 午夜精品久久久久99蜜桃最新版| 欧美三级电影在线| 777亚洲妇女| 国产免费视频传媒| caoporn视频在线| 亚洲欧美自拍偷拍色图| 欧美久久久久久久| 亚洲国产999| 国产日韩欧美一区在线| 精品国产一区av| 欧美最顶级的aⅴ艳星| 波多野结衣乳巨码无在线| 8888四色奇米在线观看| 亚洲精品国产精品乱码不99 | 欧美久久婷婷综合色| 日韩精品一区二区在线视频| 福利视频在线导航| 99久久99久久精品免费观看 | 精品久久久久久久人人人人传媒 | 91 com成人网| 999在线观看| 香蕉视频亚洲一级| 亚洲v中文字幕| 国风产精品一区二区| 素人av在线| 国产欧美视频一区二区| 欧美日韩国产不卡在线看| 少妇荡乳情欲办公室456视频| 国产美女在线观看一区| 国产啪精品视频网站| 国产精品xxxxxx| 视频在线在亚洲| 国产91色在线| 潘金莲一级淫片aaaaaa播放| 鲁大师成人一区二区三区| 88xx成人精品| 国产精品久久久久久久久久久久久久久久久 | 在线免费观看麻豆| 白白在线精品| 精品日韩欧美在线| wwwxxx色| 国产精品高潮呻吟久久久久| 精品国产乱码久久久久久1区2区| 四虎国产精品免费| 成人18夜夜网深夜福利网| 欧美岛国在线观看| 俄罗斯黄色录像| 国产一区二区三区不卡av| 欧美成人性战久久| 国产性生活毛片| 色婷婷狠狠五月综合天色拍| 日韩精品免费一线在线观看| 精品无码国产污污污免费网站| 香蕉久久精品日日躁夜夜躁| 亚洲香蕉在线观看| 精品无码人妻一区二区免费蜜桃| 激情五月综合网| 中文字幕在线成人| tube国产麻豆| 一本不卡影院| 国产精品欧美激情在线播放| 小泽玛利亚一区二区三区视频| 麻豆精品在线观看| 亚洲最大的成人网| 狠狠躁日日躁夜夜躁av| 成年人国产精品| 欧美激情视频一区二区三区| 黄色网址在线播放| 中文字幕一区二区视频| 日本大片免费看| 成人欧美magnet| 欧美精品乱码久久久久久按摩 | 最新中文字幕在线播放| 欧美三级一区二区| 亚洲av无码久久精品色欲| 国偷自产av一区二区三区| 99国产精品久久一区二区三区| 黄色av网址在线| 欧美成人精品一区二区综合免费| 欧美高清一区二区| 亚洲三级免费看| 国产精品久久久久精k8| 成人在线国产| 日韩成人免费电影| 午夜精品在线观看| 中文字幕国产在线观看| 另类调教123区| 成人免费在线一区二区三区| 国产免费av高清在线| 亚洲欧美日韩电影| 日韩中文字幕在线视频观看| 日本亚洲欧洲无免费码在线| 精品久久久久久久久久久久久久久久久| 欧美高清性xxxx| 雨宫琴音一区二区三区| 日韩**中文字幕毛片| 国产日韩精品suv| 91婷婷韩国欧美一区二区| 中文字幕黄色大片| 美女福利一区二区三区| 日韩亚洲欧美成人一区| 免费观看a级片| 一区二区日本视频| 99热99热| eeuss影院在线观看| 天天爽夜夜爽夜夜爽精品视频| 久久黄色片网站| 亚洲影院天堂中文av色| 欧美精品激情在线| 国产精品色综合| 久久久国产一区二区三区四区小说 | 亚洲福利一区| 国产精品毛片a∨一区二区三区|国| 精品国产无码一区二区| 国产精品国产自产拍高清av| 最近免费中文字幕中文高清百度| 欧美日韩精品一区二区三区在线观看| 久久久国产成人精品| 无码人妻一区二区三区免费| 国产一区二区免费视频| 麻豆亚洲一区| 国产三级电影在线播放| 69堂精品视频| 欧美色视频一区二区三区在线观看| 丝袜诱惑亚洲看片| 久久国产精品 国产精品| 2020日本在线视频中文字幕| 日韩一级高清毛片| 日本午夜在线观看| 久久aⅴ国产欧美74aaa| 亚洲精美视频| 久久三级毛片| 中文字幕自拍vr一区二区三区| 波多野结衣爱爱| 国产日韩精品一区二区浪潮av | 久久久久久久高潮| 久久精品国产一区二区三区日韩| 美女91在线看| 亚洲第一页自拍| 天天做天天爱夜夜爽| jizz性欧美| 国产精品不卡在线观看| 国产免费又粗又猛又爽| 青青草国产免费一区二区下载 | 视频一区在线视频| 国产精品美女午夜av| 国产youjizz在线| 色狠狠av一区二区三区| 法国空姐电影在线观看| 免费观看在线色综合| 亚洲精品成人三区| 亚洲精品自拍| 久久99精品久久久久久噜噜| 亚洲AV无码乱码国产精品牛牛 | 欧美影片第一页| 激情五月深爱五月| 精久久久久久久久久久| 黄色录像特级片| 中文字幕av一区二区三区四区| 欧美激情精品久久久久久黑人| 人人妻人人澡人人爽久久av| 欧美日韩国产中文字幕| 亚洲国产日韩一区无码精品久久久| 久久aⅴ国产欧美74aaa| 中文字幕日韩精品无码内射| 神马香蕉久久| 国产裸体写真av一区二区| а√天堂官网中文在线| 亚洲第一视频网站| 最近中文字幕在线观看视频| 成人欧美一区二区三区黑人麻豆| 丰满人妻一区二区三区大胸 | 欧美日韩dvd| 天天躁日日躁成人字幕aⅴ| 国产精品视频在线播放| 日韩精品卡一| 亚洲美女视频网站| 99久久一区二区| 亚洲成人av在线电影| 国产熟女高潮一区二区三区 | 日本网站在线看| 欧美亚洲一区二区三区| 艳母动漫在线免费观看| 日韩在线麻豆| 91免费在线视频网站| 白浆在线视频| 欧美1级日本1级| 久久久久久久网站| 国产污视频在线| 欧美不卡在线视频| 中国一区二区视频| 精品国产91久久久久久| 日本美女黄色一级片| 91网上在线视频| 日韩精品在线播放视频| 久久婷婷亚洲| 国产毛片久久久久久国产毛片| 成人精品影院| 久久亚洲免费| 亚洲精品国产九九九| 国产第一区电影| 欧美videossex| 久久久97精品| av中文字幕一区二区三区| 亚洲国产又黄又爽女人高潮的| 国产男女猛烈无遮挡| 欧美亚洲日本国产| 日本视频免费观看| 精品国产乱码久久久久酒店| 亚洲国产成人精品综合99| 中文在线一区二区| 少妇特黄一区二区三区| 福利视频网站一区二区三区| www.成人黄色| 美女www一区二区| 激情五月亚洲色图| 久久国产福利| 久久久久久久激情| 香蕉成人久久| 久草青青在线观看| 麻豆精品网站| 欧美亚洲另类色图| 99热在线精品观看| 国产一级爱c视频| 日韩一区二区免费看| 三上悠亚免费在线观看| 女同性一区二区三区人了人一| 一区精品在线| 天天做天天爱天天综合网| 四虎影院一区二区三区| 欧美色图一区| 午夜精品短视频| 欧美色网址大全| 亚洲国产精品毛片| 欧美大片aaaa| 欧美性视频在线播放| 香蕉国产精品| 欧美三级午夜理伦三级老人| 中文字幕av亚洲精品一部二部| 一区二区三区四区欧美| 久久久久久久久久久久久久| 亚洲精品中文综合第一页| 蜜桃一区二区三区| 日韩精品资源| 99久久综合| 黄色片免费在线观看视频| 激情国产一区| 久久精品国产亚洲| 国产成人av免费在线观看| **性色生活片久久毛片| 亚洲色婷婷一区二区三区| 亚洲精品久久嫩草网站秘色| 欧美日韩免费做爰视频| 亚洲mv在线观看| 国产一级免费视频| 欧美喷水一区二区| 亚洲国产精品久久人人爱潘金莲| 7777女厕盗摄久久久| 久久久国产免费| 精品日韩在线观看| 欧美色18zzzzxxxxx| 亚洲欧美中文字幕| 日本在线视频观看| 久久久久久久999精品视频| 亚洲最大网站| 成人高清视频观看www| 国产精品网址| 亚洲精品国产系列| 欧美jjzz| 激情婷婷综合网| 国产成人综合视频| 视频免费在线观看| 国产日韩欧美高清在线| 国产大片免费看| 欧美性猛交xxxx黑人猛交| 在线免费观看视频网站| 精品黑人一区二区三区久久| 国产一二在线观看| 九九热99久久久国产盗摄| 成人性生活视频| 亚洲综合精品伊人久久| 久久av资源| 人妻激情另类乱人伦人妻| 久久亚洲视频| 手机在线国产视频| 91麻豆文化传媒在线观看| 男人的天堂久久久| 欧美综合一区二区三区| 一区二区日韩视频| 在线免费成人| 美女福利视频一区| 激情aⅴ欧美一区二区欲海潮| 国产成人精品一区| 99精品国产高清一区二区麻豆| 国产综合第一页| 婷婷六月综合| 十八禁视频网站在线观看| 国产电影精品久久禁18| 青青青视频在线播放| 亚洲一区在线观看免费观看电影高清| 中文字幕免费观看| 亚洲精品一线二线三线无人区| 男人的天堂在线视频免费观看| 国产91av在线| 成人av综合网| www.黄色网址.com| 免费高清不卡av| 国产原创剧情av| 伊人婷婷欧美激情| 国产精品久久久久久久久久久久久久久久久久 | 日本日本精品二区免费| 欧美日韩三级| 蜜臀av免费观看| 成人免费高清在线| 欧美日韩中文字幕在线观看| 色哟哟在线观看一区二区三区| 日本黄视频在线观看| 精品国产拍在线观看| 成人午夜一级| 视频一区二区三区免费观看| 国产视频亚洲| 中文字幕乱码在线| 中文字幕一区二区三区不卡| 中文字幕欧美人妻精品| 亚洲片在线资源| 麻豆蜜桃在线观看| 久久手机视频| 香蕉久久a毛片| 精品无人区无码乱码毛片国产 | 亚洲男人天堂2024| 午夜影院在线观看国产主播| 久久精品日韩| 久久国产精品久久久久久电车| 国产一级二级在线观看| 精品久久久久久久中文字幕 | 日本泡妞xxxx免费视频软件| 亚洲免费av高清| 国产精品人人爽| 伦理中文字幕亚洲| 久久99成人| 可以看毛片的网址| 久久综合九色综合欧美就去吻| 亚洲不卡在线视频| 一区二区三区精品99久久| 99精品国自产在线| 日本黑人久久| 久久国产精品72免费观看| 视频国产一区二区| 欧美一级久久久| 91资源在线观看| 麻豆传媒一区| 久久99九九99精品| 男女免费视频网站| 亚洲成人激情图| 亚洲www.| 欧美日韩一级在线| 国产一区二区三区蝌蚪| 欧美日韩中文字幕在线观看| 欧美一级精品大片| 中文在线资源| 最近看过的日韩成人| 成人免费精品视频| 亚洲av无码不卡| 萌白酱国产一区二区|