Giter Site home page Giter Site logo

yvesmendes / sudoku-pure-java-implementation Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 20 KB

Academic Purpose Sudoku Implementation in Java without external libs

Java 100.00%
sudoku sudoku-solver sudoku-generator java strategy-pattern strategy-design-pattern template-method-pattern facade-pattern factory-method-pattern command-pattern state-machine

sudoku-pure-java-implementation's Introduction

Academic Purpose Sudoku (Pure Java Implementation)

The project was developed using Java 1.6 without external libs. The game has three different difficulties: EASY, NORMAL, and HARD. The score is calculated based on the elapsed time, the number of errors, and the current difficulty.

An example of Sudoku Board in Easy mode:

    (0) (1) (2) (3) (4) (5) (6) (7) (8) 
   |===.===.===|===.===.===|===.===.===|
(0)| 2 |   |   | 5 | 7 |   | 9 |   |   |
   |---.---.---|---.---.---|---.---.---|
(1)|   |   | 9 | 3 |   | 8 |   |   | 1 |
   |---.---.---|---.---.---|---.---.---|
(2)| 5 | 8 |   | 9 |   |   | 3 | 4 |   |
   |===.===.===|===.===.===|===.===.===|
(3)| 6 |   | 8 |   | 1 | 9 |   |   |   |
   |---.---.---|---.---.---|---.---.---|
(4)| 4 | 1 | 7 |   |   | 3 |   | 9 | 5 |
   |---.---.---|---.---.---|---.---.---|
(5)| 9 |   | 2 | 7 | 8 | 5 |   | 1 | 4 |
   |===.===.===|===.===.===|===.===.===|
(6)| 8 |   | 4 | 1 | 9 |   | 5 | 3 | 6 |
   |---.---.---|---.---.---|---.---.---|
(7)|   |   | 5 | 8 | 3 | 6 |   |   | 2 |
   |---.---.---|---.---.---|---.---.---|
(8)| 3 |   |   | 2 | 5 | 4 | 1 | 8 | 9 |
   |===.===.===|===.===.===|===.===.===|

This project demonstrates some of project patterns:

  • Facade
  • Template Method
  • Command
  • Strategy
  • Factory Method

Only the Console Mode was developed.

Pre-Requisities

  • maven
  • JDK 1.6

RUN

1. mvn package
2. java -jar target/Sudoku.jar

sudoku-pure-java-implementation's People

Contributors

dependabot[bot] avatar yvesmendes avatar

Stargazers

 avatar

Watchers

 avatar

sudoku-pure-java-implementation's Issues

Principio de responsabilidad única

En el paquete br.poli.model, en la clase Board se están mezclando dos responsabilidades para la clase, para ello, se debería separar las validaciones y los métodos propios de Board en dos clases diferentes.
image
image

Principio Open Close

Detalle: En el código algunas clases utilizan score, dándole una responsabilidad mas a la clases
image

mi propuesta es crear una clase para que se maneje el score, si llegara a darse el caso de un requerimiento , donde se necesita aumentar el score con bonos extras se podría trabajar sin afectar a otras clases.
image
image

Principio de Segregación de interfaces (ISP)

Detalle: En la interface SudokuFacade encontré algunos métodos que pueden ser segregados a otra interface para cumplir con el principio SOLID (ISP) Principio de Segregación de interfaces.
image

Mi propuesta es separar las interfaces con los métodos que tienen relación para que el código este mas modulado
image

La nueva interface seria esta:
//interface nueva
public interface SudokuFacadeGame {

void init();

void solveGame() throws UnsolvedException;

boolean endGame();

boolean isWin();

}

Principio inversión de dependencia

Detalle: En la clase Game se esta creando el objeto Game y trabajando con él, se está violando el principio que nos dice que los módulos no deben crear los objetos con los que trabajan.

image

image

En SudokuFacadeImpl se instancia el objeto Game, y se envía los objetos para que esa clase la utilice.

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.