Skip to content
Snippets Groups Projects
Select Git revision
  • fa31dfc8755d57528305c24fa9e2dacd50e8cf6d
  • master default protected
  • 56-upgrade-framework-and-dependencies
  • 39-improve-app-metadata
  • 28-add-high-scores
  • 32-add-block-size-limit-parameter
  • 29-use-real-board-painter-to-draw-parameters-items
  • Release_0.9.0_47 protected
  • Release_0.8.2_46 protected
  • Release_0.8.1_45 protected
  • Release_0.8.0_44 protected
  • Release_0.7.0_43 protected
  • Release_0.6.0_42 protected
  • Release_0.5.0_41 protected
  • Release_0.4.2_40 protected
  • Release_0.4.1_39 protected
  • Release_0.4.0_38 protected
  • Release_0.3.1_37 protected
  • Release_0.3.0_36 protected
  • Release_0.2.1_35 protected
  • Release_0.2.0_34 protected
  • Release_0.1.1_33 protected
  • Release_0.1.0_32 protected
  • Release_0.0.31_31 protected
  • Release_0.0.30_30 protected
  • Release_0.0.29_29 protected
  • Release_0.0.28_28 protected
27 results

game_board_painter.dart

Blame
  • game_board_painter.dart 3.98 KiB
    import 'dart:math';
    
    import 'package:flutter/material.dart';
    
    import 'package:jeweled/models/game_cell.dart';
    import 'package:jeweled/models/game.dart';
    import 'package:jeweled/models/cell_location.dart';
    import 'package:jeweled/utils/color_theme.dart';
    
    class GameBoardPainter extends CustomPainter {
      const GameBoardPainter(this.currentGame);
    
      final Game currentGame;
    
      static const drawTextValue = false;
    
      @override
      void paint(Canvas canvas, Size size) {
        final int sizeHorizontal = currentGame.settings.boardSize;
        final int sizeVertical = currentGame.settings.boardSize;
    
        final List cells = currentGame.board.cells;
        final double cellSize = size.width / max(sizeHorizontal, sizeVertical);
    
        // background
        for (var row = 0; row < sizeVertical; row++) {
          final double y = cellSize * row;
          for (var col = 0; col < sizeHorizontal; col++) {
            final double x = cellSize * col;
    
            final GameCell cell = cells[row][col];
            final int colorCode = ColorTheme.getColorCode(cell.value);
    
            final cellPaintBackground = Paint();
            cellPaintBackground.color = Color(colorCode);
            cellPaintBackground.style = PaintingStyle.fill;
    
            final Rect cellBackground =
                Rect.fromPoints(Offset(x - 1, y - 1), Offset(x + cellSize + 2, y + cellSize + 2));
    
            canvas.drawRect(cellBackground, cellPaintBackground);
    
            // draw value on cell
            if (drawTextValue) {
              final textPainter = TextPainter(
                text: TextSpan(
                  text: cell.value.toString(),
                  style: const TextStyle(
                    color: Colors.black,
                    fontSize: 15,
                  ),
                ),
                textDirection: TextDirection.ltr,
              )..layout(
                  minWidth: 0,
                  maxWidth: size.width,
                );
              textPainter.paint(canvas, Offset(x + 4, y + 2));
            }
          }
        }
    
        // borders
        const double borderSize = 4;
        final cellPaintBorder = Paint();
        cellPaintBorder.color = ColorTheme.getBorderColor();
        cellPaintBorder.strokeWidth = borderSize;
        cellPaintBorder.strokeCap = StrokeCap.round;
    
        for (var row = 0; row < sizeVertical; row++) {