Skip to content

ClearCrystals/LogicLuminaries

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sudoku by Logic Luminaries

pipeline coverage Python Version Django Version React Version MySQL Version Code style: black Code Style: Prettier

Logo{width=50%}

Requirements and Specification Document

Project Abstract

The Sudoku game software is a straightforward and engaging puzzle application suitable for all skill levels. It has an intuitive interface, with options to choose different difficulty levels. Key features include hints for assistance and a timer for tracking game duration. The game involves filling a 9x9 grid so that each column, row, and 3x3 subgrid contains all digits from 1 to 9. This project aims to provide a fun and challenging experience for users, enhancing their problem-solving skills and concentration.

Customer

The target customers for this Sudoku game software are puzzle enthusiasts of all ages and skill levels. It appeals to those who enjoy logical challenges and brain exercises, ranging from casual players seeking a fun pastime to serious puzzle solvers looking to test their skills. The game's user-friendly design and helpful features like hints and a timer make it accessible and engaging for a wide audience.

User Requirements

ID Description
SRS-001 When user visits the homepage of the application, the frontend software SHALL display a homepage which is substantially similar to the figma wireframe of the homepage
SRS-002 When user visits the homepage of the application, the frontend software SHALL present the user with a series of options, represented as buttons with text contained Login and Register
SRS-003 When the User clicks "Sign up" or "Register" the software shall go to the User Sign up Page or the Register Page.
SRS-004 When the user arrives at "Register" page there must be 3 text box inputs one for username, one for email and one for password. There also must be a button that shall get the user to the "Sign up" Page.
SRS-005 When the user arrives at "Login" page there must be 2 text box inputs one for email and one for password. There also must be a button that shall get the user to the "Sign up" Page and there must also be a "Submit" button.
SRS-006 If user clicks the "Submit" button on the "Sign Up" Page there shall appear a green confirmation button.
SRS-007 If the user clicks the submit button on the Sign in page then the page shall correctly authenticate and go to the Games page.
SRS-008 The Games page must have The text "Welcome, [user]" as well as the cards that have their own respective buttons that the user can choose between which game they would like to play.
SRS-009 When the User has chosen a game, by clicking on the respective button. Both games Killer Sudoku and Normal Sudoku. The software shall take the user to Game Mode Selection Page where there are two buttons: New Game and Load Saved Game
SRS-010 If the user choose Load game the Software Shall go to the list of Saved Games.
SRS-011 If the User choose Create new Game, the software shall go to another page and ask if the game difficulty that they want is easy medium or hard in the form of buttons.
SRS-012 In both cases where the user clicked on a button, that generated a board. One case for if they chose difficult on a new board or if they chose a saved game. The software must show a 9x9 grid where the user can input numbers by clicking on a cell and then must be able to click on a number pop up in order to replace or put the number on the cell. The Board must be generated as a Sudoku board where all the Blue numbers are un editable and all the numbers that are inputted thereafter are editable.
SRS-013 On the Sudoku board page there should be a submit button in relation to when all the numbers of the board are submitted. There is a green confirmation that the game is correct.
SRS-014 On every page frontend page minus the home page. There must exist a Banner at the top that leads back to your logged in page.

Use Cases & User Stories

  • Issues 1-18 Setting up communitcation, choosing roles, choosing stack, setting up gitlab to our liking
  • Issues 19-21 Installing software and getting set up with React, MySQL, and Django
  • Issues 22-53 Defining backend models, frontend interface, integrating the two
  • Issues 54-60 Making adjustments to previous definitions after completing walking skeleton, implementing styling
  • Issues 61-69 Adding integrated functionality to walking skeleton, coverage testing for generation algorithm
  • Issues 70-72 Completing frontend/backend/database data transfer, expanding coverage testing, adding win screen
  • Issues 73-84 Adding continous deployment, static analysis, screens, improving algo, and saving initial state
  • Issues 85-97 Handling blue/black, rework UI, fix, show progress, and handle duplicate emails
  • Issues 98-107 Implement and add killer Sudoku variant, killer tests, 100% coverage, sphinx docs
  • Issues 108-134 Refactor, update views, add badges, more coments, adding final diagrams and research

Main Epics

ID Description Priority Status
EPIC#1 Generate, Backend, 9x9 grid of puzzle and solution High Complete
EPIC#2 Provide, Backend, variaing levels of difficulty High Complete
EPIC#3 Store the values, Data Wrangler, of the the puzzle grid and solution in the MySQL Database High Complete
EPIC#4 Create an Interface, front end, where a user can solve the puzzle Med Complete
EPIC#5 (Stretch Goals) Support multiple variants of Sudoku, such as killer, etc. Low Open
EPIC#6 (Stretch goal) Include tools for solving, such as pencil marking, coloring, and hinting. Low Open

User Interface Requirements

Link to Figma prototype board: Prototype

Intentionally designed with accessibility and simplicity in mind (contrasting colors that are colorblind friendly, large and easy to read typeface). Lots of sudoku apps on the web are needlessly complicated, ours will not be. This site is a simple place to solve boards, no more, no less, and the design should reflect that.

Security Requirements

As of now there is an issue where games pages are accessible to non-users, however they cannot load or save boards without an account to post to the database. So, those pages that are accessible are ultimately useless without logging in anyways.

System Requirements, Installation, and Usage

You need at least 4 GB of RAM, a 64-bit kernel with CPU support for virtualization, and a Docker Desktop installed. Then run these commands:

ssh -L localhost:8000:localhost:8000 -L localhost:3000:localhost:3000 <username>@cs506-team-10.cs.wisc.edu
cd /nobackup/
docker login registry.doit.wisc.edu -u <GAT> -p <GAT>
git config --global credential.helper store
git clone https://<GAT>@git.doit.wisc.edu/cdis/cs/courses/cs506/sp2024/team/mondaywednesdaylecture/T_10/logicluminaries.git
cd logicluminaries/
docker compose -p sudoku up

Specification

Technology Stack

The following is the tech stack for our Sudoku project

flowchart RL
subgraph Front End
    A(JavaScript: React)
end

subgraph Back End
    B(Python: Django with \nDjango Rest Framework)
end

subgraph Database
    C[(MySQL)]
end

subgraph Testing
    D(Unit Testing: Django's built-in test framework)
    E(Integration Testing: Django REST Framework's testing tools)
end

subgraph CI_CD
    F(GitLab CI)
end

A <-->|"REST API"| B
B <-->|Django ORM| C
B -->|Testing| D
B -->|Testing| E
B --> F
Loading

Database


ERD for SudokuDB

ERD image

Class Diagram

---
title: Class Diagram for Sudoku Program
---
classDiagram
    class Sudoku {
        - List[List[int]] board
        - String difficulty
        + Sudoku(String difficulty)
        + float sudoku_status()
        + bool solve_sudoku()
        + void _generate_sudoku()
    }
    class KillerSudoku {
        - Dictionary cages
        + KillerSudoku(String difficulty)
        + bool is_cage_valid(int cage_id)
        + void _generate_sudoku()
    }
    Sudoku <|-- KillerSudoku

Loading

Flowchart

---
title: Sudoku Game Operation Flowchart
---
graph TD;
    Start([Start]) --> Select_Difficulty[/Select Difficulty/];
    Select_Difficulty --> Generate_Board[Generate Sudoku Board];
    Generate_Board --> Play_Game[Play Game];
    Play_Game --> Validate_Board{Validate Board};
    Validate_Board -->|Valid| Process_Valid_Board[Process Valid Board];
    Validate_Board -->|Invalid| Error_Message[/Error Message/];
    Process_Valid_Board --> Check_Completion[Check Completion];
    Check_Completion -->|Complete| Game_Won[Game Won];
    Check_Completion -->|Incomplete| Play_Game;
    Game_Won --> Display_Congratulations[/Display Congratulations/];
    Display_Congratulations --> End([End]);
    Error_Message --> End;
Loading

Behavior

---
title: Sudoku Board State Diagram
---
stateDiagram
    [*] --> Idle
    Idle --> Playing : Start Game
    Playing --> Check : Place Number
    Check --> Playing : No Conflict
    Check --> Error : Number Conflict
    Error --> Playing : Correct Error
    Playing --> Won : Complete Board
    Won --> [*]
Loading

Sequence Diagram

sequenceDiagram

participant ReactFrontend as React Frontend
participant DjangoBackend as Django Backend
participant MySQL as MySQL Database

ReactFrontend ->> DjangoBackend: HTTP Request (e.g., GET /api/new_board?difficulty=easy)
activate DjangoBackend

DjangoBackend ->> MySQL: Query (e.g., Generate New Board)
activate MySQL

MySQL -->> DjangoBackend: Board Data
deactivate MySQL

DjangoBackend -->> ReactFrontend: JSON Response (Board)
deactivate DjangoBackend

ReactFrontend ->> DjangoBackend: HTTP Request (e.g., POST /api/save_board)
activate DjangoBackend

DjangoBackend ->> MySQL: Update Board State
activate MySQL

MySQL -->> DjangoBackend: Save Confirmation
deactivate MySQL

DjangoBackend -->> ReactFrontend: JSON Response (Save Status)
deactivate DjangoBackend

Loading

Standards & Conventions

See CodingStandardsDocument for a list of our design paradigms.

Scrum Masters and Product Owners:

Sprints PO SM
0 Grace Carlos
1 Grace Carlos
2 Isaac Nima
3 Bella Claire

Roles:

Roles Major Role Minor Role
Backend Engineer Claire Carlos
Frontend Engineer Bella Grace
Data Wrangler Isaac Bella
Algorithm Engineer Nima Isaac
Integration Manager Grace Nima
QA Tester / Jack of All Trades Carlos Claire
  • Every member should write code using test driven devolopment
  • Every member should write their own documentation in how to do stuff (so that another person can follow the instructions)

Project status

Healthy and progressing towards completion.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published