【移動應用開發(fā)技術】自己寫的HTML5 Canvas + Javascript五_第1頁
【移動應用開發(fā)技術】自己寫的HTML5 Canvas + Javascript五_第2頁
【移動應用開發(fā)技術】自己寫的HTML5 Canvas + Javascript五_第3頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【移動應用開發(fā)技術】自己寫的HTML5Canvas+Javascript五

看到一些曾經只會灌水的網友,在學習了前端之后,已經能寫出下載量幾千幾萬的腳本、樣式,幫助大眾,成為受歡迎的人,感覺滿羨慕的。我也想學會前端技術,變得受歡迎呀。于是心血來潮,開始學習前端知識,并寫下了這個小練習?;舅悸肥沁@樣的:使用Canvas繪制棋盤、棋子。用二維數組保存棋盤狀態(tài)。設置一個flag,用以標識落子順序。點擊時,在數組中檢測當前點擊位置是否存在棋子,若存在,則不落子;如游戲已結束,亦不落子。落子時,更新數組,并將當前落子所在的行、列、左上-右下列、左下-右上列四個方向的棋盤狀態(tài)寫入到一維數組中,用以判斷新落子是否形成了五子連珠。若形成了五子連珠,提示勝利,并結束游戲;反之,則交換順序,繼續(xù)進行游戲。效果圖:

代碼如下:

1

<!DOCTYPE

html>

2

<html

lang="zh-CN">

3

<meta

charset="utf-8">

4

<head><title>五子棋</title></head>

5

<body>

6

<canvas

id="myCanvas"

width="560"

height="560"

>

7

您的瀏覽器不支持

HTML5

canvas

標簽。</canvas>

<br/>

8

<button

id="reset"

onclick="controller.init(ctx)">重置</button>

9

</body>

10

<script>

11

var

controller

=

{

12

round:true,

13

color:"black",

14

whiteTable:new

Array(),

15

blackTable:new

Array(),

16

row:0,

17

col:0,

18

over:false,

19

trans:function()

{

20

this.round

=

!this.round;

21

if

(!this.round)

{

22

this.blackTable[this.row][this.col]

=

1;

23

this.ifWin(this.blackTable)

24

this.color

=

"white";

25

}

26

else

{

27

this.whiteTable[this.row][this.col]

=

1;

28

this.ifWin(this.whiteTable)

29

this.color

=

"black";

30

}

31

},

32

ifWin:function(table)

{

33

var

arr1

=

new

Array();

34

var

arr2

=

new

Array();

35

var

arr3

=

new

Array();

36

var

arr4

=

new

Array();

37

var

n

=

0;

38

for(x

=

0;

x<=

lineNums;

x++)

{

39

for(y

=

0;

y

<=

lineNums;

y++)

40

{

41

var

x1

=

this.row

-

n;

42

var

x2

=

this.row

+

n;

43

var

y1

=

this.col

-

n;

44

var

y2

=

this.col

+

n;

45

if(y

==

this.col)

{

46

arr1[x]

=

table[x][y];

47

}

48

if(x

==

this.row)

{

49

arr2[y]

=

table[x][y];

50

}

51

}

52

if(this.inBounds(x1)

&&

this.inBounds(y2))

{

53

arr3[x1]

=

table[x1][y2];

54

}

55

if(this.inBounds(x1)

&&

this.inBounds(y1))

{

56

arr4[x1]

=

table[x1][y1];

57

}

58

if(this.inBounds(x2)

&&

this.inBounds(y1))

{

59

arr3[x2]

=

table[x2][y1];

60

}

61

if(this.inBounds(x2)

&&

this.inBounds(y2))

{

62

arr4[x2]

=

table[x2][y2];

63

}

64

n

=

n

+

1;

65

}

66

this.getSum(arr1,

this.row);

67

this.getSum(arr2,

this.col);

68

this.getSum(arr3,

this.row);

69

this.getSum(arr4,

this.row);

70

},

71

inBounds:function(i)

{

72

if(i>=0

&&

i<=15){

73

return

true;

74

}

75

else{

76

return

false;

77

}

78

},

79

getSum:function(array,

pos)

{

80

num

=

5;

81

posr

=

pos

+

1;

82

while(num

>

0){

83

if(array[pos]>0

&&

this.inBounds(pos))

{

84

num

=

num

-

1;

85

pos

=

pos

-

1;

86

}

87

else{

88

break;

89

}

90

}

91

while(num

>

0){

92

if(array[posr]>0

&&

this.inBounds(pos))

{

93

num

=

num

-

1;

94

posr

=

posr

+

1;

95

}

96

else

{

97

break;

98

}

99

}100

if(num

==

0)

{101

this.over

=

true;102

this.gameOver();103

}

104

},105

exist:function(x,

y)

{106

this.row

=

x

/

ratio;107

this.col

=

y

/

ratio;108

var

nums

=

this.whiteTable[this.row][this.col]

+

this.blackTable[this.row][this.col];109

if(

nums

>

0

{110

return

true;111

}112

else{113

return

false;114

}115

},116

gameOver:function()

{117

ctx.font="30px

Arial";118

ctx.fillStyle

=

"#FF0000";119

if(this.round)

{120

ctx.fillText("白棋勝利",240,240);121

}122

else

{123

ctx.fillText("黑棋勝利",240,240);124

}125

},126

init:function()

{127

this.round

=

true;128

this.color

=

"black";129

this.over

=

false;130

this.drawBoard();131

for(i

=

0;

i<=

lineNums;

i++)

{

132

this.whiteTable[i]=new

Array();133

this.blackTable[i]=new

Array();134

for(n

=

0;

n

<=

lineNums;

n++)

{

135

this.whiteTable[i][n]=0;

136

this.blackTable[i][n]=0;137

}

138

}

139

},140

drawBoard:function()

{141

ctx.beginPath();142

ctx.clearRect(0,0,width,width);143

ctx.fillStyle

=

"#FFBB00";144

ctx.fillRect(0,0,width,width);145

for(var

i

=

1;

i

<

(lineNums

-

1);

i++)

{146

ctx.moveTo(i

*

ratio,

0);147

ctx.lineTo(i

*

ratio,

width);148

ctx.stroke();149

ctx.moveTo(0,

i

*

ratio);150

ctx.lineTo(width,

i

*

ratio);151

ctx.stroke();152

}153

},154

drawPiece:function(posX,

posY)

{155

ctx.beginPath();156

ctx.arc(posX,

posY,

ratio/2,

0,

2*Math.PI);157

ctx.fillStyle

=

this.color;158

ctx.fill();159

ctx.stroke();

160

}161

};

162

//獲取點擊位置163

function

getMousePos(canvas,

evt)

{

164

var

rect

=

canvas.getBoundingClientRect();

165

return

{

166

x:

evt.clientX

-

rect.left

*

(canvas.width

/

rect.width),167

y:

evt.clientY

-

rect.top

*

(canvas.height

/

rect.height)168

}169

}170

171

function

getNode(pos)

{172

return

((pos

/

ratio).toFixed())

*

ratio;173

}174

1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論