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

OpenHarmony羊了個羊復刻學習

系統 OpenHarmony
在這里我選擇使用兩層、4種類型,總個數36個,界面選擇6*6的方格,下面存儲的格數選擇為6個。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

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

一、明確玩法

#沖刺創作新星# O了個H(OpenHarmony羊了個羊復刻學習)-開源基礎軟件社區

演示視頻:https://www.bilibili.com/video/BV1ig41127T3。

開源地址:https://gitee.com/cheng-wan-orz/olgh。

  • 通過點擊選擇對應的目標
  • 點擊目標后界面中消失,移動到欄中
  • 當目標連續湊夠三個(左或右),進行消除
  • 第一層消除后顯示出第二層
  • 當儲存欄滿了后失敗

二、簡易邏輯搭建

#沖刺創作新星# O了個H(OpenHarmony羊了個羊復刻學習)-開源基礎軟件社區

因為這個內容是半個下午實現的(拖到現在才發而已),僅僅搭建了框架,若有大的問題也請大家諒解,該內容僅做學習使用。

(1)確定層數、欄目數以及種類

在這里我選擇使用兩層、4種類型,總個數36個,界面選擇6*6的方格,下面存儲的格數選擇為6個(PS:本來打算3層8種60個,后來嫌麻煩)。

(2)建立類型標志

var Game_buff = [
1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4,4]

這里選擇使用單維36數組,代表總數36個,其中1-4代表四種類型,此時將數組進行打亂。

Game_buff = Game_buff.sort(() => 0.5 - Math.random())  //效果為隨機打亂數組排序

此時經過打亂后得到一個隨機的數組排序,即實現完全隨機的游戲體驗。

(3)建立層次

在得到打亂后的數組后需要進行分層,此時使用隨機數。

First = Math.random()*10+10   //取隨機數
First = Math.trunc(First) //取整

得到第一層是[0,10]+10,即得到一個10-20的數作為第一層的個數。

Second = 36 - First;

(4)位置排序

在確定第一層和第二層數目以及整體類型數組后,需要考慮怎么樣進行隨機位置的擺放,單純的按數排序是我們不希望看到的,這里引入坐標的概念,因為我使用的是6*6的單元格,這里創建一個36成員的數組。

var ONE_set = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]

此時進行第一次打亂,同樣使用打亂函數。

ONE_set = ONE_set.sort(() => 0.5 - Math.random())

打亂后即可得到一個亂序的位置排序,此時將第一層的內容進行放入即可。

//ONE_set的數目可通過對6的整除和除以,得到對應的行列坐標,例如23是第四列第五個

(5)建立棋盤

在位置和類型確定后建立棋盤。

var fisrt_set = [
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0]
var Second_set = [
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0]

將上方確定的內容進行導入,此時fisrt_set和Second_set代表兩層棋盤的擺放情況。

for(let num = 0;num<First;num++)
{
if(Game_buff[num]==1)
{
this.context.drawImage( this.img1,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 1
}else if(Game_buff[num]==2)
{
this.context.drawImage( this.img2,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 2
}else if(Game_buff[num]==3)
{
this.context.drawImage( this.img3,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 3
}else if(Game_buff[num]==4)
{
this.context.drawImage( this.img4,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 4
}else if(Game_buff[num]==5)
{
this.context.drawImage( this.img5,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 5
}else if(Game_buff[num]==6)
{
this.context.drawImage( this.img6,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 6
}
}
Remember = ONE_set
ONE_set = ONE_set.sort(() => 0.5 - Math.random())

for(let num = 0;num<Second;num++)
{
if(Game_buff[num+First]==1)
{
this.context.drawImage( this.img1,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 1
}else if(Game_buff[num+First]==2)
{
this.context.drawImage( this.img2,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 2
}else if(Game_buff[num+First]==3)
{
this.context.drawImage( this.img3,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 3
}else if(Game_buff[num+First]==4)
{
this.context.drawImage( this.img4,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 4
}else if(Game_buff[num]==5)
{
this.context.drawImage( this.img5,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 5
}else if(Game_buff[num]==6)
{
this.context.drawImage( this.img6,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 6
}
}

(6)點擊判定

點擊判定這里簡化為坐標實現(具體實現看下午技術部分),通過6*6單元格的分析,當點擊后得到一個XY軸,此時首先判斷該層數的XY軸處有沒有放置圖片,如果有則讀取當前點的類型(1-4),并將其消除進入消除判定。

(7)消除判定

當點擊到類型后,該圖片進入欄目中,此時需要對欄目進行判定,是否出現連續三個的情況,引入一維數組。

var ALL_Get = [0,0,0,0,0,0];

當點擊判定后,首先判斷當前第一位是否存在,沒有的話點擊的內容成為第一位,有的話成為第二位。

在前兩位都存在的情況下,判斷前三位是否一致,一致的話消除,不一致的話成為第三位。

當前三位的存在的情況下,判斷第二第三和點擊的是否一致,不一致判斷第一第二和點擊的項目是否一致,都不一致則成為第四位,一致則消除。

當欄目數為5的情況下,且點擊項目左右都不一致,則游戲失敗(判斷程序如下)。

Con_Sheep(num)
{
if(ALL_Get[0]==0)
{
ALL_Get[0] = num;
}else if(ALL_Get[0]!=0 && ALL_Get[1]==0)
{
ALL_Get[1] = num;
}else if(ALL_Get[0]!=0 && ALL_Get[1]!=0 && ALL_Get[2]==0 && ALL_Get[3]==0 && ALL_Get[4]==0 )
{
if(ALL_Get[0] == ALL_Get[1] && ALL_Get[0] == num)
{
ALL_Get[0] = 0;
ALL_Get[1] = 0;
}else
{
ALL_Get[2] = num;
}
}else if(ALL_Get[0]!=0 && ALL_Get[1]!=0 && ALL_Get[2]!=0 && ALL_Get[3]==0 && ALL_Get[4]==0)
{
if(ALL_Get[1] == ALL_Get[2] && ALL_Get[1] == num)
{
ALL_Get[2] = 0;
ALL_Get[1] = 0;
}else if(ALL_Get[0] == ALL_Get[1] && ALL_Get[0] == num)
{
ALL_Get[0] = ALL_Get[2];
ALL_Get[1] = 0;
ALL_Get[2] = 0;
}else
{
ALL_Get[3] = num;
}
}else if(ALL_Get[0]!=0 && ALL_Get[1]!=0 && ALL_Get[2]!=0 && ALL_Get[3]!=0 && ALL_Get[4]==0)
{
if(ALL_Get[2] == ALL_Get[3] && ALL_Get[2] == num)
{
ALL_Get[2] = 0;
ALL_Get[3] = 0;
}else if(ALL_Get[0] == ALL_Get[1] && ALL_Get[0] == num)
{
ALL_Get[0] = ALL_Get[2];
ALL_Get[1] = ALL_Get[3];
ALL_Get[2] = 0;
ALL_Get[3] = 0;
}else
{
ALL_Get[4] = num;
}
}else if(ALL_Get[0]!=0 && ALL_Get[1]!=0 && ALL_Get[2]!=0 && ALL_Get[3]!=0 && ALL_Get[4]!=0)
{
if(ALL_Get[4] == ALL_Get[3] && ALL_Get[3] == num)
{
ALL_Get[4] = 0;
ALL_Get[3] = 0;
}else if(ALL_Get[0] == ALL_Get[1] && ALL_Get[0] == num)
{
ALL_Get[0] = ALL_Get[2];
ALL_Get[1] = ALL_Get[3];
ALL_Get[2] = ALL_Get[4];
ALL_Get[3] = 0;
}else
{
AlertDialog.show({
message: '你輸了!!!'
})
ALL_Get[5] = num;
flag = 1;
}
}
this.context.clearRect(0, 1010, 720, 100) //消除
//刷新底部顯示
if(ALL_Get[0]==0)
{
}else if(ALL_Get[0]==1)
{
this.context.drawImage( this.img1,80,1010,80,80)
}else if(ALL_Get[0]==2)
{
this.context.drawImage( this.img2,80,1010,80,80)
}else if(ALL_Get[0]==3)
{
this.context.drawImage( this.img3,80,1010,80,80)
}else if(ALL_Get[0]==4)
{
this.context.drawImage( this.img4,80,1010,80,80)
}else if(ALL_Get[0]==5)
{
this.context.drawImage( this.img5,80,1010,80,80)
}else if(ALL_Get[0]==6)
{
this.context.drawImage( this.img6,80,1010,80,80)
}
///////////////////////////////////////////////////////////////////////////
if(ALL_Get[1]==0)
{
}else if(ALL_Get[1]==1)
{
this.context.drawImage( this.img1,180,1010,80,80)
}else if(ALL_Get[1]==2)
{
this.context.drawImage( this.img2,180,1010,80,80)
}else if(ALL_Get[1]==3)
{
this.context.drawImage( this.img3,180,1010,80,80)
}else if(ALL_Get[1]==4)
{
this.context.drawImage( this.img4,180,1010,80,80)
}else if(ALL_Get[1]==5)
{
this.context.drawImage( this.img5,180,1010,80,80)
}else if(ALL_Get[1]==6)
{
this.context.drawImage( this.img6,180,1010,80,80)
}
///////////////////////////////////////////////////////////////////////////
if(ALL_Get[2]==0)
{
}else if(ALL_Get[2]==1)
{
this.context.drawImage( this.img1,280,1010,80,80)
}else if(ALL_Get[2]==2)
{
this.context.drawImage( this.img2,280,1010,80,80)
}else if(ALL_Get[2]==3)
{
this.context.drawImage( this.img3,280,1010,80,80)
}else if(ALL_Get[2]==4)
{
this.context.drawImage( this.img4,280,1010,80,80)
}else if(ALL_Get[2]==5)
{
this.context.drawImage( this.img5,280,1010,80,80)
}else if(ALL_Get[2]==6)
{
this.context.drawImage( this.img6,280,1010,80,80)
}
///////////////////////////////////////////////////////////////////////////
if(ALL_Get[3]==0)
{
}else if(ALL_Get[3]==1)
{
this.context.drawImage( this.img1,380,1010,80,80)
}else if(ALL_Get[3]==2)
{
this.context.drawImage( this.img2,380,1010,80,80)
}else if(ALL_Get[3]==3)
{
this.context.drawImage( this.img3,380,1010,80,80)
}else if(ALL_Get[3]==4)
{
this.context.drawImage( this.img4,380,1010,80,80)
}else if(ALL_Get[3]==5)
{
this.context.drawImage( this.img5,380,1010,80,80)
}else if(ALL_Get[3]==6)
{
this.context.drawImage( this.img6,380,1010,80,80)
}
///////////////////////////////////////////////////////////////////////////
if(ALL_Get[4]==0)
{
}else if(ALL_Get[4]==1)
{
this.context.drawImage( this.img1,480,1010,80,80)
}else if(ALL_Get[4]==2)
{
this.context.drawImage( this.img2,480,1010,80,80)
}else if(ALL_Get[4]==3)
{
this.context.drawImage( this.img3,480,1010,80,80)
}else if(ALL_Get[4]==4)
{
this.context.drawImage( this.img4,480,1010,80,80)
}else if(ALL_Get[4]==5)
{
this.context.drawImage( this.img5,480,1010,80,80)
}else if(ALL_Get[4]==6)
{
this.context.drawImage( this.img6,480,1010,80,80)
}
///////////////////////////////////////////////////////////////////////////
if(ALL_Get[5]==0)
{
}else if(ALL_Get[5]==1)
{
this.context.drawImage( this.img1,580,1010,80,80)
}else if(ALL_Get[5]==2)
{
this.context.drawImage( this.img2,580,1010,80,80)
}else if(ALL_Get[5]==3)
{
this.context.drawImage( this.img3,580,1010,80,80)
}else if(ALL_Get[5]==4)
{
this.context.drawImage( this.img4,580,1010,80,80)
}else if(ALL_Get[5]==5)
{
this.context.drawImage( this.img5,580,1010,80,80)
}else if(ALL_Get[5]==6)
{
this.context.drawImage( this.img6,580,1010,80,80)
}
}

(8)第一層完成

每次操作后都判斷一次棋盤數組是否都為0,如果都為0的話代表當前層數被清空,進入下一層。

let if_all = 0;
for(let num = 0;num<36;num++)
{
if(Second_set[num]!=0)
{
if_all = 1;
}
}
if(if_all==0)
{
AlertDialog.show({
message: '成功通過第二層'
})
Now_floor = 1
this.Re_fisrt_floor()
}

三、OpenHarmony程序編寫

我們主要使用到了Canvas畫布組件:https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-components-canvas-canvas.md/。

Canvas

說明: 該組件從API Version 8開始支持。后續版本如有新增內容,則采用上角標單獨標記該內容的起始版本。

提供畫布組件,用于自定義繪制圖形。

(1)主要函數

drawImage

drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number): void

drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number, dWidth: number, dHeight: number): void

drawImage(image: ImageBitmap | PixelMap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number):void

進行圖像繪制。

  • 參數

參數

類型

必填

默認值

描述

image

??ImageBitmap???或??PixelMap??

null

圖片資源,請參考ImageBitmap或PixelMap。

sx

number

0

裁切源圖像時距離源圖像左上角的x坐標值。

sy

number

0

裁切源圖像時距離源圖像左上角的y坐標值。

sWidth

number

0

裁切源圖像時需要裁切的寬度。

sHeight

number

0

裁切源圖像時需要裁切的高度。

dx

number

0

繪制區域左上角在x軸的位置。

dy

number

0

繪制區域左上角在y 軸的位置。

dWidth

number

0

繪制區域的寬度。 當繪制區域的寬度和裁剪圖像的寬度不一致時,將圖像寬度拉伸或壓縮為繪制區域的寬度。

dHeight

number

0

繪制區域的高度。 當繪制區域的高度和裁剪圖像的高度不一致時,將圖像高度拉伸或壓縮為繪制區域的高度。

clearRect

clearRect(x: number, y: number, w: number, h: number): void

刪除指定區域內的繪制內容。

  • 參數

參數

類型

必填

默認值

描述

x

number

0

指定矩形上的左上角x坐標。

y

number

0

指定矩形上的左上角y坐標。

width

number

0

指定矩形的寬度。

height

number

0

指定矩形的高度。

fillRect

fillRect(x: number, y: number, w: number, h: number): void

填充一個矩形。

  • 參數

參數

類型

必填

默認值

說明

x

number

0

指定矩形左上角點的x坐標。

y

number

0

指定矩形左上角點的y坐標。

width

number

0

指定矩形的寬度。

height

number

0

指定矩形的高度。

(2)游戲開局渲染

導入背景圖片:

#沖刺創作新星# O了個H(OpenHarmony羊了個羊復刻學習)-開源基礎軟件社區

@Entry
@Component
struct Index {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private img1:ImageBitmap = new ImageBitmap("image/1.png")
private img2:ImageBitmap = new ImageBitmap("image/2.png")
private img3:ImageBitmap = new ImageBitmap("image/3.png")
private img4:ImageBitmap = new ImageBitmap("image/4.png")
private img5:ImageBitmap = new ImageBitmap("image/5.png")
private img6:ImageBitmap = new ImageBitmap("image/6.png")
@State eventType: string = ''
@State text: string = ''
}

(3)設置單元格

我的模擬器參數為:

#沖刺創作新星# O了個H(OpenHarmony羊了個羊復刻學習)-開源基礎軟件社區


所以設置單元格大小為100*100,圖片大小為80x80,同時需要確定下方的欄的坐標位置(可自行摸索)。

(4)開局兩層擺放

Set_Game()
{
Game_buff = Game_buff.sort(() => 0.5 - Math.random())
Re_Game = Game_buff
First = Math.random()*10+10
First = Math.trunc(First)
Second = 36 - First;
/*
Second = Math.random()*20+10
Second = Math.trunc(Second)
Third = 60 - First -Second
*/
ONE_set = ONE_set.sort(() => 0.5 - Math.random())
for(let num=0;num<36;num++)
{
Remember[num] = ONE_set[num]
}
for(let num = 0;num<First;num++)
{
if(Game_buff[num]==1)
{
this.context.drawImage( this.img1,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 1
}else if(Game_buff[num]==2)
{
this.context.drawImage( this.img2,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 2
}else if(Game_buff[num]==3)
{
this.context.drawImage( this.img3,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 3
}else if(Game_buff[num]==4)
{
this.context.drawImage( this.img4,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 4
}else if(Game_buff[num]==5)
{
this.context.drawImage( this.img5,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 5
}else if(Game_buff[num]==6)
{
this.context.drawImage( this.img6,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
fisrt_set[ONE_set[num]] = 6
}
}
this.context.globalAlpha = 0.5
this.context.fillStyle = 'rgb(0,0,0)'
this.context.fillRect(0, 240, 800, 760)
ONE_set = ONE_set.sort(() => 0.5 - Math.random())
for(let num = 0;num<Second;num++)
{
if(Game_buff[num+First]==1)
{
this.context.drawImage( this.img1,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 1
}else if(Game_buff[num+First]==2)
{
this.context.drawImage( this.img2,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 2
}else if(Game_buff[num+First]==3)
{
this.context.drawImage( this.img3,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 3
}else if(Game_buff[num+First]==4)
{
this.context.drawImage( this.img4,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 4
}else if(Game_buff[num]==5)
{
this.context.drawImage( this.img5,(120+((ONE_set[num]%6))*100),(280+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 5
}else if(Game_buff[num]==6)
{
this.context.drawImage( this.img6,(80+((ONE_set[num]%6))*100),(240+(Math.floor((ONE_set[num]/6)))*100),80,80)
Second_set[ONE_set[num]] = 6
}
}
}

由第二部分內容確定邏輯,即可實現游戲初始的渲染部分。

(5)點擊判定

build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('100%')
.height('100%')
.backgroundImage('image/bm.png', ImageRepeat.NoRepeat)
.backgroundImageSize({ width: '100%', height: '100%'})
.onReady(() =>{
this.Set_Game()
/*
this.context.drawImage( this.img1,80,240,80,80)
this.context.drawImage( this.img2,180,340,80,80)
this.context.drawImage( this.img3,280,440,80,80)
this.context.drawImage( this.img4,380,540,80,80)
this.context.drawImage( this.img5,480,640,80,80)
this.context.drawImage( this.img6,580,740,80,80)
*/
})
.onTouch((event: TouchEvent) => {
if (event.type === TouchType.Up) {
this.eventType = 'Up'
this.text = 'TouchType:' + this.eventType + '\nx: '
+ event.touches[0].x + '\n' + 'y: ' + event.touches[0].y
if(event.touches[0].x < 80 && event.touches[0].x > 660)
{
return;
}
if(event.touches[0].y < 240 && event.touches[0].y > 820)
{
return;
}

GET_Key(event.touches[0].x ,event.touches[0].y);
this.Check()
}
})
}
.width('100%')
.height('100%')
}

該部分是引入onTouch函數,得到對應的XY軸坐標,再進行分析得到6*6單元格的坐標進行判定。

事件

名稱

是否冒泡

功能描述

onTouch(callback: (event?: TouchEvent) => void)

觸摸動作觸發該方法調用,event參數見??TouchEvent??介紹。

if(Key_Num>0 && Key_Num<38)     //判定按下是否為單元格區域
{
}
function GET_Key(T_x,T_y)
{
var error_num = 0;
if(T_x< 80 && T_x > 700)
{
Key_Num = 0;
error_num = 1;
}
if(T_y < 240 && T_y > 860)
{
Key_Num = 0;
error_num = 1;
}
if(error_num == 1)
{
Key_Num = 0;
}else {
if (Now_floor == 1) {
Key_Num = Math.ceil((T_x - 80) / 100) + Math.floor((T_y - 240) / 100) * 6;
}
if (Now_floor == 2) {
Key_Num = Math.ceil((T_x - 120) / 100) + Math.floor((T_y - 280) / 100) * 6;
}
}
}

得到坐標后需要判斷是否為單元格區域,如果超出該區域則不進行響應。

(6)第二層繪制

當通過第一層時,因為在第一層和第二層之間有一個灰色圖層。需要進行一次全局刷新,此時通過提前記錄的第一次生成的數據,進行一次更新即可。

Re_fisrt_floor()
{
this.context.clearRect(0, 240, 800, 760)
for(let num = 0;num<First;num++)
{
if(Re_Game[num]==1)
{
this.context.drawImage( this.img1,(80+((Remember[num]%6))*100),(240+(Math.floor((Remember[num]/6)))*100),80,80)
//fisrt_set[ONE_set[num]] = 1
}else if(Re_Game[num]==2)
{
this.context.drawImage( this.img2,(80+((Remember[num]%6))*100),(240+(Math.floor((Remember[num]/6)))*100),80,80)
//fisrt_set[ONE_set[num]] = 2
}else if(Re_Game[num]==3)
{
this.context.drawImage( this.img3,(80+((Remember[num]%6))*100),(240+(Math.floor((Remember[num]/6)))*100),80,80)
//fisrt_set[ONE_set[num]] = 3
}else if(Re_Game[num]==4)
{
this.context.drawImage( this.img4,(80+((Remember[num]%6))*100),(240+(Math.floor((Remember[num]/6)))*100),80,80)
//fisrt_set[ONE_set[num]] = 4
}else if(Re_Game[num]==5)
{
this.context.drawImage( this.img5,(80+((Remember[num]%6))*100),(240+(Math.floor((Remember[num]/6)))*100),80,80)
//fisrt_set[ONE_set[num]] = 5
}else if(Re_Game[num]==6)
{
this.context.drawImage( this.img6,(80+((Remember[num]%6))*100),(240+(Math.floor((Remember[num]/6)))*100),80,80)
// fisrt_set[ONE_set[num]] = 6
}
}
}

(7)游戲成功

如果正確游戲且通過的話,會提示游戲成功(因為有較大的隨機性,不一定一定成功哦,下一期會教大家怎么使用背景音樂!)

if(Now_floor == 1)
{
if(fisrt_set[Key_Num-1]!=0)
{
if(Key_Num%6==0)
{
this.context.clearRect((80+500),(240+(Math.floor((Key_Num/6))-1)*100),80,80) //消除
}else{
this.context.clearRect((80+((Key_Num%6)-1)*100),(240+(Math.floor((Key_Num/6)))*100),80,80) //消除
}
this.Con_Sheep(fisrt_set[Key_Num-1])
fisrt_set[Key_Num-1] = 0
let if_all = 0;
for(let num = 0;num<36;num++)
{
if(fisrt_set[num]!=0)
{
if_all = 1;
}
}
if(if_all==0)
{
AlertDialog.show({
message: '成功通過第一層'
})
Now_floor = 1
//this.Re_fisrt_floor()
}
}
}
if(Now_floor==2)
{
if(Second_set[Key_Num-1]!=0)
{
if(Key_Num==37)
{
Now_floor = 1
this.Re_fisrt_floor()
}
if(Key_Num%6==0)
{
this.context.clearRect((120+500),(280+(Math.floor((Key_Num/6))-1)*100),80,80) //消除
}else{
this.context.clearRect((120+((Key_Num%6)-1)*100),(280+(Math.floor((Key_Num/6)))*100),80,80) //消除
}
this.Con_Sheep(Second_set[Key_Num-1])
Second_set[Key_Num-1] = 0
let if_all = 0;
for(let num = 0;num<36;num++)
{
if(Second_set[num]!=0)
{
if_all = 1;
}
}
if(if_all==0)
{
AlertDialog.show({
message: '成功通過第二層'
})
Now_floor = 1
this.Re_fisrt_floor()
}
}
}

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

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

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2022-10-10 14:57:09

NP游戲

2022-09-27 16:03:51

羊了個羊鴻蒙

2022-09-26 08:30:41

黑客網絡攻擊隱私

2022-09-19 16:31:14

游戲益智游戲機

2022-09-20 16:06:57

Python小程序微信

2022-09-20 15:24:09

程序員項目

2022-03-16 09:49:54

機器人AI技術

2015-08-12 16:32:34

華為/物聯網

2022-09-26 07:25:25

Java 19C++二維碼

2010-02-03 13:25:34

云計算

2022-10-31 06:00:00

華為亞馬遜Chrome

2023-05-22 09:28:30

模型AI

2013-07-29 15:58:28

大數據數據分析

2023-05-15 09:39:37

2015-04-15 10:29:38

Linux 4.0

2023-06-20 07:46:27

數據治理大數據建設

2015-07-30 09:16:03

羊聯網億利華為

2024-05-28 01:00:00

CISO網絡安全
點贊
收藏

51CTO技術棧公眾號

日韩porn| 久久久久久福利| 97久久香蕉国产线看观看| 久久一日本道色综合| 国产91精品网站| 国产手机在线观看| 日韩精品免费观看视频| 国产精品久久久99| 成人女人免费毛片| 精品国产午夜福利| 日韩精品网站| 日韩欧美国产三级电影视频| 亚洲中文字幕无码一区二区三区| 蜜臀av在线观看| 老司机午夜精品视频| 这里只有视频精品| aaaaa黄色片| 裤袜国产欧美精品一区| 亚洲人成小说网站色在线| 国产精品二区三区| 亚洲欧美一二三区| 欧美不卡视频| 精品视频在线播放免| 超碰在线播放91| 久久香蕉一区| 国产精品免费看片| 国产精品初高中精品久久| 日韩精品成人一区| 久久影院100000精品| 精品成人a区在线观看| 亚洲77777| 理论不卡电影大全神| 亚洲色图清纯唯美| 蜜桃成人免费视频| av免费观看网址| 久久亚洲影院| 欧美精品电影在线| 精品丰满少妇一区二区三区| 国产欧美三级电影| 欧美精品久久99| 成人在线免费播放视频| 国产羞羞视频在线播放| 亚洲欧洲一区二区在线播放| 免费观看国产成人| 性生交大片免费看女人按摩| 免费成人美女在线观看| 5566成人精品视频免费| 久久久精品视频在线| 91视频综合| 一区二区欧美激情| 中文字幕一区二区三区人妻电影| 91欧美极品| 91精品欧美一区二区三区综合在| 欧美少妇性生活视频| 欧美v亚洲v| 1000部国产精品成人观看| 欧美一级二级三级九九九| 丰满人妻一区二区| 久久精品国产99国产精品| 国产91在线播放精品91| 国产区一区二区三| 亚洲三级网站| 久久久亚洲精选| 毛片a片免费观看| 91av精品| 久久国产精品久久久久久久久久| 秋霞欧美一区二区三区视频免费 | 一区在线视频| 欧美成人sm免费视频| 在线视频这里只有精品| 日韩国产在线| 日韩亚洲成人av在线| 国产精品一区二区亚洲| 欧美一区二区性| 久热99视频在线观看| 国产无遮挡裸体免费视频| 亚洲第一毛片| 国产精品高潮视频| 99国产在线播放| a美女胸又www黄视频久久| 欧美日韩免费观看一区| 欧美精品电影| 亚洲va中文字幕| 别急慢慢来1978如如2| 99视频这里有精品| 亚洲国产成人91精品| 久久美女免费视频| 欧美在线1区| 日本亚洲欧美成人| 国产日韩欧美中文字幕| 99久久99久久精品国产片果冻| 日本一区二区三区四区高清视频 | 亚洲国产精品成人综合| 日本黄网站色大片免费观看| 午夜伦理福利在线| 在线电影一区二区三区| 久久福利小视频| 欧美电影《睫毛膏》| 久久乐国产精品| 中文字幕免费观看视频| 99久久婷婷国产精品综合| 亚洲啪啪av| 国产直播在线| 欧美一区二区国产| 黄免费在线观看| 狠狠干成人综合网| 国产欧美日韩精品专区| 天天操天天干天天干| 亚洲欧洲另类国产综合| 激情综合网婷婷| 国产精品对白久久久久粗| 在线电影中文日韩| 少妇一级淫片免费放中国| 激情综合五月天| 日本欧美精品久久久| 国产在线美女| 欧美成人乱码一区二区三区| 91香蕉视频污在线观看| 日韩福利电影在线| 狠狠色综合色区| 人交獸av完整版在线观看| 欧美视频三区在线播放| 性欧美成人播放77777| 欧美婷婷在线| 91视频国产一区| 成黄免费在线| 91黄色免费看| 成人影视免费观看| 亚洲麻豆av| 99视频免费观看| 国产1区在线| 欧美人妖巨大在线| 一级片黄色录像| 麻豆精品蜜桃视频网站| 日韩一区二区三区资源| 亚洲成a人片| 亚洲免费电影在线观看| 天堂网一区二区三区| 成人h版在线观看| 国产片侵犯亲女视频播放| 视频在线一区| 九九热精品视频国产| 国产成人三级一区二区在线观看一| 国产精品九色蝌蚪自拍| 91影院在线免费观看视频| 亚洲人妻一区二区三区| 亚洲h动漫在线| 国产极品一区二区| 在线一区视频| 免费久久一级欧美特大黄| 涩涩视频在线| 国产视频亚洲视频| 波多野结衣不卡| 国产日韩欧美综合一区| 激情综合网俺也去| 久久综合成人| 亚洲曰本av电影| 牛牛在线精品视频| 亚洲国产成人久久综合一区| 欧美亚韩一区二区三区| 久久这里只有精品视频网| 国产成人无码av在线播放dvd| 精品久久久久久久| 国产欧美精品va在线观看| www.久久ai| 精品毛片乱码1区2区3区 | 午夜欧美精品久久久久久久| 99精品国产高清在线观看| 搞黄网站在线看| 亚洲欧美制服中文字幕| 亚洲图片视频小说| 亚洲人吸女人奶水| 日韩免费高清一区二区| 日韩国产在线观看一区| 中国成人在线视频| 精品国产一区二区三区不卡蜜臂| 91精品国产成人www| 激情视频在线观看免费| 欧美电影在线免费观看| 日本天堂在线视频| 国产午夜亚洲精品羞羞网站| 亚洲欧美日本一区二区三区| 欧美日韩国产欧| 欧美日韩免费观看一区| gogo大尺度成人免费视频| 国内成人精品视频| 成人免费在线电影| 欧美大片一区二区三区| 色av性av丰满av| 亚洲三级视频在线观看| 第四色在线视频| 免费在线观看精品| 妞干网视频在线观看| 国产日韩欧美一区二区三区| 91最新国产视频| 中国色在线日|韩| zzijzzij亚洲日本成熟少妇| 午夜国产在线观看| 欧美人成免费网站| 国产成人自拍视频在线| 亚洲欧洲性图库| 欧美日韩高清丝袜| 国产凹凸在线观看一区二区| 人人干人人视频| 亚洲午夜一级| 日韩视频在线免费播放| 亚洲欧洲av| 都市激情久久久久久久久久久| 亚洲wwww| 91福利视频在线观看| 丝袜国产在线| www.xxxx精品| 国产亚洲依依| 精品视频中文字幕| 欧美天堂在线视频| 欧美一卡在线观看| 一区二区三区在线免费观看视频 | 久久久国产91| 成人18在线| 日韩久久免费电影| 亚洲欧美高清视频| 日韩午夜小视频| 中文字幕永久在线视频| 一本一道久久a久久精品综合蜜臀| 麻豆91精品91久久久| 亚洲人成影院在线观看| 战狼4完整免费观看在线播放版| 久久人人超碰精品| 在线视频 日韩| 成人av在线资源网| 国产精品嫩草69影院| 国产在线国偷精品免费看| 日本肉体xxxx裸体xxx免费| 日韩精品久久理论片| 欧美亚洲一二三区| 国产情侣久久| 日本韩国欧美在线观看| 亚洲久久一区| 日韩a∨精品日韩在线观看| 欧美日韩亚洲国产精品| 992tv快乐视频| 午夜精品久久久久99热蜜桃导演| 中国成人亚色综合网站| 久久精品影视| 欧洲美女和动交zoz0z| 婷婷中文字幕一区| 色乱码一区二区三区熟女| 91精品秘密在线观看| 欧美大片免费播放| 欧美精品国产一区二区| 欧美中日韩在线| 99热免费精品| aaa毛片在线观看| 视频一区二区三区在线| 国产三级国产精品国产专区50| 九九九久久久精品| 亚洲高清av一区二区三区| 国产精品一级片| 国产免费a级片| caoporn国产一区二区| 在线免费观看麻豆| 国产精品久久久久久久久动漫 | 亚洲在线一区二区| 成功精品影院| 欧美日韩一区在线观看视频| 精品国产一区探花在线观看| 欧美aaa在线观看| 欧美色综合网| 精品一区二区中文字幕| 青青草国产成人av片免费| 香蕉视频xxxx| 99久久久国产精品| 欧美三级视频网站| 亚洲男人的天堂av| 日本熟妇一区二区| 欧洲av一区二区嗯嗯嗯啊| 国产伦精品一区二区三区四区| 精品欧美黑人一区二区三区| 青青草av免费在线观看| 精品国产一区二区三区久久久| 青草影视电视剧免费播放在线观看| 97欧美精品一区二区三区| 姬川优奈av一区二区在线电影| 91精品免费看| 欧美日韩一本| 在线观看日本一区| 9国产精品视频| 中文字幕在线综合| 成人av电影免费观看| 久久视频精品在线观看| 亚洲一二三区不卡| 中国一级特黄视频| 亚洲丁香久久久| 亚洲视频tv| 欧美性受xxxx黑人猛交| 99久久久国产| 日韩av不卡在线播放| 亚洲欧美亚洲| 亚洲老女人av| av一区二区久久| 天天鲁一鲁摸一摸爽一爽| 欧美日韩国产一中文字不卡| 国产女人18毛片18精品| 亚洲天堂av电影| 白浆在线视频| 91久久久久久久久久| 在线日本制服中文欧美| 免费在线黄网站| 精品一区二区免费| 九色porny自拍视频| 亚洲综合一区二区三区| 在线观看中文字幕av| 日韩精品在线观| 女同一区二区免费aⅴ| 91免费在线视频| 成人免费看片39| 日日摸日日碰夜夜爽av| 懂色av一区二区三区蜜臀| 欧美特黄一级片| 欧美视频在线不卡| 国家队第一季免费高清在线观看| 久久久爽爽爽美女图片| 日韩精品一区二区三区中文在线| 亚欧洲精品在线视频免费观看| 亚洲在线播放| 成人手机在线免费视频| 亚洲一级二级三级| 99国产精品久久久久久久成人| 最近2019中文字幕一页二页| 美女100%一区| 欧美日韩一区二区三区在线观看免| 亚洲久久一区| 超碰97在线资源站| 五月综合激情婷婷六月色窝| 二区三区在线视频| 欧美乱大交做爰xxxⅹ性3| 成人国产精品一区二区网站| 一区二区不卡视频| 精品一区二区三区免费毛片爱| 成人18视频免费69| 欧美日韩一区 二区 三区 久久精品| 久青青在线观看视频国产| 91av国产在线| 亚洲第一福利专区| 777米奇影视第四色| 久久久一区二区三区| 黄色一级视频免费看| 亚洲欧美制服第一页| 粉嫩av一区二区三区四区五区 | 国产福利在线| 国产精品久久久久久一区二区| 国产欧美日韩视频在线| 日本成人中文字幕在线| 国产日韩一级二级三级| 中文字幕二区三区| 久久精品中文字幕| 日韩精品成人在线观看| www.avtt| 久久这里只有精品视频网| 波多野结衣不卡| 日韩视频中文字幕| 欧美国产中文高清| 国产不卡一区二区视频| 91老司机福利 在线| 91视频久久久| x99av成人免费| 高清欧美性猛交xxxx黑人猛| 男女视频网站在线观看| 久久综合九色综合97婷婷女人| 波多野结衣绝顶大高潮| xxx一区二区| 国产一区福利| 波多结衣在线观看| 一区二区三区四区国产精品| 神马午夜电影一区二区三区在线观看| 国产91精品久久久久久| 日韩国产专区| 中文字幕99页| 欧美影院精品一区| 日本不卡影院| 日本一区视频在线观看| 国产精品一区二区免费不卡| 成人毛片18女人毛片| 日韩视频中文字幕| 欧美日韩精品一区二区三区在线观看| 日本久久精品一区二区| 一区二区三区日韩欧美精品| 女人天堂在线| 91精品综合久久久久久五月天| 亚洲欧洲日本mm| 五月天婷婷丁香网| 亚洲成人久久久久| 日本久久二区| 日日碰狠狠添天天爽超碰97| 国产精品久久久久久久久搜平片| 人妻少妇精品无码专区久久| 国产精品久久久久久av下载红粉| 欧美视频久久| 天天色天天综合| 亚洲女人被黑人巨大进入|