From 5d0f5fdb6e60489e85ca98831685895ae40a4677 Mon Sep 17 00:00:00 2001 From: Coeuvre Date: Wed, 21 May 2014 00:06:30 +0800 Subject: [PATCH] Added missing files --- src/board.rs | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/tile.rs | 45 ++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 src/board.rs create mode 100644 src/tile.rs diff --git a/src/board.rs b/src/board.rs new file mode 100644 index 0000000..406bc35 --- /dev/null +++ b/src/board.rs @@ -0,0 +1,77 @@ + +use graphics::*; +use piston::*; +use settings; +use tile::Tile; + +pub struct Board { + center: [f64, ..2], + tiles: [[Option, ..settings::TILE_WIDTH], ..settings::TILE_HEIGHT], +} + +impl Board { + pub fn new() -> Board { + Board { + center: [0.0, 0.0], + tiles: [ + [None, None, None, None], + [None, None, None, None], + [None, None, None, None], + [None, None, None, None], + ], + } + } + + pub fn render(&self, c: &Context, gl: &mut Gl) { + self.render_board(c, gl); + self.render_tiles(c, gl); + Tile::new(16, 0, 0).render(c, gl); + } + + fn render_board(&self, c: &Context, gl: &mut Gl) { + let width = settings::TILE_SIZE * settings::TILE_WIDTH as f64 + settings::TILE_PADDING * (settings::TILE_WIDTH + 1) as f64; + let height = settings::TILE_SIZE * settings::TILE_HEIGHT as f64 + settings::TILE_PADDING * (settings::TILE_HEIGHT + 1) as f64; + c.view() + .rect(settings::BOARD_PADDING, + settings::BOARD_PADDING + settings::BOARD_OFFSET_Y, + settings::BOARD_SIZE[0], + settings::BOARD_SIZE[1]) + .rgba(settings::TILE_BACKGROUND_COLOR[0], + settings::TILE_BACKGROUND_COLOR[1], + settings::TILE_BACKGROUND_COLOR[2], + settings::TILE_BACKGROUND_COLOR[3]) + .fill(gl); + + let mut x = settings::BOARD_PADDING + settings::TILE_PADDING; + let mut y = settings::BOARD_PADDING + settings::BOARD_OFFSET_Y + settings::TILE_PADDING; + for row in range(0, settings::TILE_HEIGHT) { + for col in range(0, settings::TILE_WIDTH) { + c.view() + .rect(x, y, settings::TILE_SIZE, settings::TILE_SIZE) + .rgba(settings::TILES_COLOR[0][0], + settings::TILES_COLOR[0][1], + settings::TILES_COLOR[0][2], + settings::TILES_COLOR[0][3]) + .fill(gl); + + x += settings::TILE_PADDING + settings::TILE_SIZE; + } + x = settings::BOARD_PADDING + settings::TILE_PADDING; + y += settings::TILE_PADDING + settings::TILE_SIZE; + } + } + + fn render_tiles(&self, c: &Context, gl: &mut Gl) { + for row in range(0, settings::TILE_HEIGHT) { + for col in range(0, settings::TILE_WIDTH) { + match self.tiles[row][col] { + Some(ref tile) => { + tile.render(c, gl); + }, + _ => {}, + } + } + } + } +} + diff --git a/src/tile.rs b/src/tile.rs new file mode 100644 index 0000000..7c7f23c --- /dev/null +++ b/src/tile.rs @@ -0,0 +1,45 @@ + +use graphics::*; +use piston::*; +use settings; + +enum TileState { + TileStatic, + /// (x, y) + TileMoving(f64, f64), +} + +pub struct Tile { + score: int, + tile_x: int, + tile_y: int, + status: TileState, +} + +impl Tile { + pub fn new(score: int, tile_x: int, tile_y: int) -> Tile { + Tile { + score: score, + tile_x: tile_x, + tile_y: tile_y, + status: TileStatic, + } + } + + pub fn render(&self, c: &Context, gl: &mut Gl) { + let x = settings::BOARD_PADDING + self.tile_x as f64 * settings::TILE_SIZE + (self.tile_x + 1) as f64 * settings::TILE_PADDING; + let y = settings::BOARD_PADDING + settings::BOARD_OFFSET_Y + self.tile_y as f64 * settings::TILE_SIZE + (self.tile_y + 1) as f64 * settings::TILE_PADDING; + + let color = self.get_color(); + c.view().rect(x, y, settings::TILE_SIZE, settings::TILE_SIZE).rgba(color[0], color[1], color[2], color[3]).fill(gl); + } + + fn get_color(&self) -> [f32, ..4] { + let i = (self.score as f64).log2() as uint; + if i > 0 && i < settings::TILES_COLOR.len() { + settings::TILES_COLOR[i] + } else { + settings::TILE_UNKNOW_COLOR + } + } +}