1
+ const GameBoard = ( ( ) => {
2
+ const size = 3 ;
3
+ let gameboard = [ [ "" , "" , "" ] , [ "" , "" , "" ] , [ "" , "" , "" ] ] ;
4
+
5
+ const getGameBoard = ( ) => gameboard ;
6
+
7
+ const displayGameBoard = ( ) => {
8
+ let rows = gameboard . length ;
9
+ let cols = gameboard [ 0 ] . length ;
10
+ let gameboardDiv = document . querySelector ( "#gameboard" ) ;
11
+ for ( var row = 0 ; row < rows ; row ++ ) {
12
+ for ( var col = 0 ; col < cols ; col ++ ) {
13
+ var cell = document . createElement ( "div" ) ;
14
+ if ( gameboard [ row ] [ col ] === "" ) {
15
+ cell . innerHTML = gameboard [ row ] [ col ] ;
16
+ } else {
17
+ cell . appendChild ( gameboard [ row ] [ col ] )
18
+ }
19
+ cell . id = [ row , col ] ;
20
+ cell . setAttribute ( "class" , "cell" ) ;
21
+ gameboardDiv . appendChild ( cell ) ;
22
+
23
+ cell . style . top = row * 110 + "px" ;
24
+ cell . style . left = col * 110 + "px" ;
25
+ }
26
+ }
27
+ } ;
28
+
29
+ const play = ( player , row , col ) => {
30
+ symbol = player . getSymbol ( ) ;
31
+ gameboard [ row ] [ col ] = symbol ;
32
+ displayGameBoard ( ) ;
33
+ if ( GameBoard . gameOver ( symbol , row , col ) == 0 ) {
34
+ document . getElementById ( "winner" ) . innerHTML = ( "The game is over! " + player . getName ( ) + " is the winner!" ) ;
35
+ } else if ( GameBoard . gameOver ( symbol , row , col ) == 1 ) {
36
+ document . getElementById ( "winner" ) . innerHTML = ( "It is a draw!" )
37
+ } else {
38
+ Game . listen ( ) ;
39
+ Game . increaseMoveCount ( ) ;
40
+ }
41
+ } ;
42
+
43
+ const gameOver = ( symbol , row , col ) => {
44
+ for ( var i = 0 ; i < size ; i ++ ) {
45
+ if ( gameboard [ row ] [ i ] . alt != symbol . alt ) {
46
+ break ;
47
+ }
48
+ if ( i == size - 1 ) {
49
+ return 0 ;
50
+ }
51
+ }
52
+
53
+ for ( var i = 0 ; i < size ; i ++ ) {
54
+ if ( gameboard [ i ] [ col ] . alt != symbol . alt ) {
55
+ break ;
56
+ }
57
+ if ( i == size - 1 ) {
58
+ return 0 ;
59
+ }
60
+ }
61
+
62
+ if ( row == col ) {
63
+ for ( var i = 0 ; i < size ; i ++ ) {
64
+ if ( gameboard [ i ] [ i ] . alt != symbol . alt ) {
65
+ break ;
66
+ }
67
+ if ( i == size - 1 ) {
68
+ return 0 ;
69
+ }
70
+ }
71
+ }
72
+ if ( row + col == size - 1 ) {
73
+ for ( var i = 0 ; i < size ; i ++ ) {
74
+ if ( gameboard [ i ] [ size - 1 - i ] . alt != symbol . alt ) {
75
+ break ;
76
+ }
77
+ if ( i == size - 1 ) {
78
+ return 0 ;
79
+ }
80
+ }
81
+ }
82
+ if ( Game . getMoveCount ( ) >= ( size * size - 1 ) ) {
83
+ return 1
84
+ }
85
+ }
86
+
87
+ const clearBoard = ( ) => {
88
+ gameboard = [ [ "" , "" , "" ] , [ "" , "" , "" ] , [ "" , "" , "" ] ] ;
89
+ }
90
+
91
+ return { getGameBoard, displayGameBoard, play, gameOver, clearBoard} ;
92
+ } ) ( ) ;
93
+
94
+ const Player = ( symbol , name ) => {
95
+ const getSymbol = ( ) => symbol ;
96
+ const getName = ( ) => name ;
97
+ return { getSymbol, getName} ;
98
+ } ;
99
+
100
+ const Game = ( ( ) => {
101
+
102
+ let turn = false ;
103
+
104
+ let moveCount = 0 ;
105
+
106
+ GameBoard . displayGameBoard ( ) ;
107
+
108
+ const getMoveCount = ( ) => {
109
+ return moveCount ;
110
+ } ;
111
+
112
+ const increaseMoveCount = ( ) => {
113
+ moveCount ++ ;
114
+ } ;
115
+
116
+ const listen = ( ) => {
117
+ player1Name = document . getElementById ( "player1" ) . value ;
118
+ player2Name = document . getElementById ( "player2" ) . value ;
119
+
120
+ symbolX = document . createElement ( "img" ) ;
121
+ symbolX . src = "images/tic-tac-toe-x.png"
122
+ symbolX . width = 100 ;
123
+ symbolX . alt = "x"
124
+
125
+ symbolO = document . createElement ( "img" ) ;
126
+ symbolO . src = "images/tic-tac-toe-o.png"
127
+ symbolO . width = 90 ;
128
+ symbolO . alt = "o"
129
+
130
+
131
+ const player1 = Player ( symbolX , player1Name ) ;
132
+ const player2 = Player ( symbolO , player2Name ) ;
133
+
134
+ const cells = document . getElementsByClassName ( "cell" ) ;
135
+ if ( turn ) {
136
+ player = player2 ;
137
+ turn = false ;
138
+ } else {
139
+ player = player1 ;
140
+ turn = true ;
141
+ }
142
+ Array . from ( cells ) . forEach ( ( cell ) => {
143
+ cell . addEventListener ( "click" , function ( ) {
144
+ if ( GameBoard . getGameBoard ( ) [ cell . id [ 0 ] ] [ cell . id [ 2 ] ] === "" ) {
145
+ GameBoard . play ( player , parseInt ( cell . id [ 0 ] ) , parseInt ( cell . id [ 2 ] ) )
146
+ }
147
+ } )
148
+ } ) ;
149
+ } ;
150
+
151
+ const reset = ( ) => {
152
+ window . location . reload ( ) ;
153
+ }
154
+ return { listen, moveCount, getMoveCount, increaseMoveCount, reset} ;
155
+ } ) ( ) ;
156
+
157
+ document . getElementById ( "start" ) . addEventListener ( "click" , function ( ) {
158
+ player1Name = document . getElementById ( "player1" ) . value ;
159
+ player2Name = document . getElementById ( "player2" ) . value ;
160
+
161
+ if ( player1Name === '' || player2Name === '' ) {
162
+ alert ( "Please input your names!" ) ;
163
+ } else {
164
+ Game . listen ( ) ;
165
+ }
166
+ } )
167
+
168
+ document . getElementById ( "reset" ) . addEventListener ( "click" , function ( ) {
169
+ Game . reset ( ) ;
170
+ } )
0 commit comments