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.
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.
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. |
- 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
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 |
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.
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.
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
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
---
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
---
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;
---
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 --> [*]
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
See CodingStandardsDocument for a list of our design paradigms.
Sprints | PO | SM |
---|---|---|
0 | Grace | Carlos |
1 | Grace | Carlos |
2 | Isaac | Nima |
3 | Bella | Claire |
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)
Healthy and progressing towards completion.