Skip to content

Commit 03d2215

Browse files
committed
atualização para copiar os jogos padrão para o novo diretorio no linux
1 parent 00d0588 commit 03d2215

File tree

3 files changed

+85
-6
lines changed

3 files changed

+85
-6
lines changed

game_integration_guide.html

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
<!DOCTYPE html>
32
<html lang="pt-br">
43
<head>
@@ -73,7 +72,37 @@ <h2>3. Retorno do score</h2>
7372

7473
<hr>
7574

76-
<h2>4. Exemplo completo de um minijogo</h2>
75+
<h2>4. Onde colocar os minijogos</h2>
76+
<p>Os minijogos devem ser colocados na pasta <strong>.pet_game/minigames</strong>, localizada no diretório home do usuário (<code>~/.pet_game/minigames</code>). Esta é a pasta padrão usada pelo aplicativo para buscar novos jogos. Certifique-se de seguir as orientações de estrutura para garantir o funcionamento correto.</p>
77+
78+
<h3>Passos para adicionar novos minijogos:</h3>
79+
<ol>
80+
<li>Coloque o arquivo Python do jogo na pasta <code>~/.pet_game/minigames</code>.</li>
81+
<li>Adicione um arquivo de configuração JSON correspondente na pasta <code>~/.pet_game/minigames_config</code>.</li>
82+
<li>O JSON deve conter informações como o nome do jogo, ícone e recompensas, seguindo o formato padrão.</li>
83+
</ol>
84+
85+
<p>Exemplo de arquivo JSON de configuração:</p>
86+
<pre><code>{
87+
"id": "simple_clicker",
88+
"name": "Simple Clicker",
89+
"file": "simple_clicker_game.py",
90+
"class": "SimpleClickerGame",
91+
"icon": "game_icons/clicker.png",
92+
"xp_reward_interval": {
93+
"points": 10,
94+
"xp": 1
95+
},
96+
"coin_reward_interval": {
97+
"points": 10,
98+
"coins": 1
99+
}
100+
}
101+
</code></pre>
102+
103+
<hr>
104+
105+
<h2>5. Exemplo completo de um minijogo</h2>
77106
<p>Abaixo está um exemplo de um minijogo simples seguindo esta estrutura:</p>
78107
<pre><code>import pygame
79108

@@ -113,11 +142,12 @@ <h2>4. Exemplo completo de um minijogo</h2>
113142

114143
<hr>
115144

116-
<h2>5. Boas práticas</h2>
145+
<h2>6. Boas práticas</h2>
117146
<ul>
118147
<li><strong>Encapsulamento:</strong> Sempre encapsule a lógica do jogo dentro de uma classe para facilitar a integração.</li>
119148
<li><strong>Retorno consistente:</strong> Certifique-se de que o método <code>run()</code> sempre retorne o score como um inteiro.</li>
120149
<li><strong>Manutenção de estado:</strong> Evite usar variáveis globais; mantenha o estado do jogo dentro da classe principal.</li>
150+
<li><strong>Teste:</strong> Sempre teste seus jogos antes de adicioná-los ao sistema para garantir que funcionem conforme o esperado.</li>
121151
</ul>
122152

123153
<hr>
@@ -126,5 +156,3 @@ <h2>5. Boas práticas</h2>
126156
</body>
127157
</html>
128158

129-
130-

gamification_module.py

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
import os
55
import json
66
import sys
7+
import shutil
8+
9+
from PyQt5.QtWidgets import QPushButton, QMessageBox
10+
711
# Adiciona a pasta minigames ao sys.path
812
#sys.path.append(os.path.join(os.path.dirname(__file__), 'minigames'))
913
from PyQt5.QtWidgets import (
@@ -45,6 +49,45 @@ def load_minigames():
4549

4650
return minigames
4751

52+
53+
def copiar_pastas_padrao():
54+
# Caminhos das pastas padrão
55+
minigames_default_path = os.path.join(os.path.dirname(__file__), "minigames")
56+
minigames_config_default_path = os.path.join(os.path.dirname(__file__), "minigames_config")
57+
58+
# Caminhos das pastas de usuário
59+
minigames_user_path = os.path.expanduser("~/.pet_game/minigames")
60+
minigames_config_user_path = os.path.expanduser("~/.pet_game/minigames_config")
61+
62+
# Copiar pasta minigames
63+
if os.path.exists(minigames_default_path):
64+
if not os.path.exists(minigames_user_path):
65+
os.makedirs(minigames_user_path)
66+
for arquivo in os.listdir(minigames_default_path):
67+
origem = os.path.join(minigames_default_path, arquivo)
68+
destino = os.path.join(minigames_user_path, arquivo)
69+
if not os.path.exists(destino): # Evita sobrescrever arquivos já existentes
70+
shutil.copy(origem, destino)
71+
72+
# Copiar pasta minigames_config
73+
if os.path.exists(minigames_config_default_path):
74+
if not os.path.exists(minigames_config_user_path):
75+
os.makedirs(minigames_config_user_path)
76+
for arquivo in os.listdir(minigames_config_default_path):
77+
origem = os.path.join(minigames_config_default_path, arquivo)
78+
destino = os.path.join(minigames_config_user_path, arquivo)
79+
if not os.path.exists(destino): # Evita sobrescrever arquivos já existentes
80+
shutil.copy(origem, destino)
81+
82+
# Mensagem de confirmação para o usuário
83+
QMessageBox.information(None, "Pasta Copiada", "Os minigames e configurações padrão foram copiados com sucesso para a pasta de usuário!")
84+
85+
# Exemplo de como adicionar o botão à interface
86+
def adicionar_botao_copiar_pastas(layout):
87+
botao_copiar = QPushButton("Copiar Minigames e Configurações")
88+
botao_copiar.clicked.connect(copiar_pastas_padrao)
89+
layout.addWidget(botao_copiar)
90+
4891
class PetGameModule(QDialog):
4992
def __init__(self, parent=None):
5093
super().__init__(parent)
@@ -200,6 +243,13 @@ def init_ui(self):
200243
self.init_games_tab()
201244
self.init_pomodoro_tab()
202245
self.init_shop_tab()
246+
247+
# Adiciona o botão para copiar minigames padrão
248+
config_tab = QWidget()
249+
config_layout = QVBoxLayout(config_tab)
250+
adicionar_botao_copiar_pastas(config_layout) # Chama a função correta que adiciona o botão
251+
252+
self.tabs.addTab(config_tab, "Configurações")
203253

204254
layout.addWidget(self.tabs)
205255

@@ -484,7 +534,8 @@ def update_pomodoro_timer(self):
484534
#self.hat_selector.addItems(["Selecionar chapéu"] + self.unlocked_hats)
485535
#self.hat_selector.setCurrentText("Selecionar chapéu" if not self.equipped_hat else self.equipped_hat)
486536

487-
537+
538+
488539
def start_status_timer(self):
489540
self.status_timer = QTimer(self)
490541
self.status_timer.timeout.connect(self.decrease_status)

pet_game.db

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)