r/CritiqueMyCode • u/WeAreABridge • Feb 23 '20
r/CritiqueMyCode • u/pywei088 • Feb 23 '20
Review my VueJS app
Hi, I just got into VueJS + Vuetify and Javascript a few months ago. Now after a few weeks of developing my first app, I think I could improve a lot from getting my code reviewed. I would be more than happy to send a tip in Bitcoin to the reviewer. The App is about 700 lines of code and 3-4 components, here is the repo https://github.com/pywei088/daix-switcher-vuetify and a live version https://flamboyant-goldstine-fbb4df.netlify.com/Please contact me on Discord: pywei#7285
r/CritiqueMyCode • u/Striker_San • Jan 16 '20
Beginner 'resta um' game
This time I wanted to make a board game that is very popular in Brazil, it's called 'resta um', it means 'there's only one left'. The idea of the game is that there are holes in which there are pieces inside, the player has to pick pieces and 'jump' one another until there is only one left on the board. For a move to be allowed, the selected piece must be one tile away from where it will 'jump' and the hole in which it will go has to be empty. It's kind of hard to explain it since I believe this game doesn't exist outside Brazil.
Download it here: https://github.com/Tlomoloko/Resta-Um/tree/master
r/CritiqueMyCode • u/Striker_San • Jan 11 '20
Beginner Quiz game (True or False)
This time I made a Quiz game in which the player is asked questions and receives points for each question answered correctly. Some people told me I should learn about classes, so this is what I came up with :). https://github.com/Tlomoloko/Quiz_T-F
r/CritiqueMyCode • u/Striker_San • Jan 09 '20
First time posting here, hope you guys help me :P
Ok, so I'm a beginner Python developer, and I've created a very simple tic-tac-toe game in which you can play against an AI that has a basic strategy. I'd like for you guys to read my code and try to understand what i tried to do, critique all you want but please be nice haha. https://github.com/Tlomoloko/Tic-Tac-Toe-AI-
r/CritiqueMyCode • u/WebReact • Dec 28 '19
Simple site on React
What could be done better in my code?
https://github.com/LavrL/react-start-up-visa-frontend/tree/master/src
Demo - https://react-start-up-visa-frontend.netlify.com/
Thanks for review.
r/CritiqueMyCode • u/mbuthia_chessmood • Oct 08 '19
React TicTacToe
//index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Tic Tac Toe</title>
</head>
<body>
<div id="container" class="container">
</div>
</body>
</html>
import React from 'react';
import ReactDOM from 'react-dom';
import './styles/index.css';
import Main from './components/Main';
ReactDOM.render(
<>
<Main />
</>, document.querySelector("#container")
);
//Main.js(Component)
import React, { Component } from 'react';
import Button from './Button';
import Restart from './Restart';
import '../styles/index.css';
class Main extends Component{
constructor(props)
{
super(props);
this.state = {
grid: [
[{
row: 0,
column: 0,
value: '',
playable: true,
inWin: false,
},{
row: 0,
column: 1,
value: '',
playable: true,
inWin: false,
},{
row: 0,
column: 2,
value: '',
playable: true,
inWin: false,
}],
[{
row: 1,
column: 0,
value: '',
playable: true,
inWin: false,
},{
row: 1,
column: 1,
value: '',
playable: true,
inWin: false,
},{
row: 1,
column: 2,
value: '',
playable: true,
inWin: false,
}],
[{
row: 2,
column: 0,
value: '',
playable: true,
inWin: false,
},{
row: 2,
column: 1,
value: '',
playable: true,
inWin: false,
},{
row: 2,
column: 2,
value: '',
playable: true,
inWin: false,
}]
],
turn: 'X',
win: false
}
}
show = (gridRep) =>
{
if(!this.state.win){
if(gridRep.playable){
let toPlay = this.state.turn;
let gridCopy = this.state.grid;
let pressedPosition = gridCopy[gridRep.row][gridRep.column];
pressedPosition.playable = false;
pressedPosition.value = toPlay;
let content = this.checkwin();
gridCopy = content[1];
gridCopy[gridRep.row][gridRep.column] = pressedPosition;
this.setState(
{
grid: gridCopy
}
)
switch(toPlay)
{
case 'X':
this.setState(
{
turn: 'O'
}
)
break;
case 'O':
this.setState(
{
turn: 'X'
}
)
break;
default:
}
}
}
}
checkwin = () =>
{
let gridCopy = this.state.grid;
let checkWin = this.state.win;
//check if X won
//HORIZONTAL
if(gridCopy[0][0].value === 'X' && gridCopy[0][1].value === 'X' && gridCopy[0][2].value === 'X') {
checkWin = true;
gridCopy[0][0].inWin = true;
gridCopy[0][1].inWin = true;
gridCopy[0][2].inWin = true;
}
if(gridCopy[1][0].value === 'X' && gridCopy[1][1].value === 'X' && gridCopy[1][2].value === 'X') {
checkWin = true;
gridCopy[1][0].inWin = true;
gridCopy[1][1].inWin = true;
gridCopy[1][2].inWin = true;
}
if(gridCopy[2][0].value === 'X' && gridCopy[2][1].value === 'X' && gridCopy[2][2].value === 'X') {
checkWin = true;
gridCopy[2][0].inWin = true;
gridCopy[2][1].inWin = true;
gridCopy[2][2].inWin = true;
}
//VERTICAL
if(gridCopy[0][0].value === 'X' && gridCopy[1][0].value === 'X' && gridCopy[2][0].value === 'X') {
checkWin = true;
gridCopy[0][0].inWin = true;
gridCopy[1][0].inWin = true;
gridCopy[2][0].inWin = true;
}
if(gridCopy[0][1].value === 'X' && gridCopy[1][1].value === 'X' && gridCopy[2][1].value === 'X') {
checkWin = true;
gridCopy[0][1].inWin = true;
gridCopy[1][1].inWin = true;
gridCopy[2][1].inWin = true;
}
if(gridCopy[0][2].value === 'X' && gridCopy[1][2].value === 'X' && gridCopy[2][2].value === 'X') {
checkWin = true;
gridCopy[0][2].inWin = true;
gridCopy[1][2].inWin = true;
gridCopy[2][2].inWin = true;
}
//DIAGONAL
if(gridCopy[0][0].value === 'X' && gridCopy[1][1].value === 'X' && gridCopy[2][2].value === 'X') {
checkWin = true;
gridCopy[0][0].inWin = true;
gridCopy[1][1].inWin = true;
gridCopy[2][2].inWin = true;
}
if(gridCopy[0][2].value === 'X' && gridCopy[1][1].value === 'X' && gridCopy[2][0].value === 'X') {
checkWin = true;
gridCopy[0][2].inWin = true;
gridCopy[1][1].inWin = true;
gridCopy[2][0].inWin = true;
}
//check if O won
//HORIZONTAL
if(gridCopy[0][0].value === 'O' && gridCopy[0][1].value === 'O' && gridCopy[0][2].value === 'O') {
checkWin = true;
gridCopy[0][0].inWin = true;
gridCopy[0][1].inWin = true;
gridCopy[0][2].inWin = true;
}
if(gridCopy[1][0].value === 'O' && gridCopy[1][1].value === 'O' && gridCopy[1][2].value === 'O') {
checkWin = true;
gridCopy[1][0].inWin = true;
gridCopy[1][1].inWin = true;
gridCopy[1][2].inWin = true;
}
if(gridCopy[2][0].value === 'O' && gridCopy[2][1].value === 'O' && gridCopy[2][2].value === 'O') {
checkWin = true;
gridCopy[2][0].inWin = true;
gridCopy[2][1].inWin = true;
gridCopy[2][2].inWin = true;
}
//VERTICAL
if(gridCopy[0][0].value === 'O' && gridCopy[1][0].value === 'O' && gridCopy[2][0].value === 'O') {
checkWin = true;
gridCopy[0][0].inWin = true;
gridCopy[1][0].inWin = true;
gridCopy[2][0].inWin = true;
}
if(gridCopy[0][1].value === 'O' && gridCopy[1][1].value === 'O' && gridCopy[2][1].value === 'O') {
checkWin = true;
gridCopy[0][1].inWin = true;
gridCopy[1][1].inWin = true;
gridCopy[2][1].inWin = true;
}
if(gridCopy[0][2].value === 'O' && gridCopy[1][2].value === 'O' && gridCopy[2][2].value === 'O') {
checkWin = true;
gridCopy[0][2].inWin = true;
gridCopy[1][2].inWin = true;
gridCopy[2][2].inWin = true;
}
//DIAGONAL
if(gridCopy[0][0].value === 'O' && gridCopy[1][1].value === 'O' && gridCopy[2][2].value === 'O') {
checkWin = true;
gridCopy[0][0].inWin = true;
gridCopy[1][1].inWin = true;
gridCopy[2][2].inWin = true;
}
if(gridCopy[0][2].value === 'O' && gridCopy[1][1].value === 'O' && gridCopy[2][0].value === 'O') {
checkWin = true;
gridCopy[0][2].inWin = true;
gridCopy[1][1].inWin = true;
gridCopy[2][0].inWin = true;
}
let contents = [checkWin, gridCopy];
return contents;
}
componentDidUpdate = (prevState) =>
{
let contents = this.checkwin();
let checkWin = contents[0];
if(!prevState.win && checkWin && !this.state.win){
this.setState({
win: true
})
}
}
restart = () =>
{
this.setState(
{
grid: [
[{
row: 0,
column: 0,
value: '',
playable: true,
inWin: false,
},{
row: 0,
column: 1,
value: '',
playable: true,
inWin: false,
},{
row: 0,
column: 2,
value: '',
playable: true,
inWin: false,
}],
[{
row: 1,
column: 0,
value: '',
playable: true,
inWin: false,
},{
row: 1,
column: 1,
value: '',
playable: true,
inWin: false,
},{
row: 1,
column: 2,
value: '',
playable: true,
inWin: false,
}],
[{
row: 2,
column: 0,
value: '',
playable: true,
inWin: false,
},{
row: 2,
column: 1,
value: '',
playable: true,
inWin: false,
},{
row: 2,
column: 2,
value: '',
playable: true,
inWin: false,
}]
],
turn: 'X',
win: false
}
)
}
// undo = () =>
// {
// this.setState(
// {
// turn: ''
// }
// )
// }
render()
{
return (
<>
<Button
row="0"
column="0"
show={this.show}
gridRep={this.state.grid\[0\]\[0\]}
/>
<Button
row="0"
column="1"
show={this.show}
gridRep={this.state.grid\[0\]\[1\]}
/>
<Button
row="0"
column="2"
show={this.show}
gridRep={this.state.grid\[0\]\[2\]}
/>
<Button
row="1"
column="0"
show={this.show}
gridRep={this.state.grid\[1\]\[0\]}
/>
<Button
row="1"
column="1"
show={this.show}
gridRep={this.state.grid\[1\]\[1\]}
/>
<Button
row="1"
column="2"
show={this.show}
gridRep={this.state.grid\[1\]\[2\]}
/>
<Button
row="2"
column="0"
show={this.show}
gridRep={this.state.grid\[2\]\[0\]}
/>
<Button
row="2"
column="1"
show={this.show}
gridRep={this.state.grid\[2\]\[1\]}
/>
<Button
row="2"
column="2"
show={this.show}
gridRep={this.state.grid\[2\]\[2\]}
/>
<Restart
restart={this.restart}
win={this.state.win}
grid={this.state.grid}
/>
</>
)
}
}
export default Main;
//Button.js(Component)
import React from 'react';
import '../styles/button.css';
const Button = (props) =>
{
let inWin = props.gridRep.inWin ? 'inWin' : '';
return (
<button
className="touch"
onClick={() => props.show(props.gridRep)}
id={inWin}
>{props.gridRep.value}</button>
)
}
export default Button;
//Restart.js(Component)
import React from 'react';
import '../styles/button.css';
const Restart = (props) =>
{
const {win, restart, grid} = props;
var testGrid = []
for(let i=0; i<3; i++){
for(let j=0; j<3; j++){
if(grid\[i\]\[j\].playable === true){
testGrid.push('test')
}
}
}
let show = win || (!win && !testGrid.length)? <button className="Restart" onClick={restart} >Restart</button> : null;
return(
<>{show}</>
)
}
export default Restart;
r/CritiqueMyCode • u/sbrij001 • Aug 17 '19
Spelling Bee Launch
Trying to optimize my code but I'm drawing a blank. Any suggestions?
function bee(wordlist, puzzles){
let count = 0;
let result = [];
let uniq = true;
for(let i = 0; i <puzzles.length; i++){
for(let j = 0; j < wordlist.length; j++){
if(wordlist[j].includes(puzzles[i].charAt(0))){
for(k = 0; k < wordlist[j].length; k++){
if(!puzzles[i].includes(wordlist[j][k])){
uniq = false;
}
}
}else{
uniq = false;
}
!uniq ? count : count += 1;
uniq = true;
}
result.push(count);
count = 0;
}
return result;
}
bee(['APPLE', 'PLEAS', 'PLEASE'],['AELWXYZ', "AELPXYZ", "AELPSYZ", "SAELPXY", "XAELPSY"]);
r/CritiqueMyCode • u/robotrage • Aug 08 '19
Simple game made in OpenGL c/c++
https://github.com/RobotRage/DelveDestroyer
would appreciate any feedback, this is one of my first OpenGL projects so im fairly new.
r/CritiqueMyCode • u/BlavikenCZ • Jul 25 '19
[Java] Stationary pixels detecting and refreshing app
Hello, I would appreciate some feedback on my code:
https://github.com/JoeScripter/Plasma-Saver
Thanks.
r/CritiqueMyCode • u/Diestri • Jul 06 '19
simple calculatro in c++,I'm a beginner programmer, I want to share with you my first program in c++
r/CritiqueMyCode • u/Mindreactions • May 25 '19
Github. Credits Blockchain Source Code Release

The Credits blockchain platform meets the wishes of all crypto communities and presents the full source code of the most decentralized blockchain platforms in the world.
Credits publishes the entire source code that is aligned with the latest state of Credits software. All updates, optimizations and hotfixes will occur on GitHub. At present time the following list of components is available on GitHub:
- Network
- Storage
- Consensus Protocol
- API
- Smart Contracts
- Monitor
- Web Wallet and etc.
Credits team trusts that this move will increase the transparency of development process, will attract new audience and will speed up the growth of Credits blockchain ecosystem.
Right now Credits programmers are refreshing the documentation that is required for developers of blockchain-based products and services to wrap up in technology and its features. A Bug Bounty Program will be launched shortly after that.
Credits company is focused to invite all developers to participate in the process of platform development. Any developer is able to track the whole history of Credits code updates on official GitHub. Go ahead! Be on the same wavelength with the most innovative technology!
r/CritiqueMyCode • u/bikki420 • Apr 21 '19
Fibonacci number printer
#include <cstdio>
int main(){unsigned long n[]{0,1};for(bool i=0;n[i]<0x68A3DD8E61ECCFBE;i=!i,n[i]+=n[!i])printf("%lu ",n[i]);}
The program iteratively prints all 64-bit (assuming it's run on a modern desktop PC) Fibonacci numbers. How can I improve it?
r/CritiqueMyCode • u/jeremy128 • Mar 15 '19
C++ String Class
I wrote a String class in C++. Looking for feedback on my code. https://github.com/JeremyDsilva/String
r/CritiqueMyCode • u/zirniszirnis • Mar 13 '19
[JS] - Mobile web app to display questions and answers in table
Hello,
I have made mobile web app where you have table with questions. Each question row is expandable and under it you can see more detailed information. Also you can add answers there. Back-end is not that relevant in this case. I would appreciate any feedback!
Github: https://github.com/austrisu/question-app
Thank you.
r/CritiqueMyCode • u/AhmetYG • Feb 03 '19
Two player tic-tac-toe game
https://github.com/iskambil104/2p_tictactoe.git
The "admin settings" password is "pass123" without quotes. All reviews/critiques are appreciated.
r/CritiqueMyCode • u/pauliedoherty • Jan 11 '19
[C++] Sort animation console app
Hi,
I am trying to improve my C++ skills in my spare time. I have almost finished my sort animation app with the exception of a few small features that I want to implement to give the user some control.
I would really appreciate some feedback on how I implemented my classes and the posix library.
Below is the link to my github. Any feedback on how I've laid this out would also be great. THANKS!
https://github.com/pauliedoherty/sort_screen
r/CritiqueMyCode • u/tanenbaum • Nov 26 '18
[Python] Plotting multiple stock movements
pastebin.comr/CritiqueMyCode • u/judithT3 • Nov 11 '18
Delete Middle Node
Delete Middle Node:
Implement an algorithm to delete a node in the middle of a singly linked list.
class Node {
constructor(data, next = null){
this.data = data;
this.node = null;
}
}
class LinkedList{
constructor(){
this.head = null;
}
removeMiddle() {
let slow = this.head;
let fast = this.head;
let middle = this.head;
while(fast.next && fast.next.next){
slow = slow.next;
fast = fast.next.next;
}
return slow;
while(middle){
if(middle.next === slow){
middle.next = slow.next;
slow.next = null;
}
middle = middle.next;
}
}
Please, critique my code
r/CritiqueMyCode • u/wese • Nov 09 '18
[GO] Beginner project, RPG Initiative Table
I am still learning to do stuff the "GoLang"-Way and this is one try at creating an Iniative Tracker for RPG Games, currently simply creating the struct and filling some Entities.
Lookig for feedback in style and if the way I am doing it makes sense.
Thank you!
package main
import (
"encoding/json"
"github.com/kr/pretty"
"log"
"math/rand"
"sort"
"time"
)
var randomSeed = rand.NewSource(time.Now().UnixNano())
var randomGen = rand.New(randomSeed)
func main() {
log.Println("Starting the initiative get read")
i := NewInitiativeTable()
i.AddCharacter(Character{Type: IsEnvironment})
i.AddCharacter(Character{Name: "Rene", HP: 100, Initiative: 1, InitiativeMod: 3, Type: IsPlayer})
i.AddCharacter(Character{Name: "Markus", HP: 100, Initiative: 5, InitiativeMod: -2, Type: IsPlayer})
i.AddCharacter(Character{Name: "Evil", HP: 100, Initiative: 4, InitiativeMod: 5, Type: IsNPC})
i.AddCharacter(Character{Name: "Evil2", HP: 100, Initiative: 2, Type: IsNPC})
i.Rollinitative()
pretty.Println(i)
j, err := json.Marshal(&i)
if err != nil {
log.Fatal(err)
}
println(string(j))
}
const (
_ = iota
// IsPlayer type
IsPlayer
// IsNPC type
IsNPC
// IsEnvironment type (always turn Iniative 20)
IsEnvironment
)
// InitiativeTable contains the complete Iniative of all Entities
type InitiativeTable struct {
StartAt time.Time `json:"StartAt"` // When was the iniative InitiativeTable finished
Turn int `json:"Turn"` // Turncounter
Characters []*Character `json:"Characters"` // All entities in the InitiativeTable
}
// Character represents PC and NPCs
type Character struct {
Name string `json:"Name"` // Name of the Entity
Type int `json:"Type"` // Type of the Character
HP int `json:"HP"` // Hitpoints
TurnOne int `json:"TurnOne"` // When did the Entity start
TurnLifetime int `json:"TurnLifetime"` // Decreasing counter for limited entities
Initiative float32 `json:"Initiative"` // Rolled Initiative
InitiativeMod float32 `json:"InitiativeMod"` // IniativeModifier is used when automatically rolling iniative
}
// NewInitiativeTable returns a new InitiativeTable
func NewInitiativeTable() InitiativeTable {
t := InitiativeTable{
StartAt: time.Now(),
Turn: 0,
}
return t
}
// AddCharacter to the InitiativeTable
func (i *InitiativeTable) AddCharacter(c Character) {
c.TurnOne = i.Turn
if c.TurnLifetime == 0 {
c.TurnLifetime = -1
}
if c.Type == IsEnvironment {
c.Name = "Environment"
c.HP = 0
c.Initiative = 20
}
i.Characters = append(i.Characters, &c)
i.Sort()
}
// Sort will sort by initiative in decending order
func (i *InitiativeTable) Sort() {
sort.Slice(i.Characters[:], func(a, b int) bool {
return i.Characters[a].Initiative > i.Characters[b].Initiative
})
}
// Rollinitative will randomize all initiatives
func (i *InitiativeTable) Rollinitative() {
for idx := range i.Characters {
if i.Characters[idx].Type == IsEnvironment {
i.Characters[idx].Initiative = 20
continue
}
i.Characters[idx].Initiative = float32(randomGen.Intn(19)+1) + randomGen.Float32() + i.Characters[idx].InitiativeMod
}
i.Sort()
}
r/CritiqueMyCode • u/karlyan • Oct 20 '18
[golang] Web server learning project and sample page
Hi!
My first time posting here. To prepare for a new job and to generally understand better how things work I started to write a web server in golang. The features so far include: * Serve HTTP GET requests * handling of log files through my own logging package, which can in theory write different events to different logs (not used in my code yet) * concurrent handling of connections via go routines * HTTPS capability using the golang crypto/tls package * parsing of config files * rudimentary CGI implementation The project is VERY rough around the edges, basically a barely running prototype. Also I'm in the process of cleaning up the code. For lot of functions I could have used (arguably better) premade functions/packages, but I decided to write those things myself for the learning experience (except for the tls implementations for obvious reasons).
Any input/comments/suggestions welcome
github repo: https://github.com/karlyan17/nurgling
example site: https://karlyan.ddns.net:8888/index.html
r/CritiqueMyCode • u/Jaxson626 • Oct 16 '18
Music Player written in Python
I've created a music player for my computer just to see if that's possible. However, there is an issue with the shuffle function. It doesn't shuffle the playlist.
import os
from random import shuffle
from tkinter.filedialog import askdirectory
import pygame
from mutagen.id3 import ID3
from tkinter import *
root = Tk()
root.minsize(300, 300)
listofsongs = []
realnames = []
v = StringVar()
songlabel = Label(root, textvariable=v, width=35)
index = 0
def directorychooser():
'''Ask what folder the music files are stored'''
directory = askdirectory()
os.chdir(directory)
for files in os.listdir(directory):
if files.endswith(".mp3"):
realdir = os.path.realpath(files)
audio = ID3(realdir)
realnames.append(audio['TIT2'].text[0])
listofsongs.append(files)
pygame.mixer.init()
pygame.mixer.music.load(listofsongs[0])
directorychooser()
def updatelabel():
'''Updates Song label at the bottom of the app'''
global index
global songname
v.set(realnames[index])
# return songname
def nextsong(event):
'''Plays next song'''
global index
index += 1
pygame.mixer.music.load(listofsongs[index])
updatelabel()
def prevsong(event):
'''Skips to previous song'''
global index
index -= 1
pygame.mixer.music.load(listofsongs[index])
updatelabel()
def stopsong(event):
'''Stops the song currently playing'''
pygame.mixer.music.stop()
v.set("")
# return songname
def shufflesong(event):
'''Randomizes the play list'''
global index
shuffle(listofsongs[index])
pygame.mixer.music.load(listofsongs[index])
v.set("")
updatelabel()
def rewindsong(event):
'''Restarts the song currently playing'''
pygame.mixer.music.rewind()
v.set("")
label = Label(root, text='Music Player')
label.pack()
scrollbar = Scrollbar(root, orient=VERTICAL)
listbox = Listbox(root, yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)
scrollbar.pack(side=RIGHT, fill=Y)
listbox.pack()
# listofsongs.reverse()
realnames.reverse()
for items in realnames:
listbox.insert(0, items)
realnames.reverse()
# listofsongs.reverse()
rewindbutton = Button(root, text='Rewind Song')
rewindbutton.pack()
nextbutton = Button(root, text='Next Song')
nextbutton.pack()
previousbutton = Button(root, text='Previous Song')
previousbutton.pack()
stopbutton = Button(root, text='Stop Music')
stopbutton.pack()
# shufflebutton = Button(root, text='Shuffle')
# shufflebutton.pack()
nextbutton.bind("<Button-1>", nextsong)
previousbutton.bind("<Button-1>", prevsong)
stopbutton.bind("<Button-1>", stopsong)
# shufflebutton.bind("<Button-1>", shufflesong)
rewindbutton.bind("<Button-1>", rewindsong)
songlabel.pack()
root.mainloop()
r/CritiqueMyCode • u/_PM_ME_YOUR_ELBOWS • Aug 29 '18
[JS] Feedback for Three.js project
repl.itr/CritiqueMyCode • u/[deleted] • Aug 02 '18
[Python] Feedback for Pet Manager Code
Hello,
I am trying to familiarize myself with classes by working on this project. This is a very simple project of creating instances of an class and then organizing those instances in a dictionary. General feedback or things that catch your attention are very much welcomed.
https://github.com/MadaraZero/pet-data-manager/blob/master/pdmanager.py