Skip to content

Commit 9c03bd3

Browse files
BeyondMagicMillenaQueirozR-enanVieiraNanashii76natanalmeida03
committed
feat(py): refactor everything
Co-authored-by: Millena Queiroz <[email protected]> Co-authored-by: Renan Vieira <[email protected]> Co-authored-by: Paulo H. Lamounier <[email protected]> Co-authored-by: NATAN ALMEIDA <[email protected]>
1 parent d00d5fa commit 9c03bd3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+5032
-421
lines changed

build/lib/__init__.py

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from database.Database import Database
2+
from default import populate_database
3+
import sys
4+
import logic.main as main
5+
import utils
6+
7+
def main():
8+
sqls = [
9+
"./src/database/ddl/types.sql",
10+
"./src/database/ddl/tables.sql",
11+
"./src/database/dml/procedures.sql",
12+
#"./src/database/dml/triggers.sql"
13+
]
14+
15+
db = Database("localhost", "postgres", "postgres", "123456")
16+
17+
def table_length() -> list:
18+
db.cur.execute("SELECT table_name FROM information_schema.tables WHERE table_schema='public'")
19+
tables = db.cur.fetchall()
20+
return len(tables)
21+
22+
def init_database():
23+
for sql in sqls:
24+
db.execute_file(sql)
25+
utils.debug("")
26+
populate_database(db)
27+
28+
# Process command line arguments.
29+
if len(sys.argv) > 1:
30+
arg = sys.argv[1]
31+
if arg == "delete" or arg == "reset":
32+
db.delete_tables()
33+
if arg == "reset":
34+
init_database()
35+
return 0
36+
37+
if table_length() == 0:
38+
utils.debug("Nenhuma tabela encontrada. Criando banco de dados...")
39+
utils.debug("Banco de dados e tabelas criados com sucesso!")
40+
init_database()
41+
42+
while True:
43+
character = main.main_menu(db.conn)
44+
if not character:
45+
utils.debug("Nenhum personagem retornado, saindo.")
46+
continue
47+
48+
elif character == -1:
49+
utils.debug("Saindo do jogo")
50+
return 0
51+
52+
53+
while main.game(db.conn, character):
54+
pass
55+
56+
main()

build/lib/database/Database.py

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from colorama import Fore, Style
2+
from utils import debug
3+
import psycopg2
4+
5+
class Database:
6+
7+
def __init__(self, host, db, user, password):
8+
9+
self.conn = psycopg2.connect(
10+
host=host,
11+
database=db,
12+
user=user,
13+
password=password
14+
)
15+
16+
if not self.conn.status:
17+
debug("Database: Connection failed with server.")
18+
exit(1)
19+
20+
self.cur = self.conn.cursor()
21+
22+
def delete_tables(self) -> None:
23+
try:
24+
# Reset completely the database, stopping all connections and transactions.
25+
self.cur.execute("ROLLBACK;")
26+
self.cur.execute("SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'rpg' AND pid <> pg_backend_pid();")
27+
self.conn.commit()
28+
29+
# Delete all tables, types and procedures.
30+
self.cur.execute("DROP SCHEMA public CASCADE ; CREATE SCHEMA public;")
31+
self.conn.commit()
32+
33+
except Exception as e:
34+
debug(f"database: Error deleting tables: {e}")
35+
36+
debug("database: deleted all tables.")
37+
38+
# Execute a SQL file in the database.
39+
def execute_file(self, path: str) -> None:
40+
debug(f"database: exeuting file {Style.BRIGHT + path + Style.NORMAL}")
41+
with open(path, encoding='utf8', mode='r') as file:
42+
sql = file.read()
43+
self.cur.execute(sql)
44+
self.conn.commit()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from database import Database
2+
from utils import debug, error
3+
from colorama import Style
4+
5+
def boots(db: Database):
6+
7+
table_name = Style.BRIGHT + "ACESSORIO (Bota)" + Style.NORMAL
8+
9+
try:
10+
# [("descricao...", inimigos para matar para dropar, "nome", "peso", "preco")]
11+
default_values = [
12+
("Feita de couro gasto", 2, "Botas de couro", 1, 15),
13+
("Feita de couro de dragão", 4, "Botas de dragão", 2, 30),
14+
("Criadas com peles encantadas de criaturas aquáticas", 5, "Botas de água", 2, 30),
15+
("Forjadas com o poder das trevas", 6, "Botas do crepúsculo", 5, 50),
16+
("Feitas de cristais mágicos", 6, "Botas de cristal", 4, 80),
17+
("Revestidas por gelo eterno", 11, "Botas de gelo", 3, 70),
18+
("Feitas de madeira viva", 3, "Botas de madeira", 2, 12),
19+
("Forjadas com o poder do trovão", 15, "Botas do trovão", 3, 110),
20+
("Feitas de ossos de dragão", 20, "Botas de ossos", 6, 100),
21+
("Botas da Realeza, forjado para magos experientes", 23, "Botas da Realeza", 5, 120),
22+
]
23+
24+
db.cur.executemany(
25+
"""
26+
SELECT criar_acessorio('Botas', %s, %s::INT, %s, %s::INT, %s::INT)
27+
""", default_values
28+
)
29+
30+
db.conn.commit()
31+
debug(f"default: {len(default_values)} {table_name} added successfully!")
32+
33+
return len(default_values)
34+
35+
except Exception as e:
36+
db.conn.rollback()
37+
error(f"default: error occurred while adding {table_name}s values: {e}")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from database import Database
2+
from utils import debug, error
3+
from colorama import Style
4+
5+
# add bracelets in the magical fantasy game where only exists magical creatures.
6+
def bracelets(db: Database):
7+
8+
table_name = Style.BRIGHT + "ACESSORIO (Bracelete)" + Style.NORMAL
9+
10+
try:
11+
# [("descricao...", inimigos para matar para dropar, "nome", "peso", "preco")]
12+
default_values = [
13+
("Bracelete de bronze, não é de muito valor.", 6, "Bracelete de bronze", 1, 10),
14+
("Bracelete de ossos forjado em matéria negra", 16, "Bracelete de ossos", 3, 25),
15+
("Bracelete herbáceo entrançado com grama mística", 7, "Bracelete de grama", 1, 18),
16+
("Bracelete envolto em plasma mágico, intensifica feitiços destrutivos", 20, "Bracelete de Plasma Arcano", 4, 80),
17+
("Bracelete de vidro etéreo, refletindo energias arcanas", 12, "Bracelete de Cristal Etéreo", 2, 50),
18+
("Bracelete entalhado em rocha ancestral, trazendo firmeza inabalável", 25, "Bracelete da Rocha Primeva", 5, 100),
19+
]
20+
21+
db.cur.executemany(
22+
"""
23+
SELECT criar_acessorio('Bracelete', %s, %s, %s, %s, %s)
24+
""", default_values
25+
)
26+
27+
db.conn.commit()
28+
debug(f"default: {len(default_values)} {table_name} added successfully!")
29+
30+
return len(default_values)
31+
32+
except Exception as e:
33+
db.conn.rollback()
34+
error(f"default: error occurred while adding {table_name}s values: {e}")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from database import Database
2+
from utils import debug, error
3+
from colorama import Style
4+
5+
# add buckles in the magical fantasy game where only exists magical creatures.
6+
def buckle(db: Database):
7+
8+
table_name = Style.BRIGHT + "ACESSORIO (Fivela)" + Style.NORMAL
9+
10+
try:
11+
# [("descricao...", inimigos para matar para dropar, "nome", "peso", "preco")]
12+
default_values = [
13+
("Fivela de bronze, não é de muito valor.", 6, "Fivela de bronze", 1, 10),
14+
("Forjada em runas antigas, fortalece magias destrutivas.", 12, "Fivela Rúnica", 2, 45),
15+
("Tingida com aura sombria, canaliza energias malditas.", 18, "Fivela Obscura", 3, 75),
16+
("Resplandecente com luz astral, aprimora habilidades de cura.", 10, "Fivela Celestial", 2, 60),
17+
("Envolta em correntes de ar, concede agilidade incomum.", 14, "Fivela da Ventania", 1, 40),
18+
("Revestida em gelo perpétuo, protege contra temperaturas extremas.", 20, "Fivela do Gelo Inquebrável", 4, 90)
19+
]
20+
21+
db.cur.executemany(
22+
"""
23+
SELECT criar_acessorio('Fivela', %s, %s, %s, %s, %s)
24+
""", default_values
25+
)
26+
27+
db.conn.commit()
28+
debug(f"default: {len(default_values)} {table_name} added successfully!")
29+
30+
return len(default_values)
31+
32+
except Exception as e:
33+
db.conn.rollback()
34+
error(f"default: error occurred while adding {table_name}s values: {e}")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from database import Database
2+
from utils import debug, error
3+
from colorama import Style
4+
5+
def cane(db: Database):
6+
7+
table_name = Style.BRIGHT + "ACESSORIO (Bengala)" + Style.NORMAL
8+
9+
try:
10+
# [("descricao...", "inimigos para matar para dropar", "nome", "peso", "preco")]
11+
default_values = [
12+
("Uma bengala simples feita de madeira bruta.", 2, "Bengala de Madeira Rústica", 2, 15),
13+
("Feita de galhos secos e reforçada com cordas", 3, "Bengala de Galho Seco", 2, 10),
14+
("Uma bengala de bambu leve", 4, "Bengala de Bambu", 1, 20),
15+
("Uma bengala de madeira polida", 5, "Bengala de Carvalho Encantado", 3, 40),
16+
("Feita de madeira petrificada", 5, "Bengala de Madeira Petrificada", 4, 60),
17+
("Feita de prata pura", 8, "Bengala de Prata Mística", 3, 90),
18+
("Esculpida em cristal mágico", 10, "Bengala de Cristal Arcano", 2, 95),
19+
("Composta por ossos de dragão", 12, "Bengala de Ossos Dracônicos", 5, 100)
20+
]
21+
22+
db.cur.executemany(
23+
"""
24+
SELECT criar_acessorio('Bengala', %s, %s, %s, %s, %s)
25+
""", default_values
26+
)
27+
28+
db.conn.commit()
29+
debug(f"default: {len(default_values)} {table_name} added successfully!")
30+
31+
return len(default_values)
32+
33+
except Exception as e:
34+
db.conn.rollback()
35+
error(f"default: error occurred while adding {table_name}s values: {e}")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from database import Database
2+
from utils import debug, error
3+
from colorama import Style
4+
5+
def cloack(db: Database):
6+
7+
table_name = Style.BRIGHT + "ACESSORIO (Manto)" + Style.NORMAL
8+
9+
try:
10+
# [("descricao...", "inimigos para matar para dropar", "nome", "peso", "preco")]
11+
default_values = [
12+
("Um manto simples de tecido grosso", 5, "Manto de Lona Simples", 2, 30),
13+
("Feito de algodão comum, esse manto é leve e confortável", 8, "Manto de Algodão Básico", 2, 25),
14+
("Este manto de lã não é muito resistente", 9, "Manto de Lã Rústica", 3, 35),
15+
("Manto de tecido encantado que protege contra a neve.", 11, "Manto de Neve Encantado", 4, 60),
16+
("Feito com peles de animais selvagens", 14, "Manto de Pele de Urso", 5, 70),
17+
("Manto de seda refinada", 15, "Manto de Seda Flamejante", 6, 85),
18+
("Manto forjado a partir de tecido celestial", 17, "Manto Celestial das Sombras", 6, 100),
19+
("Feito com penas de fênix", 20, "Manto da Fênix Ardente", 6, 120),
20+
("Este manto é imbuído com magia de tempestade", 22, "Manto do Vórtice Tempestuoso", 7, 140)
21+
]
22+
23+
db.cur.executemany(
24+
"""
25+
SELECT criar_acessorio('Manto', %s, %s, %s, %s, %s);
26+
""", default_values
27+
)
28+
29+
db.conn.commit()
30+
debug(f"default: {len(default_values)} {table_name} added successfully!")
31+
32+
return len(default_values)
33+
34+
except Exception as e:
35+
db.conn.rollback()
36+
error(f"default: error occurred while adding {table_name}s values: {e}")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from database import Database
2+
from utils import debug, error
3+
from colorama import Style
4+
5+
# add collars in the magical fantasy game where only exists magical creatures.
6+
def collars(db: Database):
7+
8+
table_name = Style.BRIGHT + "ACESSORIO (Colar)" + Style.NORMAL
9+
10+
try:
11+
# [("descricao...", inimigos para matar para dropar, "nome", "peso", "preco")]
12+
default_values = [
13+
("Colar de bronze, não é de muito valor.", 5, "Colar de bronze", 1, 10),
14+
("Colar de prata, forjado para magos iniciantes", 20, "Colar de prata", 2, 14),
15+
("Banhado em brasas vivas, abastece feitiços de fogo.", 15, "Colar da Combustão Arcana", 2, 50),
16+
("Carrega correntes aéreas, amplificando magias de vento.", 10, "Colar da Brisa Mística", 1, 35),
17+
("Feito de gelo eterno, concede resistência ao calor intenso.", 18, "Colar do Gelo Supremo", 3, 65),
18+
("Pulsante com energia vital, auxilia na regeneração.", 8, "Colar do Vigor Florestal", 2, 40),
19+
("Criado a partir de cristais puros, potencializa feitiços de luz.", 12, "Colar do Prisma Radiante", 5, 90),
20+
("Une ecos ancestrais, conferindo proteção espiritual.", 20, "Colar do Eco Ancestral", 4, 70),
21+
("Guardado por faíscas trovejantes, intensifica habilidades elétricas.", 25, "Colar do Raio Furioso", 3, 100),
22+
("Tecido com sombras crepitantes, canaliza força sombria.", 18, "Colar do Eclipse Noturno", 4, 110),
23+
("Imerso em magia aquática, fornece agilidade e ataques aquosos.", 14, "Colar da Maré Mística", 2, 80),
24+
("Forjado em runas de sangue, sacrifica vida para poder extremo.", 30, "Colar Carmesim Profano", 6, 150),
25+
("Colar de vento cortante com lâminas invisíveis", 20, "Anel de vento", 1, 65),
26+
("Colar da Realeza, forjado para magos experientes", 23, "Anel da Realeza", 5, 120),
27+
]
28+
29+
db.cur.executemany(
30+
"""
31+
SELECT criar_acessorio('Colar', %s, %s, %s, %s, %s);
32+
""", default_values
33+
)
34+
35+
db.conn.commit()
36+
debug(f"default: {len(default_values)} {table_name} added successfully!")
37+
38+
return len(default_values)
39+
40+
except Exception as e:
41+
db.conn.rollback()
42+
error(f"default: error occurred while adding {table_name}s values: {e}")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from database import Database
2+
from utils import debug, error
3+
from colorama import Style
4+
5+
# add gloves in the magical fantasy game where only exists magical creatures.
6+
def gloves(db: Database):
7+
8+
table_name = Style.BRIGHT + "ACESSORIO (Luva)" + Style.NORMAL
9+
10+
try:
11+
# [("descricao...", inimigos para matar para dropar, "nome", "peso", "preco")]
12+
default_values = [
13+
("Protege as mãos de qualquer magia .", 1, "Luva d'água", 1, 2014),
14+
("Concentra chamas internas, ideal para confrontos com salamandras do vulcão.", 8, "Luvas Ígneas", 2, 320),
15+
("Transfere força aérea para golpes sutis, caçadas a harpias ficam fáceis.", 10, "Luvas do Vento Cortante", 1, 280),
16+
("Proporciona resistência à escuridão, eficiente contra magos sombrios.", 12, "Luvas das Sombras Profundas", 3, 400),
17+
("Canaliza luz radiante, purificando venenos de slimes venenosos.", 9, "Luvas da Aurora Purificadora", 2, 350),
18+
("Cria um vínculo aquático, auxiliando na absorção de magias de água.", 6, "Luvas da Maré Serena", 2, 290),
19+
("Impõe terror contra inimigos fracos, inspirada em runas de necromancia.", 14, "Luvas do Terror Profano", 4, 450),
20+
("Concede agilidade e precisão, ideal para caçadas a feras rápidas.", 7, "Luvas do Predador Ágil", 1, 310),
21+
("Forjadas em gelo eterno, protegem contra gélidas criaturas do norte.", 11, "Luvas do Gelo Eterno", 3, 380),
22+
("Concede resistência elétrica, eficaz contra magos elétricos.", 13, "Luvas da Tempestade Elétrica", 2, 420)
23+
]
24+
25+
db.cur.executemany(
26+
"""
27+
SELECT criar_acessorio('Luvas', %s, %s, %s, %s, %s);
28+
""", default_values
29+
)
30+
31+
db.conn.commit()
32+
debug(f"default: {len(default_values)} {table_name} added successfully!")
33+
34+
return len(default_values)
35+
36+
except Exception as e:
37+
db.conn.rollback()
38+
error(f"default: error occurred while adding {table_name}s values: {e}")

0 commit comments

Comments
 (0)