Commit b5472d6e authored by Arnaud B.'s avatar Arnaud B.

Make more generic.

parent acf15743
......@@ -21,6 +21,12 @@
using Gtk;
private const uint8 BOARD_COLUMNS = 7;
private const uint8 BOARD_COLUMNS_MINUS_ONE = 6;
private const uint8 BOARD_ROWS = 6;
private const uint8 BOARD_ROWS_PLUS_ONE = 7;
private const uint8 BOARD_SIZE = 7; // as long as that is needed, impossible to have n_rows != n_cols - 1
private class FourInARow : Gtk.Application
{
private GLib.Settings settings = new GLib.Settings ("org.gnome.Four-in-a-row");
......@@ -345,7 +351,7 @@ private class FourInARow : Gtk.Application
vstr [0] = vlevel [ai_level];
playgame_timeout = Timeout.add (COMPUTER_INITIAL_DELAY, () => {
int c = playgame ((string) vstr) - 1;
if (c > 6)
if (c > BOARD_COLUMNS_MINUS_ONE)
assert_not_reached ();
if (c < 0)
return Source.REMOVE;
......@@ -501,7 +507,7 @@ private class FourInARow : Gtk.Application
int col = playgame ((string) vstr) - 1;
if (col < 0)
gameover = true;
else if (col > 6)
else if (col > BOARD_COLUMNS_MINUS_ONE)
assert_not_reached ();
var nm = new NextMove ((uint8) col, this);
Timeout.add (SPEED_DROP, nm.exec);
......@@ -766,7 +772,7 @@ private class FourInARow : Gtk.Application
vstr [0] = vlevel [/* strong */ 3];
int _c = playgame ((string) vstr) - 1;
if (_c < 0 || _c > 6)
if (_c < 0 || _c > BOARD_COLUMNS_MINUS_ONE)
assert_not_reached ();
c = (uint8) _c;
......@@ -777,7 +783,7 @@ private class FourInARow : Gtk.Application
var temp = new Animate (0, this);
timeout = Timeout.add (SPEED_MOVE, temp.exec);
blink_tile (0, c, game_board [0, c], 3);
blink_tile (0, c, game_board [0, c], /* blink n times */ 3);
/* Translators: text displayed in the headerbar/actionbar, when a hint is requested; the %d is replaced by the number of the suggested column */
s = _("Hint: Column %d").printf (c + 1);
......@@ -915,7 +921,7 @@ private class FourInARow : Gtk.Application
}
else if (key == "Right" || event.keyval == keypress_right)
{
if (column >= 6)
if (column >= BOARD_COLUMNS_MINUS_ONE)
return false;
column_moveto++;
move_cursor (column_moveto);
......
......@@ -69,8 +69,8 @@ private class GameBoardView : Gtk.DrawingArea
int allocated_width = get_allocated_width ();
int allocated_height = get_allocated_height ();
int size = int.min (allocated_width, allocated_height);
tile_size = size / 7;
board_size = tile_size * 7;
tile_size = size / BOARD_SIZE;
board_size = tile_size * BOARD_SIZE;
board_x = (allocated_width - board_size) / 2;
board_y = (allocated_height - board_size) / 2;
......@@ -100,8 +100,8 @@ private class GameBoardView : Gtk.DrawingArea
cr.restore ();
/* tiles */
for (uint8 row = 0; row < 7; row++)
for (uint8 col = 0; col < 7; col++)
for (uint8 row = 0; row < BOARD_ROWS_PLUS_ONE; row++)
for (uint8 col = 0; col < BOARD_COLUMNS; col++)
paint_tile (cr, row, col);
/* grid */
......@@ -160,7 +160,7 @@ private class GameBoardView : Gtk.DrawingArea
cr.set_dash (dashes, /* offset */ 0.0);
/* draw the grid on the background pixmap */
for (uint8 i = 1; i < 7; i++)
for (uint8 i = 1; i < BOARD_SIZE; i++)
{
double line_offset = i * tile_size + 0.5;
// vertical lines
......@@ -244,15 +244,15 @@ private class GameBoardView : Gtk.DrawingArea
{
int raw_tile_size = pb_tileset_raw.get_height ();
pb_bground_raw = new Gdk.Pixbuf (Gdk.Colorspace.RGB, /* alpha */ true, /* bits per sample */ 8, raw_tile_size * 7, raw_tile_size * 7);
for (int i = 0; i < 7; i++)
pb_bground_raw = new Gdk.Pixbuf (Gdk.Colorspace.RGB, /* alpha */ true, /* bits per sample */ 8, raw_tile_size * BOARD_COLUMNS, raw_tile_size * BOARD_ROWS_PLUS_ONE);
for (int i = 0; i < BOARD_COLUMNS; i++)
{
pb_tileset_raw.copy_area (raw_tile_size * 3, 0,
raw_tile_size, raw_tile_size,
pb_bground_raw,
i * raw_tile_size, 0);
for (int j = 1; j < 7; j++)
for (int j = 1; j < BOARD_ROWS_PLUS_ONE; j++)
pb_tileset_raw.copy_area (raw_tile_size * 2, 0,
raw_tile_size, raw_tile_size,
pb_bground_raw,
......@@ -294,7 +294,7 @@ private class GameBoardView : Gtk.DrawingArea
private inline bool get_column (int x, int y, out uint8 col)
{
int _col = (x - board_x) / tile_size;
if (x < board_x || y < board_y || _col < 0 || _col > 6)
if (x < board_x || y < board_y || _col < 0 || _col > BOARD_COLUMNS_MINUS_ONE)
{
col = 0;
return false;
......@@ -302,7 +302,7 @@ private class GameBoardView : Gtk.DrawingArea
col = (uint8) _col;
int row = (y - board_y) / tile_size;
if (row < 0 || row > 6)
if (row < 0 || row > BOARD_ROWS)
return false;
return true;
......
......@@ -21,11 +21,10 @@
private class Board : Object
{
private static Tile [,] gboard;
private const uint8 BOARD_SIZE = 7;
internal Board ()
{
gboard = new Tile [BOARD_SIZE, BOARD_SIZE];
gboard = new Tile [BOARD_COLUMNS, BOARD_ROWS_PLUS_ONE];
}
internal new void @set (uint8 x, uint8 y, Tile tile)
......@@ -40,8 +39,8 @@ private class Board : Object
internal void clear ()
{
for (uint8 row = 0; row < BOARD_SIZE; row++)
for (uint8 col = 0; col < BOARD_SIZE; col++)
for (uint8 row = 0; row < BOARD_ROWS_PLUS_ONE; row++)
for (uint8 col = 0; col < BOARD_COLUMNS; col++)
gboard [row, col] = Tile.CLEAR;
}
......@@ -49,7 +48,7 @@ private class Board : Object
{
uint8 row = 1;
while (row < BOARD_SIZE && gboard [row, col] == Tile.CLEAR)
while (row < BOARD_ROWS_PLUS_ONE && gboard [row, col] == Tile.CLEAR)
row++;
return row - 1;
}
......@@ -101,7 +100,7 @@ private class Board : Object
col_2 = col;
while (col_1 > 0 && gboard [row, col_1 - 1] == tile)
col_1 = col_1 - 1;
while (col_2 < 6 && gboard [row, col_2 + 1] == tile)
while (col_2 < BOARD_ROWS && gboard [row, col_2 + 1] == tile)
col_2 = col_2 + 1;
if (col_2 - col_1 >= 3)
return true;
......@@ -118,7 +117,7 @@ private class Board : Object
col_2 = col;
while (row_1 > 1 && gboard [row_1 - 1, col] == tile)
row_1 = row_1 - 1;
while (row_2 < 6 && gboard [row_2 + 1, col] == tile)
while (row_2 < BOARD_ROWS && gboard [row_2 + 1, col] == tile)
row_2 = row_2 + 1;
return row_2 - row_1 >= 3;
}
......@@ -137,7 +136,7 @@ private class Board : Object
row_1 = row_1 - 1;
col_1 = col_1 - 1;
}
while (col_2 < 6 && row_2 < 6 && gboard [row_2 + 1, col_2 + 1] == tile)
while (col_2 < BOARD_COLUMNS_MINUS_ONE && row_2 < BOARD_ROWS && gboard [row_2 + 1, col_2 + 1] == tile)
{
row_2 = row_2 + 1;
col_2 = col_2 + 1;
......@@ -154,12 +153,12 @@ private class Board : Object
row_2 = row;
col_1 = col;
col_2 = col;
while (col_1 < 6 && row_1 > 1 && gboard [row_1 - 1, col_1 + 1] == tile)
while (col_1 < BOARD_COLUMNS_MINUS_ONE && row_1 > 1 && gboard [row_1 - 1, col_1 + 1] == tile)
{
row_1 = row_1 - 1;
col_1 = col_1 + 1;
}
while (col_2 > 0 && row_2 < 6 && gboard [row_2 + 1, col_2 - 1] == tile)
while (col_2 > 0 && row_2 < BOARD_ROWS && gboard [row_2 + 1, col_2 - 1] == tile)
{
row_2 = row_2 + 1;
col_2 = col_2 - 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment