Skip to content

Commit

Permalink
refactor(source): organize files
Browse files Browse the repository at this point in the history
Co-authored-by: Renan Vieira  <[email protected]>
Co-authored-by: Paulo H. Lamounier <[email protected]>
Co-authored-by: Millena Queiroz <[email protected]>
Co-authored-by: NATAN ALMEIDA <[email protected]>
  • Loading branch information
5 people committed Jan 13, 2025
1 parent 31f7e27 commit 68b7cea
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 32 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Magos especializados em um único elemento caminham pelo mundo. Sua missão é s
## Apresentações

1. [Entrega de DER, MER, MR e DD](https://youtu.be/rYFDGP1GFUo);
2. [Entrega do SQL](https://youtu.be/).
2. [Entrega do SQL](https://youtu.be/2Z54N1kAIhc).

## Screenshots

Expand Down
30 changes: 26 additions & 4 deletions docs/sql/dml.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,33 @@ DML é um conjunto de instruções SQL que permitem consultar, adicionar, editar
### Região

```sql
-- adiciona regiao
INSERT INTO regiao (nome, descricao, elemento) VALUES
("Bosques dos Serafins", "Bosque com o alto índice de serafins.", "Fogo"),
("Deserto de Obsidiana", "Deserto com areias negras e calor extremo.", "Fogo"),
("Lago dos Espelhos", "Lago tranquilo com águas cristalinas.", "Água"),
("Planície dos Ventos", "Vasta planície com ventos constantes.", "Ar");
("Vilarejo do Amanhecer", "Região inicial do jogador, um vilarejo tranquilo, esbelto...", "Água")

-- adiciona subregiao
INSERT INTO subregiao (regiao_id, parent_id, nome, descricao)
VALUES
((SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer'), NULL, 'Ferraria Albnur', 'Local de trabalho árduo onde ferramentas e armas são forjadas.'),
((SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer'), NULL, 'Praça Central', 'O coração do vilarejo, cheio de vida e comércio.'),
((SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer'), NULL, 'Casa do Ancião', 'Uma casa tranquila que guarda histórias e conselhos sábios.'),
((SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer'), NULL, 'Taberna da Caneca Partida', 'Um refúgio caloroso para diversão e descanso.');

-- adiciona as conexoes das subregioes
INSERT INTO sub_regiao_conexao (sub_regiao_1, sub_regiao_2, direcao, situacao)
VALUES
((SELECT id FROM sub_regiao WHERE nome = 'Ferraria Albnur' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')),
(SELECT id FROM sub_regiao WHERE nome = 'Praça Central' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')), 'Sul', 'Passável'),
((SELECT id FROM sub_regiao WHERE nome = 'Praça Central' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')),
(SELECT id FROM sub_regiao WHERE nome = 'Ferraria Albnur' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')), 'Norte', 'Passável'),
((SELECT id FROM sub_regiao WHERE nome = 'Praça Central' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')),
(SELECT id FROM sub_regiao WHERE nome = 'Casa do Ancião' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')), 'Oeste', 'Passável'),
((SELECT id FROM sub_regiao WHERE nome = 'Casa do Ancião' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')),
(SELECT id FROM sub_regiao WHERE nome = 'Praça Central' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')), 'Leste', 'Passável'),
((SELECT id FROM sub_regiao WHERE nome = 'Praça Central' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')),
(SELECT id FROM sub_regiao WHERE nome = 'Taberna da Caneca Partida' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')), 'Leste', 'Passável'),
((SELECT id FROM sub_regiao WHERE nome = 'Taberna da Caneca Partida' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')),
(SELECT id FROM sub_regiao WHERE nome = 'Praça Central' AND regiao_id = (SELECT id FROM regiao WHERE nome = 'Vilarejo do Amanhecer')), 'Oeste', 'Passável');
```

### Feitiço
Expand Down
9 changes: 9 additions & 0 deletions makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
.PHONY: config build start stop rmv interface

VENV_DIR := .venv

config:
@cp .env.template .env
@test -d $(VENV_DIR) || python3 -m venv $(VENV_DIR)
@echo "Python virtual environment criado em $(VENV_DIR)"
@$(VENV_DIR)/bin/pip install --upgrade pip
@$(VENV_DIR)/bin/pip install -r requirements.txt
@echo "Dependencias instaladas com sucesso."

build:
@sudo docker compose up --build
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
psycopg2==2.9.10
colorama==0.4.6
21 changes: 19 additions & 2 deletions source/create_character.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from utils import debug
from queries.query import list_character_id

elements = ["Fogo", "Água", "Terra", "Ar", "Trevas", "Luz"]

class Character:

def __init__(self, conn):
def __init__(self, conn, id = None):
self.conn = conn
self.nome = None
self.elemento = None
Expand All @@ -19,7 +20,23 @@ def __init__(self, conn):
self.inteligencia = 1
self.moedas = 15
self.nivel = 1
self.get_information()
if not id:
self.get_information()
else:
characters_info = list_character_id(self.conn, id)
self.sub_regiao_id = characters_info[0]
self.nome = characters_info[1]
self.elemento = characters_info[2]
self.conhecimento_arcano = characters_info[3]
self.vida = characters_info[4]
self.vida_maxima = characters_info[5]
self.xp = characters_info[6]
self.xp_total = characters_info[7]
self.energia_arcana = characters_info[8]
self.energia_arcana_maxima = characters_info[9]
self.inteligencia = characters_info[10]
self.moedas = characters_info[11]
self.nivel = characters_info[12]

def get_information(self):
print("\n === Criação de Personagem === ")
Expand Down
55 changes: 47 additions & 8 deletions source/interface.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,51 @@
import os
import platform
from colorama import Fore, Style, init
from create_character import Character
from queries.query import get_subregions_character
from queries.query import get_subregions_character, list_all_characters
from utils import debug

# Initialize colorama
init()

# Clean the terminal screen
def clear_screen():
if platform.system() == "Windows":
os.system("cls")
else:
os.system("clear")

# Show initial menu of the game and return option chosen.
def show_menu() -> str:
def ask():
option = input("Escolha uma opção: ")
return option.lower()

print("\n--- Bem-vindo ao Unimancer! ---")
print(Style.BRIGHT + Fore.YELLOW + "\n--- Bem-vindo ao Unimancer! ---" + Style.RESET_ALL)
print("criar: criar um novo personagem;")
print("listar: Liste os personagens existentes")
print("sair: sair do jogo.")

option = ask()
while option not in ["criar", "sair"]:
while option not in ["criar", "sair", "listar"]:
print("Opção inválida!")
option = ask()
return option

# Display player header information
def header(character):
clear_screen()
print(f"=== {character.nome} === vida: {character.vida}/{character.vida_maxima} "
f"energia arcana: {character.energia_arcana}/{character.energia_arcana_maxima} "
f"moedas: {character.moedas} xp: {character.xp}/{character.xp_total} ===")

# Show available subregions and handle navigation
def navigate(conn, character):
while True:
clear_screen()
print(Fore.CYAN + "\n ----- Descrição -------" + Fore.RESET_ALL)
print(get_subregion_description(conn,character))

print("\n--- Locais Disponíveis ---")
subregions = get_subregions_character(conn, character.sub_regiao_id)

Expand All @@ -43,7 +62,7 @@ def navigate(conn, character):
break
elif 1 <= choice <= len(subregions):
destino, direcao, situacao = subregions[choice - 1]
if situacao.lower() == "livre":
if situacao == "Passável":
print(f"\nVocê se moveu para: {destino} ({direcao}).")
character.sub_regiao_id = fetch_subregion_id_by_name(destino, conn)
else:
Expand All @@ -56,24 +75,43 @@ def navigate(conn, character):
# Function to change actual subregion
def fetch_subregion_id_by_name(name, conn):
with conn.cursor() as cur:
cur.execute("SELECT id FROM sub_regiao WHERE nome = %s", (name,))
cur.execute("SELECT DISTINCT id FROM sub_regiao WHERE nome = %s", (name,))
result = cur.fetchone()
return result[0] if result else None

# Function to get subregion description
def get_subregion_description(conn, character):
with conn.cursor() as cur:
cur.execute(f"SELECT descricao FROM sub_regiao WHERE id = {character.sub_regiao_id}")
result = cur.fetchone()
return result[0]

# Main game loop
def game_loop(conn):
option = show_menu()
characters = list_all_characters(conn)
if option == "sair":
print("Saindo do jogo...")
return

if option == "criar":
elif option == "listar":
if not characters:
print("Nenhum personagem encontrado")
else:
for idx, character in enumerate(characters, start=1):
print(f"\n Personagem: {idx}, ID: {character[0]}, nome: {character[1]}, elemento: {character[2]}")

personagem_id = input("Escolha um personagem (id): ")
character = Character(conn, personagem_id)

elif option == "criar":
character = Character(conn)
character.add_database()
debug(f"Personagem {character.nome} criado com sucesso!")

while True:
print("\n--- Menu Principal ---")
clear_screen()
print(Fore.CYAN + "\n--- Menu Principal ---" + Fore.RESET_ALL)
print("1. Navegar")
print("2. Ver status do personagem")
print("3. Sair")
Expand All @@ -82,7 +120,8 @@ def game_loop(conn):
if option == "1":
navigate(conn, character)
elif option == "2":
header(character)
header(character)
input("\nPressione Enter para continuar...")
elif option == "3":
print("Saindo do jogo...")
break
Expand Down
26 changes: 17 additions & 9 deletions source/queries/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,12 @@ def get_subregions_character(conn, sub_regiao_id):
with conn.cursor() as cur:
cur.execute(
"""
SELECT
CASE
WHEN src.sub_regiao_1 = %s THEN sr2.nome
ELSE sr1.nome
END AS sub_regiao_destino,
src.direcao,
src.situacao
SELECT sr2.nome AS sub_regiao_destino, src.direcao, src.situacao
FROM sub_regiao_conexao src
JOIN sub_regiao sr1 ON src.sub_regiao_1 = sr1.id
JOIN sub_regiao sr2 ON src.sub_regiao_2 = sr2.id
WHERE sr1.id = %s OR sr2.id = %s;
""", (sub_regiao_id, sub_regiao_id, sub_regiao_id)
WHERE sr1.id = %s;
""", (sub_regiao_id,)
)
result = cur.fetchall()
return result
Expand All @@ -56,4 +50,18 @@ def list_npcs_subregion(conn, sub_regiao_id):
""", (sub_regiao_id,)
)
result = cur.fetchall()
return result

# List all characters
def list_all_characters(conn):
with conn.cursor() as cur:
cur.execute("SELECT id, nome, elemento FROM personagem")
result = cur.fetchall()
return result

# List character with id
def list_character_id(conn, character_id):
with conn.cursor() as cur:
cur.execute(f"SELECT * FROM personagem WHERE id = {character_id}")
result = cur.fetchone()
return result
10 changes: 2 additions & 8 deletions source/queries/query.sql
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
-- 1. consult all sub-regions where the character can go
SELECT
CASE
WHEN src.sub_regiao_1 = %s THEN sr2.nome
ELSE sr1.nome
END AS sub_regiao_destino,
src.direcao,
src.situacao
SELECT sr2.nome AS sub_regiao_destino, src.direcao, src.situacao
FROM sub_regiao_conexao src
JOIN sub_regiao sr1 ON src.sub_regiao_1 = sr1.id
JOIN sub_regiao sr2 ON src.sub_regiao_2 = sr2.id
WHERE sr1.id = %s OR sr2.id = %s;
WHERE sr1.id = %s;

-- 2. List all character
SELECT * FROM personagem;
Expand Down

0 comments on commit 68b7cea

Please sign in to comment.