1.1.0 • Published 2 years ago

react-ppi-sudoku v1.1.0

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

Como usar

Primeiro importe o script para o seu projeto:
<script type="text/javascript" src="https://tiagocf2.github.io/PPI-Sudoku/sudoku-canvas.js"></script>
Ou baixe o arquivo JavaScript aqui.
Note que é preciso ter um elemento Canvas no HTML para executar o Sudoku.
Depois disso é só criar uma instância da classe Sudoku e passar o canvas como referência.
let su = new Sudoku(canvas, tamanho);
canvas - é a referência ao elemento HTML canvas, onde o Sudoku será executado.
tamanho - é um atributo opcional que define o tamanho do canvas. Por padrão é 500.
Agora é possível selecionar um quadrado com o mouse ou com as setas do teclado.
Com o quadrado selecionado é possível inserir números de 1 à 9 apertando as respectivas teclas.
Para remover um número utilize a tecla Backspace.

A Classe Sudoku

A classe Sudoku é a classe principal, que é responsável pelo jogo inteiro, desde gerar o tabuleiro, até desenhar no canvas.
A seguir será mostrado alguns elementos importantes para a manipulação desta classe.

VariáveisValorDescrição
BACKGROUND_COLORString com valor hexadecimal para cor. Ex: #F00, red, #11FF22Altera a cor de plano de fundo.
SELECTED_COLORString com valor hexadecimal para cor.Altera a cor da célula selecionada.
FONT_COLORString com valor hexadecimal para cor.Altera a cor da fonte.
FONT_FAMILYString com nome de uma fonte. Ex: Arial, ConsolasAltera a fonte utilizada.
FONT_SIZEString com um tamanho. Ex: 16px, 2.5emAltera o tamanho da fonte.
GRID_COLORString com valor hexadecimal para cor.Altera a cor da grade.
RIGHT_COLORString com valor hexadecimal para cor.Altera a cor para números corretos.
WRONG_COLORString com valor hexadecimal para cor.Altera a cor para números incorretos.
continuousCheckValor booleano. Default: FalseDetermina se o jogo deve checar continuamente a validade de cada número inserido.
FunçõesParâmetrosRetornoDescrição
criarNovoJogo------Inicia uma nova partida com um novo tabuleiro (dentre 3 pré-definidos). Cuidado pois apaga o progresso da partida atual.
finishGame---Um objeto {erros: X, acertos: Y} aonde X e Y são os respectivos valores.Termina a partida atual.
exportAsImage---Uma String contendo uma imagem png em base 64Retorna uma imagem do estado atual do tabuleiro. Utilize isso para "tirar uma foto" do tabuleiro.
resizeCanvasnew_size: int---Use essa função para alterar o tamanho do objeto.
generateTestBoard------Preenche o tabuleiro com um jogo e solução padrão. Use para testes.
drawBoard------Desenha o tabuleiro.
selectx: int y: int---Seleciona um o quadrado na posição X e Y no tabuleiro.
unselect------Desmarca o quadrado selecionado no tabuleiro.
inputNumbern: int 1 até 9---Escreve o número N no quadrado previamente selecionado.

Exemplo de Implementação

<!DOCTYPE html>
<html lang="pt-br">
  <head>
    <title> Sudoku Game </title>
  </head>
  
  <body>
    <h1> Sudoku! </h1>
    <canvas id="sudoku"></canvas>
    <button onclick="finishGame()"> Finish </button>
    <button onclick="exportBoard()"> Export </button>
  </body>
  
  <script type="text/javascript" src="https://tiagocf2.github.io/PPI-Sudoku/sudoku-canvas.js" defer></script>
  <script type="text/javascript">
    let canvas = document.getElementById("sudoku");
    let sudoku = new Sudoku(canvas);
    
    function finishGame(){
      result = sudoku.finishGame();
      alert(`Game Over\nScore: ${result.acertos / sudoku.boardSize ** 2 * 100}%`);
    }
    
    function exportBoard(){
      let img = sudoku.exportAsImage();
      let download = document.createElement('a');
      download.href = img;
      download.download = "meu_sudoku.png";
      download.click();
    }
  </script>
  
</html>
Em dispositivos móveis não é possível inserir os números, então é preciso circunver isso adicionando botões, que então insiram os números no quadrado selecionado, utilize a função inputNumber do Sudoku. Isso acontece pois dispositivos móveis só abrem o teclado quando é selecionado um elemento de input. Veja o site do projeto por um dispositivo móvel como exemplo.