From e8cd22136b2ecc229ac8a2441395999be7690063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Wed, 22 Jan 2025 18:54:23 -0300 Subject: [PATCH 01/51] arrumando coordenadas --- app/__pycache__/classes.cpython-310.pyc | Bin 0 -> 928 bytes app/__pycache__/database.cpython-310.pyc | Bin 0 -> 3363 bytes app/create_table.py | 8 ++--- app/popula.py | 38 +++++++++++++++------ sql/ddl/query_create_table.sql | 8 ++--- sql/dml/popula.sql | 41 ++++++++++++++++------- 6 files changed, 64 insertions(+), 31 deletions(-) create mode 100644 app/__pycache__/classes.cpython-310.pyc create mode 100644 app/__pycache__/database.cpython-310.pyc diff --git a/app/__pycache__/classes.cpython-310.pyc b/app/__pycache__/classes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7398eb19f2d35a8d08dd4c3c52b840ecea59293 GIT binary patch literal 928 zcmZuvy^_-~5SHZM_>#;J{#r_0BxW*{40FsCP^GypjmBf?h#4m~D+lHnciaQ;8hI5S zK`j*(Jr%ohoC^c;?C0Ip{z&_&o=g&k>(}>h?;m)K{UGCfp^sgnm}dxYnPQ6Hp?no< zvV`)`^3dYSzh-GrVANmhl>Y?XnqeGU3l+FbzV=*JXh&C@9P*;o@RPEO=&T0m0_6(D zJV)qw$0X}KMBe#`q6-kcP9XYSh!`k#%?^B(hIU*kSq#;!UzIo729^G#E9>v_t+o*c z-qm}f)5!WpS2y5eGl&TSf{=ht10#e3gA4rqo@bkStFsTa(b@9F^5tSV$8K;t zZ|WBBljTj56;*DGHjC!g#!{BMvXzpGn=wMjhcDq@W~V_chQL+If$o3sDVdHerA?&V z)@omoK9=(1KCk*6m|&caL;_RMQyfN#ECkhh)-q;4uNcM0iR-1oq%2M5CLc7=nQm`XezD uy7E0IKp|)Ou97P@OtgIX$iEcT38N{y2?kBMyP5VXellf1*eKrRmx>qcBYBL#_P_m z3t2g*dz3QVlSaj&zff}tsBgiV{WR(exQ_gnD4qeqjR#Sm&fNTi! z3F9U&?CLO5fDwxqm8J!<%}Yuyf?Vb!O162WL8@m`>kBXTzVjk+Yz-8qEkM18Yq$VS zOg1Ra4zt3%-1y1ZCS3v^%zAou-IH?5ZHI9zq`T&AinJJnz89>AQJh+BXxF5Onm67h zq-vxV&u2_^rJ#2rAwkWHq8~!ZQ@tI^xXNH8+VaEp+FV-j!&Xc9F~rKw#b((0oyaq= zvKP}c>*1!D*$5*sGk0xnetK?7EodrR(2Un^&-A98Zf~V$eJQ+HxJRCFr_m@hI%Bl= zXa1`fl8e3QOrJ9H85r~mo)}lItm+jN8c0eh9Wd{fb zjG$Ie?mwtEYRfCmgZj#n^H9hrYwJN8xv30R!RYW;3qpvI0v>^%fkFJcpw3v?Jt} zieuJb6w=Y&W+9HA4~L4nkp+##%G9Q1nv9jKJOnxTYMpu^~cMYHuRKQ^}(Wouf?yWdio%_p6-wej_ z@mICwnu?pV;7q)r6ICh^;)l4V!&gwMhT5cj2L@8>iHQC6umw22*WZ>Fh*s595tIOA zlIg#P`bEF5WwrxvOURQEtpuUR-M-p5SSi3|@wDjsRL4J-obSi=xP_1C>J?mdpPj!# zCyyo|j8jN8CC;{4YYciC^v-b|dLz&?pf}D<=$X*Nr1Sx|0Heh&1B}{Tx`9|N!7uj9 zdxdSitLG#w*_9NjQf8}^FSO~FCv%G9%AyA=4#_d9+r9@ zvOo=Sk`dO+{ljF**;89ooJ;K4DW|@)yi&XABt?5}%4s}Wyy+Zb(oahE^(hEr13w<( zEe<2|Q_fO8f|)j@c1~M~#L2D&J!s;4MqLhG5Tr(1Hd`^=9C)ir2OA{1RCj`b2NIp6 zWpPc!3VqQ6XhukT3*H=h$@<5xl!2NRW&#;aroS|`%74kZJ`MYZr$~tFRV4fbgp(wM zY>l+bDF~9L?o}im8wV;Ly+NjP@^BIPvgv!Fg4Yoed&yD_FF09h%WutojIut+zBz!MPJOR9uql?g3 zguxSu*-*_<%1ZEi9_o07Dm@=mjuix;IzIS!1D@IYw10updX*`gY+XZUPW4T%+4>d? zBXm=y@-z6sjpMlM!Xcnnct8j6x)xF94Rz!#Y=*hCZfBwT6uA;1v@OJ?X02M94cPo2 D;ldd% literal 0 HcmV?d00001 diff --git a/app/create_table.py b/app/create_table.py index 4d82471..23196c7 100644 --- a/app/create_table.py +++ b/app/create_table.py @@ -27,10 +27,10 @@ def create_tables(): #cria cada tabela do banco de dados idArea INT NOT NULL PRIMARY KEY, idRegiao INT NOT NULL, nome VARCHAR(50), - areaNorte INT NOT NULL, - areaSul INT NOT NULL, - areaLeste INT NOT NULL, - areaOeste INT NOT NULL, + areaNorte INT, + areaSul INT, + areaLeste INT, + areaOeste INT, descricaoArea TEXT NOT NULL, FOREIGN KEY (idRegiao) REFERENCES Regiao (idRegiao) ); diff --git a/app/popula.py b/app/popula.py index 81ad68b..e115451 100644 --- a/app/popula.py +++ b/app/popula.py @@ -28,7 +28,7 @@ def create_tables(): #cria cada tabela do banco de dados VALUES (1, 1, 'Escola', 'escola de magia e bruxaria da Hogwarts'), (1, 2, 'Exterior de Hogwarts', 'cercado por uma paisagem encantadora e cheia de mistérios.'), - (3, 3, 'Estacao 9 3/4', 'Estacao de trem secreta que leva para a escola de bruxaria de Hogwarts'); + (1, 3, 'Estacao 9 3/4', 'Estacao de trem secreta que leva para a escola de bruxaria de Hogwarts'); """, """ @@ -36,25 +36,43 @@ def create_tables(): #cria cada tabela do banco de dados INSERT INTO Area (idArea, idRegiao, nome, areaNorte, areaSul, areaLeste, areaOeste, descricaoArea) VALUES (1, 1, 'Nada', 1, 1, 1, 1, 'Área sem definição específica.'), - (2, 2, 'Portao de Hogwarts', 3, 4, 5, 6, 'Portão principal da escola de magia e bruxaria.'), + (2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Portão principal da escola de magia e bruxaria.'), (3, 2, 'Patio exterior', 2, 1, 1, 1, 'Pátio ao ar livre utilizado para eventos e encontros.'), - (4, 1, 'Salao Principal', 12, 11, 13, 2, 'Local de reuniões e celebrações, com longas mesas.'), + (4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Local de reuniões e celebrações, com longas mesas.'), (5, 1, 'Clareira', 1, 6, 1, 1, 'Clareira aberta na floresta, com vegetação baixa.'), (6, 1, 'Torre leste', 5, 1, 22, 23, 'Torre localizada no lado leste da escola.'), (7, 1, 'Torre oeste', 1, 5, 20, 21, 'Torre localizada no lado oeste da escola.'), - (8, 1, 'Corredor', 14, 15, 16, 5, 'Corredor conectando diferentes salas e áreas.'), + (8, 1, 'Corredor', NULL, NULL, 21,23 , 'Corredor conectando diferentes salas e áreas.'), (9, 1, 'Refeitorio', 1, 13, 1, 1, 'Área para refeições e lanches dos alunos.'), - (10, 1, 'Biblioteca', 13, 1, 1, 1, 'Biblioteca com várias seções de livros mágicos.'), - (11, 1, 'Primeiro andar', 17, 18, 19, 13, 'Primeiro andar da escola, contendo várias salas.'), - (12, 1, 'Sala de aula 1', 1, 16, 1, 1, 'Sala de aula utilizada para disciplinas iniciais.'), - (13, 1, 'Sala de aula 2', 16, 1, 1, 1, 'Segunda sala de aula, usada para aulas avançadas.'), - (14, 1, 'Sala de aula 3', 1, 1, 1, 16, 'Terceira sala de aula, especializada em feitiços.'), + (10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Biblioteca com várias seções de livros mágicos.'), + (11, 3, 'Corredor maior',33,NULL, 32, 29, 'Primeiro andar da escola, contendo várias salas.'), + (12, 1, 'Sala de aula de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Sala de aula utilizada para disciplinas iniciais.'), + (13, 1, 'Sala de aula de Poções', NULL, NULL, 33, NULL, 'Segunda sala de aula, usada para aulas avançadas.'), + (14, 1, 'Sala de aula de Herbologia', NULL, NULL, NULL, 34, 'Terceira sala de aula, especializada em feitiços.'), (15, 1, 'Dormitório: Grifinória', 1, 1, 1, 12, 'Alojamento dos alunos da casa Grifinória.'), (16, 1, 'Dormitório: Cornival', 1, 1, 12, 1, 'Alojamento dos alunos da casa Cornival.'), (17, 1, 'Dormitório: Sonserina', 1, 1, 1, 11, 'Alojamento dos alunos da casa Sonserina.'), (18, 1, 'Dormitório: Lufa-lufa', 1, 1, 11, 1, 'Alojamento dos alunos da casa Lufa-lufa.'), (19, 2, 'Floresta Negra', 2, 7, 14, 2, 'Floresta densa com criaturas e segredos perigosos.'), - (20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Campo para o esporte popular dos bruxos, o Quadribol.'); + (20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Campo para o esporte popular dos bruxos, o Quadribol.'), + (21,1, 'Recepção',4,2,22,8,'REGERGER'), + (22,1,'Escadas Moveis',32,NULL,NULL,21,'GERGE'), + (23,1,'Sala de troféus',24,25,8,NULL,'ERGER'), + (24,1,'Sala de estudos',26,23,10,NULL,'RGEGE'), + (25,1,'Sala de Esgrima',23,NULL,NULL,NULL,'GREG'), + (26,1,'Corredor',27,24,28,NULL,'GERG'), + (27,1,'Hospital',NULL,26,NULL,NULL,'GREG'), + (28,1, 'Banheiro',NULL,NULL,NULL,26,'GREG'), + (29,3, 'Corredor',NULL,NULL,11,30,'GRE'), + (30,1, 'Escadas',29,10,NULL,NULL,'ERG'), + (31,3, 'Corredor Maior',NULL,34,36,37,'GRG'), + (32,3, 'Corredor',NULL,22,NULL,11,'RGEG'), + (33,3, 'Corredor Maior',34,11,12,13,'FWEFWEF'), + (34,3, 'Corredor Maior',31,33,14,35,'ffjweifwe'), + (35,3, 'Sala de Aula de História da Magia',NULL,NULL,34,NULL,'FJEUJFEW'), + (36,3, 'Sala de Aula de Feitiços',NULL,NULL,NULL,31,'edfewdwe'), + (37,3, 'Sala de Aula de Transfiguração',NULL,NULL,31,NULL,'edfwefef'); + """, diff --git a/sql/ddl/query_create_table.sql b/sql/ddl/query_create_table.sql index 16059eb..303cbd8 100644 --- a/sql/ddl/query_create_table.sql +++ b/sql/ddl/query_create_table.sql @@ -20,10 +20,10 @@ CREATE TABLE IF NOT EXISTS Area ( idArea INT NOT NULL PRIMARY KEY, idRegiao INT NOT NULL, nome VARCHAR(50), - areaNorte INT NOT NULL, - areaSul INT NOT NULL, - areaLeste INT NOT NULL, - areaOeste INT NOT NULL, + areaNorte INT, + areaSul INT, + areaLeste INT, + areaOeste INT, descricaoArea TEXT NOT NULL, FOREIGN KEY (idRegiao) REFERENCES Regiao (idRegiao) diff --git a/sql/dml/popula.sql b/sql/dml/popula.sql index 0e0b470..f14ced4 100644 --- a/sql/dml/popula.sql +++ b/sql/dml/popula.sql @@ -10,9 +10,7 @@ VALUES -- mapa INSERT INTO Mapa (idMapa, descricaoMapa, nome) VALUES -(1, 'Hogwarts é uma escola de magia icônica localizada em um castelo imponente, escondido nas montanhas da Escócia. A escola é cercada por mistério e magia, com torres majestosas, escadarias que mudam de lugar, salões encantados e terrenos vastos.', 'Hogwarts'), -(2, 'O Beco Diagonal é uma rua mágica e movimentada localizada no coração de Londres. Ao entrar, o visitante é imediatamente imerso em um mundo de magia e encantamento. As lojas são espalhadas ao longo da rua, todas com fachadas encantadas e vitrines repletas de itens mágicos, como varinhas, poções, livros de feitiçaria e vestuários.', 'Beco Diagonal'), -(3, 'A estação de trem em Londres, se torna um local mágico e cheio de mistério quando os bruxos e bruxas se dirigem para Hogwarts. A plataforma 9 ¾ é o ponto de partida para a jornada para a escola de magia.', 'Estacao'); +(1, 'Hogwarts é uma escola de magia icônica localizada em um castelo imponente, escondido nas montanhas da Escócia. A escola é cercada por mistério e magia, com torres majestosas, escadarias que mudam de lugar, salões encantados e terrenos vastos.', 'Hogwarts'); -- regioes @@ -20,31 +18,48 @@ INSERT INTO Regiao (idMapa,idRegiao,nome,descricaoRegiao) VALUES (1,1,'Escola','escola de magia e bruxaria da Hogwarts'), (1,2,'Exterior de Hogwarts','cercado por uma paisagem encantadora e cheia de mistérios.'), -(3,3,'Estacao 9 3/4','Estacao de trem secreta que leva para a escola de bruxaria de Hogwarts'); +(1,3,'Segundo andar do castelo','wdfqwdw'); -- Area INSERT INTO Area (idArea, idRegiao, nome, areaNorte, areaSul, areaLeste, areaOeste, descricaoArea) VALUES (1, 1, 'Nada', 1, 1, 1, 1, 'Área sem definição específica.'), -(2, 2, 'Portao de Hogwarts', 3, 4, 5, 6, 'Portão principal da escola de magia e bruxaria.'), +(2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Portão principal da escola de magia e bruxaria.'), (3, 2, 'Patio exterior', 2, 1, 1, 1, 'Pátio ao ar livre utilizado para eventos e encontros.'), -(4, 1, 'Salao Principal', 12, 11, 13, 2, 'Local de reuniões e celebrações, com longas mesas.'), +(4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Local de reuniões e celebrações, com longas mesas.'), (5, 1, 'Clareira', 1, 6, 1, 1, 'Clareira aberta na floresta, com vegetação baixa.'), (6, 1, 'Torre leste', 5, 1, 22, 23, 'Torre localizada no lado leste da escola.'), (7, 1, 'Torre oeste', 1, 5, 20, 21, 'Torre localizada no lado oeste da escola.'), -(8, 1, 'Corredor', 14, 15, 16, 5, 'Corredor conectando diferentes salas e áreas.'), +(8, 1, 'Corredor', NULL, NULL, 21,23 , 'Corredor conectando diferentes salas e áreas.'), (9, 1, 'Refeitorio', 1, 13, 1, 1, 'Área para refeições e lanches dos alunos.'), -(10, 1, 'Biblioteca', 13, 1, 1, 1, 'Biblioteca com várias seções de livros mágicos.'), -(11, 1, 'Primeiro andar', 17, 18, 19, 13, 'Primeiro andar da escola, contendo várias salas.'), -(12, 1, 'Sala de aula 1', 1, 16, 1, 1, 'Sala de aula utilizada para disciplinas iniciais.'), -(13, 1, 'Sala de aula 2', 16, 1, 1, 1, 'Segunda sala de aula, usada para aulas avançadas.'), -(14, 1, 'Sala de aula 3', 1, 1, 1, 16, 'Terceira sala de aula, especializada em feitiços.'), +(10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Biblioteca com várias seções de livros mágicos.'), +(11, 3, 'Corredor maior',33,NULL, 32, 29, 'Primeiro andar da escola, contendo várias salas.'), +(12, 1, 'Sala de aula de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Sala de aula utilizada para disciplinas iniciais.'), +(13, 1, 'Sala de aula de Poções', NULL, NULL, 33, NULL, 'Segunda sala de aula, usada para aulas avançadas.'), +(14, 1, 'Sala de aula de Herbologia', NULL, NULL, NULL, 34, 'Terceira sala de aula, especializada em feitiços.'), (15, 1, 'Dormitório: Grifinória', 1, 1, 1, 12, 'Alojamento dos alunos da casa Grifinória.'), (16, 1, 'Dormitório: Cornival', 1, 1, 12, 1, 'Alojamento dos alunos da casa Cornival.'), (17, 1, 'Dormitório: Sonserina', 1, 1, 1, 11, 'Alojamento dos alunos da casa Sonserina.'), (18, 1, 'Dormitório: Lufa-lufa', 1, 1, 11, 1, 'Alojamento dos alunos da casa Lufa-lufa.'), (19, 2, 'Floresta Negra', 2, 7, 14, 2, 'Floresta densa com criaturas e segredos perigosos.'), -(20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Campo para o esporte popular dos bruxos, o Quadribol.'); +(20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Campo para o esporte popular dos bruxos, o Quadribol.'), +(21,1, 'Recepção',4,2,22,8,'REGERGER'), +(22,1,'Escadas Moveis',32,NULL,NULL,21,'GERGE'), +(23,1,'Sala de troféus',24,25,8,NULL,'ERGER'), +(24,1,'Sala de estudos',26,23,10,NULL,'RGEGE'), +(25,1,'Sala de Esgrima',23,NULL,NULL,NULL,'GREG'), +(26,1,'Corredor',27,24,28,NULL,'GERG'), +(27,1,'Hospital',NULL,26,NULL,NULL,'GREG'), +(28,1, 'Banheiro',NULL,NULL,NULL,26,'GREG'), +(29,3, 'Corredor',NULL,NULL,11,30,'GRE'), +(30,1, 'Escadas',29,10,NULL,NULL,'ERG'), +(31,3, 'Corredor Maior',NULL,34,36,37,'GRG'), +(32,3, 'Corredor',NULL,22,NULL,11,'RGEG'), +(33,3, 'Corredor Maior',34,11,12,13,'FWEFWEF'), +(34,3, 'Corredor Maior',31,33,14,35,'ffjweifwe'), +(35,3, 'Sala de Aula de História da Magia',NULL,NULL,34,NULL,'FJEUJFEW'), +(36,3, 'Sala de Aula de Feitiços',NULL,NULL,NULL,31,'edfewdwe'), +(37,3, 'Sala de Aula de Transfiguração',NULL,NULL,31,NULL,'edfwefef'); -- Personagem From 5020dc06547b8f72739f3ad01bad613b19a99529 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Wed, 22 Jan 2025 20:01:56 -0300 Subject: [PATCH 02/51] =?UTF-8?q?refactor:=20melhorando=20as=20descri?= =?UTF-8?q?=C3=A7=C3=B5es=20das=20=C3=A1reas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/popula.py | 74 ++++++++++++++++++++++----------------------- sql/dml/popula.sql | 75 +++++++++++++++++++++++----------------------- 2 files changed, 74 insertions(+), 75 deletions(-) diff --git a/app/popula.py b/app/popula.py index e115451..3089061 100644 --- a/app/popula.py +++ b/app/popula.py @@ -35,43 +35,43 @@ def create_tables(): #cria cada tabela do banco de dados -- Area INSERT INTO Area (idArea, idRegiao, nome, areaNorte, areaSul, areaLeste, areaOeste, descricaoArea) VALUES - (1, 1, 'Nada', 1, 1, 1, 1, 'Área sem definição específica.'), - (2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Portão principal da escola de magia e bruxaria.'), - (3, 2, 'Patio exterior', 2, 1, 1, 1, 'Pátio ao ar livre utilizado para eventos e encontros.'), - (4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Local de reuniões e celebrações, com longas mesas.'), - (5, 1, 'Clareira', 1, 6, 1, 1, 'Clareira aberta na floresta, com vegetação baixa.'), - (6, 1, 'Torre leste', 5, 1, 22, 23, 'Torre localizada no lado leste da escola.'), - (7, 1, 'Torre oeste', 1, 5, 20, 21, 'Torre localizada no lado oeste da escola.'), - (8, 1, 'Corredor', NULL, NULL, 21,23 , 'Corredor conectando diferentes salas e áreas.'), - (9, 1, 'Refeitorio', 1, 13, 1, 1, 'Área para refeições e lanches dos alunos.'), - (10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Biblioteca com várias seções de livros mágicos.'), - (11, 3, 'Corredor maior',33,NULL, 32, 29, 'Primeiro andar da escola, contendo várias salas.'), - (12, 1, 'Sala de aula de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Sala de aula utilizada para disciplinas iniciais.'), - (13, 1, 'Sala de aula de Poções', NULL, NULL, 33, NULL, 'Segunda sala de aula, usada para aulas avançadas.'), - (14, 1, 'Sala de aula de Herbologia', NULL, NULL, NULL, 34, 'Terceira sala de aula, especializada em feitiços.'), - (15, 1, 'Dormitório: Grifinória', 1, 1, 1, 12, 'Alojamento dos alunos da casa Grifinória.'), - (16, 1, 'Dormitório: Cornival', 1, 1, 12, 1, 'Alojamento dos alunos da casa Cornival.'), - (17, 1, 'Dormitório: Sonserina', 1, 1, 1, 11, 'Alojamento dos alunos da casa Sonserina.'), - (18, 1, 'Dormitório: Lufa-lufa', 1, 1, 11, 1, 'Alojamento dos alunos da casa Lufa-lufa.'), - (19, 2, 'Floresta Negra', 2, 7, 14, 2, 'Floresta densa com criaturas e segredos perigosos.'), - (20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Campo para o esporte popular dos bruxos, o Quadribol.'), - (21,1, 'Recepção',4,2,22,8,'REGERGER'), - (22,1,'Escadas Moveis',32,NULL,NULL,21,'GERGE'), - (23,1,'Sala de troféus',24,25,8,NULL,'ERGER'), - (24,1,'Sala de estudos',26,23,10,NULL,'RGEGE'), - (25,1,'Sala de Esgrima',23,NULL,NULL,NULL,'GREG'), - (26,1,'Corredor',27,24,28,NULL,'GERG'), - (27,1,'Hospital',NULL,26,NULL,NULL,'GREG'), - (28,1, 'Banheiro',NULL,NULL,NULL,26,'GREG'), - (29,3, 'Corredor',NULL,NULL,11,30,'GRE'), - (30,1, 'Escadas',29,10,NULL,NULL,'ERG'), - (31,3, 'Corredor Maior',NULL,34,36,37,'GRG'), - (32,3, 'Corredor',NULL,22,NULL,11,'RGEG'), - (33,3, 'Corredor Maior',34,11,12,13,'FWEFWEF'), - (34,3, 'Corredor Maior',31,33,14,35,'ffjweifwe'), - (35,3, 'Sala de Aula de História da Magia',NULL,NULL,34,NULL,'FJEUJFEW'), - (36,3, 'Sala de Aula de Feitiços',NULL,NULL,NULL,31,'edfewdwe'), - (37,3, 'Sala de Aula de Transfiguração',NULL,NULL,31,NULL,'edfwefef'); + (1, 1, 'Nada', 1, 1, 1, 1, 'Uma área envolta em mistério, cujo propósito e destino permanecem ocultos. Nenhuma criatura ou magia parece reconhecer este espaço.'), + (2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Um majestoso portão de ferro adornado com símbolos arcanos que marcam a entrada da lendária escola de magia. As paredes antigas parecem sussurrar histórias de bruxos do passado.'), + (3, 2, 'Patio exterior', 2, 1, 1, 1, 'Um amplo pátio de pedras envelhecidas pelo tempo, onde alunos se reúnem para socializar e praticar duelos amistosos sob o céu aberto. Está rodeado por jardins mágicos que florescem mesmo no inverno.'), + (4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Um vasto salão iluminado por velas flutuantes, com longas mesas destinadas às quatro casas da escola. No centro, há um imponente púlpito para discursos inspiradores.'), + (5, 1, 'Clareira', 1, 6, 1, 1, 'Uma clareira encantadora no coração da floresta, banhada pela luz da lua. As árvores ao redor formam um círculo natural, oferecendo um refúgio tranquilo para meditações ou feitiços secretos.'), + (6, 1, 'Torre leste', 5, 1, 22, 23, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), + (7, 1, 'Torre oeste', 1, 5, 20, 21, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), + (8, 1, 'Corredor', NULL, NULL, 21,23 , 'Um longo corredor com tapeçarias encantadas que retratam cenas de batalhas mágicas. O piso de mármore reflete a luz fraca de candelabros flutuantes.'), + (9, 1, 'Refeitorio', 1, 13, 1, 1, 'Uma sala ampla com mesas de carvalho robustas, onde refeições suntuosas aparecem magicamente. O aroma de pratos deliciosos enche o ar.'), + (10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Uma vasta biblioteca repleta de livros mágicos que sussurram seus segredos. Fileiras intermináveis de estantes escondem conhecimentos ancestrais e feitiços esquecidos.'), + (11, 3, 'Corredor Maior',33,NULL, 32, 29, 'O corredor principal do primeiro andar, com portas que levam a salas de aula e escritórios. Esculturas encantadas guiam os alunos para não se perderem.'), + (12, 1, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), + (13, 1, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), + (14, 1, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), + (15, 1, 'Dormitório: Grifinória', 1, 1, 1, 12, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), + (16, 1, 'Dormitório: Cornival', 1, 1, 12, 1, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), + (17, 1, 'Dormitório: Sonserina', 1, 1, 1, 11, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), + (18, 1, 'Dormitório: Lufa-lufa', 1, 1, 11, 1, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), + (19, 2, 'Floresta Negra', 2, 7, 14, 2, 'Uma floresta densa e perigosa, habitada por criaturas encantadas e segredos ancestrais. Caminhar por suas trilhas exige coragem e astúcia.'), + (20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Um campo vasto com arquibancadas altas. As balizas se erguem como sentinelas, prontas para testemunhar intensas partidas de quadribol.'), + (21,1, 'Recepção', 4, 2, 22, 8, 'Uma sala bem iluminada onde visitantes são recebidos. Um balcão encantado registra automaticamente os nomes dos recém-chegados.'), + (22,1, 'Escadas Moveis', 32, NULL, NULL, 21, 'Escadas mágicas que se movem e mudam de direção, testando a paciência dos alunos.'), + (23,1, 'Sala de troféus', 24, 25, 8, NULL, 'Uma sala reluzente com vitrine de troféus e medalhas conquistados ao longo dos séculos.'), + (24,1, 'Sala de estudos', 26, 23, 10, NULL, 'Um ambiente silencioso e repleto de mesas, onde o som de penas escrevendo e páginas virando ecoa suavemente.'), + (25,1, 'Sala de Esgrima', 23, NULL, NULL, NULL, 'Um salão espaçoso onde os alunos praticam técnicas de duelo com espadas encantadas.'), + (26,1, 'Corredor da Torre Norte',27,24,28,NULL,'O caminho que leva à torre norte, onde a magia das estrelas é estudada. A cada lua cheia, o brilho das paredes reflete os céus noturnos como um espelho cósmico.'), + (27,1, 'Hospital', NULL, 26, NULL, NULL, 'Um local tranquilo e cheirando a ervas medicinais, onde ferimentos mágicos são tratados por curandeiros experientes.'), + (28,1, 'Banheiro', NULL, NULL, NULL, 26, 'Um banheiro comum, exceto pelos espelhos que comentam a aparência dos alunos.'), + (29,3, 'Corredor do Segundo Andar', NULL, NULL, 11, 30, 'Um corredor de pedras antigas, iluminado por candelabros flutuantes. As paredes são decoradas com tapeçarias que narram a história de heróis mágicos em batalhas lendárias. Ecos misteriosos sussurram segredos antigos aos que passam.'), + (30,1, 'Escadas', 29, 10, NULL, NULL, 'Uma escadaria central de pedra polida, conectando o térreo ao primeiro andar. As paredes ao redor são adornadas com tochas mágicas que acendem ao detectar movimento. O eco suave dos passos é acompanhado por sussurros antigos, como se a própria escada lembrasse histórias de seus viajantes.'), + (31,3, 'Corredor das Runas Antigas', NULL, 34, 36, 37, 'Repleto de marcas e inscrições arcanas nas paredes, este corredor ressoa com uma energia ancestral. Runa a runa, ele ensina lições aos estudantes atentos enquanto os distraídos podem sentir leves arrepios.'), + (32,3, 'Corredor das Escadas Encantadas', NULL, 22, NULL, 11, 'Passagens imprevisíveis onde escadas se movem e mudam de direção. O piso de madeira range sob os pés, e há rumores de que um portal escondido leva a uma sala secreta.'), + (33,3, 'Corredor das Sombras Movediças', 34, 11, 12, 13, 'Pouco iluminado e raramente utilizado, este corredor emana uma sensação inquietante. Dizem que as sombras nas paredes têm vontade própria e guiam ou confundem os viajantes dependendo de suas intenções.'), + (34,3, 'Corredor da Ala Oeste', 31, 33, 14, 35, 'Um caminho extenso que conecta a torre oeste às salas de aula. Retratos de magos famosos murmuram entre si, e armaduras encantadas parecem mover-se sutilmente quando ninguém está olhando.'), + (35,3, 'Sala de História da Magia', NULL, NULL, 34, NULL, 'Uma sala cheia de pergaminhos antigos e quadros de bruxos notáveis.'), + (36,3, 'Sala de Feitiços', NULL, NULL, NULL, 31, 'Um ambiente vibrante onde encantamentos são lançados e testados.'), + (37,3, 'Sala de Transfiguração', NULL, NULL, 31, NULL, 'Uma sala ordenada com exemplos de objetos transformados, de ratos em taças a penas em pássaros.'); """, diff --git a/sql/dml/popula.sql b/sql/dml/popula.sql index f14ced4..e097fe7 100644 --- a/sql/dml/popula.sql +++ b/sql/dml/popula.sql @@ -23,44 +23,43 @@ VALUES -- Area INSERT INTO Area (idArea, idRegiao, nome, areaNorte, areaSul, areaLeste, areaOeste, descricaoArea) VALUES -(1, 1, 'Nada', 1, 1, 1, 1, 'Área sem definição específica.'), -(2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Portão principal da escola de magia e bruxaria.'), -(3, 2, 'Patio exterior', 2, 1, 1, 1, 'Pátio ao ar livre utilizado para eventos e encontros.'), -(4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Local de reuniões e celebrações, com longas mesas.'), -(5, 1, 'Clareira', 1, 6, 1, 1, 'Clareira aberta na floresta, com vegetação baixa.'), -(6, 1, 'Torre leste', 5, 1, 22, 23, 'Torre localizada no lado leste da escola.'), -(7, 1, 'Torre oeste', 1, 5, 20, 21, 'Torre localizada no lado oeste da escola.'), -(8, 1, 'Corredor', NULL, NULL, 21,23 , 'Corredor conectando diferentes salas e áreas.'), -(9, 1, 'Refeitorio', 1, 13, 1, 1, 'Área para refeições e lanches dos alunos.'), -(10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Biblioteca com várias seções de livros mágicos.'), -(11, 3, 'Corredor maior',33,NULL, 32, 29, 'Primeiro andar da escola, contendo várias salas.'), -(12, 1, 'Sala de aula de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Sala de aula utilizada para disciplinas iniciais.'), -(13, 1, 'Sala de aula de Poções', NULL, NULL, 33, NULL, 'Segunda sala de aula, usada para aulas avançadas.'), -(14, 1, 'Sala de aula de Herbologia', NULL, NULL, NULL, 34, 'Terceira sala de aula, especializada em feitiços.'), -(15, 1, 'Dormitório: Grifinória', 1, 1, 1, 12, 'Alojamento dos alunos da casa Grifinória.'), -(16, 1, 'Dormitório: Cornival', 1, 1, 12, 1, 'Alojamento dos alunos da casa Cornival.'), -(17, 1, 'Dormitório: Sonserina', 1, 1, 1, 11, 'Alojamento dos alunos da casa Sonserina.'), -(18, 1, 'Dormitório: Lufa-lufa', 1, 1, 11, 1, 'Alojamento dos alunos da casa Lufa-lufa.'), -(19, 2, 'Floresta Negra', 2, 7, 14, 2, 'Floresta densa com criaturas e segredos perigosos.'), -(20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Campo para o esporte popular dos bruxos, o Quadribol.'), -(21,1, 'Recepção',4,2,22,8,'REGERGER'), -(22,1,'Escadas Moveis',32,NULL,NULL,21,'GERGE'), -(23,1,'Sala de troféus',24,25,8,NULL,'ERGER'), -(24,1,'Sala de estudos',26,23,10,NULL,'RGEGE'), -(25,1,'Sala de Esgrima',23,NULL,NULL,NULL,'GREG'), -(26,1,'Corredor',27,24,28,NULL,'GERG'), -(27,1,'Hospital',NULL,26,NULL,NULL,'GREG'), -(28,1, 'Banheiro',NULL,NULL,NULL,26,'GREG'), -(29,3, 'Corredor',NULL,NULL,11,30,'GRE'), -(30,1, 'Escadas',29,10,NULL,NULL,'ERG'), -(31,3, 'Corredor Maior',NULL,34,36,37,'GRG'), -(32,3, 'Corredor',NULL,22,NULL,11,'RGEG'), -(33,3, 'Corredor Maior',34,11,12,13,'FWEFWEF'), -(34,3, 'Corredor Maior',31,33,14,35,'ffjweifwe'), -(35,3, 'Sala de Aula de História da Magia',NULL,NULL,34,NULL,'FJEUJFEW'), -(36,3, 'Sala de Aula de Feitiços',NULL,NULL,NULL,31,'edfewdwe'), -(37,3, 'Sala de Aula de Transfiguração',NULL,NULL,31,NULL,'edfwefef'); - +(1, 1, 'Nada', 1, 1, 1, 1, 'Uma área envolta em mistério, cujo propósito e destino permanecem ocultos. Nenhuma criatura ou magia parece reconhecer este espaço.'), +(2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Um majestoso portão de ferro adornado com símbolos arcanos que marcam a entrada da lendária escola de magia. As paredes antigas parecem sussurrar histórias de bruxos do passado.'), +(3, 2, 'Patio exterior', 2, 1, 1, 1, 'Um amplo pátio de pedras envelhecidas pelo tempo, onde alunos se reúnem para socializar e praticar duelos amistosos sob o céu aberto. Está rodeado por jardins mágicos que florescem mesmo no inverno.'), +(4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Um vasto salão iluminado por velas flutuantes, com longas mesas destinadas às quatro casas da escola. No centro, há um imponente púlpito para discursos inspiradores.'), +(5, 1, 'Clareira', 1, 6, 1, 1, 'Uma clareira encantadora no coração da floresta, banhada pela luz da lua. As árvores ao redor formam um círculo natural, oferecendo um refúgio tranquilo para meditações ou feitiços secretos.'), +(6, 1, 'Torre leste', 5, 1, 22, 23, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), +(7, 1, 'Torre oeste', 1, 5, 20, 21, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), +(8, 1, 'Corredor', NULL, NULL, 21,23 , 'Um longo corredor com tapeçarias encantadas que retratam cenas de batalhas mágicas. O piso de mármore reflete a luz fraca de candelabros flutuantes.'), +(9, 1, 'Refeitorio', 1, 13, 1, 1, 'Uma sala ampla com mesas de carvalho robustas, onde refeições suntuosas aparecem magicamente. O aroma de pratos deliciosos enche o ar.'), +(10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Uma vasta biblioteca repleta de livros mágicos que sussurram seus segredos. Fileiras intermináveis de estantes escondem conhecimentos ancestrais e feitiços esquecidos.'), +(11, 3, 'Corredor Maior',33,NULL, 32, 29, 'O corredor principal do primeiro andar, com portas que levam a salas de aula e escritórios. Esculturas encantadas guiam os alunos para não se perderem.'), +(12, 1, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), +(13, 1, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), +(14, 1, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), +(15, 1, 'Dormitório: Grifinória', 1, 1, 1, 12, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), +(16, 1, 'Dormitório: Cornival', 1, 1, 12, 1, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), +(17, 1, 'Dormitório: Sonserina', 1, 1, 1, 11, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), +(18, 1, 'Dormitório: Lufa-lufa', 1, 1, 11, 1, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), +(19, 2, 'Floresta Negra', 2, 7, 14, 2, 'Uma floresta densa e perigosa, habitada por criaturas encantadas e segredos ancestrais. Caminhar por suas trilhas exige coragem e astúcia.'), +(20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Um campo vasto com arquibancadas altas. As balizas se erguem como sentinelas, prontas para testemunhar intensas partidas de quadribol.'), +(21,1, 'Recepção', 4, 2, 22, 8, 'Uma sala bem iluminada onde visitantes são recebidos. Um balcão encantado registra automaticamente os nomes dos recém-chegados.'), +(22,1, 'Escadas Moveis', 32, NULL, NULL, 21, 'Escadas mágicas que se movem e mudam de direção, testando a paciência dos alunos.'), +(23,1, 'Sala de troféus', 24, 25, 8, NULL, 'Uma sala reluzente com vitrine de troféus e medalhas conquistados ao longo dos séculos.'), +(24,1, 'Sala de estudos', 26, 23, 10, NULL, 'Um ambiente silencioso e repleto de mesas, onde o som de penas escrevendo e páginas virando ecoa suavemente.'), +(25,1, 'Sala de Esgrima', 23, NULL, NULL, NULL, 'Um salão espaçoso onde os alunos praticam técnicas de duelo com espadas encantadas.'), +(26,1, 'Corredor da Torre Norte',27,24,28,NULL,'O caminho que leva à torre norte, onde a magia das estrelas é estudada. A cada lua cheia, o brilho das paredes reflete os céus noturnos como um espelho cósmico.'), +(27,1, 'Hospital', NULL, 26, NULL, NULL, 'Um local tranquilo e cheirando a ervas medicinais, onde ferimentos mágicos são tratados por curandeiros experientes.'), +(28,1, 'Banheiro', NULL, NULL, NULL, 26, 'Um banheiro comum, exceto pelos espelhos que comentam a aparência dos alunos.'), +(29,3, 'Corredor do Segundo Andar', NULL, NULL, 11, 30, 'Um corredor de pedras antigas, iluminado por candelabros flutuantes. As paredes são decoradas com tapeçarias que narram a história de heróis mágicos em batalhas lendárias. Ecos misteriosos sussurram segredos antigos aos que passam.'), +(30,1, 'Escadas', 29, 10, NULL, NULL, 'Uma escadaria central de pedra polida, conectando o térreo ao primeiro andar. As paredes ao redor são adornadas com tochas mágicas que acendem ao detectar movimento. O eco suave dos passos é acompanhado por sussurros antigos, como se a própria escada lembrasse histórias de seus viajantes.'), +(31,3, 'Corredor das Runas Antigas', NULL, 34, 36, 37, 'Repleto de marcas e inscrições arcanas nas paredes, este corredor ressoa com uma energia ancestral. Runa a runa, ele ensina lições aos estudantes atentos enquanto os distraídos podem sentir leves arrepios.'), +(32,3, 'Corredor das Escadas Encantadas', NULL, 22, NULL, 11, 'Passagens imprevisíveis onde escadas se movem e mudam de direção. O piso de madeira range sob os pés, e há rumores de que um portal escondido leva a uma sala secreta.'), +(33,3, 'Corredor das Sombras Movediças', 34, 11, 12, 13, 'Pouco iluminado e raramente utilizado, este corredor emana uma sensação inquietante. Dizem que as sombras nas paredes têm vontade própria e guiam ou confundem os viajantes dependendo de suas intenções.'), +(34,3, 'Corredor da Ala Oeste', 31, 33, 14, 35, 'Um caminho extenso que conecta a torre oeste às salas de aula. Retratos de magos famosos murmuram entre si, e armaduras encantadas parecem mover-se sutilmente quando ninguém está olhando.'), +(35,3, 'Sala de História da Magia', NULL, NULL, 34, NULL, 'Uma sala cheia de pergaminhos antigos e quadros de bruxos notáveis.'), +(36,3, 'Sala de Feitiços', NULL, NULL, NULL, 31, 'Um ambiente vibrante onde encantamentos são lançados e testados.'), +(37,3, 'Sala de Transfiguração', NULL, NULL, 31, NULL, 'Uma sala ordenada com exemplos de objetos transformados, de ratos em taças a penas em pássaros.'); -- Personagem INSERT INTO Personagem (idPersonagem,idArea,vida,nivel,nome) From a1cd87d154e67309c4de7d9aa871fe83a9dc5af9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Tue, 28 Jan 2025 13:22:08 -0300 Subject: [PATCH 03/51] arrumando o mapa --- app/popula.py | 38 ++++++++++++++++++++------------------ sql/dml/popula.sql | 32 ++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/app/popula.py b/app/popula.py index 3089061..ec4214f 100644 --- a/app/popula.py +++ b/app/popula.py @@ -26,9 +26,10 @@ def create_tables(): #cria cada tabela do banco de dados """ INSERT INTO Regiao (idMapa, idRegiao, nome, descricaoRegiao) VALUES - (1, 1, 'Escola', 'escola de magia e bruxaria da Hogwarts'), - (1, 2, 'Exterior de Hogwarts', 'cercado por uma paisagem encantadora e cheia de mistérios.'), - (1, 3, 'Estacao 9 3/4', 'Estacao de trem secreta que leva para a escola de bruxaria de Hogwarts'); + (1, 1, 'Escola', 'Escola de magia e bruxaria da Hogwarts'), + (1, 2, 'Exterior de Hogwarts', 'Cercado por uma paisagem encantadora e cheia de mistérios.'), + (1,3,'Segundo andar do castelo','Andar das salas de aulas'), + (1,4,'Terceiro andar do castelo','Andar dos dormitorios '); """, """ @@ -37,24 +38,24 @@ def create_tables(): #cria cada tabela do banco de dados VALUES (1, 1, 'Nada', 1, 1, 1, 1, 'Uma área envolta em mistério, cujo propósito e destino permanecem ocultos. Nenhuma criatura ou magia parece reconhecer este espaço.'), (2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Um majestoso portão de ferro adornado com símbolos arcanos que marcam a entrada da lendária escola de magia. As paredes antigas parecem sussurrar histórias de bruxos do passado.'), - (3, 2, 'Patio exterior', 2, 1, 1, 1, 'Um amplo pátio de pedras envelhecidas pelo tempo, onde alunos se reúnem para socializar e praticar duelos amistosos sob o céu aberto. Está rodeado por jardins mágicos que florescem mesmo no inverno.'), + (3, 2, 'Patio exterior', 2, 20, 19, 9, 'Um amplo pátio de pedras envelhecidas pelo tempo, onde alunos se reúnem para socializar e praticar duelos amistosos sob o céu aberto. Está rodeado por jardins mágicos que florescem mesmo no inverno.'), (4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Um vasto salão iluminado por velas flutuantes, com longas mesas destinadas às quatro casas da escola. No centro, há um imponente púlpito para discursos inspiradores.'), - (5, 1, 'Clareira', 1, 6, 1, 1, 'Uma clareira encantadora no coração da floresta, banhada pela luz da lua. As árvores ao redor formam um círculo natural, oferecendo um refúgio tranquilo para meditações ou feitiços secretos.'), - (6, 1, 'Torre leste', 5, 1, 22, 23, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), - (7, 1, 'Torre oeste', 1, 5, 20, 21, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), + (5, 1, 'Ponte Exterior', NULL, 40, 6, 7, 'Uma longa ponte de madeira e pedra que conecta o castelo às torres'), + (6, 1, 'Torre leste', NULL, NULL, NULL, 5, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), + (7, 1, 'Torre oeste', NULL, NULL, 5, NULL, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), (8, 1, 'Corredor', NULL, NULL, 21,23 , 'Um longo corredor com tapeçarias encantadas que retratam cenas de batalhas mágicas. O piso de mármore reflete a luz fraca de candelabros flutuantes.'), - (9, 1, 'Refeitorio', 1, 13, 1, 1, 'Uma sala ampla com mesas de carvalho robustas, onde refeições suntuosas aparecem magicamente. O aroma de pratos deliciosos enche o ar.'), + (9, 1, 'Ruinas antigas', NULL, NULL, 3, NULL, 'Vestígios misteriosos de uma era passada, situadas nos terrenos de Hogwarts, cercadas por vegetação rasteira e árvores centenárias.'), (10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Uma vasta biblioteca repleta de livros mágicos que sussurram seus segredos. Fileiras intermináveis de estantes escondem conhecimentos ancestrais e feitiços esquecidos.'), (11, 3, 'Corredor Maior',33,NULL, 32, 29, 'O corredor principal do primeiro andar, com portas que levam a salas de aula e escritórios. Esculturas encantadas guiam os alunos para não se perderem.'), (12, 1, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), (13, 1, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), (14, 1, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), - (15, 1, 'Dormitório: Grifinória', 1, 1, 1, 12, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), - (16, 1, 'Dormitório: Cornival', 1, 1, 12, 1, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), - (17, 1, 'Dormitório: Sonserina', 1, 1, 1, 11, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), - (18, 1, 'Dormitório: Lufa-lufa', 1, 1, 11, 1, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), - (19, 2, 'Floresta Negra', 2, 7, 14, 2, 'Uma floresta densa e perigosa, habitada por criaturas encantadas e segredos ancestrais. Caminhar por suas trilhas exige coragem e astúcia.'), - (20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Um campo vasto com arquibancadas altas. As balizas se erguem como sentinelas, prontas para testemunhar intensas partidas de quadribol.'), + (15, 1, 'Dormitório: Grifinória', NULL, NULL, NULL, 40, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), + (16, 1, 'Dormitório: Cornival', NULL, NULL, 39, NULL, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), + (17, 1, 'Dormitório: Sonserina', NULL, NULL, 40, NULL, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), + (18, 1, 'Dormitório: Lufa-lufa', NULL, NULL, NULL, 39, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), + (19, 2, 'Floresta Negra', NULL, NULL, NULL, 3, 'Uma floresta densa e perigosa, habitada por criaturas encantadas e segredos ancestrais. Caminhar por suas trilhas exige coragem e astúcia.'), + (20, 2, 'Campo de Quadribol', 3, NULL,NULL, NULL, 'Um campo vasto com arquibancadas altas. As balizas se erguem como sentinelas, prontas para testemunhar intensas partidas de quadribol.'), (21,1, 'Recepção', 4, 2, 22, 8, 'Uma sala bem iluminada onde visitantes são recebidos. Um balcão encantado registra automaticamente os nomes dos recém-chegados.'), (22,1, 'Escadas Moveis', 32, NULL, NULL, 21, 'Escadas mágicas que se movem e mudam de direção, testando a paciência dos alunos.'), (23,1, 'Sala de troféus', 24, 25, 8, NULL, 'Uma sala reluzente com vitrine de troféus e medalhas conquistados ao longo dos séculos.'), @@ -65,15 +66,16 @@ def create_tables(): #cria cada tabela do banco de dados (28,1, 'Banheiro', NULL, NULL, NULL, 26, 'Um banheiro comum, exceto pelos espelhos que comentam a aparência dos alunos.'), (29,3, 'Corredor do Segundo Andar', NULL, NULL, 11, 30, 'Um corredor de pedras antigas, iluminado por candelabros flutuantes. As paredes são decoradas com tapeçarias que narram a história de heróis mágicos em batalhas lendárias. Ecos misteriosos sussurram segredos antigos aos que passam.'), (30,1, 'Escadas', 29, 10, NULL, NULL, 'Uma escadaria central de pedra polida, conectando o térreo ao primeiro andar. As paredes ao redor são adornadas com tochas mágicas que acendem ao detectar movimento. O eco suave dos passos é acompanhado por sussurros antigos, como se a própria escada lembrasse histórias de seus viajantes.'), - (31,3, 'Corredor das Runas Antigas', NULL, 34, 36, 37, 'Repleto de marcas e inscrições arcanas nas paredes, este corredor ressoa com uma energia ancestral. Runa a runa, ele ensina lições aos estudantes atentos enquanto os distraídos podem sentir leves arrepios.'), + (31,3, 'Corredor das Runas Antigas', 38, 34, 36, 37, 'Repleto de marcas e inscrições arcanas nas paredes, este corredor ressoa com uma energia ancestral. Runa a runa, ele ensina lições aos estudantes atentos enquanto os distraídos podem sentir leves arrepios.'), (32,3, 'Corredor das Escadas Encantadas', NULL, 22, NULL, 11, 'Passagens imprevisíveis onde escadas se movem e mudam de direção. O piso de madeira range sob os pés, e há rumores de que um portal escondido leva a uma sala secreta.'), (33,3, 'Corredor das Sombras Movediças', 34, 11, 12, 13, 'Pouco iluminado e raramente utilizado, este corredor emana uma sensação inquietante. Dizem que as sombras nas paredes têm vontade própria e guiam ou confundem os viajantes dependendo de suas intenções.'), (34,3, 'Corredor da Ala Oeste', 31, 33, 14, 35, 'Um caminho extenso que conecta a torre oeste às salas de aula. Retratos de magos famosos murmuram entre si, e armaduras encantadas parecem mover-se sutilmente quando ninguém está olhando.'), (35,3, 'Sala de História da Magia', NULL, NULL, 34, NULL, 'Uma sala cheia de pergaminhos antigos e quadros de bruxos notáveis.'), (36,3, 'Sala de Feitiços', NULL, NULL, NULL, 31, 'Um ambiente vibrante onde encantamentos são lançados e testados.'), - (37,3, 'Sala de Transfiguração', NULL, NULL, 31, NULL, 'Uma sala ordenada com exemplos de objetos transformados, de ratos em taças a penas em pássaros.'); - - + (37,3, 'Sala de Transfiguração', NULL, NULL, 31, NULL, 'Uma sala ordenada com exemplos de objetos transformados, de ratos em taças a penas em pássaros.'), + (38,4, 'Escadas antigas',39,31,NULL,NULL,'Escadas muita antiga, cuidado por onde pisa'), + (39,4, 'Salão Helga Hufflepuff e Rowena Ravenclaw',40,38,18,16,'Decorado com tons de dourado, azul e bronze, o espaço é uma fusão de hospitalidade calorosa e intelectualidade refinada.'), + (40,4, 'Salão Godric Gryffindor e Salazar Slytherin',5,39,15,17,'Com tons vibrantes de vermelho, dourado, verde e prata. É um lugar que inspira desafios, liderança e respeito entre forças opostas.'); """, """ diff --git a/sql/dml/popula.sql b/sql/dml/popula.sql index e097fe7..c3f186b 100644 --- a/sql/dml/popula.sql +++ b/sql/dml/popula.sql @@ -18,31 +18,32 @@ INSERT INTO Regiao (idMapa,idRegiao,nome,descricaoRegiao) VALUES (1,1,'Escola','escola de magia e bruxaria da Hogwarts'), (1,2,'Exterior de Hogwarts','cercado por uma paisagem encantadora e cheia de mistérios.'), -(1,3,'Segundo andar do castelo','wdfqwdw'); +(1,3,'Segundo andar do castelo','Andar das salas de aulas'), +(1,4,'Terceiro andar do castelo','Andar dos dormitorios '); -- Area INSERT INTO Area (idArea, idRegiao, nome, areaNorte, areaSul, areaLeste, areaOeste, descricaoArea) VALUES (1, 1, 'Nada', 1, 1, 1, 1, 'Uma área envolta em mistério, cujo propósito e destino permanecem ocultos. Nenhuma criatura ou magia parece reconhecer este espaço.'), (2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Um majestoso portão de ferro adornado com símbolos arcanos que marcam a entrada da lendária escola de magia. As paredes antigas parecem sussurrar histórias de bruxos do passado.'), -(3, 2, 'Patio exterior', 2, 1, 1, 1, 'Um amplo pátio de pedras envelhecidas pelo tempo, onde alunos se reúnem para socializar e praticar duelos amistosos sob o céu aberto. Está rodeado por jardins mágicos que florescem mesmo no inverno.'), +(3, 2, 'Patio exterior', 2, 20, 19, 9, 'Um amplo pátio de pedras envelhecidas pelo tempo, onde alunos se reúnem para socializar e praticar duelos amistosos sob o céu aberto. Está rodeado por jardins mágicos que florescem mesmo no inverno.'), (4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Um vasto salão iluminado por velas flutuantes, com longas mesas destinadas às quatro casas da escola. No centro, há um imponente púlpito para discursos inspiradores.'), -(5, 1, 'Clareira', 1, 6, 1, 1, 'Uma clareira encantadora no coração da floresta, banhada pela luz da lua. As árvores ao redor formam um círculo natural, oferecendo um refúgio tranquilo para meditações ou feitiços secretos.'), -(6, 1, 'Torre leste', 5, 1, 22, 23, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), -(7, 1, 'Torre oeste', 1, 5, 20, 21, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), +(5, 1, 'Ponte Exterior', NULL, 40, 6, 7, 'Uma longa ponte de madeira e pedra que conecta o castelo às torres'), +(6, 1, 'Torre leste', NULL, NULL, NULL, 5, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), +(7, 1, 'Torre oeste', NULL, NULL, 5, NULL, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), (8, 1, 'Corredor', NULL, NULL, 21,23 , 'Um longo corredor com tapeçarias encantadas que retratam cenas de batalhas mágicas. O piso de mármore reflete a luz fraca de candelabros flutuantes.'), -(9, 1, 'Refeitorio', 1, 13, 1, 1, 'Uma sala ampla com mesas de carvalho robustas, onde refeições suntuosas aparecem magicamente. O aroma de pratos deliciosos enche o ar.'), +(9, 1, 'Ruinas antigas', NULL, NULL, 3, NULL, 'Vestígios misteriosos de uma era passada, situadas nos terrenos de Hogwarts, cercadas por vegetação rasteira e árvores centenárias.'), (10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Uma vasta biblioteca repleta de livros mágicos que sussurram seus segredos. Fileiras intermináveis de estantes escondem conhecimentos ancestrais e feitiços esquecidos.'), (11, 3, 'Corredor Maior',33,NULL, 32, 29, 'O corredor principal do primeiro andar, com portas que levam a salas de aula e escritórios. Esculturas encantadas guiam os alunos para não se perderem.'), (12, 1, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), (13, 1, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), (14, 1, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), -(15, 1, 'Dormitório: Grifinória', 1, 1, 1, 12, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), -(16, 1, 'Dormitório: Cornival', 1, 1, 12, 1, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), -(17, 1, 'Dormitório: Sonserina', 1, 1, 1, 11, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), -(18, 1, 'Dormitório: Lufa-lufa', 1, 1, 11, 1, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), -(19, 2, 'Floresta Negra', 2, 7, 14, 2, 'Uma floresta densa e perigosa, habitada por criaturas encantadas e segredos ancestrais. Caminhar por suas trilhas exige coragem e astúcia.'), -(20, 2, 'Campo de Quadribol', 3, 6, 12, 3, 'Um campo vasto com arquibancadas altas. As balizas se erguem como sentinelas, prontas para testemunhar intensas partidas de quadribol.'), +(15, 1, 'Dormitório: Grifinória', NULL, NULL, NULL, 40, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), +(16, 1, 'Dormitório: Cornival', NULL, NULL, 39, NULL, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), +(17, 1, 'Dormitório: Sonserina', NULL, NULL, 40, NULL, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), +(18, 1, 'Dormitório: Lufa-lufa', NULL, NULL, NULL, 39, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), +(19, 2, 'Floresta Negra', NULL, NULL, NULL, 3, 'Uma floresta densa e perigosa, habitada por criaturas encantadas e segredos ancestrais. Caminhar por suas trilhas exige coragem e astúcia.'), +(20, 2, 'Campo de Quadribol', 3, NULL,NULL, NULL, 'Um campo vasto com arquibancadas altas. As balizas se erguem como sentinelas, prontas para testemunhar intensas partidas de quadribol.'), (21,1, 'Recepção', 4, 2, 22, 8, 'Uma sala bem iluminada onde visitantes são recebidos. Um balcão encantado registra automaticamente os nomes dos recém-chegados.'), (22,1, 'Escadas Moveis', 32, NULL, NULL, 21, 'Escadas mágicas que se movem e mudam de direção, testando a paciência dos alunos.'), (23,1, 'Sala de troféus', 24, 25, 8, NULL, 'Uma sala reluzente com vitrine de troféus e medalhas conquistados ao longo dos séculos.'), @@ -53,13 +54,16 @@ VALUES (28,1, 'Banheiro', NULL, NULL, NULL, 26, 'Um banheiro comum, exceto pelos espelhos que comentam a aparência dos alunos.'), (29,3, 'Corredor do Segundo Andar', NULL, NULL, 11, 30, 'Um corredor de pedras antigas, iluminado por candelabros flutuantes. As paredes são decoradas com tapeçarias que narram a história de heróis mágicos em batalhas lendárias. Ecos misteriosos sussurram segredos antigos aos que passam.'), (30,1, 'Escadas', 29, 10, NULL, NULL, 'Uma escadaria central de pedra polida, conectando o térreo ao primeiro andar. As paredes ao redor são adornadas com tochas mágicas que acendem ao detectar movimento. O eco suave dos passos é acompanhado por sussurros antigos, como se a própria escada lembrasse histórias de seus viajantes.'), -(31,3, 'Corredor das Runas Antigas', NULL, 34, 36, 37, 'Repleto de marcas e inscrições arcanas nas paredes, este corredor ressoa com uma energia ancestral. Runa a runa, ele ensina lições aos estudantes atentos enquanto os distraídos podem sentir leves arrepios.'), +(31,3, 'Corredor das Runas Antigas', 38, 34, 36, 37, 'Repleto de marcas e inscrições arcanas nas paredes, este corredor ressoa com uma energia ancestral. Runa a runa, ele ensina lições aos estudantes atentos enquanto os distraídos podem sentir leves arrepios.'), (32,3, 'Corredor das Escadas Encantadas', NULL, 22, NULL, 11, 'Passagens imprevisíveis onde escadas se movem e mudam de direção. O piso de madeira range sob os pés, e há rumores de que um portal escondido leva a uma sala secreta.'), (33,3, 'Corredor das Sombras Movediças', 34, 11, 12, 13, 'Pouco iluminado e raramente utilizado, este corredor emana uma sensação inquietante. Dizem que as sombras nas paredes têm vontade própria e guiam ou confundem os viajantes dependendo de suas intenções.'), (34,3, 'Corredor da Ala Oeste', 31, 33, 14, 35, 'Um caminho extenso que conecta a torre oeste às salas de aula. Retratos de magos famosos murmuram entre si, e armaduras encantadas parecem mover-se sutilmente quando ninguém está olhando.'), (35,3, 'Sala de História da Magia', NULL, NULL, 34, NULL, 'Uma sala cheia de pergaminhos antigos e quadros de bruxos notáveis.'), (36,3, 'Sala de Feitiços', NULL, NULL, NULL, 31, 'Um ambiente vibrante onde encantamentos são lançados e testados.'), -(37,3, 'Sala de Transfiguração', NULL, NULL, 31, NULL, 'Uma sala ordenada com exemplos de objetos transformados, de ratos em taças a penas em pássaros.'); +(37,3, 'Sala de Transfiguração', NULL, NULL, 31, NULL, 'Uma sala ordenada com exemplos de objetos transformados, de ratos em taças a penas em pássaros.'), +(38,4, 'Escadas antigas',39,31,NULL,NULL,'Escada muita antiga, cuidado por onde pisa'), +(39,4, 'Salão Helga Hufflepuff e Rowena Ravenclaw',40,38,18,16,'Decorado com tons de dourado, azul e bronze, o espaço é uma fusão de hospitalidade calorosa e intelectualidade refinada.'), +(40,4, 'Salão Godric Gryffindor e Salazar Slytherin',5,39,15,17,'Com tons vibrantes de vermelho, dourado, verde e prata. É um lugar que inspira desafios, liderança e respeito entre forças opostas.'); -- Personagem INSERT INTO Personagem (idPersonagem,idArea,vida,nivel,nome) From 26a6ec8f7d776dfdedd08055b92988107a99bd31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Tue, 28 Jan 2025 13:27:38 -0300 Subject: [PATCH 04/51] arrumando popula.py --- app/popula.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/app/popula.py b/app/popula.py index ec4214f..338349e 100644 --- a/app/popula.py +++ b/app/popula.py @@ -18,16 +18,14 @@ def create_tables(): #cria cada tabela do banco de dados """ INSERT INTO Mapa (idMapa, descricaoMapa, nome) VALUES - (1, 'Hogwarts é uma escola de magia icônica localizada em um castelo imponente, escondido nas montanhas da Escócia. A escola é cercada por mistério e magia, com torres majestosas, escadarias que mudam de lugar, salões encantados e terrenos vastos.', 'Hogwarts'), - (2, 'O Beco Diagonal é uma rua mágica e movimentada localizada no coração de Londres. Ao entrar, o visitante é imediatamente imerso em um mundo de magia e encantamento. As lojas são espalhadas ao longo da rua, todas com fachadas encantadas e vitrines repletas de itens mágicos, como varinhas, poções, livros de feitiçaria e vestuários.', 'Beco Diagonal'), - (3, 'A estação de trem em Londres, se torna um local mágico e cheio de mistério quando os bruxos e bruxas se dirigem para Hogwarts. A plataforma 9 ¾ é o ponto de partida para a jornada para a escola de magia.', 'Estacao'); + (1, 'Hogwarts é uma escola de magia icônica localizada em um castelo imponente, escondido nas montanhas da Escócia. A escola é cercada por mistério e magia, com torres majestosas, escadarias que mudam de lugar, salões encantados e terrenos vastos.', 'Hogwarts'); """, """ INSERT INTO Regiao (idMapa, idRegiao, nome, descricaoRegiao) VALUES - (1, 1, 'Escola', 'Escola de magia e bruxaria da Hogwarts'), - (1, 2, 'Exterior de Hogwarts', 'Cercado por uma paisagem encantadora e cheia de mistérios.'), + (1,1, 'Escola', 'Escola de magia e bruxaria da Hogwarts'), + (1,2, 'Exterior de Hogwarts', 'Cercado por uma paisagem encantadora e cheia de mistérios.'), (1,3,'Segundo andar do castelo','Andar das salas de aulas'), (1,4,'Terceiro andar do castelo','Andar dos dormitorios '); """, @@ -40,9 +38,9 @@ def create_tables(): #cria cada tabela do banco de dados (2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Um majestoso portão de ferro adornado com símbolos arcanos que marcam a entrada da lendária escola de magia. As paredes antigas parecem sussurrar histórias de bruxos do passado.'), (3, 2, 'Patio exterior', 2, 20, 19, 9, 'Um amplo pátio de pedras envelhecidas pelo tempo, onde alunos se reúnem para socializar e praticar duelos amistosos sob o céu aberto. Está rodeado por jardins mágicos que florescem mesmo no inverno.'), (4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Um vasto salão iluminado por velas flutuantes, com longas mesas destinadas às quatro casas da escola. No centro, há um imponente púlpito para discursos inspiradores.'), - (5, 1, 'Ponte Exterior', NULL, 40, 6, 7, 'Uma longa ponte de madeira e pedra que conecta o castelo às torres'), - (6, 1, 'Torre leste', NULL, NULL, NULL, 5, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), - (7, 1, 'Torre oeste', NULL, NULL, 5, NULL, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), + (5, 4, 'Ponte Exterior', NULL, 40, 6, 7, 'Uma longa ponte de madeira e pedra que conecta o castelo às torres'), + (6, 4, 'Torre leste', NULL, NULL, NULL, 5, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), + (7, 4, 'Torre oeste', NULL, NULL, 5, NULL, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), (8, 1, 'Corredor', NULL, NULL, 21,23 , 'Um longo corredor com tapeçarias encantadas que retratam cenas de batalhas mágicas. O piso de mármore reflete a luz fraca de candelabros flutuantes.'), (9, 1, 'Ruinas antigas', NULL, NULL, 3, NULL, 'Vestígios misteriosos de uma era passada, situadas nos terrenos de Hogwarts, cercadas por vegetação rasteira e árvores centenárias.'), (10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Uma vasta biblioteca repleta de livros mágicos que sussurram seus segredos. Fileiras intermináveis de estantes escondem conhecimentos ancestrais e feitiços esquecidos.'), @@ -50,10 +48,10 @@ def create_tables(): #cria cada tabela do banco de dados (12, 1, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), (13, 1, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), (14, 1, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), - (15, 1, 'Dormitório: Grifinória', NULL, NULL, NULL, 40, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), - (16, 1, 'Dormitório: Cornival', NULL, NULL, 39, NULL, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), - (17, 1, 'Dormitório: Sonserina', NULL, NULL, 40, NULL, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), - (18, 1, 'Dormitório: Lufa-lufa', NULL, NULL, NULL, 39, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), + (15, 4, 'Dormitório: Grifinória', NULL, NULL, NULL, 40, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), + (16, 4, 'Dormitório: Cornival', NULL, NULL, 39, NULL, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), + (17, 4, 'Dormitório: Sonserina', NULL, NULL, 40, NULL, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), + (18, 4, 'Dormitório: Lufa-lufa', NULL, NULL, NULL, 39, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), (19, 2, 'Floresta Negra', NULL, NULL, NULL, 3, 'Uma floresta densa e perigosa, habitada por criaturas encantadas e segredos ancestrais. Caminhar por suas trilhas exige coragem e astúcia.'), (20, 2, 'Campo de Quadribol', 3, NULL,NULL, NULL, 'Um campo vasto com arquibancadas altas. As balizas se erguem como sentinelas, prontas para testemunhar intensas partidas de quadribol.'), (21,1, 'Recepção', 4, 2, 22, 8, 'Uma sala bem iluminada onde visitantes são recebidos. Um balcão encantado registra automaticamente os nomes dos recém-chegados.'), From ba4217632b0a2df9900bcbd51442394b8a2aeecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Tue, 28 Jan 2025 13:30:33 -0300 Subject: [PATCH 05/51] Arrumando popula.py --- app/popula.py | 8 ++++---- sql/dml/popula.sql | 22 +++++++++++----------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/popula.py b/app/popula.py index 338349e..2a9ff01 100644 --- a/app/popula.py +++ b/app/popula.py @@ -42,12 +42,12 @@ def create_tables(): #cria cada tabela do banco de dados (6, 4, 'Torre leste', NULL, NULL, NULL, 5, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), (7, 4, 'Torre oeste', NULL, NULL, 5, NULL, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), (8, 1, 'Corredor', NULL, NULL, 21,23 , 'Um longo corredor com tapeçarias encantadas que retratam cenas de batalhas mágicas. O piso de mármore reflete a luz fraca de candelabros flutuantes.'), - (9, 1, 'Ruinas antigas', NULL, NULL, 3, NULL, 'Vestígios misteriosos de uma era passada, situadas nos terrenos de Hogwarts, cercadas por vegetação rasteira e árvores centenárias.'), + (9, 2, 'Ruinas antigas', NULL, NULL, 3, NULL, 'Vestígios misteriosos de uma era passada, situadas nos terrenos de Hogwarts, cercadas por vegetação rasteira e árvores centenárias.'), (10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Uma vasta biblioteca repleta de livros mágicos que sussurram seus segredos. Fileiras intermináveis de estantes escondem conhecimentos ancestrais e feitiços esquecidos.'), (11, 3, 'Corredor Maior',33,NULL, 32, 29, 'O corredor principal do primeiro andar, com portas que levam a salas de aula e escritórios. Esculturas encantadas guiam os alunos para não se perderem.'), - (12, 1, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), - (13, 1, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), - (14, 1, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), + (12, 3, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), + (13, 3, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), + (14, 3, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), (15, 4, 'Dormitório: Grifinória', NULL, NULL, NULL, 40, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), (16, 4, 'Dormitório: Cornival', NULL, NULL, 39, NULL, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), (17, 4, 'Dormitório: Sonserina', NULL, NULL, 40, NULL, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), diff --git a/sql/dml/popula.sql b/sql/dml/popula.sql index c3f186b..cf397f8 100644 --- a/sql/dml/popula.sql +++ b/sql/dml/popula.sql @@ -28,20 +28,20 @@ VALUES (2, 2, 'Entrada principal do castelo', 21, 3, NULL,NULL, 'Um majestoso portão de ferro adornado com símbolos arcanos que marcam a entrada da lendária escola de magia. As paredes antigas parecem sussurrar histórias de bruxos do passado.'), (3, 2, 'Patio exterior', 2, 20, 19, 9, 'Um amplo pátio de pedras envelhecidas pelo tempo, onde alunos se reúnem para socializar e praticar duelos amistosos sob o céu aberto. Está rodeado por jardins mágicos que florescem mesmo no inverno.'), (4, 1, 'Salao Principal', NULL, 21, NULL, NULL, 'Um vasto salão iluminado por velas flutuantes, com longas mesas destinadas às quatro casas da escola. No centro, há um imponente púlpito para discursos inspiradores.'), -(5, 1, 'Ponte Exterior', NULL, 40, 6, 7, 'Uma longa ponte de madeira e pedra que conecta o castelo às torres'), -(6, 1, 'Torre leste', NULL, NULL, NULL, 5, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), -(7, 1, 'Torre oeste', NULL, NULL, 5, NULL, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), +(5, 4, 'Ponte Exterior', NULL, 40, 6, 7, 'Uma longa ponte de madeira e pedra que conecta o castelo às torres'), +(6, 4, 'Torre leste', NULL, NULL, NULL, 5, 'Uma torre elevada com janelas estreitas, usada por estudiosos para observações astronômicas. A vista do topo oferece um panorama deslumbrante dos terrenos da escola.'), +(7, 4, 'Torre oeste', NULL, NULL, 5, NULL, 'A torre oeste, conhecida por ser o lar de corujas mensageiras, ecoa com o som suave de asas batendo durante a madrugada.'), (8, 1, 'Corredor', NULL, NULL, 21,23 , 'Um longo corredor com tapeçarias encantadas que retratam cenas de batalhas mágicas. O piso de mármore reflete a luz fraca de candelabros flutuantes.'), -(9, 1, 'Ruinas antigas', NULL, NULL, 3, NULL, 'Vestígios misteriosos de uma era passada, situadas nos terrenos de Hogwarts, cercadas por vegetação rasteira e árvores centenárias.'), +(9, 2, 'Ruinas antigas', NULL, NULL, 3, NULL, 'Vestígios misteriosos de uma era passada, situadas nos terrenos de Hogwarts, cercadas por vegetação rasteira e árvores centenárias.'), (10, 1, 'Biblioteca',30, NULL, NULL, 24, 'Uma vasta biblioteca repleta de livros mágicos que sussurram seus segredos. Fileiras intermináveis de estantes escondem conhecimentos ancestrais e feitiços esquecidos.'), (11, 3, 'Corredor Maior',33,NULL, 32, 29, 'O corredor principal do primeiro andar, com portas que levam a salas de aula e escritórios. Esculturas encantadas guiam os alunos para não se perderem.'), -(12, 1, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), -(13, 1, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), -(14, 1, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), -(15, 1, 'Dormitório: Grifinória', NULL, NULL, NULL, 40, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), -(16, 1, 'Dormitório: Cornival', NULL, NULL, 39, NULL, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), -(17, 1, 'Dormitório: Sonserina', NULL, NULL, 40, NULL, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), -(18, 1, 'Dormitório: Lufa-lufa', NULL, NULL, NULL, 39, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), +(12, 3, 'Sala de Defesa Contra as Artes das Trevas:', NULL, NULL, NULL,33, 'Uma sala cheia de escuridão latente, com paredes cobertas por retratos de bruxos defensores. Criaturas mágicas embalsamadas decoram o ambiente.'), +(13, 3, 'Sala de Poções', NULL, NULL, 33, NULL, 'Um ambiente sombrio com caldeirões borbulhantes e prateleiras carregadas de ingredientes misteriosos. O cheiro de ervas e líquidos pungentes preenche o ar.'), +(14, 3, 'Sala de Herbologia', NULL, NULL, NULL, 34, 'Uma estufa iluminada com plantas exóticas que se movem e murmuram. Alunos estudam botânica mágica com cuidado para evitar mordidas acidentais.'), +(15, 4, 'Dormitório: Grifinória', NULL, NULL, NULL, 40, 'Um dormitório acolhedor com tapeçarias vermelhas e douradas, decorado com brasões da casa Grifinória. A lareira central mantém o local sempre aquecido.'), +(16, 4, 'Dormitório: Cornival', NULL, NULL, 39, NULL, 'Um dormitório elegante com detalhes em azul e prateado. O teto reflete o céu noturno, proporcionando uma visão das estrelas.'), +(17, 4, 'Dormitório: Sonserina', NULL, NULL, 40, NULL, 'Um dormitório subterrâneo com paredes de pedra e luzes verdes etéreas. A atmosfera é fria, mas repleta de mistério.'), +(18, 4, 'Dormitório: Lufa-lufa', NULL, NULL, NULL, 39, 'Um dormitório aconchegante com cores quentes e móveis de madeira. Plantas mágicas decoram o espaço, trazendo vida e serenidade.'), (19, 2, 'Floresta Negra', NULL, NULL, NULL, 3, 'Uma floresta densa e perigosa, habitada por criaturas encantadas e segredos ancestrais. Caminhar por suas trilhas exige coragem e astúcia.'), (20, 2, 'Campo de Quadribol', 3, NULL,NULL, NULL, 'Um campo vasto com arquibancadas altas. As balizas se erguem como sentinelas, prontas para testemunhar intensas partidas de quadribol.'), (21,1, 'Recepção', 4, 2, 22, 8, 'Uma sala bem iluminada onde visitantes são recebidos. Um balcão encantado registra automaticamente os nomes dos recém-chegados.'), From fe4c5b9911e0286e8d7bc64fd5671c7eca559126 Mon Sep 17 00:00:00 2001 From: pedro Date: Tue, 28 Jan 2025 16:37:37 -0300 Subject: [PATCH 06/51] =?UTF-8?q?feat:=20mapeando=20novas=20classes/entida?= =?UTF-8?q?des=20para=20a=20constru=C3=A7=C3=A3o=20do=20jogo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/classes.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/classes.py b/app/classes.py index e2e712c..8ac9c73 100644 --- a/app/classes.py +++ b/app/classes.py @@ -19,3 +19,21 @@ def __init__(self, id_area, name, description, north_area, south_area, west_area self.south_area = south_area self.west_area = west_area self.east_area = east_area + +class House: + def __init__(self, idHouse, name, responsableProfessor, advantage): + self.idHouse = idHouse + self.name = name + self.responsableProfessor = responsableProfessor + self.advantage = advantage + +class NPC(Character): + def __init__(self, id_character, id_area, life, level, name, fala, idHouse=0): + super().__init__(id_character, id_area, life, level, name, idHouse) + self.fala = fala + +class Professor(NPC): + def __init__(self, id_character, id_area, life, level, name, fala, disciplina, idHouse=0): + super().__init__(id_character, id_area, life, level, name, fala, idHouse) + self.disciplina = disciplina + From 2dd0a2c5299f95cc6129e38ceb500471f5d36754 Mon Sep 17 00:00:00 2001 From: pedro Date: Tue, 28 Jan 2025 16:40:47 -0300 Subject: [PATCH 07/51] fix: changing the exigences which make the fields idCasa and varinha not nulls in table PC --- app/create_table.py | 4 ++-- sql/ddl/query_create_table.sql | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/create_table.py b/app/create_table.py index 23196c7..4460d1e 100644 --- a/app/create_table.py +++ b/app/create_table.py @@ -77,8 +77,8 @@ def create_tables(): #cria cada tabela do banco de dados """ CREATE TABLE IF NOT EXISTS PC ( idPersonagem INT NOT NULL PRIMARY KEY, - idCasa INT NOT NULL, - varinha TEXT NOT NULL, + idCasa INT, + varinha TEXT, FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); diff --git a/sql/ddl/query_create_table.sql b/sql/ddl/query_create_table.sql index 303cbd8..b385a37 100644 --- a/sql/ddl/query_create_table.sql +++ b/sql/ddl/query_create_table.sql @@ -69,8 +69,8 @@ CREATE TABLE IF NOT EXISTS PersonagemPossuiVantagem ( CREATE TABLE IF NOT EXISTS PC ( idPersonagem INT NOT NULL PRIMARY KEY, - idCasa INT NOT NULL, - varinha TEXT NOT NULL, + idCasa INT, + varinha TEXT, FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) From 842e70b69c6d06d4f0611bd3ea1440e041c5498e Mon Sep 17 00:00:00 2001 From: pedro Date: Tue, 28 Jan 2025 16:42:21 -0300 Subject: [PATCH 08/51] fix: fixing create_character and load_character functions and refactoring name function change_area to move --- app/database.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/app/database.py b/app/database.py index d3aa2ee..66946d5 100644 --- a/app/database.py +++ b/app/database.py @@ -21,21 +21,28 @@ def create_character(connection, name): query = f"INSERT INTO Personagem (vida, nivel, idarea, nome)values (100, 1, 2, '{name}')" cursor.execute(query) connection.commit() + query = f"INSERT INTO PC (idPersonagem) VALUES ((SELECT idPersonagem FROM Personagem WHERE nome = '{name}'))" + cursor.execute(query) + connection.commit() @staticmethod def load_character(connection, name) -> Character: - cursor = connection.cursor() - query = f"SELECT * FROM Personagem WHERE nome = '{name}'" - cursor.execute(query) - character = cursor.fetchone() - player = Character(*character, *(0, ) * (6 - len(character))) - if character: - return player - else: - return -1 + try: + cursor = connection.cursor() + query = f"SELECT * FROM Personagem WHERE nome = '{name}'" + cursor.execute(query) + character = cursor.fetchone() + player = Character(*character, *(0, ) * (6 - len(character))) + if character: + return player + else: + return -1 + except Exception as e: + pass + # print("Personagem não encontrado!") @staticmethod - def change_area(connection, player, direction): + def move(connection, player, direction): cursor = connection.cursor() #tenho que mudar a area que o personagem está #primeiro pegar a area que o personagem está From 132f2c36b77145755765da4ccdeaa7d1d9c91aa1 Mon Sep 17 00:00:00 2001 From: pedro Date: Tue, 28 Jan 2025 16:43:31 -0300 Subject: [PATCH 09/51] feat: adding get_area_name function to adjusting the character move and imersionaa --- app/database.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/app/database.py b/app/database.py index 66946d5..3290d07 100644 --- a/app/database.py +++ b/app/database.py @@ -99,6 +99,41 @@ def get_area_description(connection, player): area_description = cursor.fetchone() print(area_description[0]) + @classmethod + def get_area_name(cls, connection, player): + cursor = connection.cursor() + query = f"SELECT nome FROM Area WHERE idArea = {player.id_area}" + cursor.execute(query) + nome = cursor.fetchone() + return nome[0] + + @classmethod + def set_house(cls, connection, player): + cursor = connection.cursor() + query = f"UPDATE PC SET idCasa = {player.idHouse} WHERE idPersonagem = {player.id_character}" + cursor.execute(query) + connection.commit() + + @classmethod + def get_house(cls, connection, player): + cursor = connection.cursor() + query = f""" + SELECT c.nomeCasa + FROM PC p + JOIN Casa c ON p.idCasa = c.idcasa + WHERE p.idpersonagem = {player.id_character} + """ + cursor.execute(query) + nome = cursor.fetchone() + return nome[0] + + @classmethod + def set_area(cls, connection, player, idarea): + cursor = connection.cursor() + query = f"UPDATE Personagem SET idArea = {idarea} WHERE idPersonagem = {player.id_character}" + cursor.execute(query) + connection.commit() + def main(): Database.create_connection() From 6d0db828a76df9e0ed9d3e36e7376ff026d146d5 Mon Sep 17 00:00:00 2001 From: pedro Date: Tue, 28 Jan 2025 16:49:06 -0300 Subject: [PATCH 10/51] feat: adding functions and logical details in game.py to make the game works and create an exclusive file to store the texts --- app/game.py | 116 ++++++++++++++++++++++++++++++++++++++++----------- app/texts.py | 39 +++++++++++++++++ 2 files changed, 130 insertions(+), 25 deletions(-) create mode 100644 app/texts.py diff --git a/app/game.py b/app/game.py index 7a5d136..e6baa04 100644 --- a/app/game.py +++ b/app/game.py @@ -1,6 +1,9 @@ #inicializar o jogo no terminal para o usuário +import random + from database import Database from classes import * +from texts import * import sys import os import platform @@ -37,24 +40,23 @@ def start(self): '|__| |__||__| |__||___| |_||___| |_| |___| |___| |_______| |___| |___| |_______||___| |_| |_| |_||_______||______|\n\n') option = 0 - while option !=3: - print("Bem-vindo(a) ao jogo!\n") - - print('1 - Criar Novo Personagem\n' + - '2 - Carregar Personagem\n' + - '3 - Sair\n\n\n') - - print('Digite a opção desejada: \n') - option = input() - if option == '1': - self.create_character() - elif option == '2': - self.load_character() - elif option == '3': - sys.exit() - else: - print('Opção inválida!\n') - self.start() + print("Bem-vindo(a) ao jogo!\n") + + print('1 - Criar Novo Personagem\n' + + '2 - Carregar Personagem\n' + + '3 - Sair\n\n\n') + + print('Digite a opção desejada: \n') + option = input() + if option == '1': + self.create_character() + elif option == '2': + self.load_character() + elif option == '3': + sys.exit() + else: + print('Opção inválida!\n') + self.start() def create_character(self): @@ -74,21 +76,85 @@ def load_character(self): print('Digite o nome do seu personagem: ') name = input() self.player = Database.load_character(self.connection, name) - if self.player.id_character == -1: + if not self.player: print('Personagem não encontrado!\n') else: self.new_game() def new_game(self): - while True: - Database.get_area_description(self.connection, self.player) - Database.get_areas(self.connection, self.player) + clear() + print(f' Bem-vindo(a) {self.player.name}!\n' + f'Você é o mais novo aluno da Escola de Magia e Bruxaria de Hogwarts.\n' + f'Está na hora de começar sua jornada!\n' + f'Boa sorte!\n\n\n') + while True: + self.get_current_area() + self.get_possibles_directions() direction = input() - #fazer ele andar - Database.change_area(self.connection, self.player, direction) - clear() + if direction == '2': + #fazer a dinâmica de escolher a casa + self.move_character(direction) + self.choice_house() + self.press_key_to_continue() + clear() + print(texto_pos_selecao) + self.press_key_to_continue() + print(texto_inicial_sobre_o_artefato) + print("Assim, curioso, você foi dormir, pronto para o primeiro dia de aula em Hogwarts.\n") + print("O dia amanheceu e o seu primeiro dia de aula em hogwarts começou!") + if self.player.idHouse == 1: #grifinória + idarea = 15 + elif self.player.idHouse == 3: #corvinal + idarea = 16 + elif self.player.idHouse == 2: #sonserina + idarea = 17 + elif self.player.idHouse == 4: #lufa-lufa + idarea = 18 + Database.set_area(self.connection, self.player, idarea) + break + else: + clear() + print('Você não pode ir para essa direção ainda!\n') + + self.continue_game() + + def choice_house(self): + self.get_current_area() + print(texto_de_entrada) + house = random.randint(1, 4) + self.player.idHouse = house + Database.set_house(self.connection, self.player) + print(f"E o chapéu seletor disse:\n 'Que seja: {Database.get_house(self.connection, self.player)}'\n" + f"E toda a mesa da casa entrou em euforia com a sua seleção!\n") + + def continue_game(self): + clear() + self.get_current_area() + self.get_possibles_directions() + + + + + + + def press_key_to_continue(self): + print("Pressione qualquer tecla para continuar...\n") + input() + + def get_current_area(self): + print(f'Você está na área: {Database.get_area_name(self.connection, self.player)}') + + Database.get_area_description(self.connection, self.player) + print('\n\n') + + def get_possibles_directions(self): + Database.get_areas(self.connection, self.player) + + def move_character(self, direction): + Database.move(self.connection, self.player, direction) + clear() diff --git a/app/texts.py b/app/texts.py new file mode 100644 index 0000000..e3a911a --- /dev/null +++ b/app/texts.py @@ -0,0 +1,39 @@ +texto_de_entrada = """ +Você atravessa as portas gigantescas do Salão Principal e é imediatamente tomado por uma sensação de encanto +O teto, enfeitiçado para refletir o céu noturno, brilha com estrelas que parecem tão próximas que você quase pode tocá-las. +Velas flutuam suavemente pelo ar, iluminando o salão com uma luz quente e mágica. +À sua frente, centenas de estudantes espalhados pelas mesas das Casas olham curiosos enquanto você caminha hesitante até o centro. +O Chapéu Seletor, velho e surrado, repousa sobre um banquinho solitário, esperando por você. O silêncio cresce. +Sua aventura em Hogwarts está prestes a começar. +""" + +texto_pos_selecao = """ +A cerimônia de seleção terminou, e agora você se encontra no Grande Salão, saboreando sua primeira refeição como um estudante de Hogwarts. +O som das conversas e risadas dos outros alunos preenche o ambiente, e você sente a excitação do início dessa nova jornada. +À medida que se acomoda à sua nova casa, começa a fazer amizades com seus colegas. +De repente, uma conversa ao seu lado chama sua atenção. +Um estudante de Corvinal, com um olhar intrigado, sussurra para um amigo: +"Você ouviu falar sobre o artefato? Aquele que os fundadores criaram para proteger Hogwarts... dizem que foi perdido há séculos, mas que ainda há quem o procure." +O murmúrio é rápido, mas a ideia de algo tão poderoso, tão antigo, o deixa com uma sensação estranha. +Algo te diz que esse artefato, perdido no tempo, tem mais a ver com você do que imagina. +""" + +texto_inicial_sobre_o_artefato = """ +Enquanto você digere a informação, a conversa ao seu redor começa a ficar mais abafada, até que o som do diretor se levantando preenche o salão. +Todos os olhares se voltam para ele. "A noite está avançando, meus jovens bruxos", ele diz com um sorriso acolhedor, mas com um tom de autoridade. +"É hora de se retirarem para seus dormitórios. Amanhã será um novo dia cheio de descobertas.\n" + +O murmúrio entre os alunos cresce, mas logo o Grande Salão começa a se esvaziar, com cada casa se dirigindo para suas respectivas torres. +No caminho para o dormitório, você percebe mais sussurros sobre o artefato — como se a menção dele tivesse despertado uma curiosidade em todos. +Algo no ar, uma energia estranha, faz você se perguntar: será que há algo mais por trás dessas histórias? +Enquanto caminha pelos corredores, você cruza com um estudante mais velho, Alistair Blackwood, que parece notar seu olhar pensativo. +"Ouvi sua conversa mais cedo... Sobre o artefato?" Ele faz uma pausa, olhando ao redor antes de se aproximar com um sorriso misterioso. +"Não é algo fácil de se ignorar, eu sei. Mas cuidado com o que pergunta. A busca por ele não é um caminho simples.\n" + +Intrigado, você decide procurar Alistair novamente no dormitório. Lá, com o ambiente mais calmo, você o encontra e pergunta diretamente sobre o que sabe. +Ele hesita por um momento, como se ponderando suas palavras, antes de começar a explicar. +"O artefato não é apenas uma lenda. Criado pelos fundadores de Hogwarts, ele tem o poder de proteger a escola... ou destruir tudo o que conhecemos. +Há muitos que buscam seu poder, mas nem todos são dignos de controlá-lo. E o mais perigoso, é que ele pode escolher quem o controla." +A conversa deixa você com a sensação de que a busca por esse artefato vai muito além do que qualquer um imagina. +E, de alguma forma, você sente que está prestes a se envolver em algo muito maior do que imaginava.\n +""" \ No newline at end of file From 4682f637c0accc16667e3d79351551acf9424c77 Mon Sep 17 00:00:00 2001 From: pedro Date: Tue, 28 Jan 2025 23:34:01 -0300 Subject: [PATCH 11/51] fix: adjusting the possibility to exit game --- app/database.py | 7 ++++++- app/game.py | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/database.py b/app/database.py index 3290d07..3fe1090 100644 --- a/app/database.py +++ b/app/database.py @@ -1,4 +1,6 @@ #fazer a conexão com o database +import sys + import psycopg2 from classes import * @@ -54,6 +56,8 @@ def move(connection, player, direction): direction = 'leste' elif direction == '4': direction = 'oeste' + elif direction == '0': + sys.exit() query_update = (f""" UPDATE Personagem SET idArea = (SELECT area{direction} FROM Area WHERE idArea = {player.id_area}) WHERE idPersonagem = {player.id_character}; @@ -89,7 +93,8 @@ def get_areas(connection, player): print(f'1- NORTE: {areas[0]}\n' f'2- SUL: {areas[1]}\n' f'3- LESTE: {areas[2]}\n' - f'4- OESTE: {areas[3]}\n') + f'4- OESTE: {areas[3]}\n\n\n' + f'0- SAIR:') @staticmethod def get_area_description(connection, player): diff --git a/app/game.py b/app/game.py index e6baa04..976917a 100644 --- a/app/game.py +++ b/app/game.py @@ -94,7 +94,6 @@ def new_game(self): self.get_possibles_directions() direction = input() if direction == '2': - #fazer a dinâmica de escolher a casa self.move_character(direction) self.choice_house() self.press_key_to_continue() From f032f2e4b26ffbdc0d1cda896841ab0283a225ae Mon Sep 17 00:00:00 2001 From: pedro Date: Tue, 28 Jan 2025 23:45:00 -0300 Subject: [PATCH 12/51] fix: adjusting the initial part of the game --- app/game.py | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/app/game.py b/app/game.py index 976917a..254bd6a 100644 --- a/app/game.py +++ b/app/game.py @@ -93,26 +93,32 @@ def new_game(self): self.get_current_area() self.get_possibles_directions() direction = input() - if direction == '2': + if direction == '1': self.move_character(direction) - self.choice_house() - self.press_key_to_continue() - clear() - print(texto_pos_selecao) - self.press_key_to_continue() - print(texto_inicial_sobre_o_artefato) - print("Assim, curioso, você foi dormir, pronto para o primeiro dia de aula em Hogwarts.\n") - print("O dia amanheceu e o seu primeiro dia de aula em hogwarts começou!") - if self.player.idHouse == 1: #grifinória - idarea = 15 - elif self.player.idHouse == 3: #corvinal - idarea = 16 - elif self.player.idHouse == 2: #sonserina - idarea = 17 - elif self.player.idHouse == 4: #lufa-lufa - idarea = 18 - Database.set_area(self.connection, self.player, idarea) - break + self.get_current_area() + self.get_possibles_directions() + direction = input() + if direction == '1': + self.choice_house() + self.press_key_to_continue() + clear() + print(texto_pos_selecao) + self.press_key_to_continue() + print(texto_inicial_sobre_o_artefato) + print("Assim, curioso, você foi dormir, pronto para o primeiro dia de aula em Hogwarts.\n") + print("O dia amanheceu e o seu primeiro dia de aula em hogwarts começou!") + if self.player.idHouse == 1: #grifinória + idarea = 15 + elif self.player.idHouse == 3: #corvinal + idarea = 16 + elif self.player.idHouse == 2: #sonserina + idarea = 17 + elif self.player.idHouse == 4: #lufa-lufa + idarea = 18 + Database.set_area(self.connection, self.player, idarea) + break + else: + print('Você não pode ir para essa direção ainda!\n') else: clear() print('Você não pode ir para essa direção ainda!\n') From 1cf8e1d08d1c7c68952cdd9d43422543edcc24a3 Mon Sep 17 00:00:00 2001 From: pedro Date: Wed, 29 Jan 2025 00:05:53 -0300 Subject: [PATCH 13/51] fix: adjusting the initial part of the game --- app/game.py | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/app/game.py b/app/game.py index 254bd6a..56ec944 100644 --- a/app/game.py +++ b/app/game.py @@ -88,41 +88,42 @@ def new_game(self): f'Você é o mais novo aluno da Escola de Magia e Bruxaria de Hogwarts.\n' f'Está na hora de começar sua jornada!\n' f'Boa sorte!\n\n\n') - while True: self.get_current_area() self.get_possibles_directions() direction = input() if direction == '1': self.move_character(direction) - self.get_current_area() - self.get_possibles_directions() - direction = input() - if direction == '1': - self.choice_house() - self.press_key_to_continue() - clear() - print(texto_pos_selecao) - self.press_key_to_continue() - print(texto_inicial_sobre_o_artefato) - print("Assim, curioso, você foi dormir, pronto para o primeiro dia de aula em Hogwarts.\n") - print("O dia amanheceu e o seu primeiro dia de aula em hogwarts começou!") - if self.player.idHouse == 1: #grifinória - idarea = 15 - elif self.player.idHouse == 3: #corvinal - idarea = 16 - elif self.player.idHouse == 2: #sonserina - idarea = 17 - elif self.player.idHouse == 4: #lufa-lufa - idarea = 18 - Database.set_area(self.connection, self.player, idarea) - break - else: - print('Você não pode ir para essa direção ainda!\n') + while True: + self.get_current_area() + self.get_possibles_directions() + direction = input() + if direction == '1': + self.choice_house() + self.press_key_to_continue() + clear() + print(texto_pos_selecao) + self.press_key_to_continue() + print(texto_inicial_sobre_o_artefato) + print("Assim, curioso, você foi dormir, pronto para o primeiro dia de aula em Hogwarts.\n") + print("O dia amanheceu e o seu primeiro dia de aula em hogwarts começou!") + if self.player.idHouse == 1: #grifinória + idarea = 15 + elif self.player.idHouse == 3: #corvinal + idarea = 16 + elif self.player.idHouse == 2: #sonserina + idarea = 17 + elif self.player.idHouse == 4: #lufa-lufa + idarea = 18 + Database.set_area(self.connection, self.player, idarea) + break + else: + clear() + print('Você não pode ir para essa direção ainda!\n') + break else: clear() print('Você não pode ir para essa direção ainda!\n') - self.continue_game() def choice_house(self): From 650a966138d77cb6026c1b80f5a221160227d297 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Wed, 29 Jan 2025 20:30:39 -0300 Subject: [PATCH 14/51] =?UTF-8?q?refactor:=20altera=C3=A7=C3=B5es=20no=20D?= =?UTF-8?q?DL=20do=20banco?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/create_table.py | 214 ++++++++++++++++++++------------- sql/ddl/query_create_table.sql | 195 +++++++++++++++++------------- 2 files changed, 245 insertions(+), 164 deletions(-) diff --git a/app/create_table.py b/app/create_table.py index 4460d1e..989c361 100644 --- a/app/create_table.py +++ b/app/create_table.py @@ -8,9 +8,9 @@ def create_tables(): #cria cada tabela do banco de dados "CREATE TYPE HabilidadeTipo AS ENUM('Inteligência', 'Ambição', 'Lealdade', 'Coragem');", """ CREATE TABLE IF NOT EXISTS Mapa ( - idMapa INT NOT NULL PRIMARY KEY, - descricaoMapa TEXT NOT NULL, - nome VARCHAR(50) NOT NULL + idMapa INT NOT NULL PRIMARY KEY, + descricaoMapa TEXT NOT NULL, + nome VARCHAR(50) NOT NULL ); """, """ @@ -19,7 +19,8 @@ def create_tables(): #cria cada tabela do banco de dados idMapa INT NOT NULL, descricaoRegiao TEXT NOT NULL, nome VARCHAR(50) NOT NULL, - FOREIGN KEY (idMapa) REFERENCES Mapa (idMapa) + + FOREIGN KEY (idMapa) REFERENCES Mapa (idMapa) ); """, """ @@ -32,6 +33,7 @@ def create_tables(): #cria cada tabela do banco de dados areaLeste INT, areaOeste INT, descricaoArea TEXT NOT NULL, + FOREIGN KEY (idRegiao) REFERENCES Regiao (idRegiao) ); """, @@ -42,23 +44,6 @@ def create_tables(): #cria cada tabela do banco de dados ); """, """ - CREATE TABLE IF NOT EXISTS Personagem ( - idPersonagem SERIAL PRIMARY KEY, - idArea INT NOT NULL, - vida INT NOT NULL, - nivel INT NOT NULL, - nome VARCHAR(50) NOT NULL UNIQUE, - FOREIGN KEY (idArea) REFERENCES Area (idArea) - ); - """, - """ - CREATE TABLE IF NOT EXISTS NPC ( - idPersonagem INT NOT NULL PRIMARY KEY, - falas TEXT NOT NULL, - FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem) - ); - """, - """ CREATE TABLE IF NOT EXISTS Vantagem ( idVantagem INT NOT NULL PRIMARY KEY, nome VARCHAR(50) NOT NULL, @@ -66,80 +51,119 @@ def create_tables(): #cria cada tabela do banco de dados ); """, """ - CREATE TABLE IF NOT EXISTS PersonagemPossuiVantagem ( - idPersonagem INT NOT NULL, - idVantagem INT NOT NULL, - PRIMARY KEY (idPersonagem, idVantagem), - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem), - FOREIGN KEY (idVantagem) REFERENCES Vantagem (idVantagem) + CREATE TABLE IF NOT EXISTS Personagem ( + idPersonagem SERIAL NOT NULL PRIMARY KEY, + + -- 'J' -> Jogador + -- 'I' -> Inimigo + -- 'A' -> Aluno + -- 'P' -> Professor + -- 'F' -> FredEJorge + tipoPersonagem VARCHAR(1) NOT NULL CHECK (tipoPersonagem IN('J', 'I', 'A', 'P', 'F')) ); """, """ CREATE TABLE IF NOT EXISTS PC ( - idPersonagem INT NOT NULL PRIMARY KEY, + idJogador SERIAL PRIMARY KEY, + idArea INT NOT NULL, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, idCasa INT, varinha TEXT, - FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem), - FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) + + FOREIGN KEY (idJogador) REFERENCES Personagem (idPersonagem), + FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), + FOREIGN KEY (idArea) REFERENCES Area (idArea) ); """, """ - CREATE TABLE IF NOT EXISTS Professor ( - idPersonagem INT NOT NULL PRIMARY KEY, - idCasa INT NOT NULL, - disciplina VARCHAR(50) NOT NULL, - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem), - FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) + CREATE TABLE IF NOT EXISTS Inimigo ( + idInimigo SERIAL NOT NULL PRIMARY KEY, + falas TEXT NOT NULL, + idArea INT NOT NULL, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, + danoBase INT NOT NULL, + + FOREIGN KEY (idArea) REFERENCES Area (idArea), + FOREIGN KEY (idInimigo) REFERENCES Personagem (idPersonagem) ); """, """ - CREATE TABLE IF NOT EXISTS Aluno ( - idPersonagem INT NOT NULL PRIMARY KEY, + CREATE TABLE IF NOT EXISTS Professor ( + idProfessor SERIAL NOT NULL PRIMARY KEY, + falas TEXT NOT NULL, + idArea INT NOT NULL, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, idCasa INT NOT NULL, - idVantagem INT NOT NULL, - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem), + disciplina VARCHAR(50) NOT NULL, + FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), - FOREIGN KEY (idVantagem) REFERENCES Vantagem (idVantagem) + FOREIGN KEY (idArea) REFERENCES Area (idArea), + FOREIGN KEY (idProfessor) REFERENCES Personagem (idPersonagem) ); """, """ - CREATE TABLE IF NOT EXISTS Inimigo ( - idPersonagem INT NOT NULL PRIMARY KEY, - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem) + CREATE TABLE IF NOT EXISTS Aluno ( + idAluno SERIAL NOT NULL PRIMARY KEY, + falas TEXT NOT NULL, + idArea INT NOT NULL, + idCasa INT NOT NULL, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, + + FOREIGN KEY (idArea) REFERENCES Area (idArea), + FOREIGN KEY (idAluno) REFERENCES Personagem (idPersonagem), + FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); """, """ CREATE TABLE IF NOT EXISTS FredEJorge ( - idPersonagem INT NOT NULL PRIMARY KEY, + idFredEJorge SERIAL NOT NULL PRIMARY KEY, + falas TEXT NOT NULL, + idArea INT NOT NULL, idCasa INT NOT NULL, - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem), + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, + + FOREIGN KEY (idArea) REFERENCES Area (idArea), + FOREIGN KEY (idFredEJorge) REFERENCES Personagem (idPersonagem), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); """, """ CREATE TABLE IF NOT EXISTS ProfessorCoordenaCasa ( idCasa INT NOT NULL, - idProfessor INT NOT NULL, + idProfessor SERIAL NOT NULL, + PRIMARY KEY (idCasa, idProfessor), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), - FOREIGN KEY (idProfessor) REFERENCES Professor (idPersonagem) + FOREIGN KEY (idProfessor) REFERENCES Professor (idProfessor) ); """, """ CREATE TABLE IF NOT EXISTS Interacao ( - idPC INT NOT NULL, - idNPC INT NOT NULL, + idPC SERIAL NOT NULL, + idNPC SERIAL NOT NULL, + PRIMARY KEY (idPC, idNPC), - FOREIGN KEY (idPC) REFERENCES PC (idPersonagem), - FOREIGN KEY (idNPC) REFERENCES NPC (idPersonagem) + FOREIGN KEY (idPC) REFERENCES PC (idJogador), + FOREIGN KEY (idNPC) REFERENCES Personagem (idPersonagem) ); """, """ CREATE TABLE IF NOT EXISTS AlunoPorCasa ( - idAluno INT NOT NULL, + idAluno SERIAL NOT NULL, idCasa INT NOT NULL, + PRIMARY KEY (idAluno, idCasa), - FOREIGN KEY (idAluno) REFERENCES Aluno (idPersonagem), + FOREIGN KEY (idAluno) REFERENCES Aluno (idAluno), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); """, @@ -147,8 +171,9 @@ def create_tables(): #cria cada tabela do banco de dados CREATE TABLE IF NOT EXISTS VantagemCasa ( idVantagem INT NOT NULL, idCasa INT NOT NULL, - PRIMARY KEY (idVantagem, idCasa), - FOREIGN KEY (idVantagem) REFERENCES VANTAGEM (idVantagem), + + PRIMARY KEY (idVantagem, idCasa), + FOREIGN KEY (idVantagem) REFERENCES Vantagem (idVantagem), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); """, @@ -162,19 +187,58 @@ def create_tables(): #cria cada tabela do banco de dados ); """, """ + CREATE TABLE IF NOT EXISTS PersonagemPossuiHabilidade ( + idPersonagem SERIAL NOT NULL, + idHabilidade INT NOT NULL, + + PRIMARY KEY (idPersonagem, idHabilidade), + FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem), + FOREIGN KEY (idHabilidade) REFERENCES Habilidade (idHabilidade) + ); + """, + """ CREATE TABLE IF NOT EXISTS Inventario ( idInventario INT NOT NULL PRIMARY KEY, - idPersonagem INT NOT NULL, + idPersonagem SERIAL NOT NULL, tamanho INT NOT NULL, + FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem) ); """, """ CREATE TABLE IF NOT EXISTS Item ( idItem INT NOT NULL PRIMARY KEY, - idInventario INT NOT NULL, - nomeItem VARCHAR(50) NOT NULL, - FOREIGN KEY (idInventario) REFERENCES Inventario (idInventario) + + -- 'P' -> Poção + -- 'L' -> Livro + tipoItem VARCHAR(1) NOT NULL CHECK (tipoItem IN ('P', 'L')) + ); + """, + """ + CREATE TABLE IF NOT EXISTS Livro ( + idLivro INT NOT NULL PRIMARY KEY, + idInventario INT, + idHabilidade INT NOT NULL, + nomeLivro VARCHAR(50) NOT NULL, + + + FOREIGN KEY (idHabilidade) REFERENCES Habilidade (idHabilidade), + FOREIGN KEY (idInventario) REFERENCES Inventario (idInventario), + FOREIGN KEY (idLivro) REFERENCES Item (idItem) + ); + """, + """ + CREATE TABLE IF NOT EXISTS Pocao ( + idPocao INT NOT NULL PRIMARY KEY, + idInventario INT, + idHabilidade INT NOT NULL, + nomePocao VARCHAR(50) NOT NULL, + efeito TEXT NOT NULL, + + + FOREIGN KEY (idHabilidade) REFERENCES Habilidade (idHabilidade), + FOREIGN KEY (idInventario) REFERENCES Inventario (idInventario), + FOREIGN KEY (idPocao) REFERENCES Item (idItem) ); """, """ @@ -182,6 +246,7 @@ def create_tables(): #cria cada tabela do banco de dados idMissao INT NOT NULL PRIMARY KEY, recompensaHabilidade INT, recompensaItem INT, + FOREIGN KEY (recompensaHabilidade) REFERENCES Habilidade (idHabilidade), FOREIGN KEY (recompensaItem) REFERENCES Item (idItem) ); @@ -189,47 +254,34 @@ def create_tables(): #cria cada tabela do banco de dados """ CREATE TABLE IF NOT EXISTS Participantes ( idMissao INT NOT NULL, - idPersonagem INT NOT NULL, + idPersonagem SERIAL NOT NULL, + PRIMARY KEY (idMissao, idPersonagem), FOREIGN KEY (idMissao) REFERENCES Missao (idMissao), FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem) ); """, """ - CREATE TABLE IF NOT EXISTS Livro ( - idItem INT NOT NULL PRIMARY KEY, - idHabilidade INT NOT NULL, - nomeLivro VARCHAR(50) NOT NULL, - FOREIGN KEY (idItem) REFERENCES Item (idItem), - FOREIGN KEY (idHabilidade) REFERENCES Habilidade (idHabilidade) - ); - """, - """ CREATE TABLE IF NOT EXISTS Feitico ( idFeitico INT NOT NULL PRIMARY KEY, habilidadeRequerida INT NOT NULL, nomeFeitico VARCHAR(50) NOT NULL, - idProfessor INT, - FOREIGN KEY (idProfessor) REFERENCES Professor (idPersonagem) + chanceAcerto REAL NOT NULL, + idProfessor SERIAL, + + FOREIGN KEY (idProfessor) REFERENCES Professor (idProfessor) ); """, """ CREATE TABLE IF NOT EXISTS LivroEnsinaFeitico ( idLivro INT NOT NULL, idFeitico INT NOT NULL, + PRIMARY KEY (idLivro, idFeitico), - FOREIGN KEY (idLivro) REFERENCES Livro (idItem), + FOREIGN KEY (idLivro) REFERENCES Livro (idLivro), FOREIGN KEY (idFeitico) REFERENCES Feitico (idFeitico) ); """, - """ - CREATE TABLE IF NOT EXISTS Pocao ( - idItem INT NOT NULL PRIMARY KEY, - nomePocao VARCHAR(50) NOT NULL, - efeito TEXT NOT NULL, - FOREIGN KEY (idItem) REFERENCES Item (idItem) - ); - """, """ SELECT SETVAL('personagem_idpersonagem_seq', 12, false); """ diff --git a/sql/ddl/query_create_table.sql b/sql/ddl/query_create_table.sql index b385a37..8d84d91 100644 --- a/sql/ddl/query_create_table.sql +++ b/sql/ddl/query_create_table.sql @@ -34,106 +34,117 @@ CREATE TABLE IF NOT EXISTS Casa ( nomeCasa VARCHAR(20) NOT NULL ); -CREATE TABLE IF NOT EXISTS Personagem ( - idPersonagem SERIAL PRIMARY KEY, - idArea INT NOT NULL, - vida INT NOT NULL, - nivel INT NOT NULL, - nome VARCHAR(50) NOT NULL UNIQUE, - - FOREIGN KEY (idArea) REFERENCES Area (idArea) -); - -CREATE TABLE IF NOT EXISTS NPC ( - idPersonagem INT NOT NULL PRIMARY KEY, - falas TEXT NOT NULL, - - FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem) -); - CREATE TABLE IF NOT EXISTS Vantagem ( idVantagem INT NOT NULL PRIMARY KEY, nome VARCHAR(50) NOT NULL, descricao TEXT NOT NULL ); -CREATE TABLE IF NOT EXISTS PersonagemPossuiVantagem ( - idPersonagem INT NOT NULL, - idVantagem INT NOT NULL, - - PRIMARY KEY (idPersonagem,idVantagem), - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem), - FOREIGN KEY (idVantagem) REFERENCES Vantagem (idVantagem) +CREATE TABLE IF NOT EXISTS Personagem ( + idPersonagem SERIAL NOT NULL PRIMARY KEY, + + -- 'J' -> Jogador + -- 'I' -> Inimigo + -- 'A' -> Aluno + -- 'P' -> Professor + -- 'F' -> FredEJorge + tipoPersonagem VARCHAR(1) NOT NULL CHECK (tipoPersonagem IN('J', 'I', 'A', 'P', 'F')) ); - CREATE TABLE IF NOT EXISTS PC ( - idPersonagem INT NOT NULL PRIMARY KEY, + idJogador SERIAL PRIMARY KEY, + idArea INT NOT NULL, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, idCasa INT, varinha TEXT, - FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem), - FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) + FOREIGN KEY (idJogador) REFERENCES Personagem (idPersonagem), + FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), + FOREIGN KEY (idArea) REFERENCES Area (idArea) +); + +CREATE TABLE IF NOT EXISTS Inimigo ( + idInimigo SERIAL NOT NULL PRIMARY KEY, + falas TEXT NOT NULL, + idArea INT NOT NULL, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, + danoBase INT NOT NULL, + + FOREIGN KEY (idArea) REFERENCES Area (idArea), + FOREIGN KEY (idInimigo) REFERENCES Personagem (idPersonagem) ); CREATE TABLE IF NOT EXISTS Professor ( - idPersonagem INT NOT NULL PRIMARY KEY, + idProfessor SERIAL NOT NULL PRIMARY KEY, + falas TEXT NOT NULL, + idArea INT NOT NULL, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, idCasa INT NOT NULL, disciplina VARCHAR(50) NOT NULL, - - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem), - FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) + + FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), + FOREIGN KEY (idArea) REFERENCES Area (idArea), + FOREIGN KEY (idProfessor) REFERENCES Personagem (idPersonagem) ); CREATE TABLE IF NOT EXISTS Aluno ( - idPersonagem INT NOT NULL PRIMARY KEY, + idAluno SERIAL NOT NULL PRIMARY KEY, + falas TEXT NOT NULL, + idArea INT NOT NULL, idCasa INT NOT NULL, - idVantagem INT NOT NULL, - - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem), - FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), - FOREIGN KEY (idVantagem) REFERENCES Vantagem (idVantagem) -); - -CREATE TABLE IF NOT EXISTS Inimigo ( - idPersonagem INT NOT NULL PRIMARY KEY, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem) + FOREIGN KEY (idArea) REFERENCES Area (idArea), + FOREIGN KEY (idAluno) REFERENCES Personagem (idPersonagem), + FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); CREATE TABLE IF NOT EXISTS FredEJorge ( - idPersonagem INT NOT NULL PRIMARY KEY, + idFredEJorge SERIAL NOT NULL PRIMARY KEY, + falas TEXT NOT NULL, + idArea INT NOT NULL, idCasa INT NOT NULL, + vida INT NOT NULL, + nivel INT NOT NULL, + nome VARCHAR(50) NOT NULL UNIQUE, - - FOREIGN KEY (idPersonagem) REFERENCES NPC (idPersonagem), + FOREIGN KEY (idArea) REFERENCES Area (idArea), + FOREIGN KEY (idFredEJorge) REFERENCES Personagem (idPersonagem), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); CREATE TABLE IF NOT EXISTS ProfessorCoordenaCasa ( idCasa INT NOT NULL, - idProfessor INT NOT NULL, + idProfessor SERIAL NOT NULL, PRIMARY KEY (idCasa, idProfessor), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), - FOREIGN KEY (idProfessor) REFERENCES Professor (idPersonagem) + FOREIGN KEY (idProfessor) REFERENCES Professor (idProfessor) ); CREATE TABLE IF NOT EXISTS Interacao ( - idPC INT NOT NULL, - idNPC INT NOT NULL, + idPC SERIAL NOT NULL, + idNPC SERIAL NOT NULL, PRIMARY KEY (idPC, idNPC), - FOREIGN KEY (idPC) REFERENCES PC (idPersonagem), - FOREIGN KEY (idNPC) REFERENCES NPC (idPersonagem) + FOREIGN KEY (idPC) REFERENCES PC (idJogador), + FOREIGN KEY (idNPC) REFERENCES Personagem (idPersonagem) ); CREATE TABLE IF NOT EXISTS AlunoPorCasa ( - idAluno INT NOT NULL, + idAluno SERIAL NOT NULL, idCasa INT NOT NULL, PRIMARY KEY (idAluno, idCasa), - FOREIGN KEY (idAluno) REFERENCES Aluno (idPersonagem), + FOREIGN KEY (idAluno) REFERENCES Aluno (idAluno), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); @@ -142,7 +153,7 @@ CREATE TABLE IF NOT EXISTS VantagemCasa ( idCasa INT NOT NULL, PRIMARY KEY (idVantagem, idCasa), - FOREIGN KEY (idVantagem) REFERENCES VANTAGEM (idVantagem), + FOREIGN KEY (idVantagem) REFERENCES Vantagem (idVantagem), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa) ); @@ -154,9 +165,18 @@ CREATE TABLE IF NOT EXISTS Habilidade ( tipo HabilidadeTipo NOT NULL ); +CREATE TABLE IF NOT EXISTS PersonagemPossuiHabilidade ( + idPersonagem SERIAL NOT NULL, + idHabilidade INT NOT NULL, + + PRIMARY KEY (idPersonagem, idHabilidade), + FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem), + FOREIGN KEY (idHabilidade) REFERENCES Habilidade (idHabilidade) +); + CREATE TABLE IF NOT EXISTS Inventario ( idInventario INT NOT NULL PRIMARY KEY, - idPersonagem INT NOT NULL, + idPersonagem SERIAL NOT NULL, tamanho INT NOT NULL, FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem) @@ -164,10 +184,35 @@ CREATE TABLE IF NOT EXISTS Inventario ( CREATE TABLE IF NOT EXISTS Item ( idItem INT NOT NULL PRIMARY KEY, - idInventario INT NOT NULL, - nomeItem VARCHAR(50) NOT NULL, + + -- 'P' -> Poção + -- 'L' -> Livro + tipoItem VARCHAR(1) NOT NULL CHECK (tipoItem IN ('P', 'L')) +); - FOREIGN KEY (idInventario) REFERENCES Inventario (idInventario) +CREATE TABLE IF NOT EXISTS Livro ( + idLivro INT NOT NULL PRIMARY KEY, + idInventario INT, + idHabilidade INT NOT NULL, + nomeLivro VARCHAR(50) NOT NULL, + + + FOREIGN KEY (idHabilidade) REFERENCES Habilidade (idHabilidade), + FOREIGN KEY (idInventario) REFERENCES Inventario (idInventario), + FOREIGN KEY (idLivro) REFERENCES Item (idItem) +); + +CREATE TABLE IF NOT EXISTS Pocao ( + idPocao INT NOT NULL PRIMARY KEY, + idInventario INT, + idHabilidade INT NOT NULL, + nomePocao VARCHAR(50) NOT NULL, + efeito TEXT NOT NULL, + + + FOREIGN KEY (idHabilidade) REFERENCES Habilidade (idHabilidade), + FOREIGN KEY (idInventario) REFERENCES Inventario (idInventario), + FOREIGN KEY (idPocao) REFERENCES Item (idItem) ); CREATE TABLE IF NOT EXISTS Missao ( @@ -181,29 +226,21 @@ CREATE TABLE IF NOT EXISTS Missao ( CREATE TABLE IF NOT EXISTS Participantes ( idMissao INT NOT NULL, - idPersonagem INT NOT NULL, + idPersonagem SERIAL NOT NULL, PRIMARY KEY (idMissao, idPersonagem), FOREIGN KEY (idMissao) REFERENCES Missao (idMissao), FOREIGN KEY (idPersonagem) REFERENCES Personagem (idPersonagem) ); -CREATE TABLE IF NOT EXISTS Livro ( - idItem INT NOT NULL PRIMARY KEY, - idHabilidade INT NOT NULL, - nomeLivro VARCHAR(50) NOT NULL, - - FOREIGN KEY (idItem) REFERENCES Item (idItem), - FOREIGN KEY (idHabilidade) REFERENCES Habilidade (idHabilidade) -); - CREATE TABLE IF NOT EXISTS Feitico ( - idFeitico INT NOT NULL PRIMARY KEY, - habilidadeRequerida INT NOT NULL, - nomeFeitico VARCHAR(50) NOT NULL, - idProfessor INT, + idFeitico INT NOT NULL PRIMARY KEY, + habilidadeRequerida INT NOT NULL, + nomeFeitico VARCHAR(50) NOT NULL, + chanceAcerto REAL NOT NULL, + idProfessor SERIAL, - FOREIGN KEY (idProfessor) REFERENCES Professor (idPersonagem) + FOREIGN KEY (idProfessor) REFERENCES Professor (idProfessor) ); CREATE TABLE IF NOT EXISTS LivroEnsinaFeitico ( @@ -211,14 +248,6 @@ CREATE TABLE IF NOT EXISTS LivroEnsinaFeitico ( idFeitico INT NOT NULL, PRIMARY KEY (idLivro, idFeitico), - FOREIGN KEY (idLivro) REFERENCES Livro (idItem), + FOREIGN KEY (idLivro) REFERENCES Livro (idLivro), FOREIGN KEY (idFeitico) REFERENCES Feitico (idFeitico) -); - -CREATE TABLE IF NOT EXISTS Pocao ( - idItem INT NOT NULL PRIMARY KEY, - nomePocao VARCHAR(50) NOT NULL, - efeito TEXT NOT NULL, - - FOREIGN KEY (idItem) REFERENCES Item (idItem) ); \ No newline at end of file From 01a20c7688dc480a67c0e5b159e8318e8a636abe Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 16:55:53 -0300 Subject: [PATCH 15/51] feat: add triggers de integridade em personagem --- sql/{ddl => }/query_create_table.sql | 0 sql/{dml/popula.sql => query_popula.sql} | 0 sql/{dql/select.sql => query_select.sql} | 0 sql/query_triggers_stored_procedures.sql | 121 +++++++++++++++++++++++ 4 files changed, 121 insertions(+) rename sql/{ddl => }/query_create_table.sql (100%) rename sql/{dml/popula.sql => query_popula.sql} (100%) rename sql/{dql/select.sql => query_select.sql} (100%) create mode 100644 sql/query_triggers_stored_procedures.sql diff --git a/sql/ddl/query_create_table.sql b/sql/query_create_table.sql similarity index 100% rename from sql/ddl/query_create_table.sql rename to sql/query_create_table.sql diff --git a/sql/dml/popula.sql b/sql/query_popula.sql similarity index 100% rename from sql/dml/popula.sql rename to sql/query_popula.sql diff --git a/sql/dql/select.sql b/sql/query_select.sql similarity index 100% rename from sql/dql/select.sql rename to sql/query_select.sql diff --git a/sql/query_triggers_stored_procedures.sql b/sql/query_triggers_stored_procedures.sql new file mode 100644 index 0000000..224c570 --- /dev/null +++ b/sql/query_triggers_stored_procedures.sql @@ -0,0 +1,121 @@ +-- Trigger para verificar tipo de Personagem ao inserir em subtabelas (PC, Inimigo, Professor, etc.) +-- Trigger para PC ('J') +CREATE OR REPLACE FUNCTION check_type_jogador() RETURNS TRIGGER AS $$ +BEGIN + IF (SELECT tipoPersonagem FROM Personagem WHERE idPersonagem = NEW.idJogador) <> 'J' THEN + RAISE EXCEPTION 'Tipo de Personagem inválido para PC'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_type_jogador +BEFORE INSERT OR UPDATE ON PC +FOR EACH ROW EXECUTE PROCEDURE check_type_jogador(); + +-- Trigger para Inimigo ('I') +CREATE OR REPLACE FUNCTION check_type_inimigo() RETURNS TRIGGER AS $$ +BEGIN + IF (SELECT tipoPersonagem FROM Personagem WHERE idPersonagem = NEW.idInimigo) <> 'I' THEN + RAISE EXCEPTION 'Tipo de Personagem inválido para Inimigo'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_type_inimigo +BEFORE INSERT OR UPDATE ON Inimigo +FOR EACH ROW EXECUTE PROCEDURE check_type_inimigo(); + +-- Trigger para Aluno ('A') +CREATE OR REPLACE FUNCTION check_type_aluno() RETURNS TRIGGER AS $$ +BEGIN + IF (SELECT tipoPersonagem FROM Personagem WHERE idPersonagem = NEW.idAluno) <> 'A' THEN + RAISE EXCEPTION 'Tipo de Personagem inválido para Aluno'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_type_aluno +BEFORE INSERT OR UPDATE ON Aluno +FOR EACH ROW EXECUTE PROCEDURE check_type_aluno(); + +-- Trigger para Professor ('P') +CREATE OR REPLACE FUNCTION check_type_professor() RETURNS TRIGGER AS $$ +BEGIN + IF (SELECT tipoPersonagem FROM Personagem WHERE idPersonagem = NEW.idProfessor) <> 'P' THEN + RAISE EXCEPTION 'Tipo de Personagem inválido para Professor'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_type_professor +BEFORE INSERT OR UPDATE ON Professor +FOR EACH ROW EXECUTE PROCEDURE check_type_professor(); + +-- Trigger para FredEJorge ('F') +CREATE OR REPLACE FUNCTION check_type_FredEJorge() RETURNS TRIGGER AS $$ +BEGIN + IF (SELECT tipoPersonagem FROM Personagem WHERE idPersonagem = NEW.idFredEJorge) <> 'F' THEN + RAISE EXCEPTION 'Tipo de Personagem inválido para FredEJorge'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_type_FredEJorge +BEFORE INSERT OR UPDATE ON FredEJorge +FOR EACH ROW EXECUTE PROCEDURE check_type_FredEJorge(); + +-- Trigger para garantir a exclusividade entre subtabelas de Personagem +CREATE OR REPLACE FUNCTION check_personagem_unique() RETURNS TRIGGER AS $$ +BEGIN + IF EXISTS ( + SELECT 1 FROM PC WHERE idJogador = NEW.idPersonagem + UNION ALL + SELECT 1 FROM Inimigo WHERE idInimigo = NEW.idPersonagem + UNION ALL + SELECT 1 FROM Aluno WHERE idAluno = NEW.idPersonagem + UNION ALL + SELECT 1 FROM Professor WHERE idProfessor = NEW.idPersonagem + UNION ALL + SELECT 1 FROM FredEJorge WHERE idFredEJorge = NEW.idPersonagem + ) THEN + RAISE EXCEPTION 'Personagem já existe em outro tabela.'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +-- Caso para Jogador +CREATE TRIGGER check_jogador_unique +BEFORE INSERT ON PC +FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); + +-- Caso para Inimigo +CREATE TRIGGER check_inimigo_unique +BEFORE INSERT ON Inimigo +FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); + +-- Caso para Aluno +CREATE TRIGGER check_aluno_unique +BEFORE INSERT ON Aluno +FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); + +-- Caso para Professor +CREATE TRIGGER check_professor_unique +BEFORE INSERT ON Professor +FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); + +-- Caso para FredEJorge +CREATE TRIGGER check_fredJorge_unique +BEFORE INSERT ON FredEJorge +FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); \ No newline at end of file From c75219fbb813ad2fd90fcc0111541669642630fc Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 17:03:51 -0300 Subject: [PATCH 16/51] feat: add triggers para integridade em item --- sql/query_triggers_stored_procedures.sql | 59 +++++++++++++++++++++++- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/sql/query_triggers_stored_procedures.sql b/sql/query_triggers_stored_procedures.sql index 224c570..6149c61 100644 --- a/sql/query_triggers_stored_procedures.sql +++ b/sql/query_triggers_stored_procedures.sql @@ -88,7 +88,7 @@ BEGIN UNION ALL SELECT 1 FROM FredEJorge WHERE idFredEJorge = NEW.idPersonagem ) THEN - RAISE EXCEPTION 'Personagem já existe em outro tabela.'; + RAISE EXCEPTION 'Personagem já existe em outra tabela.'; END IF; RETURN NEW; @@ -118,4 +118,59 @@ FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); -- Caso para FredEJorge CREATE TRIGGER check_fredJorge_unique BEFORE INSERT ON FredEJorge -FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); \ No newline at end of file +FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); + +-- Trigger para verificar tipo de Item ao inserir em subtabelas (Poção e Livro) +-- Caso para Livro ('L') +CREATE OR REPLACE FUNCTION check_type_livro() RETURNS TRIGGER AS $$ +BEGIN + IF (SELECT tipoItem FROM Item WHERE idItem = NEW.idLivro) <> 'L' THEN + RAISE EXCEPTION 'Tipo de Item inválido para Livro'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_type_livro +BEFORE INSERT OR UPDATE ON Livro +FOR EACH ROW EXECUTE PROCEDURE check_type_livro(); + +-- Caso para Poção ('P') +CREATE OR REPLACE FUNCTION check_type_pocao() RETURNS TRIGGER AS $$ +BEGIN + IF (SELECT tipoItem FROM Item WHERE idItem = NEW.idPocao) <> 'P' THEN + RAISE EXCEPTION 'Tipo de Item inválido para Poção'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_type_pocao +BEFORE INSERT OR UPDATE ON Pocao +FOR EACH ROW EXECUTE PROCEDURE check_type_pocao(); + +-- Trigger para garantir exclusividade entre subtabelas de Item +CREATE OR REPLACE FUNCTION check_item_unique() RETURNS TRIGGER AS $$ +BEGIN + IF EXISTS ( + SELECT 1 FROM Livro WHERE idLivro = NEW.idItem + UNION ALL + SELECT 1 FROM Pocao WHERE idPocao = NEW.idItem + ) THEN + RAISE EXCEPTION 'Item já existe em outra tabela.'; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +-- Caso para Livro +CREATE TRIGGER check_livro_unique +BEFORE INSERT ON Livro +FOR EACH ROW EXECUTE PROCEDURE check_item_unique(); + +-- Caso para Poção +CREATE TRIGGER check_pocao_unique +BEFORE INSERT ON Pocao +FOR EACH ROW EXECUTE PROCEDURE check_item_unique(); \ No newline at end of file From 4376817a739ee7d29e1a371b75f757408a7aadbc Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 17:27:36 -0300 Subject: [PATCH 17/51] =?UTF-8?q?feat:=20add=20verifica=C3=A7=C3=A3o=20no?= =?UTF-8?q?=20tamanho=20do=20invent=C3=A1rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/query_create_table.sql | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/sql/query_create_table.sql b/sql/query_create_table.sql index 8d84d91..3b79af1 100644 --- a/sql/query_create_table.sql +++ b/sql/query_create_table.sql @@ -250,4 +250,34 @@ CREATE TABLE IF NOT EXISTS LivroEnsinaFeitico ( PRIMARY KEY (idLivro, idFeitico), FOREIGN KEY (idLivro) REFERENCES Livro (idLivro), FOREIGN KEY (idFeitico) REFERENCES Feitico (idFeitico) -); \ No newline at end of file +); + +-- Trigger para verificar se o inventário já está cheio +CREATE OR REPLACE FUNCTION check_inventario_size() RETURNS TRIGGER AS $$ +DECLARE + count_itens INT; + max_itens INT; +BEGIN + SELECT COUNT(*) INTO count_itens FROM ( + SELECT idInventario FROM Pocao WHERE idInventario = NEW.idInventario + UNION ALL + SELECT idInventario FROM Livro WHERE idInventario = NEW.idInventario + ) AS total; + + SELECT tamanho INTO max_itens FROM Inventario WHERE idInventario = NEW.idInventario; + + IF itens_count >= max_itens THEN + RAISE EXCEPTION 'Inventário Cheio.'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_inventario_pocao +BEFORE INSERT ON Pocao +FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); + +CREATE TRIGGER check_inventario_livro +BEFORE INSERT ON Livro +FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); \ No newline at end of file From 3d438aa2e1be881a6e482ff87db1900a83913783 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 17:41:11 -0300 Subject: [PATCH 18/51] =?UTF-8?q?feat:=20triggers=20para=20dele=C3=A7?= =?UTF-8?q?=C3=B5es=20em=20item=20e=20personagem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/query_create_table.sql | 32 +---------- sql/query_triggers_stored_procedures.sql | 68 +++++++++++++++++++++++- 2 files changed, 68 insertions(+), 32 deletions(-) diff --git a/sql/query_create_table.sql b/sql/query_create_table.sql index 3b79af1..8d84d91 100644 --- a/sql/query_create_table.sql +++ b/sql/query_create_table.sql @@ -250,34 +250,4 @@ CREATE TABLE IF NOT EXISTS LivroEnsinaFeitico ( PRIMARY KEY (idLivro, idFeitico), FOREIGN KEY (idLivro) REFERENCES Livro (idLivro), FOREIGN KEY (idFeitico) REFERENCES Feitico (idFeitico) -); - --- Trigger para verificar se o inventário já está cheio -CREATE OR REPLACE FUNCTION check_inventario_size() RETURNS TRIGGER AS $$ -DECLARE - count_itens INT; - max_itens INT; -BEGIN - SELECT COUNT(*) INTO count_itens FROM ( - SELECT idInventario FROM Pocao WHERE idInventario = NEW.idInventario - UNION ALL - SELECT idInventario FROM Livro WHERE idInventario = NEW.idInventario - ) AS total; - - SELECT tamanho INTO max_itens FROM Inventario WHERE idInventario = NEW.idInventario; - - IF itens_count >= max_itens THEN - RAISE EXCEPTION 'Inventário Cheio.'; - END IF; - - RETURN NEW; -END; -$$ LANGUAGE plpgsql; - -CREATE TRIGGER check_inventario_pocao -BEFORE INSERT ON Pocao -FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); - -CREATE TRIGGER check_inventario_livro -BEFORE INSERT ON Livro -FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); \ No newline at end of file +); \ No newline at end of file diff --git a/sql/query_triggers_stored_procedures.sql b/sql/query_triggers_stored_procedures.sql index 6149c61..0814437 100644 --- a/sql/query_triggers_stored_procedures.sql +++ b/sql/query_triggers_stored_procedures.sql @@ -120,6 +120,25 @@ CREATE TRIGGER check_fredJorge_unique BEFORE INSERT ON FredEJorge FOR EACH ROW EXECUTE PROCEDURE check_personagem_unique(); +-- Trigger que verifica a deleção na tabela Personagem +CREATE OR REPLACE FUNCTION delete_subtipo_personagem() RETURNS TRIGGER AS $$ +BEGIN + CASE OLD.tipoPersonagem + WHEN 'J' THEN DELETE FROM PC WHERE idJogador = OLD.idPersonagem; + WHEN 'I' THEN DELETE FROM Inimigo WHERE idInimigo = OLD.idPersonagem; + WHEN 'P' THEN DELETE FROM Professor WHERE idProfessor = OLD.idPersonagem; + WHEN 'A' THEN DELETE FROM Aluno WHERE idAluno = OLD.idPersonagem; + WHEN 'F' THEN DELETE FROM FredEJorge WHERE idFredEJorge = OLD.idPersonagem; + END CASE; + + RETURN OLD; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER delete_subtipo_personagem +BEFORE DELETE ON Personagem +FOR EACH ROW EXECUTE PROCEDURE delete_subtipo_personagem(); + -- Trigger para verificar tipo de Item ao inserir em subtabelas (Poção e Livro) -- Caso para Livro ('L') CREATE OR REPLACE FUNCTION check_type_livro() RETURNS TRIGGER AS $$ @@ -173,4 +192,51 @@ FOR EACH ROW EXECUTE PROCEDURE check_item_unique(); -- Caso para Poção CREATE TRIGGER check_pocao_unique BEFORE INSERT ON Pocao -FOR EACH ROW EXECUTE PROCEDURE check_item_unique(); \ No newline at end of file +FOR EACH ROW EXECUTE PROCEDURE check_item_unique(); + +-- Trigger que verifica a deleção na tabela Item +CREATE OR REPLACE FUNCTION delete_subtipo_item() RETURNS TRIGGER AS $$ +BEGIN + CASE OLD.tipoItem + WHEN 'L' THEN DELETE FROM Livro WHERE idLivro = OLD.idItem; + WHEN 'P' THEN DELETE FROM Pocao WHERE idPocao = OLD.idItem; + END CASE; + + RETURN OLD; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER delete_subtipo_item +BEFORE DELETE ON Item +FOR EACH ROW EXECUTE PROCEDURE delete_subtipo_item(); + + +-- Trigger para verificar se o inventário já está cheio +CREATE OR REPLACE FUNCTION check_inventario_size() RETURNS TRIGGER AS $$ +DECLARE + count_itens INT; + max_itens INT; +BEGIN + SELECT COUNT(*) INTO count_itens FROM ( + SELECT idInventario FROM Pocao WHERE idInventario = NEW.idInventario + UNION ALL + SELECT idInventario FROM Livro WHERE idInventario = NEW.idInventario + ) AS total; + + SELECT tamanho INTO max_itens FROM Inventario WHERE idInventario = NEW.idInventario; + + IF itens_count >= max_itens THEN + RAISE EXCEPTION 'Inventário Cheio.'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_inventario_pocao +BEFORE INSERT ON Pocao +FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); + +CREATE TRIGGER check_inventario_livro +BEFORE INSERT ON Livro +FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); \ No newline at end of file From fd70196542c9e14edc76a7b8d0684e3d81512079 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 17:46:37 -0300 Subject: [PATCH 19/51] feat: trigger para verificar vida negativa --- sql/query_triggers_stored_procedures.sql | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/sql/query_triggers_stored_procedures.sql b/sql/query_triggers_stored_procedures.sql index 0814437..7e5155c 100644 --- a/sql/query_triggers_stored_procedures.sql +++ b/sql/query_triggers_stored_procedures.sql @@ -239,4 +239,19 @@ FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); CREATE TRIGGER check_inventario_livro BEFORE INSERT ON Livro -FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); \ No newline at end of file +FOR EACH ROW EXECUTE PROCEDURE check_inventario_size(); + +-- Trigger para garantir que a vida do personagem nunca seja negativa +CREATE OR REPLACE FUNCTION check_min_life() RETURNS TRIGGER AS $$ +BEGIN + IF NEW.vida < 0 THEN + NEW.vida := 0; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_min_life +BEFORE INSERT OR UPDATE ON Personagem +FOR EACH ROW EXECUTE PROCEDURE check_min_life(); \ No newline at end of file From 7f2d3f17614c4876c0f463e42ad04d38ae37d02f Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 18:01:21 -0300 Subject: [PATCH 20/51] feat: view para status do jogador --- sql/query_views.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 sql/query_views.sql diff --git a/sql/query_views.sql b/sql/query_views.sql new file mode 100644 index 0000000..0070945 --- /dev/null +++ b/sql/query_views.sql @@ -0,0 +1,19 @@ +-- View para visualizar os Status do Jogador +CREATE VIEW vStatusJogador AS +SELECT + pc.nome AS nomeJogador, + c.nomeCasa AS casa, + a.nome AS areaAtual, + r.nome AS regiao, + m.nome AS mapa, + pc.vida, + pc.nivel, + pc.varinha, + COUNT(i.idItem) as totalItens +FROM PC pc JOIN Casa c ON pc.idCasa = c.idCasa +JOIN Area a ON pc.idArea = a.idArea +JOIN Regiao r ON a.idRegiao = r.idRegiao +JOIN Mapa m ON r.idMapa = m.idMapa +LEFT JOIN Inventario inventory ON pc.idJogador = inventory.idPersonagem +LEFT JOIN Item i ON inventory.idInventario = i.idItem +GROUP BY pc.idJogador, c.nomeCasa, a.nome, r.nome, m.nome; From a389891f94d2ef7d9eb29c84c42c4f7a0fb12d09 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 18:07:37 -0300 Subject: [PATCH 21/51] feat: add view de listar inimigos por area --- sql/query_views.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sql/query_views.sql b/sql/query_views.sql index 0070945..dac6b16 100644 --- a/sql/query_views.sql +++ b/sql/query_views.sql @@ -17,3 +17,17 @@ JOIN Mapa m ON r.idMapa = m.idMapa LEFT JOIN Inventario inventory ON pc.idJogador = inventory.idPersonagem LEFT JOIN Item i ON inventory.idInventario = i.idItem GROUP BY pc.idJogador, c.nomeCasa, a.nome, r.nome, m.nome; + +-- View para listar inimigos por área e região +CREATE VIEW vInimigosPorArea AS +SELECT + i.nome AS nomeInimigo, + i.vida, + i.nivel, + a.nome AS area, + r.nome AS regiao, + m.nome AS mapa +FROM Inimigo i +JOIN Area a ON i.idArea = a.idArea +JOIN Regiao r ON a.idRegiao = r.idRegiao +JOIN Mapa m ON r.idMapa = m.idMapa; \ No newline at end of file From 9be89f1b43bbb6d344a2d1ba838fbb98e32443bc Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 18:18:57 -0300 Subject: [PATCH 22/51] =?UTF-8?q?feat:=20view=20para=20relacionar=20feiti?= =?UTF-8?q?=C3=A7os=20com=20habilidade=20e=20professor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/query_views.sql | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sql/query_views.sql b/sql/query_views.sql index dac6b16..95e0513 100644 --- a/sql/query_views.sql +++ b/sql/query_views.sql @@ -30,4 +30,14 @@ SELECT FROM Inimigo i JOIN Area a ON i.idArea = a.idArea JOIN Regiao r ON a.idRegiao = r.idRegiao -JOIN Mapa m ON r.idMapa = m.idMapa; \ No newline at end of file +JOIN Mapa m ON r.idMapa = m.idMapa; + +-- View para relacionar feitiços as habilidades necessárias e aos professores que os ensinam +CREATE VIEW vFeiticosHabilidade AS +SELECT + f.nomeFeitico AS feitico, + h.nome AS habilidadeRequerida, + p.nome AS professorResp +FROM Feitico f +JOIN Habilidade h ON f.habilidadeRequerida = h.idHabilidade +JOIN Professor p ON f.idProfessor = p.idProfessor; \ No newline at end of file From 4a806a0a152c9676fa388c67b023e434622a52d1 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 18:26:03 -0300 Subject: [PATCH 23/51] =?UTF-8?q?feat:=20add=20view=20para=20exibir=20inve?= =?UTF-8?q?nt=C3=A1rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/query_views.sql | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/sql/query_views.sql b/sql/query_views.sql index 95e0513..3b3ade7 100644 --- a/sql/query_views.sql +++ b/sql/query_views.sql @@ -40,4 +40,34 @@ SELECT p.nome AS professorResp FROM Feitico f JOIN Habilidade h ON f.habilidadeRequerida = h.idHabilidade -JOIN Professor p ON f.idProfessor = p.idProfessor; \ No newline at end of file +JOIN Professor p ON f.idProfessor = p.idProfessor; + +-- View para detalhar itens no inventário +CREATE VIEW vInventario AS +SELECT + inv.idInventario, + COALESCE( + pc.nome, + ini.nome, + prof.nome, + aluno.nome, + fj.nome + ) AS nome_dono, + CASE + WHEN i.tipoItem = 'P' THEN p.nomePocao + WHEN i.tipoItem = 'L' THEN l.nomeLivro + END AS nome_item, + i.tipoItem AS tipo, + p.efeito AS efeito_pocao, + h.nome AS habilidade_relacionada +FROM Inventario inv +JOIN Personagem pers ON inv.idPersonagem = pers.idPersonagem +LEFT JOIN PC pc ON pers.idPersonagem = pc.idJogador +LEFT JOIN Inimigo ini ON pers.idPersonagem = ini.idInimigo +LEFT JOIN Professor prof ON pers.idPersonagem = prof.idProfessor +LEFT JOIN Aluno aluno ON pers.idPersonagem = aluno.idAluno +LEFT JOIN FredEJorge fj ON pers.idPersonagem = fj.idFredEJorge +LEFT JOIN Item i ON inv.idInventario = i.idItem +LEFT JOIN Pocao p ON i.idItem = p.idPocao +LEFT JOIN Livro l ON i.idItem = l.idLivro +LEFT JOIN Habilidade h ON COALESCE(p.idHabilidade, l.idHabilidade) = h.idHabilidade; \ No newline at end of file From 250a5a36ee98806ccbed6b416c2c0ac5eec39d4d Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 18:29:21 -0300 Subject: [PATCH 24/51] =?UTF-8?q?feat:=20add=20view=20para=20conex=C3=B5es?= =?UTF-8?q?=20das=20=C3=A1reas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/query_views.sql | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/sql/query_views.sql b/sql/query_views.sql index 3b3ade7..49ceb71 100644 --- a/sql/query_views.sql +++ b/sql/query_views.sql @@ -70,4 +70,18 @@ LEFT JOIN FredEJorge fj ON pers.idPersonagem = fj.idFredEJorge LEFT JOIN Item i ON inv.idInventario = i.idItem LEFT JOIN Pocao p ON i.idItem = p.idPocao LEFT JOIN Livro l ON i.idItem = l.idLivro -LEFT JOIN Habilidade h ON COALESCE(p.idHabilidade, l.idHabilidade) = h.idHabilidade; \ No newline at end of file +LEFT JOIN Habilidade h ON COALESCE(p.idHabilidade, l.idHabilidade) = h.idHabilidade; + +-- View para mostrar as conexões das áreas para a navegação +CREATE VIEW vConexoesArea AS +SELECT + a1.nome AS areaOrigem, + a2.nome AS areaNorte, + a3.nome AS areaSul, + a4.nome AS areaLeste, + a5.nome AS areaOeste +FROM Area a1 +LEFT JOIN Area a2 ON a1.areaNorte = a2.idArea +LEFT JOIN Area a3 ON a1.areaSul = a3.idArea +LEFT JOIN Area a4 ON a1.areaLeste = a4.idArea +LEFT JOIN Area a5 ON a1.areaOeste = a5.idArea; \ No newline at end of file From a4b3b1464cf3a9cb4cc0f1f986809c44bd4080cf Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Fri, 31 Jan 2025 18:34:42 -0300 Subject: [PATCH 25/51] feat: add trigger para atualizar nivel da habilidade --- sql/query_triggers_stored_procedures.sql | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/sql/query_triggers_stored_procedures.sql b/sql/query_triggers_stored_procedures.sql index 7e5155c..b6697ca 100644 --- a/sql/query_triggers_stored_procedures.sql +++ b/sql/query_triggers_stored_procedures.sql @@ -254,4 +254,25 @@ $$ LANGUAGE plpgsql; CREATE TRIGGER check_min_life BEFORE INSERT OR UPDATE ON Personagem -FOR EACH ROW EXECUTE PROCEDURE check_min_life(); \ No newline at end of file +FOR EACH ROW EXECUTE PROCEDURE check_min_life(); + +-- Trigger para atualizar nivel de habilidade +CREATE OR REPLACE FUNCTION valida_nivel_habilidade() +RETURNS TRIGGER AS $$ +DECLARE + nivel_personagem INT; + nivel_requerido INT; +BEGIN + SELECT nivel INTO nivel_personagem FROM Personagem WHERE idPersonagem = NEW.idPersonagem; + SELECT nivel INTO nivel_requerido FROM Habilidade WHERE idHabilidade = NEW.idHabilidade; + + IF nivel_personagem < nivel_requerido THEN + RAISE EXCEPTION 'Nível do personagem (%) insuficiente para a habilidade (Requerido: %).', nivel_personagem, nivel_requerido; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER valida_nivel_habilidade +BEFORE INSERT ON PersonagemPossuiHabilidade +FOR EACH ROW EXECUTE PROCEDURE valida_nivel_habilidade(); From c3450de8d60f44de3d71e922f8447860ca66a8c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Sat, 1 Feb 2025 14:47:51 -0300 Subject: [PATCH 26/51] =?UTF-8?q?Atualizando=20o=20codigo=20com=20as=20mud?= =?UTF-8?q?an=C3=A7as=20feitas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/__pycache__/classes.cpython-310.pyc | Bin 928 -> 1906 bytes app/__pycache__/database.cpython-310.pyc | Bin 3363 -> 4836 bytes app/__pycache__/texts.cpython-310.pyc | Bin 0 -> 3693 bytes app/classes.py | 3 +- app/database.py | 57 ++++++++----- app/game.py | 3 +- app/popula.py | 84 +++++++------------ sql/query_popula.sql | 102 +++++++++-------------- 8 files changed, 110 insertions(+), 139 deletions(-) create mode 100644 app/__pycache__/texts.cpython-310.pyc diff --git a/app/__pycache__/classes.cpython-310.pyc b/app/__pycache__/classes.cpython-310.pyc index b7398eb19f2d35a8d08dd4c3c52b840ecea59293..2a000b316038ac699631e2a62bfcdc97298dff9a 100644 GIT binary patch literal 1906 zcma)6%Wm676rCZ5qNrC=$92Q)Gxaymy{=&OI|_zu#e0?*IPh({78gw{Wf&LC!H% zGa~qfNhbLP)pKtQ&yzlRK6#uxAp`OP@;vfdG9)il?A#yw#E$vau%v=}U3J$G-GvR?9{wr>Rb}xzg`w7#n46{8k0FNA-lNIV7lf z#S&KeguD`jUKJ4fl}9M57GY3@ge}P)vn3zJq3z`|$<~`#QREY4gF-!5g%#8EOxchI zq*|pgek~V9S@Bysm2uk&ql$?JZ5pBI06@$#9ReZ%C|@$&qu<{L!_)Fi4gV;O8Xo<4 z^wZ(d0d1^b9?Z%)op6}WX2YyVjZx-s_R_YKB%kK#I3ry=KXJv8<- z7#S@ErX&6&v7ID2E9Ihq-Aj^Zi?pbFG!}KSU4cH@H~}(buy>mcxNF%;BKA6_dbvx` zB#}$+f>8>6N};ggXCm)|@`fyNmp#vA&v)6|%9}=DaaeN>rfpX$lj(dm&&#RpOiMjK zty9)9&S4 z{XdEKFcsTscQ|*<=KkHKcE{jtFu2nM-|(n0LVpj~Xm-O=Oda2$^9KOD5y>8JpSzV# hijFwfcV&qt4BLKCKdlcj%iy&ic!Tbsb2Hox{sHd4Qnmm9 delta 373 zcmeyww}4$RpO=@50SMlonvgEY%)sz?V!b4z!bEL(wiK3N22Iw9b()+^DabtK*sU`aWRNsV?;nM#wuRNqSQpa`1s7c%#!$czao$lB>iBM zz=jAhFnBY7Oe$sp5*!RXj72~p20u-vB1VuN5C@yaTO2mI`6;D2sdgY`V9k6?LR(rG4OKAb4fWUGXTd6E+ zNjhB%a{J))u|-j!FD+cyF9r55@wHF+0e#uF+kR(w(S-tbWpH?Ac;;~Co9|p`Z+5n% z;Me@+-%mcdqbUER&gf4==M!APQ#3*mtfL&qcXrIsS37D``AiX-;BOScuhe5r=)!oT z9CKF}gKRr4(@DfKFg*dvF;(O>quKVj5W=oQDRs|hC5H_8=*Q7wKI zWF4}66=VZ)L6}mf0J$hiQZ^yah_aN6kY`0j$|ZM3%!zp^mmx2RMJdlhz9W{TT!H+K zxGUv3vD{Fq??&cRJG6gg2kzL)85Uc>wTCNs7fqL6 z?_acfUKqN5>%=~DqhiN%?9Qndgpt`pd*Zu6`~7zmrK(4!NZuH6sld+z*N2)N1i$fo z5%HeqhgB6L!G+`XPPU_h<8`~P69VBVezLK> zE*G>OFKE;5^)}O2ZuBmq1;=;o&}|JZ6=|3AXt=7f^w0P=FZA!F=xpRBIVvWkKOF*{ zw8U!z!a%uEZk0<_uuE;A-mrmo%a{U5y#>WqluHf`?G`i|aGvnKDFMzDp?c1F(CJ>)wX!%o!G+j*8tKk4u8#h-4p@V>sa7=!osW2<_+U9`E@Ab_b^N>35VZa>H4{)46DWJm_wh6^ z(GZ67yv+KGllb+V9PKzJNZ__1v0!{EvVyh0to$4r+T%>yh>8 z(c#am=X=&KKCd0sBrw)Tv|~Q9KRW8DxR;(}y4CSrMl-#ReSvU5o;SJWO2@NB%gHRj zU_dOSeOHJ%Dqa2MZ1>~(W85(?FN;+FKquwS0KSJ{JtNdhwR;~u4ZTId(YuSDj^2te z(3?X~hIL`0XQEfcv(=C#JSz>~W-b5$oKDZAV&g-ig?Ik=}6w8hH}wUMy|(cdQrB zpYAqmIGG&vV(vF;&4k-Huhrx@ZBV^`FFsSEeR8U?4?wT~D9_~BTzveQ-;nOo2UA|% zucp*VjE?hX)Ic1P%s9ko!9@^p_sez|722Xj3#E87q(tmV#I)F*j5taeF{z@WX#2a`|wfg0xmIH7vOZ&3q~Qwoi8La2*GhCY}j zj1>h^0g@@DBBYX(X0D4@#5;3TnJMI)!N$4rclHODF<@ne-B&#HY?Xhtp>p|_)ruFP_zi!0}UF)!J*&9TuI{6m3 zi|xkr{MO0X)o^+P9ZaVEf5+(^cR2fioR{VUlkYfPZhUCrFtrc^HN{BmrgmZkuvEEXd(4Q&2w+~ciiZOx%T^R#1C@dnP@)1% zjguTCLJ7%@FpA682MIbdpnMA`NfnV1M}qQ|5ot~*i0h>ZP&iqgq{?izEvi{xPa2|H$uQwlBZw09q^d*Q zNq>ZB#-$NNIoyb9Mq&~<6Nl??I8$63viSQ?X7FiDO5@3oVLdIthue`~8HPVjn8?6) z4dTc!+)i%RBu!y` zauC{K+c|T?Q&0E{u-V;bJ2<|ouVrDk|UQkthR z;w*g~#f6)qV%2I1S24NI;l6_F96&A>WK@7gg2X}SOST$-kbN{ym|ZPH^1@Y zi{DRXI_b27U_AZxtIglN{mj(01@JiHxQVKICQV#H?;=h)+e4h)Cso1?ZtkHf6^vV3 zL{161zcJ%5*!MO_RNeo!FfYsv!cA`NvHQ4c3CeAr+CyO5U_0DR>=f7@Pbap+GixXq zd3XgI7+dNMa&uQ#q##SW>I|qD9ik)DCmhH4J812I_GwHGaZHae)~n;cxd(Pc4UJC1Vb0bWI4qP`I`IUO5o zh=T-XxmQ>#yw8bE`bT5=)y({E^HbpxyWkzS^wMz0|)cL9U^Q;B)(`NX&ka9$)Bx+Qr zWSX6j*PiE1KrGS=r_kB>CCo5WzZi4)8+B}q@8)8{DX=ZeS)a7i;2Gdea1%TeJk7+H zxeeq<#RSOV#P}0U5*KFedk0pZ#q^NIOp}GDPvZv!aMMvEp%6V}M~G)8P>gFB?!-7F z6bVMu4`w0Xd&j@Ka_eTLG=!$3{xI|EPxDRsT9DY6{Zo7!e28|7elK^!@&7e?*Hp*K zzxoe9|8sA0JAk&vSp8_7&rg9NbD++yz}G8}t%bWTfZE;^HO=db5KNwqO>Amn8=nco z1b*xUKt5r_K6aQ#9Gt-(?&WTU-SFcu5|@VxJ>0UtCb*}Lopo=3ooAiM8MWmWT>a^1 zx33P|SMZ|x+5K%=zu1I6GU;^=Tp(3Km*EYMyz6*fJ@sa3IdIkT3-gm>dgFPmE@*W{ zt9h-itCj57wAB9zny1kuC>s%YYQzCCM=^0>9s`+B=d#tgk93xPcOI5+!8EXIwN}_@ p*J{v-rvp~K8Ag$alA=kDya8VsS3hMlS>3A*pk=6CwW$M8{S8)SE$aXP diff --git a/app/__pycache__/texts.cpython-310.pyc b/app/__pycache__/texts.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92821623725c342c3c595e4237fd813e5c30bbe8 GIT binary patch literal 3693 zcmZ9P&u=706~||P2$n%Bg?|8*e2bVJqZOwJ5u9a3BEc?_VGnyT<(`_ETDrSBRoxTE zr(AR5!Wm)Z5IKTVIC1U&VvivH2~K>zRXyX$TCzRksebj|`~G;(;ql}7jITdG`s?Pu zk7u+0=*{uhJ>LA1@AMu&RZAH8=e`$KxhXwD~&i8)&IzM8gHPNkW*ZXLKsm9yEw4onj%hAi|>#a3a zXpBpJbTuh`IylqW=qlHkURQK+{PxN>(?`2p*QbL`91C3E^M{)!Jh_~|$^q8(&=0mT zX`u9yf9L98Y+M*$4~=haOEJNuQn_wdRrPSK%T=#4&3Lo%m0ixqFBHhEqdr)eO21ll zj#H^0R=JhDq;p#erpq~r#w8u%`!NcyP(iMPcGh^vUXP!YvGRnqumq6^hZ3 z&(?u~Z7zKQ-yM?85E*w>0oNpiV0=6NL;YK2!L?y$&6^NgZlIU&NRnFFOmNDz%9yv~ z-!j4SaU^NsSZLHu`ntB)E|P%1wgk;ONp8@K+HJ)6Ur~eWN_OJ#zBpsS+zqCd1}mrs zD+DIo&FPZRAKvNJvk-Skqt5rMlcH>-s6JvC;#V3{=9=Vbb%Mk;;R7>2d6h*OhMgbC zx#qFLL5Z$+Yukqp%^BLNU9O(~u7`F-P#6T=Jn@hIQ}= zEYindwoovQx7ARGv@m;ru%5vAGtN^4NCsr*mM0QXGsI^67c!8?#qp*iPiW}C>Wa2F5;kA6^{pQKnRij{riaQ`FA~J_3rqFW1`*%4J9er2yJ<0I7 zI9+^c*U*)xWIwu7)`4!Q*hkq8tTMIR(TU<9cQPq%O5MK?Sx&|C1Tc^6Ld`5G5W|9{ zIXOe-URIl}#1aw8w1aTHEGK(W9(K9^8Xmo9v6ls;S8+P#S{FBTb+4R-T<>7ClF4R( zZSjK%39(Yr&nnGnYmD`Pq@m2Jlg!pbDqytf!#kDiXRLMsIVfGC9}ep%ov7k)y_fXS z6v;Q_QM)i_HGwUA%ty7Y{`6T0t3?(`Sy!~y$oa6{Vx9PMvNT8Y`{X6&m_7I)#~isL zi6s_yo@e%vU!Iufv{tQ9lRC>_$9S-0A&C?>yNF=H>9i*m=Qt8cL)MIAd`yYF z(6mI|xqs{Nrt3eDYn z<|W^BHFT6bKDiquldri7)14feybt}=Ff5xJL^)#Z()?z;DVm@O(_Ajxt!&+39wjhq z(SDgA{KTMQVN={a!Nn%F3ps@PT^6uu(KQVo$&!{Y%*^isTS?iS7^iFr%(`8)aOeO8 zeafp4Dsfj`EpN^6ADsWtB?~`@A$V)Y&{~>jP*%Fm3_Y5V^k_d0ixX;6a8A=n*d2zZ zRD>g1F)9p_LmvnD%AP92QL)f(tKB+l@ndw<48BJY`YfY~xq^R=UEHeOiFa@xh&1ZU-7cDkXqwTKQG7^ERQXsDt=41HwB9kV=P%xW@b|%jQtKU+AC5^gVt&oIU)(qaXesITlUZ literal 0 HcmV?d00001 diff --git a/app/classes.py b/app/classes.py index 8ac9c73..72bb29d 100644 --- a/app/classes.py +++ b/app/classes.py @@ -1,13 +1,14 @@ #definir as classes class Character: #definição da classe de Personagens - def __init__(self, id_character, id_area, life, level, name, idHouse=0): + def __init__(self, id_character, id_area, life, level, name, idHouse=0,Wand=None): self.id_character = id_character self.life = life self.level = level self.name = name self.id_area = id_area self.idHouse = idHouse + self.Wand = Wand class Area: #definição da classe de Áreas do Mapa diff --git a/app/database.py b/app/database.py index 3fe1090..31df86a 100644 --- a/app/database.py +++ b/app/database.py @@ -20,28 +20,39 @@ def create_connection(): @staticmethod def create_character(connection, name): cursor = connection.cursor() - query = f"INSERT INTO Personagem (vida, nivel, idarea, nome)values (100, 1, 2, '{name}')" + query = "INSERT INTO Personagem (tipoPersonagem) VALUES ('J') RETURNING idPersonagem" cursor.execute(query) + idPersonagem = cursor.fetchone()[0] connection.commit() - query = f"INSERT INTO PC (idPersonagem) VALUES ((SELECT idPersonagem FROM Personagem WHERE nome = '{name}'))" - cursor.execute(query) + return idPersonagem + + + @staticmethod + def create_pc(connection, idPersonagem, name): + cursor = connection.cursor() + query = """ + INSERT INTO PC (idJogador, idArea, vida, nivel, nome) + VALUES (%s, 2, 100, 1, %s) + """ + cursor.execute(query, (idPersonagem, name)) connection.commit() + @staticmethod - def load_character(connection, name) -> Character: - try: - cursor = connection.cursor() - query = f"SELECT * FROM Personagem WHERE nome = '{name}'" - cursor.execute(query) - character = cursor.fetchone() - player = Character(*character, *(0, ) * (6 - len(character))) - if character: - return player - else: - return -1 - except Exception as e: - pass - # print("Personagem não encontrado!") + def load_character(connection, name): + cursor = connection.cursor() + query = "SELECT * FROM PC WHERE nome = %s" + cursor.execute(query, (name,)) + player_data = cursor.fetchone() + + if player_data: + return Character(*player_data) # Ou você pode formatar conforme necessário + else: + return None + + + + @staticmethod def move(connection, player, direction): @@ -58,13 +69,13 @@ def move(connection, player, direction): direction = 'oeste' elif direction == '0': sys.exit() - query_update = (f""" UPDATE Personagem + query_update = (f""" UPDATE PC SET idArea = (SELECT area{direction} FROM Area WHERE idArea = {player.id_area}) - WHERE idPersonagem = {player.id_character}; + WHERE idJogador = {player.id_character}; """) cursor.execute(query_update) - query_select = (f""" SELECT idArea FROM Personagem WHERE idPersonagem = {player.id_character}""") + query_select = (f""" SELECT idArea FROM PC WHERE idJogador = {player.id_character}""") cursor.execute(query_select) player.id_area = cursor.fetchone()[0] connection.commit() @@ -115,7 +126,7 @@ def get_area_name(cls, connection, player): @classmethod def set_house(cls, connection, player): cursor = connection.cursor() - query = f"UPDATE PC SET idCasa = {player.idHouse} WHERE idPersonagem = {player.id_character}" + query = f"UPDATE PC SET idCasa = {player.idHouse} WHERE idJogador = {player.id_character}" cursor.execute(query) connection.commit() @@ -126,7 +137,7 @@ def get_house(cls, connection, player): SELECT c.nomeCasa FROM PC p JOIN Casa c ON p.idCasa = c.idcasa - WHERE p.idpersonagem = {player.id_character} + WHERE p.idJogador = {player.id_character} """ cursor.execute(query) nome = cursor.fetchone() @@ -135,7 +146,7 @@ def get_house(cls, connection, player): @classmethod def set_area(cls, connection, player, idarea): cursor = connection.cursor() - query = f"UPDATE Personagem SET idArea = {idarea} WHERE idPersonagem = {player.id_character}" + query = f"UPDATE PC SET idArea = {idarea} WHERE idJogador = {player.id_character}" cursor.execute(query) connection.commit() diff --git a/app/game.py b/app/game.py index 56ec944..9d891a2 100644 --- a/app/game.py +++ b/app/game.py @@ -68,7 +68,8 @@ def create_character(self): print('Nome inválido! O nome do personagem não pode ser vazio.\n') self.start() - self.player = Database.create_character(self.connection, name) + idPersonagem = Database.create_character(self.connection, name) + self.player = Database.create_pc(self.connection, idPersonagem, name) self.player = Database.load_character(self.connection, name) self.new_game() def load_character(self): diff --git a/app/popula.py b/app/popula.py index 2a9ff01..24f57fb 100644 --- a/app/popula.py +++ b/app/popula.py @@ -77,19 +77,19 @@ def create_tables(): #cria cada tabela do banco de dados """, """ - INSERT INTO Personagem (idPersonagem, idArea, vida, nivel, nome) - VALUES - (1, 5, 100, 10, 'Albus Dumbledore'), - (2, 13, 100, 10, 'Severus Snape'), - (3, 2, 100, 10, 'Minerva McGonagall'), - (4, 12, 100, 10, 'Hermione Granger'), - (5, 4, 100, 10, 'Ron Weasley'), - (6, 18, 100, 10, 'Draco Malfoy'), - (7, 20, 100, 2, 'Lobo'), - (8, 20, 100, 5, 'Dementador'), - (9, 10, 100, 10, 'Neville Longbottom'), - (10, 14, 100, 10, 'Fílio Flitwick'), - (11, 6, 100, 10, 'Pomona Sprout'); + INSERT INTO Personagem (idPersonagem,tipoPersonagem) + VALUES + (1,'P'), + (2,'P'), + (3,'P'), + (4,'A'), + (5,'A'), + (6,'A'), + (7,'I'), + (8,'I'), + (9,'A'), + (10,'P'), + (11,'P'); """, """ @@ -101,37 +101,29 @@ def create_tables(): #cria cada tabela do banco de dados """, """ - INSERT INTO NPC (idPersonagem, falas) - VALUES - (1, 'Bem vindo à Hogwards'), - (2, 'Saia do meu caminho!'), - (3, 'Bem vindo à Hogwards'), - (10, 'Para aprender um feitiço é preciso assistir as aulas!'), - (11, 'Nessa floresta há sempre monstros a espreita cuidado!'), - (6, 'Você realmente acha que é digno de estar no mesmo lugar que eu?'), - (5, 'Você sabe, quando eu pensei que minha vida na escola de magia poderia ficar mais estranha, eu não imaginava que estaríamos lutando contra dragões e... bom, enfrentando coisas ainda mais bizarras. Só mais um dia com os amigos, né?'), - (4, 'Vocês sabem, não é apenas sobre ser corajoso. A verdadeira chave é usar a inteligência para resolver os problemas. Se pararmos para pensar e estudar as coisas com atenção, não há nada que não possamos enfrentar.'), - (7, 'huuuu'), - (8, 'haaa'), - (9, 'Eu sei que nunca fui o mais forte ou o mais esperto, mas aprendi que a verdadeira coragem não é não ter medo... é enfrentá-lo, mesmo quando tudo dentro de você diz para correr.'); + INSERT INTO Inimigo (idInimigo,falas,idArea,vida,nivel,nome,danoBase) + VALUES + (7,'AAAUUU',20,100,2,'Lobo',20), + (8,'uuuuuu',20,100,5,'Dementador',50); """, """ - INSERT INTO Professor (idPersonagem, idCasa, disciplina) + INSERT INTO Professor (idProfessor,falas,idArea,vida,nivel,nome,idCasa,disciplina) VALUES - (1, 1, 'Defesa Contra as Artes das Trevas'), - (2, 2, 'Poções'), - (3, 1, 'Transfiguração'), - (10, 4, 'Feitiços'), - (11, 3, 'Herbologia'); + (1,'Eu sou Dumbledore',4,100,100,'Albus Dumbledore',1,'Defesa Contra as Artes das Trevas'), + (2,'Eu sou Snape',13,1000,90,'Severus Snape',2,'Poções'), + (3,'Eu sou Minerva',37,100,90,'Minerva McGonagall',1,'Transfiguração'), + (10,'Eu sou Filio',36,100,90,'Fílio Flitwick',4,'Feitiços'), + (11,'Eu sou Pomona',14,100,90,'Pomona Sprout',3,'Herbologia'); """, """ - INSERT INTO Aluno (idPersonagem, idCasa, idVantagem) - VALUES - (6, 2, 2), - (5, 1, 3), - (4, 1, 1); + INSERT INTO Aluno (idAluno,falas,idArea,idCasa,vida,nivel,nome) + VALUES + (6,'Eu sou o Draco',23,2,100,50,'Draco Malfoy'), + (5,'Eu sou o Ron',3,1,100,50,'Ron Weasley'), + (4,'Eu sou a Heminione',11,1,100,50,'Hermione Granger'), + (9,'Eu sou o Neville',10,3,100,50,'Neville Longbottom'); """, """ @@ -148,23 +140,9 @@ def create_tables(): #cria cada tabela do banco de dados VALUES (6, 2), (5, 1), - (4, 1); - """, - - """ - INSERT INTO PersonagemPossuiVantagem (idPersonagem, idVantagem) - VALUES - (1, 1), - (2, 1), - (11, 3); + (4, 1), + (9,3); """, - - """ - INSERT INTO Inimigo (idPersonagem) - VALUES - (7), - (8); - """ ] try: diff --git a/sql/query_popula.sql b/sql/query_popula.sql index cf397f8..8047bf3 100644 --- a/sql/query_popula.sql +++ b/sql/query_popula.sql @@ -66,19 +66,45 @@ VALUES (40,4, 'Salão Godric Gryffindor e Salazar Slytherin',5,39,15,17,'Com tons vibrantes de vermelho, dourado, verde e prata. É um lugar que inspira desafios, liderança e respeito entre forças opostas.'); -- Personagem -INSERT INTO Personagem (idPersonagem,idArea,vida,nivel,nome) -VALUES -(1,5,100,10,'Albus Dumbledore'), -(2,13,100,10,'Severus Snape'), -(3,2,100,10,'Minerva McGonagall'), -(4,12,100,10,'Hermione Granger'), -(5,4,100,10,'Ron Weasley'), -(6,18,100,10,'Draco Malfoy'), -(7,20,100,2,'Lobo'), -(8,20,100,5,'Dementador'), -(9,10,100,10,'Neville Longbottom'), -(10,14,100,10,'Fílio Flitwick'), -(11,6,100,10,'Pomona Sprout'); + +INSERT INTO Personagem (idPersonagem,tipoPersonagem) +VALUES +(1,'P'), +(2,'P'), +(3,'P'), +(4,'A'), +(5,'A'), +(6,'A'), +(7,'I'), +(8,'I'), +(9,'A'), +(10,'P'), +(11,'P'); + + +-- INIMIGOS +INSERT INTO Inimigo (idInimigo,falas,idArea,vida,nivel,nome,danoBase) +VALUES +(7,'AAAUUU',20,100,2,'Lobo',20), +(8,'uuuuuu',20,100,5,'Dementador',50); + + +-- Professor +INSERT INTO Professor (idProfessor,falas,idArea,vida,nivel,nome,idCasa,disciplina) +VALUES +(1,'Eu sou Dumbledore',4,100,100,'Albus Dumbledore',1,'Defesa Contra as Artes das Trevas'), +(2,'Eu sou Snape',13,1000,90,'Severus Snape',2,'Poções'), +(3,'Eu sou Minerva',37,100,90,'Minerva McGonagall',1,'Transfiguração'), +(10,'Eu sou Filio',36,100,90,'Fílio Flitwick',4,'Feitiços'), +(11,'Eu sou Pomona',14,100,90,'Pomona Sprout',3,'Herbologia'); + +-- ALunos +INSERT INTO Aluno (idAluno,falas,idArea,idCasa,vida,nivel,nome) +VALUES +(6,'Eu sou o Draco',23,2,100,50,'Draco Malfoy'), +(5,'Eu sou o Ron',3,1,100,50,'Ron Weasley'), +(4,'Eu sou a Heminione',11,1,100,50,'Hermione Granger'), +(9,'Eu sou o Neville',10,3,100,50,'Neville Longbottom'); -- Vantagens @@ -89,40 +115,6 @@ VALUES (3,'Defesa de Criaturas Mágicas','O personagem é especializado na defesa e proteção de criaturas mágicas, sendo capaz de acalmar ou conter até as mais perigosas delas sem se ferir'); --- NPC - - -INSERT INTO NPC (idPersonagem,falas) -VALUES -(1,'Bem vindo à Hogwards'), -(2,'Saia do meu caminho!'), -(3,'Bem vindo à Hogwards'), -(10,'Para aprender um feitiço é preciso assistir as aulas!'), -(11,'Nessa floresta há sempre monstros a espreita cuidado!'), -(6,'Você realmente acha que é digno de estar no mesmo lugar que eu?'), -(5,'Você sabe, quando eu pensei que minha vida na escola de magia poderia ficar mais estranha, eu não imaginava que estaríamos lutando contra dragões e... bom, enfrentando coisas ainda mais bizarras. Só mais um dia com os amigos, né?'), -(4,'Vocês sabem, não é apenas sobre ser corajoso. A verdadeira chave é usar a inteligência para resolver os problemas. Se pararmos para pensar e estudar as coisas com atenção, não há nada que não possamos enfrentar.'), -(7,'huuuu'), -(8,'haaa'), -(9,'Eu sei que nunca fui o mais forte ou o mais esperto, mas aprendi que a verdadeira coragem não é não ter medo... é enfrentá-lo, mesmo quando tudo dentro de você diz para correr.'); - --- Professor -INSERT INTO Professor (idPersonagem,idCasa,disciplina) -VALUES -(1,1,'Defesa Contra as Artes das Trevas'), -(2,2,'Poções'), -(3,1,'Transfiguração'), -(10,4,'Feitiços'), -(11,3,'Herbologia'); - - --- Alunos -INSERT INTO Aluno (idPersonagem,idCasa,idVantagem) -VALUES -(6,2,2), -(5,1,3), -(4,1,1); - -- ProfessorCordenaCasa INSERT INTO ProfessorCoordenaCasa (idCasa,idProfessor) VALUES @@ -136,21 +128,9 @@ INSERT INTO AlunoPorCasa (idAluno,idCasa) VALUES (6,2), (5,1), -(4,1); +(4,1), +(9,3); ---PersonagemPossuiVantagem -INSERT INTO PersonagemPossuiVantagem (idPersonagem,idVantagem) -VALUES -(1,1), -(2,1), -(11,3); - - ---Inimigo -INSERT INTO Inimigo (idPersonagem) -VALUES -(7), -(8); From 3bb5d699a75537a476369c6b44b4030afe30eb82 Mon Sep 17 00:00:00 2001 From: Paola Nascimento Date: Sat, 1 Feb 2025 22:36:57 -0300 Subject: [PATCH 27/51] logica inicial combate --- app/combate.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 app/combate.py diff --git a/app/combate.py b/app/combate.py new file mode 100644 index 0000000..6e0eda9 --- /dev/null +++ b/app/combate.py @@ -0,0 +1,45 @@ +import time + +import random + +def combate(jogador, inimigo): + print(f"Um {inimigo.nome} selvagem apareceu!") + + while jogador.esta_vivo() and inimigo.esta_vivo(): + print(f"\n{'-'*30}") + print(f"{jogador.nome}: {jogador.vida} HP") + print(f"{inimigo.nome}: {inimigo.vida} HP") + print(f"{'-'*30}") + + # Turno do jogador + print("\nEscolha sua ação:") + print("1. Usar feitiço") + print("2. Usar poção") + escolha = input("> ") + + if escolha == "1": + if jogador.feitiços: + print("Escolha um feitiço:") + for i, feitico in enumerate(jogador.feitiços): + print(f"{i+1}. {feitico.nome}") + escolha_feitico = int(input("> ")) - 1 + if 0 <= escolha_feitico < len(jogador.feitiços): + jogador.usar_feitico(jogador.feitiços[escolha_feitico], inimigo) + else: + print("Escolha inválida!") + else: + print("Você não tem mais feitiços!") + elif escolha == "2": + jogador.usar_pocao() + else: + print("Escolha inválida!") + + # Turno do inimigo + if inimigo.esta_vivo(): + inimigo.atacar(jogador) + + # Resultado do combate + if jogador.esta_vivo(): + print(f"\n{inimigo.nome} foi derrotado!") + else: + print(f"\n{jogador.nome} foi derrotado!") \ No newline at end of file From 5c46268222335402df3674531c763a8638e725bd Mon Sep 17 00:00:00 2001 From: Paola Nascimento Date: Sat, 1 Feb 2025 23:45:53 -0300 Subject: [PATCH 28/51] classes de combate --- app/classescombate.py | 68 +++++++++++++++++++++++++++ app/{combate.py => sistemacombate.py} | 14 +++--- 2 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 app/classescombate.py rename app/{combate.py => sistemacombate.py} (78%) diff --git a/app/classescombate.py b/app/classescombate.py new file mode 100644 index 0000000..0101624 --- /dev/null +++ b/app/classescombate.py @@ -0,0 +1,68 @@ +# classes/combat.py + +import random +from classes import Character # Importa a classe Character + +class Jogador(Character): + def __init__(self, id_character, id_area, life, level, name, idHouse=0, Wand=None): + super().__init__(id_character, id_area, life, level, name, idHouse, Wand) + self.feitiços = [] # Lista de feitiços disponíveis + self.pocoes = 2 # Número de poções disponíveis + + def usar_feitico(self, feitico, inimigo): + if feitico in self.feitiços: + print(f"{self.name} usou {feitico.nome}!") + dano = feitico.calcular_dano(self.level) + inimigo.receber_dano(dano) + self.feitiços.remove(feitico) # Remove o feitiço após o uso + else: + print(f"{self.name} não pode usar {feitico.nome}!") + + def usar_pocao(self): + if self.pocoes > 0: + self.life += 20 # Recupera 20 de vida + self.pocoes -= 1 + print(f"{self.name} usou uma poção e recuperou 20 de vida!") + else: + print(f"{self.name} não tem mais poções!") + + def receber_dano(self, dano): + self.life -= dano + if self.life < 0: + self.life = 0 + print(f"{self.name} sofreu {dano} de dano e agora tem {self.life} de vida!") + + def esta_vivo(self): + return self.life > 0 + +class Inimigo(Character): + def __init__(self, id_character, id_area, life, level, name, dano_base): + super().__init__(id_character, id_area, life, level, name) + self.dano_base = dano_base + + def atacar(self, jogador): + dano = self.dano_base * self.level + jogador.receber_dano(dano) + print(f"{self.name} atacou {jogador.name} e causou {dano} de dano!") + + def receber_dano(self, dano): + self.life -= dano + if self.life < 0: + self.life = 0 + print(f"{self.name} sofreu {dano} de dano e agora tem {self.life} de vida!") + + def esta_vivo(self): + return self.life > 0 + +class Feitico: + def __init__(self, nome, dano_base, taxa_acerto): + self.nome = nome + self.dano_base = dano_base + self.taxa_acerto = taxa_acerto + + def calcular_dano(self, nivel_jogador): + if random.random() < self.taxa_acerto: + return self.dano_base * nivel_jogador + else: + print(f"{self.nome} falhou!") + return 0 \ No newline at end of file diff --git a/app/combate.py b/app/sistemacombate.py similarity index 78% rename from app/combate.py rename to app/sistemacombate.py index 6e0eda9..1c6a3c0 100644 --- a/app/combate.py +++ b/app/sistemacombate.py @@ -1,14 +1,14 @@ -import time +# game/combat_system.py -import random +from classescombate import Jogador, Inimigo def combate(jogador, inimigo): - print(f"Um {inimigo.nome} selvagem apareceu!") + print(f"Um {inimigo.name} selvagem apareceu!") while jogador.esta_vivo() and inimigo.esta_vivo(): print(f"\n{'-'*30}") - print(f"{jogador.nome}: {jogador.vida} HP") - print(f"{inimigo.nome}: {inimigo.vida} HP") + print(f"{jogador.name}: {jogador.life} HP") + print(f"{inimigo.name}: {inimigo.life} HP") print(f"{'-'*30}") # Turno do jogador @@ -40,6 +40,6 @@ def combate(jogador, inimigo): # Resultado do combate if jogador.esta_vivo(): - print(f"\n{inimigo.nome} foi derrotado!") + print(f"\n{inimigo.name} foi derrotado!") else: - print(f"\n{jogador.nome} foi derrotado!") \ No newline at end of file + print(f"\n{jogador.name} foi derrotado!") \ No newline at end of file From 84172589f7ed61dce4d3e673735c0aab519d5ce3 Mon Sep 17 00:00:00 2001 From: pedro Date: Sun, 2 Feb 2025 10:59:09 -0300 Subject: [PATCH 29/51] =?UTF-8?q?feat:=20adicionando=20a=20possibilidade?= =?UTF-8?q?=20de=20percorrer=20o=20mapa=20ap=C3=B3s=20o=20in=C3=ADcio=20do?= =?UTF-8?q?=20primeiro=20dia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/game.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/game.py b/app/game.py index 9d891a2..5ea03b4 100644 --- a/app/game.py +++ b/app/game.py @@ -116,6 +116,7 @@ def new_game(self): idarea = 17 elif self.player.idHouse == 4: #lufa-lufa idarea = 18 + self.player.id_area = idarea Database.set_area(self.connection, self.player, idarea) break else: @@ -137,13 +138,12 @@ def choice_house(self): f"E toda a mesa da casa entrou em euforia com a sua seleção!\n") def continue_game(self): - clear() - self.get_current_area() - self.get_possibles_directions() - - - - + while True: + clear() + self.get_current_area() + self.get_possibles_directions() + direction = input() + self.move_character(direction) def press_key_to_continue(self): From 5ff8450da150f87ed9b53d6ba4053e124a9c8d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Sun, 2 Feb 2025 11:18:33 -0300 Subject: [PATCH 30/51] adicionando um press_key_to_continue --- app/__pycache__/classes.cpython-310.pyc | Bin 1906 -> 1906 bytes app/__pycache__/database.cpython-310.pyc | Bin 4836 -> 4836 bytes app/game.py | 2 ++ 3 files changed, 2 insertions(+) diff --git a/app/__pycache__/classes.cpython-310.pyc b/app/__pycache__/classes.cpython-310.pyc index 2a000b316038ac699631e2a62bfcdc97298dff9a..adf99c46abb8b8d20b47ed01f5ccb10d4344d80c 100644 GIT binary patch delta 20 acmeyw_lb`?pO=@50SMA6=WparX9oZ~bp=NN delta 20 acmeyw_lb`?pO=@50SL4s=WXOpX9oZ|69nr3 diff --git a/app/__pycache__/database.cpython-310.pyc b/app/__pycache__/database.cpython-310.pyc index 5a05a07e3f081fa5f220be640b6f1fae6051942c..c7ec6f276f5306464ac28ecf65f565b373ebf0dc 100644 GIT binary patch delta 20 acmaE&`b3pGpO=@50SMA6=Wpb`DFgsLj0M&J delta 20 acmaE&`b3pGpO=@50SH23=56G@DFgsKTLq>7 diff --git a/app/game.py b/app/game.py index 5ea03b4..42805b8 100644 --- a/app/game.py +++ b/app/game.py @@ -105,9 +105,11 @@ def new_game(self): clear() print(texto_pos_selecao) self.press_key_to_continue() + clear() print(texto_inicial_sobre_o_artefato) print("Assim, curioso, você foi dormir, pronto para o primeiro dia de aula em Hogwarts.\n") print("O dia amanheceu e o seu primeiro dia de aula em hogwarts começou!") + self.press_key_to_continue() if self.player.idHouse == 1: #grifinória idarea = 15 elif self.player.idHouse == 3: #corvinal From b38239240d377147420ef79f4f8ca2b3e6db4ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Sun, 2 Feb 2025 17:03:38 -0300 Subject: [PATCH 31/51] adicionando aula de defesa contra artes das trevas --- app/__pycache__/texts.cpython-310.pyc | Bin 3693 -> 4841 bytes app/game.py | 80 ++++++++++++++++++++++++++ app/texts.py | 23 ++++++++ 3 files changed, 103 insertions(+) diff --git a/app/__pycache__/texts.cpython-310.pyc b/app/__pycache__/texts.cpython-310.pyc index 92821623725c342c3c595e4237fd813e5c30bbe8..47bc493d8e98782d36e5d083d5f77887434a5bba 100644 GIT binary patch delta 1264 zcmYjRyKdA#6x}2X1VbW(pg>A-6^R0|Bq*Yy0HP3y3JMU#Hs-Ep)){1bHuG4vb481U z@&UYx2qX%=!967fe?Y+xP;u@!5v;W9@z`_jx#yg_zc+qeU$<*(*#Mt6-`|xlF27yh z*xbOK8jJ^OX}qMC$IEJEyrPEVp*k}@qs~4Z+&K5`!O>b9mzM^E>-T&eYnV7RQS3Qua_!!G-p06J*oVE-IlRtlDQz&)IKfS$r)*>;k2>eyZ_e z!{oVQLfP&E6$~XxR;mAhCb~~(4$94(1-!Qo4Nan_hq0biNi!imv)&ZO0!tZ|MgS0^ zs{u=PVMC=rF$wTKsRDIL%CDC0`Ikks{d;?T2)e9n}(DtxEf1k)YM9a;&g6TmVV zsO>`cu@UsdI0;bn0_aM6FyBKRZqZ41j8;f&o;dV3k}@Zf!nW8PFdU7jFlT3Q=PA=d zR(HpEB64#ukO!9RFA$r`u&W`&Nja|O0@#=uaX?~JYREL*SLo7G_Z~Wko=g>*5mjNv zLdoX$V97bp;Tnk$rND@${<^WCD02=DStcVICH1vvMc)`Gi6%3~qV6jE} zss!C<2iCRCD-cd6v1Nf>bLmW>;X42do}@9Da2cUf-+&|@De_UMFp{sGFd!#_v;w#-+q(sbp$+d2DOIQSfq%=<{5f?yQ#|4w`!xO4cAN+?riPcf|y75)~{c>h?jgrz!-oVHJ delta 82 zcmaE<`c{T7pO=@50SNjz=A}R7oyaF6CIIB6Fhnt=Fh((^Fhwz?Fb6YevTXF3%**Vj h$vpXkpeyG}h9VZAsv?%jvxMxq*nmtH1{O{ZZU6=y5Rw1@ diff --git a/app/game.py b/app/game.py index 42805b8..9255556 100644 --- a/app/game.py +++ b/app/game.py @@ -84,6 +84,7 @@ def load_character(self): def new_game(self): + clear() print(f' Bem-vindo(a) {self.player.name}!\n' f'Você é o mais novo aluno da Escola de Magia e Bruxaria de Hogwarts.\n' @@ -120,6 +121,11 @@ def new_game(self): idarea = 18 self.player.id_area = idarea Database.set_area(self.connection, self.player, idarea) + clear() + print(texto_do_primeiro_dia) + print('Vá para a aula de Defesa Contra a Artes das Trevas') + self.press_key_to_continue() + clear() break else: clear() @@ -147,6 +153,78 @@ def continue_game(self): direction = input() self.move_character(direction) + if self.player.id_area == 12: + self.class_Defesa_Contra_as_Artes_das_Trevas() + break + + def class_Defesa_Contra_as_Artes_das_Trevas(self): + clear() + print(texto_aula_defesa_contra_as_artes_das_trevas) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em feitiços de defesa!\n') + self.press_key_to_continue() + clear() + self.quiz_defesa_artes_trevas() + + def quiz_defesa_artes_trevas(self): + perguntas = [ + + { + "pergunta": "Qual feitiço é usado para desarmar um oponente?", + "opcoes": ["A) Expelliarmus", "B) Avada Kedavra", "C) Crucio", "D) Accio"], + "resposta": "A" + }, + { + "pergunta": "Qual feitiço conjura um escudo protetor?", + "opcoes": ["A) Expecto Patronum", "B) Protego", "C) Lumos", "D) Stupefy"], + "resposta": "B" + }, + { + "pergunta": "Qual feitiço invoca um Patrono?", + "opcoes": ["A) Expecto Patronum", "B) Wingardium Leviosa", "C) Petrificus Totalus", "D) Obliviate"], + "resposta": "A" + } + ] + + pontos = 0 + + for pergunta in perguntas: + clear() + print("🧙‍♂️ Professor: " + pergunta["pergunta"] + "\n") + for opcao in pergunta["opcoes"]: + print(opcao) + + resposta_usuario = input("\nDigite a letra da resposta correta: ").strip().upper() + + if resposta_usuario == pergunta["resposta"]: + print("\n✅ Correto! Você demonstrou um bom conhecimento sobre feitiços.") + pontos += 1 + else: + print("\n❌ Errado! A resposta correta era:", pergunta["resposta"]) + + self.press_key_to_continue() + + + clear() + print("📜 Aula encerrada! O professor avalia seu desempenho...\n") + + if pontos >= 2: + print("🌟 Excelente! Você acertou todas as perguntas e demonstrou um grande conhecimento em Defesa Contra as Artes das Trevas.") + elif pontos == 1: + print("⚠️ Você acertou apenas 1 pergunta. Precisa treinar mais seus feitiços defensivos!") + else: + print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não ser pego por um bruxo das trevas!") + + self.press_key_to_continue() + + print("\nApós a aula, você sai da sala e continua sua jornada em Hogwarts.") + self.press_key_to_continue() + self.player.id_area = 33 + self.continue_game() + + + def press_key_to_continue(self): print("Pressione qualquer tecla para continuar...\n") @@ -167,6 +245,8 @@ def move_character(self, direction): + + if __name__ == '__main__': game = Game() game.start() \ No newline at end of file diff --git a/app/texts.py b/app/texts.py index e3a911a..cf3d35e 100644 --- a/app/texts.py +++ b/app/texts.py @@ -36,4 +36,27 @@ Há muitos que buscam seu poder, mas nem todos são dignos de controlá-lo. E o mais perigoso, é que ele pode escolher quem o controla." A conversa deixa você com a sensação de que a busca por esse artefato vai muito além do que qualquer um imagina. E, de alguma forma, você sente que está prestes a se envolver em algo muito maior do que imaginava.\n +""" + +texto_do_primeiro_dia = """ +O som do sino ecoa pelos corredores de pedra de Hogwarts, +puxando você de um sono pesado. Sem tempo para pensar em Alistair ou no artefato, +você rapidamente se veste e segue o fluxo de alunos até sua primeira aula: +Defesa Contra as Artes das Trevas.\n +""" + + +texto_aula_defesa_contra_as_artes_das_trevas = """ +A atmosfera na sala está carregada de tensão. +O professor Albus Dumbledore se posiciona diante da turma e inicia a aula com um tom grave, +alertando sobre os perigos dos feitiços das trevas e a importância da defesa contra eles. +Com atenção redobrada, os alunos empunham suas varinhas +e começam a praticar o Expelliarmus contra alvos animados, dando início à intensa lição.\n +""" + +texto_pos_aula_defesa = """ +No fim da aula, enquanto recolhe seus materiais, um estudante de outra casa se aproxima. Edgar Thornwell, um garoto magricela de cabelos bagunçados, puxa assunto ao ver seu olhar intrigado. +"Você tá com uma cara de quem tem perguntas," ele comenta com um sorriso torto. +"Você já ouviu falar sobre um artefato dos fundadores?" você solta, aproveitando a oportunidade. +\n """ \ No newline at end of file From 683d43025f2f9da0846e797bf03651d7f27be7b9 Mon Sep 17 00:00:00 2001 From: pedro Date: Sun, 2 Feb 2025 22:36:55 -0300 Subject: [PATCH 32/51] feat: adicionando as aulas e seus respectivos quizes --- app/game.py | 223 ++++++++++++++++++++++++++++++++++++++++++++++----- app/texts.py | 32 ++++++++ 2 files changed, 236 insertions(+), 19 deletions(-) diff --git a/app/game.py b/app/game.py index 9255556..7ae8e5f 100644 --- a/app/game.py +++ b/app/game.py @@ -151,13 +151,34 @@ def continue_game(self): self.get_current_area() self.get_possibles_directions() direction = input() + anterior_area = self.player.id_area self.move_character(direction) if self.player.id_area == 12: - self.class_Defesa_Contra_as_Artes_das_Trevas() - break - - def class_Defesa_Contra_as_Artes_das_Trevas(self): + self.class_Defesa_Contra_as_Artes_das_Trevas(anterior_area) + if self.player.id_area == 13: + self.class_Pocoes(anterior_area) + if self.player.id_area == 14: + self.class_Herbologia(anterior_area) + if self.player.id_area == 35: + self.class_Historia_da_Magia(anterior_area) + if self.player.id_area == 36: + self.class_Feiticos(anterior_area) + if self.player.id_area == 37: + self.class_Transfiguracao(anterior_area) + + + + def class_Herbologia(self, anterior_area): + clear() + print(texto_aula_herbologia) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em herbologia!\n') + self.press_key_to_continue() + clear() + self.quiz_herbologia(anterior_area) + def class_Defesa_Contra_as_Artes_das_Trevas(self, anterior_area): clear() print(texto_aula_defesa_contra_as_artes_das_trevas) self.press_key_to_continue() @@ -165,9 +186,172 @@ def class_Defesa_Contra_as_Artes_das_Trevas(self): print('Hoje vamos testar os seus conhecimentos em feitiços de defesa!\n') self.press_key_to_continue() clear() - self.quiz_defesa_artes_trevas() + self.quiz_defesa_artes_trevas(anterior_area) + def class_Pocoes(self, anterior_area): + clear() + print(texto_aula_pocoes) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em poções!\n') + self.press_key_to_continue() + clear() + self.quiz_pocoes(anterior_area) + + def class_Historia_da_Magia(self, anterior_area): + clear() + print("\nObs: não está tendo aula\n") + print("\nApós a aula, você sai da sala e continua sua jornada em Hogwarts.") + self.press_key_to_continue() + self.player.id_area = anterior_area + Database.set_area(self.connection, self.player, anterior_area) + + def class_Feiticos(self, anterior_area): + clear() + print(texto_aula_feiticos) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em feitiços!\n') + self.press_key_to_continue() + clear() + self.quiz_feiticos(anterior_area) + + def class_Transfiguracao(self, anterior_area): + clear() + print(texto_aula_feiticos) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em transfiguração!\n') + self.press_key_to_continue() + clear() + self.quiz_transfiguracao(anterior_area) - def quiz_defesa_artes_trevas(self): + def quiz_transfiguracao(self, anterior_area): + perguntas = [ + { + "pergunta": "Qual feitiço é usado para transformar um objeto em outro?", + "opcoes": ["A) Transformato", "B) Avifors", "C) Transfigura", "D) Transmuto"], + "resposta": "C" + }, + { + "pergunta": "Qual feitiço transforma uma pena em um pássaro?", + "opcoes": ["A) Avifors", "B) Flipendo", "C) Engorgio", "D) Reducio"], + "resposta": "A" + }, + { + "pergunta": "Qual é o nome da professora que ensina Transfiguração em Hogwarts?", + "opcoes": ["A) Minerva McGonagall", "B) Pomona Sprout", "C) Filius Flitwick", "D) Severus Snape"], + "resposta": "A" + }, + { + "pergunta": "O que acontece se você falhar em uma transfiguração complexa?", + "opcoes": ["A) O objeto se transforma em um animal", "B) O objeto se desintegra", + "C) A transformação é revertida", "D) A transformação se torna permanente"], + "resposta": "C" + }, + { + "pergunta": "Qual feitiço é usado para transfigurar algo em uma substância maior, como transformar uma bola em um tronco?", + "opcoes": ["A) Engorgio", "B) Reducio", "C) Diffindo", "D) Leviosa"], + "resposta": "A" + } + ] + self.sum_points(perguntas, anterior_area) + + def quiz_feiticos(self, anterior_area): + perguntas = [ + { + "pergunta": "Qual feitiço é usado para levitar objetos?", + "opcoes": ["A) Expelliarmus", "B) Wingardium Leviosa", "C) Stupefy", "D) Lumos"], + "resposta": "B" + }, + { + "pergunta": "Qual feitiço pode ser usado para repelir dementadores?", + "opcoes": ["A) Expecto Patronum", "B) Protego", "C) Riddikulus", "D) Obliviate"], + "resposta": "A" + }, + { + "pergunta": "Qual feitiço é utilizado para abrir fechaduras trancadas?", + "opcoes": ["A) Alohomora", "B) Reducto", "C) Bombarda", "D) Colloportus"], + "resposta": "A" + }, + { + "pergunta": "Qual é o efeito do feitiço 'Stupefy'?", + "opcoes": ["A) Paralisa o alvo", "B) Cega temporariamente o inimigo", "C) Lança o alvo para trás", + "D) Cria um escudo protetor"], + "resposta": "A" + }, + { + "pergunta": "Qual desses feitiços é considerado uma Maldição Imperdoável?", + "opcoes": ["A) Crucio", "B) Expelliarmus", "C) Incendio", "D) Reparo"], + "resposta": "A" + } + ] + self.sum_points(perguntas, anterior_area) + + def quiz_pocoes(self, anterior_area): + perguntas = [ + { + "pergunta": "Qual ingrediente é essencial para a Poção Polissuco?", + "opcoes": ["A) Asfódelo", "B) Folha de Mandrágora", "C) Besouro Triturado", + "D) Pedaço da pessoa a ser transformada"], + "resposta": "D" + }, + { + "pergunta": "Qual é o efeito da Poção do Morto-Vivo?", + "opcoes": ["A) Aumenta a força", "B) Faz a pessoa dormir profundamente", "C) Torna a pessoa invisível", + "D) Concede sorte extrema"], + "resposta": "B" + }, + { + "pergunta": "O que acontece se adicionar espinhos de porco-espinho à Poção para Feridas antes de remover o caldeirão do fogo?", + "opcoes": ["A) A poção explodirá", "B) A poção perderá seu efeito", "C) A poção ficará venenosa", + "D) A poção se tornará invisível"], + "resposta": "A" + }, + { + "pergunta": "Qual poção é conhecida por conceder sorte extrema por um período limitado?", + "opcoes": ["A) Poção do Morto-Vivo", "B) Amortentia", "C) Felix Felicis", "D) Veritaserum"], + "resposta": "C" + }, + { + "pergunta": "Qual destas poções é um poderoso soro da verdade?", + "opcoes": ["A) Veritaserum", "B) Poção Polissuco", "C) Felix Felicis", "D) Essência de Ditamno"], + "resposta": "A" + } + ] + self.sum_points(perguntas, anterior_area) + def quiz_herbologia(self, anterior_area): + perguntas = [ + { + "pergunta": "Qual planta mágica emite um grito mortal ao ser arrancada do solo?", + "opcoes": ["A) Mandrágora", "B) Visgo do Diabo", "C) Tentácula Venenosa", "D) Dedosdemel"], + "resposta": "A" + }, + { + "pergunta": "Qual dessas plantas pode estrangular uma pessoa se for provocada?", + "opcoes": ["A) Mimbulus Mimbletonia", "B) Tentácula Venenosa", "C) Salgueiro Lutador", "D) Dedaleira"], + "resposta": "B" + }, + { + "pergunta": "O que deve ser feito para acalmar o Visgo do Diabo?", + "opcoes": ["A) Jogar água", "B) Acender uma luz", "C) Cantar para ele", + "D) Jogar pó de chifre de unicórnio"], + "resposta": "B" + }, + { + "pergunta": "Qual dessas plantas libera um líquido fedorento quando tocada?", + "opcoes": ["A) Mimbulus Mimbletonia", "B) Berrador", "C) Erva-dos-Sonhos", "D) Snargaluff"], + "resposta": "A" + }, + { + "pergunta": "Para que serve a Essência de Ditamno?", + "opcoes": ["A) Curar ferimentos", "B) Melhorar a visão", "C) Ampliar os sentidos", + "D) Fortalecer o sistema imunológico"], + "resposta": "A" + } + ] + self.sum_points(perguntas, anterior_area) + + def quiz_defesa_artes_trevas(self, anterior_area): perguntas = [ { @@ -186,6 +370,9 @@ def quiz_defesa_artes_trevas(self): "resposta": "A" } ] + self.sum_points(perguntas, anterior_area) + + def sum_points(self, perguntas, anterior_area): pontos = 0 @@ -194,7 +381,7 @@ def quiz_defesa_artes_trevas(self): print("🧙‍♂️ Professor: " + pergunta["pergunta"] + "\n") for opcao in pergunta["opcoes"]: print(opcao) - + resposta_usuario = input("\nDigite a letra da resposta correta: ").strip().upper() if resposta_usuario == pergunta["resposta"]: @@ -202,26 +389,27 @@ def quiz_defesa_artes_trevas(self): pontos += 1 else: print("\n❌ Errado! A resposta correta era:", pergunta["resposta"]) - + self.press_key_to_continue() clear() print("📜 Aula encerrada! O professor avalia seu desempenho...\n") - if pontos >= 2: - print("🌟 Excelente! Você acertou todas as perguntas e demonstrou um grande conhecimento em Defesa Contra as Artes das Trevas.") - elif pontos == 1: - print("⚠️ Você acertou apenas 1 pergunta. Precisa treinar mais seus feitiços defensivos!") - else: - print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não ser pego por um bruxo das trevas!") + if pontos >= perguntas.len()/2: + print("🌟 Excelente! Você acertou mais da metade das perguntas e demonstrou um grande conhecimento na matéria") + elif pontos <= perguntas.len()/2: + print("⚠️ Você acertou menos da metade das pergunta. Precisa estudar mais!") + elif pontos == 0: + print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não reprovar!") self.press_key_to_continue() print("\nApós a aula, você sai da sala e continua sua jornada em Hogwarts.") self.press_key_to_continue() - self.player.id_area = 33 - self.continue_game() + self.player.id_area = anterior_area + Database.set_area(self.connection, self.player, anterior_area) + @@ -244,9 +432,6 @@ def move_character(self, direction): clear() - - - if __name__ == '__main__': game = Game() game.start() \ No newline at end of file diff --git a/app/texts.py b/app/texts.py index cf3d35e..3a2baa3 100644 --- a/app/texts.py +++ b/app/texts.py @@ -59,4 +59,36 @@ "Você tá com uma cara de quem tem perguntas," ele comenta com um sorriso torto. "Você já ouviu falar sobre um artefato dos fundadores?" você solta, aproveitando a oportunidade. \n +""" + +texto_aula_herbologia = """ +O aroma terroso das plantas preenche a estufa iluminada pelo sol da manhã. +A professora Pomona Sprout, com suas luvas de couro desgastadas, orienta os alunos sobre o manuseio das mandrágoras, alertando para os riscos de seu grito ensurdecedor. +Com cuidado, os estudantes ajustam seus protetores auriculares e começam a retirar as plantas dos vasos, sentindo a terra úmida entre os dedos. +As folhas vibram com energia mágica, enquanto raízes retorcidas se debatem no ar. +Cada aluno trabalha com concentração, sabendo que na Herbologia, um pequeno erro pode ter grandes consequências. +""" + +texto_aula_pocoes = """ +O cheiro de ervas e ingredientes exóticos paira no ar enquanto os alunos se posicionam diante de seus caldeirões fumegantes. +A professora Miriam Ravenshadow percorre a sala com passos firmes, seus olhos atentos avaliando cada mistura em progresso. +Com um tom sério, ela reforça a necessidade de precisão absoluta: uma gota a mais de essência de asfódelo pode transformar uma poção curativa em um veneno perigoso. +Os estudantes medem, cortam e misturam seus ingredientes com extrema cautela, observando as mudanças de cor e textura em suas preparações. +A magia líquida dança nos caldeirões, e a sala inteira parece vibrar com a alquimia em ação. +""" + +texto_aula_feiticos = """ +A sala de aula está repleta de expectativa enquanto os alunos empunham suas varinhas, prontos para aprimorar suas habilidades mágicas. +O professor Edward Whitmore caminha pelo corredor, observando cada movimento com olhos atentos, corrigindo posturas e entonações. +"A precisão na pronúncia e o gesto adequado são essenciais para a execução de um feitiço eficaz", ele enfatiza, demonstrando com um leve movimento da varinha. +Os estudantes repetem suas tentativas, concentrando-se no encantamento *Wingardium Leviosa*, vendo penas começarem a levitar com hesitação. +Entre faíscas esporádicas e sorrisos de satisfação, a magia flui pelo ar, transformando a aula em um espetáculo de aprendizado e controle. +""" + +texto_aula_transfiguracao = """ +A sala está silenciosa, apenas o som de páginas viradas e respirações contidas preenche o espaço enquanto os alunos aguardam a demonstração. +A professora Celeste Montclair ergue a varinha com precisão e, com um movimento elegante, transforma um pequeno cálice de estanho em um pássaro dourado que esvoaça pela sala. +"Transfiguração exige foco absoluto e compreensão da essência do objeto", explica, sua voz firme e controlada. +Os estudantes franzem a testa em concentração, tentando replicar o feitiço, mas muitos dos objetos permanecem apenas parcialmente alterados—orelhas em xícaras, patas onde deveriam estar alças. +Entre tentativas e erros, a sala se enche de murmúrios encantados e olhares determinados, pois todos sabem que dominar a transfiguração é uma das maiores provas da verdadeira habilidade mágica. """ \ No newline at end of file From 7968a110e2a4279551819ee8d89c652c18173beb Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Mon, 3 Feb 2025 12:59:53 -0300 Subject: [PATCH 33/51] feat: add atributo em PC --- sql/query_create_table.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/query_create_table.sql b/sql/query_create_table.sql index 8d84d91..afbfcf5 100644 --- a/sql/query_create_table.sql +++ b/sql/query_create_table.sql @@ -59,6 +59,7 @@ CREATE TABLE IF NOT EXISTS PC ( nome VARCHAR(50) NOT NULL UNIQUE, idCasa INT, varinha TEXT, + xp INT NOT NULL, FOREIGN KEY (idJogador) REFERENCES Personagem (idPersonagem), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), From c3d4c112e59da42a256f709ebbe2912494dc34cc Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Mon, 3 Feb 2025 14:15:59 -0300 Subject: [PATCH 34/51] fix: alterando tipo de dado nos atributos --- sql/query_create_table.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/query_create_table.sql b/sql/query_create_table.sql index afbfcf5..08833da 100644 --- a/sql/query_create_table.sql +++ b/sql/query_create_table.sql @@ -48,7 +48,7 @@ CREATE TABLE IF NOT EXISTS Personagem ( -- 'A' -> Aluno -- 'P' -> Professor -- 'F' -> FredEJorge - tipoPersonagem VARCHAR(1) NOT NULL CHECK (tipoPersonagem IN('J', 'I', 'A', 'P', 'F')) + tipoPersonagem CHAR(1) NOT NULL CHECK (tipoPersonagem IN('J', 'I', 'A', 'P', 'F')) ); CREATE TABLE IF NOT EXISTS PC ( @@ -188,7 +188,7 @@ CREATE TABLE IF NOT EXISTS Item ( -- 'P' -> Poção -- 'L' -> Livro - tipoItem VARCHAR(1) NOT NULL CHECK (tipoItem IN ('P', 'L')) + tipoItem CHAR(1) NOT NULL CHECK (tipoItem IN ('P', 'L')) ); CREATE TABLE IF NOT EXISTS Livro ( From 381cc9749e12aea315ac1ef963b090efa8d24f18 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Mon, 3 Feb 2025 14:16:10 -0300 Subject: [PATCH 35/51] feat: add novos triggers --- sql/query_triggers_stored_procedures.sql | 45 ++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/sql/query_triggers_stored_procedures.sql b/sql/query_triggers_stored_procedures.sql index b6697ca..56c5e74 100644 --- a/sql/query_triggers_stored_procedures.sql +++ b/sql/query_triggers_stored_procedures.sql @@ -276,3 +276,48 @@ $$ LANGUAGE plpgsql; CREATE TRIGGER valida_nivel_habilidade BEFORE INSERT ON PersonagemPossuiHabilidade FOR EACH ROW EXECUTE PROCEDURE valida_nivel_habilidade(); + +-- Trigger para atualizar o nível do jogador +CREATE OR REPLACE FUNCTION update_level() RETURNS TRIGGER AS $$ +DECLARE + required_xp INT; +BEGIN + LOOP + required_xp := NEW.nivel*100; + + IF NEW.xp > required_xp THEN + NEW.nivel := NEW.nivel + 1; + NEW.XP := OLD.nivel - required_xp; + ELSE + EXIT; + END IF; + END LOOP; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER update_level +BEFORE INSERT OR UPDATE OF xp ON PC +FOR EACH ROW EXECUTE PROCEDURE update_level(); + +-- Trigger para verificar se a interação está correta +CREATE OR REPLACE FUNCTION check_interacao() RETURNS TRIGGER AS $$ +DECLARE + type_personagem CHAR(1); +BEGIN + SELECT p.tipoPersonagem INTO type_personagem + FROM Personagem p + WHERE p.idPersonagem = NEW.idNPC; + + IF type_personagem = 'J' THEN + RAISE EXCEPTION 'O tipo do NPC não pode ser Jogador'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_interacao +BEFORE INSERT OR UPDATE ON Interacao +FOR EACH ROW EXECUTE PROCEDURE check_interacao(); \ No newline at end of file From a1661064205874c482e86854b50470c82356e7a6 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Mon, 3 Feb 2025 14:40:12 -0300 Subject: [PATCH 36/51] =?UTF-8?q?feat:=20add=20controle=20de=20acesso=20po?= =?UTF-8?q?r=20usu=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/query_control_acess.sql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 sql/query_control_acess.sql diff --git a/sql/query_control_acess.sql b/sql/query_control_acess.sql new file mode 100644 index 0000000..30a7dbf --- /dev/null +++ b/sql/query_control_acess.sql @@ -0,0 +1,18 @@ +CREATE ROLE adm WITH SUPERUSER; +CREATE USER admin_hp WITH PASSWORD 'hpadmin1234' IN ROLE adm; + +CREATE ROLE owner_game; +GRANT SELECT, INSERT, UPDATE, DELETE + ON Mapa, Regiao, Area, Casa, Vantagem, Personagem, PC, + Inimigo, Professor, Aluno, FredEJorge, ProfessorCoordenaCasa, + Interacao, AlunoPorCasa, VantagemCasa, Habilidade, PersonagemPossuiHabilidade, + Inventario, Item, Livro, Pocao, Missao, Participantes, Feitico, LivroEnsinaFeitico +TO owner_game WITH GRANT OPTION; + +CREATE USER owner_hp WITH PASSWORD 'hpowner1234' IN ROLE owner_game; + +CREATE ROLE player; +GRANT SELECT + ON vStatusJogador, vInimigosPorArea, vFeiticosHabilidade, vInventario, vConexoesArea +TO player; +CREATE USER player_hp WITH PASSWORD 'hpplayer1234' IN ROLE player; \ No newline at end of file From efeb222788db3b23a91f9a18334414e453f934f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Mon, 3 Feb 2025 15:49:59 -0300 Subject: [PATCH 37/51] corrigindo erros --- app/__pycache__/classes.cpython-310.pyc | Bin 1906 -> 1906 bytes app/__pycache__/database.cpython-310.pyc | Bin 4836 -> 4836 bytes app/__pycache__/texts.cpython-310.pyc | Bin 4841 -> 7819 bytes app/game.py | 4 ++-- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/__pycache__/classes.cpython-310.pyc b/app/__pycache__/classes.cpython-310.pyc index adf99c46abb8b8d20b47ed01f5ccb10d4344d80c..e96684b7c2602bfb2cd1a15c97e70c6aa0420993 100644 GIT binary patch delta 20 acmeyw_lb`?pO=@50SI_F7jEQEX9oZ_X#{@& delta 20 acmeyw_lb`?pO=@50SMA6=WparX9oZ~bp=NN diff --git a/app/__pycache__/database.cpython-310.pyc b/app/__pycache__/database.cpython-310.pyc index c7ec6f276f5306464ac28ecf65f565b373ebf0dc..5aa4ff090374472633de61f267d42d6b6cf419ce 100644 GIT binary patch delta 20 acmaE&`b3pGpO=@50SI_F7jERfDFgsGfCUZ! delta 20 acmaE&`b3pGpO=@50SMA6=Wpb`DFgsLj0M&J diff --git a/app/__pycache__/texts.cpython-310.pyc b/app/__pycache__/texts.cpython-310.pyc index 47bc493d8e98782d36e5d083d5f77887434a5bba..91bb0e3d10bf4d87d3041d441374b2ff94415537 100644 GIT binary patch delta 3061 zcmZXW&yN&E6vs#0$g(Rah>0eWlq4R&b>2?rN&Khs|Ev zyC=lN#M_1g!Gwb$Ubyyuu?G*{y!Z!r^7E>8*ja_JGh1}OAKxGE)n6a{@aZ{!_Uy)l zKd+xTnE!L>;kox-*?RclrHebSm8W-3m+L$0<(Zu`<;LyFmCfI79GoBeuTM=T8@G%N zzP6^55PbBew9&McZ94r7B2BR?#u|xTKeNVFeeD`sTGLA9P4pEnnA$eGs`O4S6vF0{MeYa%_Uz^wywCWf9EM?%R4%h<+Nx zc+JsAak)T#DZ_X$Cl4>#N0GeEtUy;1l0H4< zMLKd?T?W~j@kLGEfr>h9P3z=w;EQJFt6icj+%ynbF_T8Z+<`Iey25U8aKEQcZ-O14 z?NbWbeJF?sSVF9+?W8sh`Ls{vDnV(wV5gSwDQw|~rqBZH_+)$x1kp}Ki@e{9fwnIs zOnv3ayk+_twmB!Hio~=YV9^V}f;trxzKJ|A{@N7I(n$YvRu0n*k}tr~*u_;I+aLIi8(9y_ST zT+%bIWSF&m8)xJ5QjM4?fsROm8Y$|ltxwz{^I$u-NHtOv2q={U?YlXa-`==&LjJXs zQmbJx75ZCtc;tr_29BErfNh5*Y z)wxs)he}*+Rr1yN?7ljb5u*{1#|g55bjh4U4=Ny{fNHi+NY$zM2~radhO*cZ=pUyh zA5V-SRbpPT#Mn9n#sgStD*<&*Wv`W@J3{Zsc#r;m4n{>C12c)@PKCq!QcXnOJo6Hl-WW}9nuqItHs7|1n_2w6@mO%%AqJKi0 zi8M$}(+0z+Fx7P`+-3*SYZt56_rX`0$voL1l`K$L>PcII?1c@A zLxSssE}=zqvZ-VSM8uv@RpV0TPo8B2{)ic?qoqN=E&G2NDsv@=P1)kBhAxJ*9{E{80cy?)@kThQaQ~)jit-$K~ z89-HMVcyYp-h(c~LOpZD@k_{5YcDSa*HA=ccHbmJQ8Dz{40ATlOWG6Y$KsTHae%jD zjSyl!=!{>*PxZH4QpI>sImQ63l8n0vRVPeoJVvfNrsU?KNb0haxbSqAjF%UIf_nMe zM2(yCVAiiMo54X^q4q$FSD3X7<92_j{h=xfC zV_6$`8go}_7s#ks?!XiO{Qf568_Kct(d-l$qXFo!y?&*;6S zPDGYoAE1OITdi<6K1~Zzway|$e>w@9T;#*% dqhBt3_RdAVu1(g?tZlAcTwCYwY5lpr{x9r#dPM*L delta 75 zcmeCSeW}Wq&&$ij00e#K=BFnJP2`hdl$oe4%M#3>$-XgWp&+xLCfj5K*@c`d8H(6} b%8J-0o5= perguntas.len()/2: + if pontos >= len(perguntas)/2: print("🌟 Excelente! Você acertou mais da metade das perguntas e demonstrou um grande conhecimento na matéria") - elif pontos <= perguntas.len()/2: + elif pontos <= len(perguntas)/2: print("⚠️ Você acertou menos da metade das pergunta. Precisa estudar mais!") elif pontos == 0: print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não reprovar!") From a703b990adfd6db439ead3e84d8fc2c4aa651ff7 Mon Sep 17 00:00:00 2001 From: pedro Date: Sun, 2 Feb 2025 10:59:09 -0300 Subject: [PATCH 38/51] =?UTF-8?q?feat:=20adicionando=20a=20possibilidade?= =?UTF-8?q?=20de=20percorrer=20o=20mapa=20ap=C3=B3s=20o=20in=C3=ADcio=20do?= =?UTF-8?q?=20primeiro=20dia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/game.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/game.py b/app/game.py index 9d891a2..5ea03b4 100644 --- a/app/game.py +++ b/app/game.py @@ -116,6 +116,7 @@ def new_game(self): idarea = 17 elif self.player.idHouse == 4: #lufa-lufa idarea = 18 + self.player.id_area = idarea Database.set_area(self.connection, self.player, idarea) break else: @@ -137,13 +138,12 @@ def choice_house(self): f"E toda a mesa da casa entrou em euforia com a sua seleção!\n") def continue_game(self): - clear() - self.get_current_area() - self.get_possibles_directions() - - - - + while True: + clear() + self.get_current_area() + self.get_possibles_directions() + direction = input() + self.move_character(direction) def press_key_to_continue(self): From 793c80267d86b2fff59ae9c67141bca195287223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Sun, 2 Feb 2025 11:18:33 -0300 Subject: [PATCH 39/51] adicionando um press_key_to_continue --- app/__pycache__/classes.cpython-310.pyc | Bin 1906 -> 1906 bytes app/__pycache__/database.cpython-310.pyc | Bin 4836 -> 4836 bytes app/game.py | 2 ++ 3 files changed, 2 insertions(+) diff --git a/app/__pycache__/classes.cpython-310.pyc b/app/__pycache__/classes.cpython-310.pyc index 2a000b316038ac699631e2a62bfcdc97298dff9a..adf99c46abb8b8d20b47ed01f5ccb10d4344d80c 100644 GIT binary patch delta 20 acmeyw_lb`?pO=@50SMA6=WparX9oZ~bp=NN delta 20 acmeyw_lb`?pO=@50SL4s=WXOpX9oZ|69nr3 diff --git a/app/__pycache__/database.cpython-310.pyc b/app/__pycache__/database.cpython-310.pyc index 5a05a07e3f081fa5f220be640b6f1fae6051942c..c7ec6f276f5306464ac28ecf65f565b373ebf0dc 100644 GIT binary patch delta 20 acmaE&`b3pGpO=@50SMA6=Wpb`DFgsLj0M&J delta 20 acmaE&`b3pGpO=@50SH23=56G@DFgsKTLq>7 diff --git a/app/game.py b/app/game.py index 5ea03b4..42805b8 100644 --- a/app/game.py +++ b/app/game.py @@ -105,9 +105,11 @@ def new_game(self): clear() print(texto_pos_selecao) self.press_key_to_continue() + clear() print(texto_inicial_sobre_o_artefato) print("Assim, curioso, você foi dormir, pronto para o primeiro dia de aula em Hogwarts.\n") print("O dia amanheceu e o seu primeiro dia de aula em hogwarts começou!") + self.press_key_to_continue() if self.player.idHouse == 1: #grifinória idarea = 15 elif self.player.idHouse == 3: #corvinal From 9ad940679a54d93862a95e9e0966b51a8608937b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Sun, 2 Feb 2025 17:03:38 -0300 Subject: [PATCH 40/51] adicionando aula de defesa contra artes das trevas --- app/__pycache__/texts.cpython-310.pyc | Bin 3693 -> 4841 bytes app/game.py | 80 ++++++++++++++++++++++++++ app/texts.py | 23 ++++++++ 3 files changed, 103 insertions(+) diff --git a/app/__pycache__/texts.cpython-310.pyc b/app/__pycache__/texts.cpython-310.pyc index 92821623725c342c3c595e4237fd813e5c30bbe8..47bc493d8e98782d36e5d083d5f77887434a5bba 100644 GIT binary patch delta 1264 zcmYjRyKdA#6x}2X1VbW(pg>A-6^R0|Bq*Yy0HP3y3JMU#Hs-Ep)){1bHuG4vb481U z@&UYx2qX%=!967fe?Y+xP;u@!5v;W9@z`_jx#yg_zc+qeU$<*(*#Mt6-`|xlF27yh z*xbOK8jJ^OX}qMC$IEJEyrPEVp*k}@qs~4Z+&K5`!O>b9mzM^E>-T&eYnV7RQS3Qua_!!G-p06J*oVE-IlRtlDQz&)IKfS$r)*>;k2>eyZ_e z!{oVQLfP&E6$~XxR;mAhCb~~(4$94(1-!Qo4Nan_hq0biNi!imv)&ZO0!tZ|MgS0^ zs{u=PVMC=rF$wTKsRDIL%CDC0`Ikks{d;?T2)e9n}(DtxEf1k)YM9a;&g6TmVV zsO>`cu@UsdI0;bn0_aM6FyBKRZqZ41j8;f&o;dV3k}@Zf!nW8PFdU7jFlT3Q=PA=d zR(HpEB64#ukO!9RFA$r`u&W`&Nja|O0@#=uaX?~JYREL*SLo7G_Z~Wko=g>*5mjNv zLdoX$V97bp;Tnk$rND@${<^WCD02=DStcVICH1vvMc)`Gi6%3~qV6jE} zss!C<2iCRCD-cd6v1Nf>bLmW>;X42do}@9Da2cUf-+&|@De_UMFp{sGFd!#_v;w#-+q(sbp$+d2DOIQSfq%=<{5f?yQ#|4w`!xO4cAN+?riPcf|y75)~{c>h?jgrz!-oVHJ delta 82 zcmaE<`c{T7pO=@50SNjz=A}R7oyaF6CIIB6Fhnt=Fh((^Fhwz?Fb6YevTXF3%**Vj h$vpXkpeyG}h9VZAsv?%jvxMxq*nmtH1{O{ZZU6=y5Rw1@ diff --git a/app/game.py b/app/game.py index 42805b8..9255556 100644 --- a/app/game.py +++ b/app/game.py @@ -84,6 +84,7 @@ def load_character(self): def new_game(self): + clear() print(f' Bem-vindo(a) {self.player.name}!\n' f'Você é o mais novo aluno da Escola de Magia e Bruxaria de Hogwarts.\n' @@ -120,6 +121,11 @@ def new_game(self): idarea = 18 self.player.id_area = idarea Database.set_area(self.connection, self.player, idarea) + clear() + print(texto_do_primeiro_dia) + print('Vá para a aula de Defesa Contra a Artes das Trevas') + self.press_key_to_continue() + clear() break else: clear() @@ -147,6 +153,78 @@ def continue_game(self): direction = input() self.move_character(direction) + if self.player.id_area == 12: + self.class_Defesa_Contra_as_Artes_das_Trevas() + break + + def class_Defesa_Contra_as_Artes_das_Trevas(self): + clear() + print(texto_aula_defesa_contra_as_artes_das_trevas) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em feitiços de defesa!\n') + self.press_key_to_continue() + clear() + self.quiz_defesa_artes_trevas() + + def quiz_defesa_artes_trevas(self): + perguntas = [ + + { + "pergunta": "Qual feitiço é usado para desarmar um oponente?", + "opcoes": ["A) Expelliarmus", "B) Avada Kedavra", "C) Crucio", "D) Accio"], + "resposta": "A" + }, + { + "pergunta": "Qual feitiço conjura um escudo protetor?", + "opcoes": ["A) Expecto Patronum", "B) Protego", "C) Lumos", "D) Stupefy"], + "resposta": "B" + }, + { + "pergunta": "Qual feitiço invoca um Patrono?", + "opcoes": ["A) Expecto Patronum", "B) Wingardium Leviosa", "C) Petrificus Totalus", "D) Obliviate"], + "resposta": "A" + } + ] + + pontos = 0 + + for pergunta in perguntas: + clear() + print("🧙‍♂️ Professor: " + pergunta["pergunta"] + "\n") + for opcao in pergunta["opcoes"]: + print(opcao) + + resposta_usuario = input("\nDigite a letra da resposta correta: ").strip().upper() + + if resposta_usuario == pergunta["resposta"]: + print("\n✅ Correto! Você demonstrou um bom conhecimento sobre feitiços.") + pontos += 1 + else: + print("\n❌ Errado! A resposta correta era:", pergunta["resposta"]) + + self.press_key_to_continue() + + + clear() + print("📜 Aula encerrada! O professor avalia seu desempenho...\n") + + if pontos >= 2: + print("🌟 Excelente! Você acertou todas as perguntas e demonstrou um grande conhecimento em Defesa Contra as Artes das Trevas.") + elif pontos == 1: + print("⚠️ Você acertou apenas 1 pergunta. Precisa treinar mais seus feitiços defensivos!") + else: + print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não ser pego por um bruxo das trevas!") + + self.press_key_to_continue() + + print("\nApós a aula, você sai da sala e continua sua jornada em Hogwarts.") + self.press_key_to_continue() + self.player.id_area = 33 + self.continue_game() + + + def press_key_to_continue(self): print("Pressione qualquer tecla para continuar...\n") @@ -167,6 +245,8 @@ def move_character(self, direction): + + if __name__ == '__main__': game = Game() game.start() \ No newline at end of file diff --git a/app/texts.py b/app/texts.py index e3a911a..cf3d35e 100644 --- a/app/texts.py +++ b/app/texts.py @@ -36,4 +36,27 @@ Há muitos que buscam seu poder, mas nem todos são dignos de controlá-lo. E o mais perigoso, é que ele pode escolher quem o controla." A conversa deixa você com a sensação de que a busca por esse artefato vai muito além do que qualquer um imagina. E, de alguma forma, você sente que está prestes a se envolver em algo muito maior do que imaginava.\n +""" + +texto_do_primeiro_dia = """ +O som do sino ecoa pelos corredores de pedra de Hogwarts, +puxando você de um sono pesado. Sem tempo para pensar em Alistair ou no artefato, +você rapidamente se veste e segue o fluxo de alunos até sua primeira aula: +Defesa Contra as Artes das Trevas.\n +""" + + +texto_aula_defesa_contra_as_artes_das_trevas = """ +A atmosfera na sala está carregada de tensão. +O professor Albus Dumbledore se posiciona diante da turma e inicia a aula com um tom grave, +alertando sobre os perigos dos feitiços das trevas e a importância da defesa contra eles. +Com atenção redobrada, os alunos empunham suas varinhas +e começam a praticar o Expelliarmus contra alvos animados, dando início à intensa lição.\n +""" + +texto_pos_aula_defesa = """ +No fim da aula, enquanto recolhe seus materiais, um estudante de outra casa se aproxima. Edgar Thornwell, um garoto magricela de cabelos bagunçados, puxa assunto ao ver seu olhar intrigado. +"Você tá com uma cara de quem tem perguntas," ele comenta com um sorriso torto. +"Você já ouviu falar sobre um artefato dos fundadores?" você solta, aproveitando a oportunidade. +\n """ \ No newline at end of file From fe79a1d6176c8160d5243bd46848cf2cbb37b713 Mon Sep 17 00:00:00 2001 From: pedro Date: Sun, 2 Feb 2025 22:36:55 -0300 Subject: [PATCH 41/51] feat: adicionando as aulas e seus respectivos quizes --- app/game.py | 223 ++++++++++++++++++++++++++++++++++++++++++++++----- app/texts.py | 32 ++++++++ 2 files changed, 236 insertions(+), 19 deletions(-) diff --git a/app/game.py b/app/game.py index 9255556..7ae8e5f 100644 --- a/app/game.py +++ b/app/game.py @@ -151,13 +151,34 @@ def continue_game(self): self.get_current_area() self.get_possibles_directions() direction = input() + anterior_area = self.player.id_area self.move_character(direction) if self.player.id_area == 12: - self.class_Defesa_Contra_as_Artes_das_Trevas() - break - - def class_Defesa_Contra_as_Artes_das_Trevas(self): + self.class_Defesa_Contra_as_Artes_das_Trevas(anterior_area) + if self.player.id_area == 13: + self.class_Pocoes(anterior_area) + if self.player.id_area == 14: + self.class_Herbologia(anterior_area) + if self.player.id_area == 35: + self.class_Historia_da_Magia(anterior_area) + if self.player.id_area == 36: + self.class_Feiticos(anterior_area) + if self.player.id_area == 37: + self.class_Transfiguracao(anterior_area) + + + + def class_Herbologia(self, anterior_area): + clear() + print(texto_aula_herbologia) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em herbologia!\n') + self.press_key_to_continue() + clear() + self.quiz_herbologia(anterior_area) + def class_Defesa_Contra_as_Artes_das_Trevas(self, anterior_area): clear() print(texto_aula_defesa_contra_as_artes_das_trevas) self.press_key_to_continue() @@ -165,9 +186,172 @@ def class_Defesa_Contra_as_Artes_das_Trevas(self): print('Hoje vamos testar os seus conhecimentos em feitiços de defesa!\n') self.press_key_to_continue() clear() - self.quiz_defesa_artes_trevas() + self.quiz_defesa_artes_trevas(anterior_area) + def class_Pocoes(self, anterior_area): + clear() + print(texto_aula_pocoes) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em poções!\n') + self.press_key_to_continue() + clear() + self.quiz_pocoes(anterior_area) + + def class_Historia_da_Magia(self, anterior_area): + clear() + print("\nObs: não está tendo aula\n") + print("\nApós a aula, você sai da sala e continua sua jornada em Hogwarts.") + self.press_key_to_continue() + self.player.id_area = anterior_area + Database.set_area(self.connection, self.player, anterior_area) + + def class_Feiticos(self, anterior_area): + clear() + print(texto_aula_feiticos) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em feitiços!\n') + self.press_key_to_continue() + clear() + self.quiz_feiticos(anterior_area) + + def class_Transfiguracao(self, anterior_area): + clear() + print(texto_aula_feiticos) + self.press_key_to_continue() + clear() + print('Hoje vamos testar os seus conhecimentos em transfiguração!\n') + self.press_key_to_continue() + clear() + self.quiz_transfiguracao(anterior_area) - def quiz_defesa_artes_trevas(self): + def quiz_transfiguracao(self, anterior_area): + perguntas = [ + { + "pergunta": "Qual feitiço é usado para transformar um objeto em outro?", + "opcoes": ["A) Transformato", "B) Avifors", "C) Transfigura", "D) Transmuto"], + "resposta": "C" + }, + { + "pergunta": "Qual feitiço transforma uma pena em um pássaro?", + "opcoes": ["A) Avifors", "B) Flipendo", "C) Engorgio", "D) Reducio"], + "resposta": "A" + }, + { + "pergunta": "Qual é o nome da professora que ensina Transfiguração em Hogwarts?", + "opcoes": ["A) Minerva McGonagall", "B) Pomona Sprout", "C) Filius Flitwick", "D) Severus Snape"], + "resposta": "A" + }, + { + "pergunta": "O que acontece se você falhar em uma transfiguração complexa?", + "opcoes": ["A) O objeto se transforma em um animal", "B) O objeto se desintegra", + "C) A transformação é revertida", "D) A transformação se torna permanente"], + "resposta": "C" + }, + { + "pergunta": "Qual feitiço é usado para transfigurar algo em uma substância maior, como transformar uma bola em um tronco?", + "opcoes": ["A) Engorgio", "B) Reducio", "C) Diffindo", "D) Leviosa"], + "resposta": "A" + } + ] + self.sum_points(perguntas, anterior_area) + + def quiz_feiticos(self, anterior_area): + perguntas = [ + { + "pergunta": "Qual feitiço é usado para levitar objetos?", + "opcoes": ["A) Expelliarmus", "B) Wingardium Leviosa", "C) Stupefy", "D) Lumos"], + "resposta": "B" + }, + { + "pergunta": "Qual feitiço pode ser usado para repelir dementadores?", + "opcoes": ["A) Expecto Patronum", "B) Protego", "C) Riddikulus", "D) Obliviate"], + "resposta": "A" + }, + { + "pergunta": "Qual feitiço é utilizado para abrir fechaduras trancadas?", + "opcoes": ["A) Alohomora", "B) Reducto", "C) Bombarda", "D) Colloportus"], + "resposta": "A" + }, + { + "pergunta": "Qual é o efeito do feitiço 'Stupefy'?", + "opcoes": ["A) Paralisa o alvo", "B) Cega temporariamente o inimigo", "C) Lança o alvo para trás", + "D) Cria um escudo protetor"], + "resposta": "A" + }, + { + "pergunta": "Qual desses feitiços é considerado uma Maldição Imperdoável?", + "opcoes": ["A) Crucio", "B) Expelliarmus", "C) Incendio", "D) Reparo"], + "resposta": "A" + } + ] + self.sum_points(perguntas, anterior_area) + + def quiz_pocoes(self, anterior_area): + perguntas = [ + { + "pergunta": "Qual ingrediente é essencial para a Poção Polissuco?", + "opcoes": ["A) Asfódelo", "B) Folha de Mandrágora", "C) Besouro Triturado", + "D) Pedaço da pessoa a ser transformada"], + "resposta": "D" + }, + { + "pergunta": "Qual é o efeito da Poção do Morto-Vivo?", + "opcoes": ["A) Aumenta a força", "B) Faz a pessoa dormir profundamente", "C) Torna a pessoa invisível", + "D) Concede sorte extrema"], + "resposta": "B" + }, + { + "pergunta": "O que acontece se adicionar espinhos de porco-espinho à Poção para Feridas antes de remover o caldeirão do fogo?", + "opcoes": ["A) A poção explodirá", "B) A poção perderá seu efeito", "C) A poção ficará venenosa", + "D) A poção se tornará invisível"], + "resposta": "A" + }, + { + "pergunta": "Qual poção é conhecida por conceder sorte extrema por um período limitado?", + "opcoes": ["A) Poção do Morto-Vivo", "B) Amortentia", "C) Felix Felicis", "D) Veritaserum"], + "resposta": "C" + }, + { + "pergunta": "Qual destas poções é um poderoso soro da verdade?", + "opcoes": ["A) Veritaserum", "B) Poção Polissuco", "C) Felix Felicis", "D) Essência de Ditamno"], + "resposta": "A" + } + ] + self.sum_points(perguntas, anterior_area) + def quiz_herbologia(self, anterior_area): + perguntas = [ + { + "pergunta": "Qual planta mágica emite um grito mortal ao ser arrancada do solo?", + "opcoes": ["A) Mandrágora", "B) Visgo do Diabo", "C) Tentácula Venenosa", "D) Dedosdemel"], + "resposta": "A" + }, + { + "pergunta": "Qual dessas plantas pode estrangular uma pessoa se for provocada?", + "opcoes": ["A) Mimbulus Mimbletonia", "B) Tentácula Venenosa", "C) Salgueiro Lutador", "D) Dedaleira"], + "resposta": "B" + }, + { + "pergunta": "O que deve ser feito para acalmar o Visgo do Diabo?", + "opcoes": ["A) Jogar água", "B) Acender uma luz", "C) Cantar para ele", + "D) Jogar pó de chifre de unicórnio"], + "resposta": "B" + }, + { + "pergunta": "Qual dessas plantas libera um líquido fedorento quando tocada?", + "opcoes": ["A) Mimbulus Mimbletonia", "B) Berrador", "C) Erva-dos-Sonhos", "D) Snargaluff"], + "resposta": "A" + }, + { + "pergunta": "Para que serve a Essência de Ditamno?", + "opcoes": ["A) Curar ferimentos", "B) Melhorar a visão", "C) Ampliar os sentidos", + "D) Fortalecer o sistema imunológico"], + "resposta": "A" + } + ] + self.sum_points(perguntas, anterior_area) + + def quiz_defesa_artes_trevas(self, anterior_area): perguntas = [ { @@ -186,6 +370,9 @@ def quiz_defesa_artes_trevas(self): "resposta": "A" } ] + self.sum_points(perguntas, anterior_area) + + def sum_points(self, perguntas, anterior_area): pontos = 0 @@ -194,7 +381,7 @@ def quiz_defesa_artes_trevas(self): print("🧙‍♂️ Professor: " + pergunta["pergunta"] + "\n") for opcao in pergunta["opcoes"]: print(opcao) - + resposta_usuario = input("\nDigite a letra da resposta correta: ").strip().upper() if resposta_usuario == pergunta["resposta"]: @@ -202,26 +389,27 @@ def quiz_defesa_artes_trevas(self): pontos += 1 else: print("\n❌ Errado! A resposta correta era:", pergunta["resposta"]) - + self.press_key_to_continue() clear() print("📜 Aula encerrada! O professor avalia seu desempenho...\n") - if pontos >= 2: - print("🌟 Excelente! Você acertou todas as perguntas e demonstrou um grande conhecimento em Defesa Contra as Artes das Trevas.") - elif pontos == 1: - print("⚠️ Você acertou apenas 1 pergunta. Precisa treinar mais seus feitiços defensivos!") - else: - print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não ser pego por um bruxo das trevas!") + if pontos >= perguntas.len()/2: + print("🌟 Excelente! Você acertou mais da metade das perguntas e demonstrou um grande conhecimento na matéria") + elif pontos <= perguntas.len()/2: + print("⚠️ Você acertou menos da metade das pergunta. Precisa estudar mais!") + elif pontos == 0: + print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não reprovar!") self.press_key_to_continue() print("\nApós a aula, você sai da sala e continua sua jornada em Hogwarts.") self.press_key_to_continue() - self.player.id_area = 33 - self.continue_game() + self.player.id_area = anterior_area + Database.set_area(self.connection, self.player, anterior_area) + @@ -244,9 +432,6 @@ def move_character(self, direction): clear() - - - if __name__ == '__main__': game = Game() game.start() \ No newline at end of file diff --git a/app/texts.py b/app/texts.py index cf3d35e..3a2baa3 100644 --- a/app/texts.py +++ b/app/texts.py @@ -59,4 +59,36 @@ "Você tá com uma cara de quem tem perguntas," ele comenta com um sorriso torto. "Você já ouviu falar sobre um artefato dos fundadores?" você solta, aproveitando a oportunidade. \n +""" + +texto_aula_herbologia = """ +O aroma terroso das plantas preenche a estufa iluminada pelo sol da manhã. +A professora Pomona Sprout, com suas luvas de couro desgastadas, orienta os alunos sobre o manuseio das mandrágoras, alertando para os riscos de seu grito ensurdecedor. +Com cuidado, os estudantes ajustam seus protetores auriculares e começam a retirar as plantas dos vasos, sentindo a terra úmida entre os dedos. +As folhas vibram com energia mágica, enquanto raízes retorcidas se debatem no ar. +Cada aluno trabalha com concentração, sabendo que na Herbologia, um pequeno erro pode ter grandes consequências. +""" + +texto_aula_pocoes = """ +O cheiro de ervas e ingredientes exóticos paira no ar enquanto os alunos se posicionam diante de seus caldeirões fumegantes. +A professora Miriam Ravenshadow percorre a sala com passos firmes, seus olhos atentos avaliando cada mistura em progresso. +Com um tom sério, ela reforça a necessidade de precisão absoluta: uma gota a mais de essência de asfódelo pode transformar uma poção curativa em um veneno perigoso. +Os estudantes medem, cortam e misturam seus ingredientes com extrema cautela, observando as mudanças de cor e textura em suas preparações. +A magia líquida dança nos caldeirões, e a sala inteira parece vibrar com a alquimia em ação. +""" + +texto_aula_feiticos = """ +A sala de aula está repleta de expectativa enquanto os alunos empunham suas varinhas, prontos para aprimorar suas habilidades mágicas. +O professor Edward Whitmore caminha pelo corredor, observando cada movimento com olhos atentos, corrigindo posturas e entonações. +"A precisão na pronúncia e o gesto adequado são essenciais para a execução de um feitiço eficaz", ele enfatiza, demonstrando com um leve movimento da varinha. +Os estudantes repetem suas tentativas, concentrando-se no encantamento *Wingardium Leviosa*, vendo penas começarem a levitar com hesitação. +Entre faíscas esporádicas e sorrisos de satisfação, a magia flui pelo ar, transformando a aula em um espetáculo de aprendizado e controle. +""" + +texto_aula_transfiguracao = """ +A sala está silenciosa, apenas o som de páginas viradas e respirações contidas preenche o espaço enquanto os alunos aguardam a demonstração. +A professora Celeste Montclair ergue a varinha com precisão e, com um movimento elegante, transforma um pequeno cálice de estanho em um pássaro dourado que esvoaça pela sala. +"Transfiguração exige foco absoluto e compreensão da essência do objeto", explica, sua voz firme e controlada. +Os estudantes franzem a testa em concentração, tentando replicar o feitiço, mas muitos dos objetos permanecem apenas parcialmente alterados—orelhas em xícaras, patas onde deveriam estar alças. +Entre tentativas e erros, a sala se enche de murmúrios encantados e olhares determinados, pois todos sabem que dominar a transfiguração é uma das maiores provas da verdadeira habilidade mágica. """ \ No newline at end of file From 27d7c029b510e866c117818fb17bbcdbe41dd3e9 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Mon, 3 Feb 2025 12:59:53 -0300 Subject: [PATCH 42/51] feat: add atributo em PC --- sql/query_create_table.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/query_create_table.sql b/sql/query_create_table.sql index 8d84d91..afbfcf5 100644 --- a/sql/query_create_table.sql +++ b/sql/query_create_table.sql @@ -59,6 +59,7 @@ CREATE TABLE IF NOT EXISTS PC ( nome VARCHAR(50) NOT NULL UNIQUE, idCasa INT, varinha TEXT, + xp INT NOT NULL, FOREIGN KEY (idJogador) REFERENCES Personagem (idPersonagem), FOREIGN KEY (idCasa) REFERENCES Casa (idCasa), From ef9b6d415c9bc30778b4dc4ac0935936e2b7545d Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Mon, 3 Feb 2025 14:15:59 -0300 Subject: [PATCH 43/51] fix: alterando tipo de dado nos atributos --- sql/query_create_table.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/query_create_table.sql b/sql/query_create_table.sql index afbfcf5..08833da 100644 --- a/sql/query_create_table.sql +++ b/sql/query_create_table.sql @@ -48,7 +48,7 @@ CREATE TABLE IF NOT EXISTS Personagem ( -- 'A' -> Aluno -- 'P' -> Professor -- 'F' -> FredEJorge - tipoPersonagem VARCHAR(1) NOT NULL CHECK (tipoPersonagem IN('J', 'I', 'A', 'P', 'F')) + tipoPersonagem CHAR(1) NOT NULL CHECK (tipoPersonagem IN('J', 'I', 'A', 'P', 'F')) ); CREATE TABLE IF NOT EXISTS PC ( @@ -188,7 +188,7 @@ CREATE TABLE IF NOT EXISTS Item ( -- 'P' -> Poção -- 'L' -> Livro - tipoItem VARCHAR(1) NOT NULL CHECK (tipoItem IN ('P', 'L')) + tipoItem CHAR(1) NOT NULL CHECK (tipoItem IN ('P', 'L')) ); CREATE TABLE IF NOT EXISTS Livro ( From 1729b8eda41452d80f3734156f085a144846e7c4 Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Mon, 3 Feb 2025 14:16:10 -0300 Subject: [PATCH 44/51] feat: add novos triggers --- sql/query_triggers_stored_procedures.sql | 45 ++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/sql/query_triggers_stored_procedures.sql b/sql/query_triggers_stored_procedures.sql index b6697ca..56c5e74 100644 --- a/sql/query_triggers_stored_procedures.sql +++ b/sql/query_triggers_stored_procedures.sql @@ -276,3 +276,48 @@ $$ LANGUAGE plpgsql; CREATE TRIGGER valida_nivel_habilidade BEFORE INSERT ON PersonagemPossuiHabilidade FOR EACH ROW EXECUTE PROCEDURE valida_nivel_habilidade(); + +-- Trigger para atualizar o nível do jogador +CREATE OR REPLACE FUNCTION update_level() RETURNS TRIGGER AS $$ +DECLARE + required_xp INT; +BEGIN + LOOP + required_xp := NEW.nivel*100; + + IF NEW.xp > required_xp THEN + NEW.nivel := NEW.nivel + 1; + NEW.XP := OLD.nivel - required_xp; + ELSE + EXIT; + END IF; + END LOOP; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER update_level +BEFORE INSERT OR UPDATE OF xp ON PC +FOR EACH ROW EXECUTE PROCEDURE update_level(); + +-- Trigger para verificar se a interação está correta +CREATE OR REPLACE FUNCTION check_interacao() RETURNS TRIGGER AS $$ +DECLARE + type_personagem CHAR(1); +BEGIN + SELECT p.tipoPersonagem INTO type_personagem + FROM Personagem p + WHERE p.idPersonagem = NEW.idNPC; + + IF type_personagem = 'J' THEN + RAISE EXCEPTION 'O tipo do NPC não pode ser Jogador'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_interacao +BEFORE INSERT OR UPDATE ON Interacao +FOR EACH ROW EXECUTE PROCEDURE check_interacao(); \ No newline at end of file From 22cdb277061fabc4d1bbe187f1e8d158caea081d Mon Sep 17 00:00:00 2001 From: andre-maia51 Date: Mon, 3 Feb 2025 14:40:12 -0300 Subject: [PATCH 45/51] =?UTF-8?q?feat:=20add=20controle=20de=20acesso=20po?= =?UTF-8?q?r=20usu=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/query_control_acess.sql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 sql/query_control_acess.sql diff --git a/sql/query_control_acess.sql b/sql/query_control_acess.sql new file mode 100644 index 0000000..30a7dbf --- /dev/null +++ b/sql/query_control_acess.sql @@ -0,0 +1,18 @@ +CREATE ROLE adm WITH SUPERUSER; +CREATE USER admin_hp WITH PASSWORD 'hpadmin1234' IN ROLE adm; + +CREATE ROLE owner_game; +GRANT SELECT, INSERT, UPDATE, DELETE + ON Mapa, Regiao, Area, Casa, Vantagem, Personagem, PC, + Inimigo, Professor, Aluno, FredEJorge, ProfessorCoordenaCasa, + Interacao, AlunoPorCasa, VantagemCasa, Habilidade, PersonagemPossuiHabilidade, + Inventario, Item, Livro, Pocao, Missao, Participantes, Feitico, LivroEnsinaFeitico +TO owner_game WITH GRANT OPTION; + +CREATE USER owner_hp WITH PASSWORD 'hpowner1234' IN ROLE owner_game; + +CREATE ROLE player; +GRANT SELECT + ON vStatusJogador, vInimigosPorArea, vFeiticosHabilidade, vInventario, vConexoesArea +TO player; +CREATE USER player_hp WITH PASSWORD 'hpplayer1234' IN ROLE player; \ No newline at end of file From a1e629632106cb64437ff19b42e4a23f53c0a809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Mon, 3 Feb 2025 15:49:59 -0300 Subject: [PATCH 46/51] corrigindo erros --- app/__pycache__/classes.cpython-310.pyc | Bin 1906 -> 1906 bytes app/__pycache__/database.cpython-310.pyc | Bin 4836 -> 4836 bytes app/__pycache__/texts.cpython-310.pyc | Bin 4841 -> 7819 bytes app/game.py | 4 ++-- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/__pycache__/classes.cpython-310.pyc b/app/__pycache__/classes.cpython-310.pyc index adf99c46abb8b8d20b47ed01f5ccb10d4344d80c..e96684b7c2602bfb2cd1a15c97e70c6aa0420993 100644 GIT binary patch delta 20 acmeyw_lb`?pO=@50SI_F7jEQEX9oZ_X#{@& delta 20 acmeyw_lb`?pO=@50SMA6=WparX9oZ~bp=NN diff --git a/app/__pycache__/database.cpython-310.pyc b/app/__pycache__/database.cpython-310.pyc index c7ec6f276f5306464ac28ecf65f565b373ebf0dc..5aa4ff090374472633de61f267d42d6b6cf419ce 100644 GIT binary patch delta 20 acmaE&`b3pGpO=@50SI_F7jERfDFgsGfCUZ! delta 20 acmaE&`b3pGpO=@50SMA6=Wpb`DFgsLj0M&J diff --git a/app/__pycache__/texts.cpython-310.pyc b/app/__pycache__/texts.cpython-310.pyc index 47bc493d8e98782d36e5d083d5f77887434a5bba..91bb0e3d10bf4d87d3041d441374b2ff94415537 100644 GIT binary patch delta 3061 zcmZXW&yN&E6vs#0$g(Rah>0eWlq4R&b>2?rN&Khs|Ev zyC=lN#M_1g!Gwb$Ubyyuu?G*{y!Z!r^7E>8*ja_JGh1}OAKxGE)n6a{@aZ{!_Uy)l zKd+xTnE!L>;kox-*?RclrHebSm8W-3m+L$0<(Zu`<;LyFmCfI79GoBeuTM=T8@G%N zzP6^55PbBew9&McZ94r7B2BR?#u|xTKeNVFeeD`sTGLA9P4pEnnA$eGs`O4S6vF0{MeYa%_Uz^wywCWf9EM?%R4%h<+Nx zc+JsAak)T#DZ_X$Cl4>#N0GeEtUy;1l0H4< zMLKd?T?W~j@kLGEfr>h9P3z=w;EQJFt6icj+%ynbF_T8Z+<`Iey25U8aKEQcZ-O14 z?NbWbeJF?sSVF9+?W8sh`Ls{vDnV(wV5gSwDQw|~rqBZH_+)$x1kp}Ki@e{9fwnIs zOnv3ayk+_twmB!Hio~=YV9^V}f;trxzKJ|A{@N7I(n$YvRu0n*k}tr~*u_;I+aLIi8(9y_ST zT+%bIWSF&m8)xJ5QjM4?fsROm8Y$|ltxwz{^I$u-NHtOv2q={U?YlXa-`==&LjJXs zQmbJx75ZCtc;tr_29BErfNh5*Y z)wxs)he}*+Rr1yN?7ljb5u*{1#|g55bjh4U4=Ny{fNHi+NY$zM2~radhO*cZ=pUyh zA5V-SRbpPT#Mn9n#sgStD*<&*Wv`W@J3{Zsc#r;m4n{>C12c)@PKCq!QcXnOJo6Hl-WW}9nuqItHs7|1n_2w6@mO%%AqJKi0 zi8M$}(+0z+Fx7P`+-3*SYZt56_rX`0$voL1l`K$L>PcII?1c@A zLxSssE}=zqvZ-VSM8uv@RpV0TPo8B2{)ic?qoqN=E&G2NDsv@=P1)kBhAxJ*9{E{80cy?)@kThQaQ~)jit-$K~ z89-HMVcyYp-h(c~LOpZD@k_{5YcDSa*HA=ccHbmJQ8Dz{40ATlOWG6Y$KsTHae%jD zjSyl!=!{>*PxZH4QpI>sImQ63l8n0vRVPeoJVvfNrsU?KNb0haxbSqAjF%UIf_nMe zM2(yCVAiiMo54X^q4q$FSD3X7<92_j{h=xfC zV_6$`8go}_7s#ks?!XiO{Qf568_Kct(d-l$qXFo!y?&*;6S zPDGYoAE1OITdi<6K1~Zzway|$e>w@9T;#*% dqhBt3_RdAVu1(g?tZlAcTwCYwY5lpr{x9r#dPM*L delta 75 zcmeCSeW}Wq&&$ij00e#K=BFnJP2`hdl$oe4%M#3>$-XgWp&+xLCfj5K*@c`d8H(6} b%8J-0o5= perguntas.len()/2: + if pontos >= len(perguntas)/2: print("🌟 Excelente! Você acertou mais da metade das perguntas e demonstrou um grande conhecimento na matéria") - elif pontos <= perguntas.len()/2: + elif pontos <= len(perguntas)/2: print("⚠️ Você acertou menos da metade das pergunta. Precisa estudar mais!") elif pontos == 0: print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não reprovar!") From 9dc8fb617723f5463f3da4f40f0b4bf8c949b68d Mon Sep 17 00:00:00 2001 From: pedro Date: Mon, 3 Feb 2025 20:04:03 -0300 Subject: [PATCH 47/51] adding the xp scheme --- app/__pycache__/classes.cpython-312.pyc | Bin 1190 -> 2511 bytes app/__pycache__/database.cpython-312.pyc | Bin 4757 -> 7121 bytes app/__pycache__/texts.cpython-312.pyc | Bin 0 -> 5557 bytes app/classes.py | 3 ++- app/database.py | 11 +++++++++++ app/game.py | 4 ++-- 6 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 app/__pycache__/texts.cpython-312.pyc diff --git a/app/__pycache__/classes.cpython-312.pyc b/app/__pycache__/classes.cpython-312.pyc index 89b9563c7fd0e80c130cbb863c6d46ea9295b36a..7e4dc29a3b6f2fd7983c49edc9b64bda0c698178 100644 GIT binary patch literal 2511 zcmbtVO>7%Q6rR~#$6m)yX$VzI<21B{WDALDsKkM&0yR-rjV$ z<2D(uxVfRtxEJpm)a2d{?GQVi?&x6A#OxSgC3lfd2CVp{gmg5pjCAD~SP46%lLZU7 zQ>{(*X~oJ$g}P_E$(tg>uh&?V@!2EhM@GZhVo??rIGi~+_&8_@78&=QhG*p>LomO_ z@kEZ|@GJs;6gLsZ5efhTeY0_U{-C@WY_W34JRX!+1Glxs8qGkILmq5!XUlP&pe!DG zH_GrR-nPS_31r#Qv;6Mz&86iR+7RUHxjUe`yA~PZI0$Rj@wo#~m)|tqouwv9#Z@tLz(i6Y^u* zQQo$<0$iO-YB@8Tlf^0Id&KOD@gUrgRFhKF6agPa?*TZH# zXhiu&z?+*Yit-|8C1Z1&iKcR!%!!9qju+vCle75iXkJE`Mkpc70F1#O;|V~Eek7P?2%Jt;mlgLiBiZ=NhuYY;!K1=LpTq8c9#b=CPcs^)A1fT zji$4~tc=n@rm;-utMCSX4M5-%Wj+tFJ|SP9(tZioT>*ex8>M|=1!?^vcH^?oqD=` zSXh_kt+yrvbf5C`uy{YiUxkk2UlxB20rMp)#+SRy_iY>2THqB}H$GJN&*4%8lvrTG zKI@WWO*2b>5&)G0IRC#CGSk3xk%Oe+Sn6~O2B&l~U(ji+lRLml3k{UQKfxE3;`1=8 zK0WW%gF!k0I zrPuMYw-FX`?~o#8bRxWo6GMtvsEDPu<9r1&8`+b^OXimpQtmxfwm#mz2k53GV22X delta 430 zcmX>vyo^)*G%qg~0}xb(wWg~vGcY^`abSQ2%J{4^QC*j%l0}ns;tX{$#ummX=1L|_ zmRp?88Hq)S$t9^p$?TIAnMD{QCcchjuVh%s=%>jxIg-(sLzDd$OL1yW+T`jC zOV&haU;@|w3iJQ@n2c!Vxk0MSGAqgU+K!h}ikO2|0K%$rfNGL!7#AuLRRlJTx zsfl{=@tJvp`~r6$t{#B2f^5aE&;K3nD;ngSzH36Fa9mL=8yBPm>Aa zXs}vT{l7SDa`RJ4b5iY!g3%94zuR2EfIPHRnB ziY*14p=gr=gPj#w`ZGl~?C%B)SodoK_D8N$SR=flL;I)ur7Rl;^w-Y0e299)F3=J1 z)j8*$dwB2t?s;7LFAWWT3ZB2O-dXxv3q^g7jQy|{@o*N1bxNjWI!P^>zw{yvJdoup*XHA-ghG3J;>kIY@87FmUpy{`>Yl*TiZ!rrqC($p%wN=NFxL_QXw4SGnj zy2y`ZgnIaUVAm;y!j~;FibtleQMM5oTYn+c_V0RcyMN7JY@~u+c|QCQcT;ljIif<4c^`;%*yT$OHmGYp z_8Gdu$n+IYj=6**DxRF@o;8xDK*Pe#tz=t~nJ|d2u<$NC7Zs1K1y)!<+!M=w|8#6F zIy*0%j?K>qXBACXQ{s}cEDUB6X|=>hgmXuy7ou~*;K4HoBf@NSeqlCtI(AY>$R#BW z*B)UFue1VoG^0*=Q;}9Oiost{GSWpgr9hXuyqw5HI4uOa2AhH-rnMufR1Lwi$YCEA;r9w-9`JjVtht z?=@a;ys>hh?=5unu3x=*b*p3WZfLXPTWf&=-@MI-H~H{=zPr%Wo#(qXv?jTM!I=?g z(?IMAEd(2Y#8VSmHb>`}3ydA@02*pHfFa&d5hj-Xsh@0&t0_bBm@t@-&!|hHtZKu6 z(os13!@}i+3~efLSxLeVI9o)hGGhZhpbra^!@|V)I5fk;fF7w*jd%!lS_kZbhUd=0 zRqH`P7dD8k)(uT1mOcy1w3KbG1Tii3;fTY~RH9d8JfYS#uEx#)EC*t{?# zoS2;rD^b@?_M_35Oz3c(vAU*(=RCRI_6 zOSXkFL({W<0XO0Lh*m%J59z(P*|dia_>4Y%uvpVwFS=GamQmm42t;Wl%H zgE&!ZJXabI8V%KNuvZ{Ap)2O-xU*h}C{2&nClMtWGw2C}OF_a`40_V==qpKse!}3A zijI;)2B(_Tcy>xyID7o)d=w6BRY)-7(Oh)iiaBtM2dz^sLI}!snMWPNk#*S3*aUjn zq3Q@@nlrt^iD#(W`rR6@&PHsHvW%9ymD_-st9Uc_c=T1>V3ju$8KW*C$8n;Vh)SMf zMmTgpGt7C-^yM{u&G5+y4T>75WK4SjlFQ;NX>dZtusB^wf{ut@P&T+B|O>Ah3ePrY-d z$k4sxh4CYIf0Un^&oBI7dqLVu>vPi^TH+F_D3FR2^r_YpUd8Y7{fKaCDC3336KF z#BYbIb-{~kXoIwdZc?eCO5DGOG6@DX^ohJ|9>fQUzl&vZbb{&ViFx77%;}h5Dx`#& zm>`a#1I92Cfv3ZAO=sS7Fs!OHd=3~GjO+iJ!;?yB^fZP#91nZ)HHVXhmn_WK7R-&R zVZ;n-qGcam_Eo5Ai6ly8{SzZXY-V;oIwfR%{>c$xZee;#_!4gf*?RvIBe0Eg*!d;8 z14s^y2s4%h9SS6V|2T{~dU|#$;x#LZap)jX&0v!WyxWlyT}&noF0Ca}c7?7@qMlR4 z85}~RSJoB2B_%`7q3){X9N8S0&_95tDw;9%?R~{|s(;{4>Q*Y>I|9LGG*s*eG-HL= z<5YN1qwfS;Z=73?-;8gy9oPyUgd!x^c0;_$uW?`S4LAH7-~KRk>+r@97#Ii_!hIXB z-|F1(1Gm4s&@Ghu%DHf{j&17t55@Yd0^c1@utXr?=tCgBNjQR(j<>o!f)QvqB_h1g zdh8H%h0Qnt3PK6FWc*7_y>ES_1CM#HC8!XD3l2ep)aSAXjl3G?L?< zf!EvRWyJvq;sJ=8??_|Dt2_&>HtuevY_F5wYIUdJeflYADo;qE`MHnV|J3)#zWj4% z^T8KfwI|-&y7%3A_SUmo-NSjlbBAxpHv;aPjr%_3AFHl95lRB*J3s)O^sZNNxUT^q z?&AQX@cDoOIPoS|3r<&s2O7J<$>lf`MDr3pU_nRX`W}c`Hv-3h31T044Ud%6NmWwm zvMgGyDmxk+9PkRBZLh`$<(FZ}wJ!qAPyW{XhsNJE=AS&751y(3rm5|{tJkk?H3@5M zp{eD@(d%!lHC997c-SxDE#CwZnE|lSTEzoku>`CdP`Jx+I1G+=l}y;aN0K!7SBF#d z3TAnGOw>gT+bvEZYu&d&2;M`!YCt)8O2w~Y6JWUPo_qoY_z|Q6uS$RN=@45lq77GU zb!0yV1Nup5sy!!i_rPyPKN`(Pj^vL_|M}eZ^RH|^|4M#Z%m-hsfXn{e;ar>1QS8TY zoOeO;%}|1}?Em9BqzD7oVPn~!SLIC0mn2f05R9r+>}x@~s)y7fWRQfpJPp~|f>{Dm z0>rC^m~j;~OYm#>>B5Y#mcN$pClNLZ{Z&3m(r6{r=%+;XHV&DErV{ER!?q1TZGK>Q zd*JZqz~TJkMb^JNnXQ^rigq^ZDT79u60a1PwkO$A}w`8~%8FS(R6kNC)Ea*H^@( z)f3P&VkRLiE18R`tiiunD6JQper)z*^BruS!{!(?M!l4TYR%He1glMB6T{{OXg;Dy zSSB}74O1Fv@Y{yI1I;z6z=a+#JlFNmLwTEvNEKUwdcb(O9!myPv6;x~92roSo{#Ia z^nfb%5xova52)fKk#%z2mL5>WLqx`L`z;wz@Ri*QbK$rSl!b~&Su)nN2Qr|F0ix%3 z^nfaM5}B>{0QJm;2j#}St%Tfd#i!kOM5@240k)_Qw*kv)1 z($0hM7x1SyLh}~2!v?n5zD>68Q&u3lcnVN49)}}4iWcy@4gA*xVN`U}JQ~q35NPG^ z_=Hh3&s&mZtZ?M+G*pmi@#N R{wvGBeWK{0*e)`g{{buq+>ZbN delta 1642 zcmZ`(%Wo4$9G=;icm0TC$8lmO4a+0gOAU%s$~z?woYYm`NgIen$l_fR2iu{u4r+`e zEwJ5O7E@?H|B_4Mj?@I8broQWWAr0|5hifW|HYjl0Fr zF8~;4G=33`vpS~kpVhe%!KXiTLE~DiZ`O7E}UUBZjmcKKg7+8igZtfX$Woj zA=3*HZe&AZ9)3&Kxz1u!2;!5h1IPJoXW9N-cf5ZjHasfF`$q@lK^+;h8Ffle%i;4$ zO^wKz4qGRwzNd#Xhd#}$e|n)QWUl%B<4s4RI=$`=!v10;n@NTY-H#o9ue4N`ScnL8M;&yMX>$rL1q^$L%3tZM_2?)P6;_$821PXo6YHE>>q)x2+iEu#cXq9>tN5#GS z>++1oTJ9qSU0^b967!WjKJVU%@$LE{@-jRnh9Bz?(cFlR+w!r1t z85{o1+azeN%1i^XX|J>uO1Q`d{aO`0Xda%b^onpW;~-Ow+&oa+_$Mjk%XP}14j$_m zjcsTS{$1+3xLdKyn?7$lm((`+yG_pd4sRmQ?UgGANNOF#^Z(<5|KzfKaFFzscC%zl zYNzOZDLDyw*Hp_CXe$w*dIIYvXeJ#0Wp4{Rh%z&!TVLjU$JDHPS~c`N8%C+rcz_2T zJxn2vzjrhpimXLiS0hJPB1g^l+sgoUz?w482K)tQSp<^XvPS-~xZ_#lpgAI=>ron;&A4*vmI zNx@$U4S2PB$+N3cEKN5OD49@aad(Z3?|VFr)$^R zp7?RXJko1c_ujU;3Z3{)ARy4IVO+!y15FyoH@;?p z;4L$Rm7Nxoc>hxT6(Fz56k%mQnR?08zLOJH-eZl`@k&KUSh>|2r3;GBirBR24a6EAg_S-=IY4gCWE Cxt~e^ diff --git a/app/__pycache__/texts.cpython-312.pyc b/app/__pycache__/texts.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13133b7ffde2630a18018ee679dabb78e323dd9c GIT binary patch literal 5557 zcmZXYy^kbE8OHa%%?QKU;*cP)N*iHmJZmf>3$T{G6Gnntq%#+6vefj{&a~;C8drCZ z*Bdz@AV(tg;lMfzM~1`_(S#(BUI_odO3sM*J#Tf-&K-BUo3HMw_v86^tN-!x%cDL1 z{QcXX%uQs1X_v=(Hi*n^F z7u@ElE9)>Tee3JMrLK*&=Ta7MUF}^HmW|(hrrT!0g=N8dadhn3(8e*J&qCRjo6qbP zpS(-qtO{+JTy(|eY3G))?b4DU$K-W9QSp=nd72dljRS@_9l^RX6kXGuSdU7?qyD#uk#+s&+$yrpsr5~j))L>(Gk#J?l2 zcadLfS9Gb24Htza8BjEr(zNNw>VC9q-2Zhd#B0->?{s;WaeQ8W`wznvA;N-T-`u1fI%z^VenRRjG!U zGhW(|NHunZ;ru+ZZms~`1V@o28fwQvdOH!sxcD5f>k zsBC{#Qjkp~)g}Z(_-eYwuqJwXT|r>;__iDEKQ>avZe4c7Tya~*ph(w-GvCH{+#%em zf@M#A&${J|ML`g7D_O73tFBUP!oMM@0ovP8ue1m8*1i;>K&W*)lY?ZH zJQ_HsLy+t*cOcn==QU(jQZ_cAV`nkd8J1%{zlezxsJm7lK!(nxe&eY>1Fqa9`O%(| z4tPVxWs>ZGDp!RymBlBl?W*;vIgH7fa~G3H~ZU?87(N=Ftik11$i(lG9~j8Pc4p4$K)#^|nGQn#?=Umfr3=AykU`#!?Gg zHrCQ4nKGkJ;}#{LqK&?J=ZYnR$7&Xkf>I^w5s;2ti6V6u1EqId#C9;N9lOJdg*|i3 z&njR1?!y>oV4C?G8RrP+HxUQ^bq3OI@$zqqoJ zUe`i_==KUt+}rxf4D;j$PXf&~-H$$&h9n8uC|>sU*)%*eO#2Ubjvj3~d`hoop0>CE3?%2u1WlRP02DHg({Y zIaPwAWP#s8v$b*YU3gS?WeXwnn{^X$rT?~eR;%SeUffm_zhGjRV<|?aO4B#UdcX#m zj$mzWrrCRlpkbrB1-Bq(Hd6xq0$$#Hs82SS5w^^=XC<(c?Cl;n6sq5a-mbB_wJ&o{ zAbj)Gyh}GQZ&$qP0JAkxdOlYDpn|$!wmCqEEpaE^nH}nC*p)mlF*JEJX=EKz5tTkt zM5%RK@78PldemL#3^&Z6Ac+asg(AY77sSZA8D`n0u6jONb>~L>fj7#ciLA2XoPmOH zDnMa1Mr2no>9O#(oB|J~x_KTOyHQ>%d1j!26c{zxk{=bHlS6bIrq1cPYGiY<4F=E6 z;J&LoGvNJjMkwwmkMQ97kVyxa@b10Dz<>mdy5Fk|hfEj1?+hZjCB211eU0HtVy?yP z*pN|Gc!NC00ywK<`bY#Ib@#h^TA6$kDA;OB=5E%)oz*oK;K(9xVHn~kjnWF!M2yO5 zKA7uZJRbQdv}RR?JqCQ44CALBnG6Pm7R=^E`yTVw@l)-_uXa&T>6UpC9Z~#aJ)k+ZIWo}# zeg(6_>Ks?MvnEx?v^jPQgu7=^I6XA!3Pf-qh0RwIYNbupjk4A~d=WiOo4?6~cbW7k zP*~dgXo(T2PBs#OHX~#%Xg|mlY4ZgD#0Yy!6JKm6O44b#piv65D9s|47);aXaRc9~ zBmA`-LG~&#Ia)ABB6=OyoaM90>hqi#3cuA`;-N0`n&%2*PBIJmL4t9j>9idN$Kb_- z8qcK6CoP_9I58sDh{<-GVM;U>qISb096!qoA4!#x(8hxUF<|S_Z2- zlNdQlrfDw>X74&D+WBVm@bx>-?zZ8)ji7__FDcb>tc0k zs&^Vs2V_6H*Dn%J`==}{So&w<{Iyh+4WxCaS?f-HV>dUaDCB8Y$YBxfyK~17j(xR? zMGVc;y{~zux%c0bg9XGqSYdtf;64X-!$flckr3*dmd1l-I{V=Pk0jDZr>oe~|5N+s ztvBEL(d4Z+?1wk<4+nm=I#9sPWcAU1U-~i6S-L9xG<}n;^f0yg3IAQ*xOVN@<@Gz? zx%tn%yO*zi;~uZCTz>b}eO_O?{K2j7@p|v_?(H{u9bewP^?m#Nt=so*{%h}*G-8GS E0og79g#Z8m literal 0 HcmV?d00001 diff --git a/app/classes.py b/app/classes.py index 72bb29d..93babe1 100644 --- a/app/classes.py +++ b/app/classes.py @@ -1,7 +1,7 @@ #definir as classes class Character: #definição da classe de Personagens - def __init__(self, id_character, id_area, life, level, name, idHouse=0,Wand=None): + def __init__(self, id_character, id_area, life, level, name, idHouse=0, Wand=None, xp=0): self.id_character = id_character self.life = life self.level = level @@ -9,6 +9,7 @@ def __init__(self, id_character, id_area, life, level, name, idHouse=0,Wand=None self.id_area = id_area self.idHouse = idHouse self.Wand = Wand + self.xp = xp class Area: #definição da classe de Áreas do Mapa diff --git a/app/database.py b/app/database.py index 31df86a..b3ae4c6 100644 --- a/app/database.py +++ b/app/database.py @@ -150,6 +150,17 @@ def set_area(cls, connection, player, idarea): cursor.execute(query) connection.commit() + @classmethod + def update_player(cls, connection, player): + cursor = connection.cursor() + query = f""" + UPDATE PC + SET vida = {player.life}, nivel = {player.level}, xp = {player.xp} + WHERE idJogador = {player.id_character} + """ + cursor.execute(query) + connection.commit() + def main(): Database.create_connection() diff --git a/app/game.py b/app/game.py index 1051155..7ae8e5f 100644 --- a/app/game.py +++ b/app/game.py @@ -396,9 +396,9 @@ def sum_points(self, perguntas, anterior_area): clear() print("📜 Aula encerrada! O professor avalia seu desempenho...\n") - if pontos >= len(perguntas)/2: + if pontos >= perguntas.len()/2: print("🌟 Excelente! Você acertou mais da metade das perguntas e demonstrou um grande conhecimento na matéria") - elif pontos <= len(perguntas)/2: + elif pontos <= perguntas.len()/2: print("⚠️ Você acertou menos da metade das pergunta. Precisa estudar mais!") elif pontos == 0: print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não reprovar!") From 701bb88c072e825f53be9f3c752fa1d78ab39289 Mon Sep 17 00:00:00 2001 From: pedro Date: Mon, 3 Feb 2025 20:07:41 -0300 Subject: [PATCH 48/51] adding the xp scheme --- app/game.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/game.py b/app/game.py index 7ae8e5f..8f85e8b 100644 --- a/app/game.py +++ b/app/game.py @@ -398,10 +398,13 @@ def sum_points(self, perguntas, anterior_area): if pontos >= perguntas.len()/2: print("🌟 Excelente! Você acertou mais da metade das perguntas e demonstrou um grande conhecimento na matéria") + self.player.xp += 30 elif pontos <= perguntas.len()/2: print("⚠️ Você acertou menos da metade das pergunta. Precisa estudar mais!") + self.player.xp += 15 elif pontos == 0: print("❌ Você não acertou nenhuma pergunta... Tome cuidado para não reprovar!") + self.player.xp += 5 self.press_key_to_continue() From 675253ba11bb893ed1f22f7bfcc16e9e8a6fdc8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=5FViniciusq?= Date: Mon, 3 Feb 2025 21:10:55 -0300 Subject: [PATCH 49/51] adicionando combate --- app/__pycache__/classes.cpython-310.pyc | Bin 1906 -> 3812 bytes .../classescombate.cpython-310.pyc | Bin 0 -> 3014 bytes app/__pycache__/database.cpython-310.pyc | Bin 4836 -> 5434 bytes .../sistemacombate.cpython-310.pyc | Bin 0 -> 1183 bytes app/__pycache__/texts.cpython-310.pyc | Bin 7819 -> 7819 bytes app/classes.py | 49 +++++++++++++++++- app/database.py | 11 ++++ app/game.py | 13 +++++ app/popula.py | 4 +- app/sistemacombate.py | 8 +-- sql/query_popula.sql | 5 +- 11 files changed, 80 insertions(+), 10 deletions(-) create mode 100644 app/__pycache__/classescombate.cpython-310.pyc create mode 100644 app/__pycache__/sistemacombate.cpython-310.pyc diff --git a/app/__pycache__/classes.cpython-310.pyc b/app/__pycache__/classes.cpython-310.pyc index e96684b7c2602bfb2cd1a15c97e70c6aa0420993..c1ac813dc8a826390c1d3d2b8552b7c9dfa2bc53 100644 GIT binary patch literal 3812 zcmaJ^TW{mW73T0JN-Halz1?nsZL4k4CTz2Ix((WNn+D!)noEHSi|#`MKa^lNW1EgF zDnrRd1offV1@a?`0NF?XrFrdBp8b}W_WOn+Dc>>z59iDb=klFz&N(VJHhK=qzdwC> z`0SSB{Flml@uBSDDUTsOa-<{03p~%=eQK`spn1>)G+zeL0%$I@PkbRtc3pz>Ls6=mEteyPR>nvm;=BA^H>d>- zYWKJ()$YT$AHK8m@B#LrzkDz)W;ph4I-Txj!B_nQ{{%6zjj9 zSZp9Jzu3w@uU=V@;KE8k(fFsiOk>aP+H_W?fypNMNq$&dK1Y9EraD=T zdKGh)1of`i5{oYMyp9ibGn0%t#W`OOlg9&d03xljMteI<9*3D;TV~Tm54S z8hlLEglwF2ZE|#~^9Ox$43?zqGLL zpt8Cpyc5FS71!Ps&)$^_w}jAZZZ7Urj3$rGEvd>(=hInUOiXW5=-E+qHF~g5UGM%A zB&eFZDqU6MsN$2o9rjMVh6(lS6hEh+Z_sa0v`|@;2;>j(l+-TqeS=4Cs6IOL^-nm% zPbr2J)(Y)}wq|Gj8G7&FIj7wtr!O>HZp2;RM=yD29Y97d*M;>4(q4ftTt+WD0FdEs9YDQ{(G`3>nU`5U z9p{rY?p6f*eh}Z~r(9Os!?mR04dbpYf_I7FRX9I*cEW*!}~E#jEw)ZP+F@bzz-&S*$)rmavF{n>m4M8-&?rK+o zdygx(__f9&fMo9~a7QAF5V+ZTBX9NZ(MwK#SS5{F?McxLhq=Z{My0EqY#He3A7O;q zK1x5!$H;l4`kVSI}$hp-n zZ{{2aTUywNhb+?Oa#c>ZMhYe-qs8svn@Fm#F&g)=-PVNw z#%+6+)8g32+gqii9G z_ny1x*XHDan<)PwXC$g?)3%gZMyGWLZ8#Et$4Dm!%bgfwe<) zTQ|o14GjDlNMU7Rr2{MXE~TLoSi0xC`@Z+Scc0JSyFVE_j-tR&Ps9K8I&?;?Lz27 z5k!9Ty7HI#`F)5458wh|SS$lp0Byi3V5X}jQELwSfV1eSD6$7>S{{|BX_|=n+YHUs zv?Ub)^=j&*L8w?#RytHP<%xa1r``BqYd2lY?g9Q$zAaar-tK=(bremX;V$@C<)ekB zJaaxUIG9+kvMP%`5z2k9yVXMy3XjRePt&~0>N-uQWp56=E?>Bt$pTXE02TpSEV`!T zMOFQwY0G`2Xn}P#TT|ou=q)0!15b{68)8jx;Pgf^BiLVXbeK8};pS z15#d#>(5!=jnBjl`uAQioArI#aINruPPS#7Xw6AmFY=*zQP3vOnMF1Igha;n*gnsB zE^;fkb0>Fm@4(}1o8>GNF(+xojMR$Wp`i7FT{!7+){&V@cLDf z7Vad85|sviVW(=iRWt^17*(DZ9`&SFvapAPEmb%}wX24OJ(eSdxgV2hstWrTIgaOq zSQth_nWkYlXK!zHA15Q#-APi_-Mq1RYh&{|Y1L1!Pm+uV3fYv_i~OlAY6WJ9ska-8TUW*S;W>X9mk3RkO9va14H zgP`SLtXY9rc42lfpYYa29@Le%+1-XIuT{F0cpD=3dHjljFA zpbdBpoIPp)mY6@W_2rx>yTfB~n+X;YwA7>cx`Q6e1g!(a_DcbX4S>~{vl=iH!J0<}V`ZXh7?%j5#BN|9>ne2so>-WIcS$B;71A_P=b(8l=!r#JUV zlz8O4#AAUP)9;v=T#-rSoKUhbZ_sipwB}BU%*^kk$(B~r&g=r*#z_+zay!wo1D|KL zB^q<JO{H^T7OsT`Iw zCQ;}Qu-_F3IHx}&Q8X7xC{n{=7#^|aES7+F+9HAcV&cOmEPThW`F_haGZD=kD_D+_ z-Xc+Ddz0%a7@qr->&+!Yx!znZl5$Pg23HADh8{0OalJ`XbinV?pCLeT zCX>I(P)15;$>Kg-&Fb4&xAM+JH&FP7syTOe@q}2|bUL$Pm_^kX2edP`&khW?pHL_f zpNZdXJPDTEUfgJcJhs5*EjfIgOxH~c3mm$@=|z-`O8ah-#_~FXTa@PveVgL}J*C2m z#3!7YO|O4>W~UBme*a literal 0 HcmV?d00001 diff --git a/app/__pycache__/database.cpython-310.pyc b/app/__pycache__/database.cpython-310.pyc index 5aa4ff090374472633de61f267d42d6b6cf419ce..cddf315400feba832bbd29d468b95a64a7de9179 100644 GIT binary patch delta 682 zcmaKoL2DC16vt;~XEz}=YqC|72$6+S=t@X!Md%?G)J7Dv)kFvsB#fC&7}#Xn*-#;D z$id!3BZ{(-aPp^=G==XKZ3s5Mg$QD_P6it@c-}sz4P_2H|;Q=&mlNJT8n{o zb#A}KpXMLmJN^nU@$xBpgAWV5(nj9(FPpepAUz`yg|(T%@s!5K8IEa8`glPwf{rZE z)Z~O4rzke}Knps$KWVp{Pnr*2xPm_(iJ=&THFp#a{hE6sIIFpwjl%mZg1*lJ7Qv-B z@dNi^>)@%o6u6y7%~lf(?n$4yciq`~)WbUU@(_6IDcbNvJAeU-(aZ7_k5P;{s%YYr zB&Cs(rZg*vTkotnIVKP{Bek#G(%9Cx4fswqOn_%8BDkDggIdu*^nFEjer2ZFm6>Mu zu*xixdqk1?EtL@$lgrB>yg)%)3s<*mHln`cb+T%`rikTM0&kh zLa~jr*j^)(>VG5dd&T6S_!>V?o;jrzX=t%_*-p-jn>2@sm8?34`Oo^Bp7|1%on+!{ WSRH6&3smLgn^Vo)$Qn6JfBpi*+o-7k delta 102 zcmdm`^+c5~pO=@50SI_F7p6N1Pvq-noG@`#KU<1;FoUMVW@|=S0cJlVIa4HxcNS1%F%w8PW0BY73nCh9UO-Nf>*RkTrtHET%v_8t{{iqp B7rp=h diff --git a/app/__pycache__/sistemacombate.cpython-310.pyc b/app/__pycache__/sistemacombate.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fad5e2b46e8ec3e05f76cf25b4d7e3f6bb323d0 GIT binary patch literal 1183 zcmaJ>y>HV%6u&#$iR&h9npSQ3s$8}VO=#39LKPAq0YimU%20u-!**MzvCrJuks6#S zNGvQcQdJ^is9<4YWyybW8)BjV0u%2Xrz%3?tb6a>`}n;N`^?H^3&HyKWO(q)Kvyo~yWJDVCh($Ep+ui~jO&Jp5oLKt3XL7%YO zMrvF^DIO}_5@fBYtYHx=J@5jXMwEMwm#j)`^;XvYyLzN$_cZ&# z<75F|vUOiLtaC_hkx-kC&PJbDE2)5Cy>9Oa%I$s6kNwdZOJ+gY%#{(#JbPr*mUuk_ zn&2eCMM&!$J|NU1b(b_m(+82SmQFD_sNbk*$5 z+WXA6U5|4X!}q&dD@!Bdei%zVq=6@=JQ35quHR)+@A&(kH2g41Vrga#I81;?m;@fD zu?HaxLNpbvb-YlP5@>ZV_moz4ikL&0EYO%bl-CNf*q&S*e|&Ld(HqZBVqX>~!Lzw? zg7z8lYtZ2Djm9D5Y_ys18qHhHje2wKkaB*!7O^Z0ZdLc+5i9m literal 0 HcmV?d00001 diff --git a/app/__pycache__/texts.cpython-310.pyc b/app/__pycache__/texts.cpython-310.pyc index 91bb0e3d10bf4d87d3041d441374b2ff94415537..e870ced5bd0197e269d6e218a79d025c915daab4 100644 GIT binary patch delta 19 YcmeCS?Y8C0=jG*M00MoBja-d#04hiW?*IS* delta 19 YcmeCS?Y8C0=jG*M00JJ)ja-d#04R$Cod5s; diff --git a/app/classes.py b/app/classes.py index 72bb29d..b0e8a36 100644 --- a/app/classes.py +++ b/app/classes.py @@ -1,7 +1,7 @@ #definir as classes class Character: #definição da classe de Personagens - def __init__(self, id_character, id_area, life, level, name, idHouse=0,Wand=None): + def __init__(self, id_character, id_area, life, level, name, idHouse=0,Wand=None, feiticos=None): self.id_character = id_character self.life = life self.level = level @@ -9,6 +9,14 @@ def __init__(self, id_character, id_area, life, level, name, idHouse=0,Wand=None self.id_area = id_area self.idHouse = idHouse self.Wand = Wand + self.feiticos = [] + + def esta_vivo(self): + return self.life > 0 + + def usar_feitico(self, feitico, inimigo): + print(f"{self.name} usou {feitico.nome}!") + inimigo.vida -=20 class Area: #definição da classe de Áreas do Mapa @@ -38,3 +46,42 @@ def __init__(self, id_character, id_area, life, level, name, fala, disciplina, i super().__init__(id_character, id_area, life, level, name, fala, idHouse) self.disciplina = disciplina +class Inimigo: + def __init__(self, id, name, life, dano, falas, nivel): + self.id = id + self.name = name + self.life = life + self.dano = dano + self.falas = falas + self.nivel = nivel + + def esta_vivo(self): + return self.life > 0 + + def atacar(self, jogador): + print(f"{self.name} atacou {jogador.name} causando {self.dano} de dano!") + jogador.life -= self.dano + if jogador.life <= 0: + jogador.life = 0 + + +class Feitico: + def __init__(self, nome, habilidadeRequerida, chance_acerto): + self.nome = nome + self.habilidadeRequerida = habilidadeRequerida + self.chance_acerto = chance_acerto + + def __repr__(self): + return f"{self.nome} (Chance de Acerto: {self.chance_acerto}, Poder: {self.poder})" + + def usar(self, alvo): + import random + if random.random() <= self.chance_acerto: + print(f"{self.nome} acertou {alvo.name}!") + + alvo.life -= self.poder + else: + print(f"{self.nome} falhou em acertar {alvo.name}.") + + + diff --git a/app/database.py b/app/database.py index 31df86a..1e1092b 100644 --- a/app/database.py +++ b/app/database.py @@ -149,6 +149,17 @@ def set_area(cls, connection, player, idarea): query = f"UPDATE PC SET idArea = {idarea} WHERE idJogador = {player.id_character}" cursor.execute(query) connection.commit() + + @classmethod + def get_inimigos_da_area(cls, connection, id_area): + cursor = connection.cursor() + query = "SELECT idInimigo, nome, vida, danoBase, falas, nivel FROM Inimigo WHERE idArea = %s" + cursor.execute(query, (id_area,)) + inimigos = cursor.fetchall() + + return [Inimigo(id=inimigo[0], name=inimigo[1], life=inimigo[2], dano=inimigo[3], falas=inimigo[4], nivel=inimigo[5]) for inimigo in inimigos] + + def main(): diff --git a/app/game.py b/app/game.py index 1051155..7c0fa70 100644 --- a/app/game.py +++ b/app/game.py @@ -1,6 +1,7 @@ #inicializar o jogo no terminal para o usuário import random +from sistemacombate import combate from database import Database from classes import * from texts import * @@ -67,6 +68,9 @@ def create_character(self): if name == '': print('Nome inválido! O nome do personagem não pode ser vazio.\n') self.start() + + feitico_basico = Feitico(nome="Expelliarmus", habilidadeRequerida=0, chance_acerto=100.0) + self.player.feiticos.append(feitico_basico) idPersonagem = Database.create_character(self.connection, name) self.player = Database.create_pc(self.connection, idPersonagem, name) @@ -154,6 +158,13 @@ def continue_game(self): anterior_area = self.player.id_area self.move_character(direction) + if self.player.id_area == 19: + connection = Database.create_connection() + inimigos = Database.get_inimigos_da_area(connection,19) + for inimigo in inimigos: + print(f"⚔️ Você encontrou um {inimigo.name}!") + combate(self.player, inimigo) + if self.player.id_area == 12: self.class_Defesa_Contra_as_Artes_das_Trevas(anterior_area) if self.player.id_area == 13: @@ -432,6 +443,8 @@ def move_character(self, direction): clear() + + if __name__ == '__main__': game = Game() game.start() \ No newline at end of file diff --git a/app/popula.py b/app/popula.py index 24f57fb..3dcb337 100644 --- a/app/popula.py +++ b/app/popula.py @@ -103,8 +103,8 @@ def create_tables(): #cria cada tabela do banco de dados """ INSERT INTO Inimigo (idInimigo,falas,idArea,vida,nivel,nome,danoBase) VALUES - (7,'AAAUUU',20,100,2,'Lobo',20), - (8,'uuuuuu',20,100,5,'Dementador',50); + (7,'AAAUUU',19,100,2,'Lobo',20), + (8,'uuuuuu',19,100,5,'Dementador',50); """, """ diff --git a/app/sistemacombate.py b/app/sistemacombate.py index 1c6a3c0..9fcc539 100644 --- a/app/sistemacombate.py +++ b/app/sistemacombate.py @@ -18,13 +18,13 @@ def combate(jogador, inimigo): escolha = input("> ") if escolha == "1": - if jogador.feitiços: + if jogador.feiticos: print("Escolha um feitiço:") - for i, feitico in enumerate(jogador.feitiços): + for i, feitico in enumerate(jogador.feiticos): print(f"{i+1}. {feitico.nome}") escolha_feitico = int(input("> ")) - 1 - if 0 <= escolha_feitico < len(jogador.feitiços): - jogador.usar_feitico(jogador.feitiços[escolha_feitico], inimigo) + if 0 <= escolha_feitico < len(jogador.feiticos): + jogador.usar_feitico(jogador.feiticos[escolha_feitico], inimigo) else: print("Escolha inválida!") else: diff --git a/sql/query_popula.sql b/sql/query_popula.sql index 8047bf3..0bcbb07 100644 --- a/sql/query_popula.sql +++ b/sql/query_popula.sql @@ -85,9 +85,8 @@ VALUES -- INIMIGOS INSERT INTO Inimigo (idInimigo,falas,idArea,vida,nivel,nome,danoBase) VALUES -(7,'AAAUUU',20,100,2,'Lobo',20), -(8,'uuuuuu',20,100,5,'Dementador',50); - +(7,'AAAUUU',19,100,2,'Lobo',20), +(8,'uuuuuu',19,100,5,'Dementador',50); -- Professor INSERT INTO Professor (idProfessor,falas,idArea,vida,nivel,nome,idCasa,disciplina) From b5df5248acc707920700d902a066f893d6a939c5 Mon Sep 17 00:00:00 2001 From: pedro Date: Mon, 3 Feb 2025 21:47:19 -0300 Subject: [PATCH 50/51] feat: completando o sistema de combates do jogo --- app/classes.py | 2 +- app/game.py | 56 ++++++++++++++++++++++++------------------- app/sistemacombate.py | 14 +++++++---- app/texts.py | 10 ++++++++ 4 files changed, 52 insertions(+), 30 deletions(-) diff --git a/app/classes.py b/app/classes.py index b0e8a36..3d5baeb 100644 --- a/app/classes.py +++ b/app/classes.py @@ -16,7 +16,7 @@ def esta_vivo(self): def usar_feitico(self, feitico, inimigo): print(f"{self.name} usou {feitico.nome}!") - inimigo.vida -=20 + inimigo.life -=20 class Area: #definição da classe de Áreas do Mapa diff --git a/app/game.py b/app/game.py index 7c0fa70..605df95 100644 --- a/app/game.py +++ b/app/game.py @@ -69,12 +69,15 @@ def create_character(self): print('Nome inválido! O nome do personagem não pode ser vazio.\n') self.start() - feitico_basico = Feitico(nome="Expelliarmus", habilidadeRequerida=0, chance_acerto=100.0) - self.player.feiticos.append(feitico_basico) + idPersonagem = Database.create_character(self.connection, name) self.player = Database.create_pc(self.connection, idPersonagem, name) self.player = Database.load_character(self.connection, name) + + feitico_basico = Feitico(nome="Expelliarmus", habilidadeRequerida=0, chance_acerto=100.0) + self.player.feiticos.append(feitico_basico) + self.new_game() def load_character(self): clear() @@ -155,28 +158,33 @@ def continue_game(self): self.get_current_area() self.get_possibles_directions() direction = input() - anterior_area = self.player.id_area - self.move_character(direction) - - if self.player.id_area == 19: - connection = Database.create_connection() - inimigos = Database.get_inimigos_da_area(connection,19) - for inimigo in inimigos: - print(f"⚔️ Você encontrou um {inimigo.name}!") - combate(self.player, inimigo) - - if self.player.id_area == 12: - self.class_Defesa_Contra_as_Artes_das_Trevas(anterior_area) - if self.player.id_area == 13: - self.class_Pocoes(anterior_area) - if self.player.id_area == 14: - self.class_Herbologia(anterior_area) - if self.player.id_area == 35: - self.class_Historia_da_Magia(anterior_area) - if self.player.id_area == 36: - self.class_Feiticos(anterior_area) - if self.player.id_area == 37: - self.class_Transfiguracao(anterior_area) + if direction not in ['1', '2', '3', '4']: + clear() + print('Direção inválida! Tente novamente.\n') + else: + anterior_area = self.player.id_area + self.move_character(direction) + if self.player.id_area == 19: + connection = Database.create_connection() + inimigos = Database.get_inimigos_da_area(connection,19) + for inimigo in inimigos: + clear() + print(f"⚔️ Você encontrou um {inimigo.name}!") + combate(self.player, inimigo) + self.press_key_to_continue() + + if self.player.id_area == 12: + self.class_Defesa_Contra_as_Artes_das_Trevas(anterior_area) + if self.player.id_area == 13: + self.class_Pocoes(anterior_area) + if self.player.id_area == 14: + self.class_Herbologia(anterior_area) + if self.player.id_area == 35: + self.class_Historia_da_Magia(anterior_area) + if self.player.id_area == 36: + self.class_Feiticos(anterior_area) + if self.player.id_area == 37: + self.class_Transfiguracao(anterior_area) diff --git a/app/sistemacombate.py b/app/sistemacombate.py index 9fcc539..9ef7c0f 100644 --- a/app/sistemacombate.py +++ b/app/sistemacombate.py @@ -1,4 +1,4 @@ -# game/combat_system.py +from texts import * from classescombate import Jogador, Inimigo @@ -33,13 +33,17 @@ def combate(jogador, inimigo): jogador.usar_pocao() else: print("Escolha inválida!") - - # Turno do inimigo + + if inimigo.esta_vivo(): inimigo.atacar(jogador) - # Resultado do combate + if jogador.esta_vivo(): print(f"\n{inimigo.name} foi derrotado!") else: - print(f"\n{jogador.name} foi derrotado!") \ No newline at end of file + print(f"\n{jogador.name} foi derrotado!") + jogador.id_area = 27 + jogador.life = 100 + print(texto_perdeu_a_luta) + diff --git a/app/texts.py b/app/texts.py index 3a2baa3..1cc74b4 100644 --- a/app/texts.py +++ b/app/texts.py @@ -91,4 +91,14 @@ "Transfiguração exige foco absoluto e compreensão da essência do objeto", explica, sua voz firme e controlada. Os estudantes franzem a testa em concentração, tentando replicar o feitiço, mas muitos dos objetos permanecem apenas parcialmente alterados—orelhas em xícaras, patas onde deveriam estar alças. Entre tentativas e erros, a sala se enche de murmúrios encantados e olhares determinados, pois todos sabem que dominar a transfiguração é uma das maiores provas da verdadeira habilidade mágica. +""" + + +texto_perdeu_a_luta = """ +A escuridão envolve a mente do jovem bruxo como uma neblina densa. A luta, a adrenalina, tudo parece ter desaparecido em um piscar de olhos. +Quando seus olhos se abrem, o ambiente é completamente diferente. A luz suave das velas ilumina o teto branco e imaculado da enfermaria. O cheiro de ervas medicinais preenche o ar, e o som abafado de passos ecoa na distância. +"Ah, você acordou", diz uma voz suave. É a enfermeira, Madam Pomfrey, que se aproxima com um sorriso reconfortante. "Você esteve inconsciente por algum tempo. Não se preocupe, já está em segurança." +O corpo ainda dói, e uma sensação de fraqueza invade cada músculo, mas a mente, agora nítida, se lembra da batalha. De tudo o que foi perdido. O que aconteceu? +"Você foi levado para cá por seus colegas", ela continua, cuidando dos ferimentos. "Agora, o mais importante é que você está bem." +O jovem bruxo se senta lentamente, o olhar fixo no vazio à frente. A luta não foi apenas um desafio físico. Algo mais estava em jogo. E ele sabe que, embora tenha falhado desta vez, a verdadeira batalha ainda está por vir. """ \ No newline at end of file From adfa37b70c97ae7b072da62c92b007c656b8cc8a Mon Sep 17 00:00:00 2001 From: Pedro Henrique Faria da Mota Date: Mon, 3 Feb 2025 23:24:02 -0300 Subject: [PATCH 51/51] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4ff907f..7b47538 100644 --- a/README.md +++ b/README.md @@ -53,3 +53,6 @@ No nosso jogo, você assumirá o papel de um jovem bruxo que começa sua jornada * [Módulo 2](https://sbd1.github.io/2024.2-harry-potter/modulo2/DD_HarryPotter_v2.0/) * [Vídeo Módulo 2]( https://youtu.be/JJzPPajbIc0) +* [Módulo 3](https://sbd1.github.io/2024.2-harry-potter/modulo3/MER_HarryPotter_v2.0/) +* [Vídelo Módulo 3](https://youtu.be/3pj8sQ9zu4U) +