local version done
This commit is contained in:
		| @ -10,6 +10,7 @@ class GameManager | ||||
|  | ||||
|         this.local_player_a = new Player("red player", "rgb(128,0,0)"); | ||||
|         this.local_player_b = new Player("green player", "rgb(0,128,0"); | ||||
|         this.is_local_player_a = false;; | ||||
|  | ||||
|         this.grid.player_change_listener(this.dummy_player); | ||||
|  | ||||
| @ -27,11 +28,19 @@ class GameManager | ||||
|  | ||||
|     click_listener(sub_x, sub_y, x,y) | ||||
|     { | ||||
|         // TODO: dummy | ||||
|         console.log("click"); | ||||
|  | ||||
|         var subgrid = this.grid.subgrids[sub_y][sub_x]; | ||||
|         var tile = subgrid.cells[y][x]; | ||||
|         if (this.game_mode == "local") | ||||
|         { | ||||
|             // check whether the game is over: | ||||
|             if (grid.is_won()) | ||||
|             { | ||||
|                 this.status_change_listener("" + grid.get_won_player().get_name() + " has won.") | ||||
|                 this.end_game(); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 this.toggle_local_player(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     register_game_mode_change_listener(func) | ||||
| @ -39,6 +48,11 @@ class GameManager | ||||
|         this.game_mode_change_listener = func; | ||||
|     } | ||||
|  | ||||
|     register_status_change_listener(func) | ||||
|     { | ||||
|         this.status_change_listener = func; | ||||
|     } | ||||
|  | ||||
|     set_game_mode(mode) | ||||
|     { | ||||
|         this.game_mode = mode; | ||||
| @ -51,6 +65,20 @@ class GameManager | ||||
|         this.set_game_mode("local"); | ||||
|         this.grid.deactivate_all(); | ||||
|         this.grid.unblock_all(); | ||||
|  | ||||
|         this.is_local_player_a = false; | ||||
|  | ||||
|         this.toggle_local_player(); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     toggle_local_player() | ||||
|     { | ||||
|         this.is_local_player_a = !this.is_local_player_a; | ||||
|         var next_player = this.is_local_player_a ? this.local_player_a : this.local_player_b; | ||||
|          | ||||
|         this.status_change_listener("" + "it's " + next_player.get_name() + "s turn..."); | ||||
|         this.grid.player_change_listener(next_player); | ||||
|     } | ||||
|  | ||||
|     end_game() | ||||
| @ -58,9 +86,4 @@ class GameManager | ||||
|         this.set_game_mode("none"); | ||||
|         this.grid.block_all(); | ||||
|     } | ||||
|  | ||||
|     on_local_game_move(sub_x, sub_y, x, y) | ||||
|     { | ||||
|         //checking whether one | ||||
|     } | ||||
| } | ||||
							
								
								
									
										86
									
								
								grid.js
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								grid.js
									
									
									
									
									
								
							| @ -46,6 +46,7 @@ class Grid | ||||
|  | ||||
|     click_listener(sub_x, sub_y, x,y) | ||||
|     { | ||||
|         this.check_win(sub_x, sub_y, x, y); | ||||
|         this.click_callback(sub_x, sub_y, x,y);  | ||||
|     } | ||||
|  | ||||
| @ -61,6 +62,89 @@ class Grid | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     is_won() | ||||
|     { | ||||
|         return this.won_player != null; | ||||
|     } | ||||
|  | ||||
|     get_won_player() | ||||
|     { | ||||
|         return this.won_player; | ||||
|     } | ||||
|  | ||||
|     check_win(sub_x, sub_y, x,y) | ||||
|     { | ||||
|         // check whether the game is won | ||||
|         console.log("check for win"); | ||||
|         if (this.won_player == null) | ||||
|         { | ||||
|             var i; | ||||
|             var subgrid = this.subgrids[sub_y][sub_x]; | ||||
|             var player = subgrid.cells[y][x].get_activated_player(); | ||||
|  | ||||
|             // check column | ||||
|             var is_col = true; | ||||
|             for (i = 0; i < this.n; i++) | ||||
|             { | ||||
|                 if (!this.subgrids[i][sub_x].is_won() || player.get_id() != this.subgrids[i][sub_x].get_won_player().get_id()) | ||||
|                 { | ||||
|                     is_col = false; | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // check row | ||||
|             var is_row = true; | ||||
|             for (i = 0; i < this.n; i++) | ||||
|             { | ||||
|                 if (!this.subgrids[sub_y][i].is_won() || player.get_id() != this.subgrids[sub_y][i].get_won_player().get_id()) | ||||
|                 { | ||||
|                     is_row = false; | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // check diag: | ||||
|  | ||||
|             // main diag | ||||
|             var is_main_diag = false; | ||||
|             if (sub_x == sub_y) | ||||
|             { | ||||
|                 is_main_diag = true; | ||||
|                 for (i = 0; i < this.n; i++) | ||||
|                 { | ||||
|                     if (!this.subgrids[i][i].is_won() || player.get_id() != this.subgrids[i][i].get_won_player().get_id()) | ||||
|                     { | ||||
|                         is_main_diag = false; | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // secundary diag | ||||
|             var is_sec_diag = false; | ||||
|             if (sub_x + sub_y == this.n - 1) | ||||
|             { | ||||
|                 is_sec_diag = true; | ||||
|                 for (i = 0; i < this.n; i++) | ||||
|                 { | ||||
|                     if (!this.subgrids[i][this.n - i - 1].is_won() || player.get_id() != this.subgrids[i][this.n - i - 1].get_won_player().get_id()) | ||||
|                     { | ||||
|                         is_sec_diag = false; | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (is_row || is_col || is_main_diag || is_sec_diag) | ||||
|             { | ||||
|                 this.won_player = player; | ||||
|                 console.log("game over"); | ||||
|                 //this.grid_container_div.style.backgroundColor = player.get_color(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     activate_all() | ||||
|     { | ||||
|         var x,y; | ||||
| @ -83,6 +167,8 @@ class Grid | ||||
|                 this.subgrids[y][x].deactivate_all(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         this.won_player = null; | ||||
|     } | ||||
|  | ||||
|     block_all() | ||||
|  | ||||
							
								
								
									
										10
									
								
								sidebar.js
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								sidebar.js
									
									
									
									
									
								
							| @ -51,7 +51,7 @@ class Sidebar | ||||
|         // status area: | ||||
|         this.info_container.appendChild(this.create_label("status")); | ||||
|  | ||||
|         this.status_text = this.create_label("..."); | ||||
|         this.status_text = this.create_label("select gamemode"); | ||||
|         this.info_container.appendChild(this.status_text); | ||||
|  | ||||
|         this.info_container.style.display = "none"; | ||||
| @ -64,6 +64,7 @@ class Sidebar | ||||
|     { | ||||
|         // TODO | ||||
|         this.game_manager.register_game_mode_change_listener((c) => this.game_mode_change_listener(c)); | ||||
|         this.game_manager.register_status_change_listener((c) => this.status_change_listener(c)); | ||||
|  | ||||
|         this.b_local.addEventListener("click", () => this.game_manager.start_local_game()); | ||||
|         this.b_end_game.addEventListener("click", () => this.game_manager.end_game()); | ||||
| @ -110,7 +111,7 @@ class Sidebar | ||||
|         { | ||||
|             this.activate_create_game(); | ||||
|             this.deactivate_control(); | ||||
|             this.deactivate_info(); | ||||
|             this.activate_info(); | ||||
|             return | ||||
|         } | ||||
|         if (gamemode == "local") | ||||
| @ -121,6 +122,11 @@ class Sidebar | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     status_change_listener(statustext) | ||||
|     { | ||||
|         this.status_text.innerHTML = statustext; | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
| } | ||||
							
								
								
									
										62
									
								
								subgrid.js
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								subgrid.js
									
									
									
									
									
								
							| @ -56,8 +56,45 @@ class Subgrid | ||||
|         this.click_callback = func; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     click_listener(x,y) | ||||
|     { | ||||
|          | ||||
|         this.check_win(x,y); | ||||
|  | ||||
|         this.click_callback(this.sub_x, this.sub_y, x, y); | ||||
|     } | ||||
|  | ||||
|     player_change_listener(player) | ||||
|     { | ||||
|         var x,y; | ||||
|         for (y = 0; y < this.n; y++) | ||||
|         { | ||||
|             for (x = 0; x < this.n; x++) | ||||
|             { | ||||
|                 this.cells[y][x].player_change_listener(player); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     unlock_request_listener(x,y) | ||||
|     { | ||||
|         // TODO: unused so far | ||||
|  | ||||
|         //return this.unlock_request_callback(x,y); | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     is_won() | ||||
|     { | ||||
|         return this.won_player != null; | ||||
|     } | ||||
|  | ||||
|     get_won_player() | ||||
|     { | ||||
|         return this.won_player; | ||||
|     } | ||||
|  | ||||
|     check_win(x,y) | ||||
|     { | ||||
|         // check whether this subfield is won | ||||
|          | ||||
| @ -126,28 +163,6 @@ class Subgrid | ||||
|                 this.subgrid_container_div.style.backgroundColor = player.get_color(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         this.click_callback(this.sub_x, this.sub_y, x, y); | ||||
|     } | ||||
|  | ||||
|     player_change_listener(player) | ||||
|     { | ||||
|         var x,y; | ||||
|         for (y = 0; y < this.n; y++) | ||||
|         { | ||||
|             for (x = 0; x < this.n; x++) | ||||
|             { | ||||
|                 this.cells[y][x].player_change_listener(player); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     unlock_request_listener(x,y) | ||||
|     { | ||||
|         // TODO: unused so far | ||||
|  | ||||
|         //return this.unlock_request_callback(x,y); | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     activate_all() | ||||
| @ -172,6 +187,7 @@ class Subgrid | ||||
|                 this.cells[y][x].deactivate(); | ||||
|             } | ||||
|         } | ||||
|         this.won_player = null; | ||||
|         this.subgrid_container_div.style.backgroundColor = ""; // reset to css color | ||||
|     } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user