started implementing local game rules in game_manager
This commit is contained in:
parent
b327faba6c
commit
8f18813827
@ -8,6 +8,9 @@ class GameManager
|
||||
|
||||
this.dummy_player = new Player("test_player", "rgb(0,128,0)");
|
||||
|
||||
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.grid.player_change_listener(this.dummy_player);
|
||||
|
||||
// possible modes:
|
||||
@ -26,6 +29,9 @@ class GameManager
|
||||
{
|
||||
// TODO: dummy
|
||||
console.log("click");
|
||||
|
||||
var subgrid = this.grid.subgrids[sub_y][sub_x];
|
||||
var tile = subgrid.cells[y][x];
|
||||
}
|
||||
|
||||
register_game_mode_change_listener(func)
|
||||
@ -43,13 +49,18 @@ class GameManager
|
||||
start_local_game()
|
||||
{
|
||||
this.set_game_mode("local");
|
||||
this.grid.unblock_all();
|
||||
this.grid.deactivate_all();
|
||||
this.grid.unblock_all();
|
||||
}
|
||||
|
||||
end_game()
|
||||
{
|
||||
this.set_game_mode("none");
|
||||
this.grid.unblock_all();
|
||||
this.grid.block_all();
|
||||
}
|
||||
|
||||
on_local_game_move(sub_x, sub_y, x, y)
|
||||
{
|
||||
//checking whether one
|
||||
}
|
||||
}
|
2
grid.js
2
grid.js
@ -8,6 +8,8 @@ class Grid
|
||||
this.tile_height = tile_height;
|
||||
this.ground_color = ground_color;
|
||||
|
||||
this.won_player = null;
|
||||
|
||||
this.subgrids = []
|
||||
|
||||
console.log("create grid of size " + this.n);
|
||||
|
@ -4,6 +4,7 @@ class Player
|
||||
{
|
||||
this.name = name;
|
||||
this.color = color;
|
||||
this.id = name;
|
||||
}
|
||||
|
||||
set_name(name)
|
||||
@ -18,7 +19,12 @@ class Player
|
||||
|
||||
get_name()
|
||||
{
|
||||
return this.name
|
||||
return this.name;
|
||||
}
|
||||
|
||||
get_id()
|
||||
{
|
||||
return this.id;
|
||||
}
|
||||
|
||||
get_color()
|
||||
|
72
subgrid.js
72
subgrid.js
@ -8,6 +8,7 @@ class Subgrid
|
||||
this.tile_width = tile_width;
|
||||
|
||||
this.cells = [];
|
||||
this.won_player = null;
|
||||
|
||||
this.sub_x = sub_x;
|
||||
this.sub_y = sub_y;
|
||||
@ -58,7 +59,75 @@ class Subgrid
|
||||
|
||||
click_listener(x,y)
|
||||
{
|
||||
this.click_callback(this.sub_x, this.sub_y, x, y);
|
||||
// check whether this subfield is won
|
||||
|
||||
if (this.won_player == null)
|
||||
{
|
||||
var i;
|
||||
var player = this.cells[y][x].get_activated_player();
|
||||
|
||||
// check column
|
||||
var is_col = true;
|
||||
for (i = 0; i < this.n; i++)
|
||||
{
|
||||
if (!this.cells[i][x].get_is_activated() || player.get_id() != this.cells[i][x].get_activated_player().get_id())
|
||||
{
|
||||
is_col = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// check row
|
||||
var is_row = true;
|
||||
for (i = 0; i < this.n; i++)
|
||||
{
|
||||
if (!this.cells[y][i].get_is_activated() || player.get_id() != this.cells[y][i].get_activated_player().get_id())
|
||||
{
|
||||
is_row = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// check diag:
|
||||
|
||||
// main diag
|
||||
var is_main_diag = false;
|
||||
if (x == y)
|
||||
{
|
||||
is_main_diag = true;
|
||||
for (i = 0; i < this.n; i++)
|
||||
{
|
||||
if (!this.cells[i][i].get_is_activated() || player.get_id() != this.cells[i][i].get_activated_player().get_id())
|
||||
{
|
||||
is_main_diag = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// secundary diag
|
||||
var is_sec_diag = false;
|
||||
if (x + y == this.n - 1)
|
||||
{
|
||||
is_sec_diag = true;
|
||||
for (i = 0; i < this.n; i++)
|
||||
{
|
||||
if (!this.cells[i][this.n - i - 1].get_is_activated() || player.get_id() != this.cells[i][this.n - i - 1].get_activated_player().get_id())
|
||||
{
|
||||
is_sec_diag = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_row || is_col || is_main_diag || is_sec_diag)
|
||||
{
|
||||
this.won_player = player;
|
||||
this.subgrid_container_div.style.backgroundColor = player.get_color();
|
||||
}
|
||||
}
|
||||
|
||||
this.click_callback(this.sub_x, this.sub_y, x, y);
|
||||
}
|
||||
|
||||
player_change_listener(player)
|
||||
@ -103,6 +172,7 @@ class Subgrid
|
||||
this.cells[y][x].deactivate();
|
||||
}
|
||||
}
|
||||
this.subgrid_container_div.style.backgroundColor = ""; // reset to css color
|
||||
}
|
||||
|
||||
block()
|
||||
|
14
tile.js
14
tile.js
@ -18,6 +18,8 @@ class Tile
|
||||
this.div.style.transform = "translate( calc( " + x + "*" + w + "), calc(" + y + "*" + h + "))";
|
||||
|
||||
this.player = null;
|
||||
|
||||
this.activated_player = null;
|
||||
this.reset();
|
||||
this.bind();
|
||||
|
||||
@ -61,6 +63,16 @@ class Tile
|
||||
this.deactivate();
|
||||
}
|
||||
|
||||
get_is_activated()
|
||||
{
|
||||
return this.is_activated;
|
||||
}
|
||||
|
||||
get_activated_player()
|
||||
{
|
||||
return this.activated_player;
|
||||
}
|
||||
|
||||
lock()
|
||||
{
|
||||
this.locked = true;
|
||||
@ -76,6 +88,7 @@ class Tile
|
||||
deactivate()
|
||||
{
|
||||
this.is_activated = false;
|
||||
this.activated_player = null;
|
||||
this.elem.style.background = this.ground_color;
|
||||
this.elem.style.opacity = 0.3;
|
||||
this.elem.style.border = "none";
|
||||
@ -84,6 +97,7 @@ class Tile
|
||||
activate()
|
||||
{
|
||||
this.is_activated = true;
|
||||
this.activated_player = this.player;
|
||||
this.elem.style.background = this.player.get_color();
|
||||
this.elem.style.opacity = 1.0;
|
||||
this.elem.style.border = "2px solid rgba(255,255,255,0.3)";
|
||||
|
Loading…
Reference in New Issue
Block a user