on va refaire Game Of Thrones . . .
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

216 lines
7.8 KiB

2 years ago
# -*- coding: utf-8 -*-
2 years ago
"""
Cahier des charges respecté, sans ajout personnel.
Pas de gestion d'un joueur qui existerait déjà.
Code propre et fonctionnel.
Note : 9 / 10
"""
2 years ago
"""
Éditeur : Loïc J-O
Version 5.2
Jeu de rôle (version SQL)
Définit la table 'personnage' stockant et mettant à jour les attributs des personnages,
Définit la classe Personnage, une fonction de combat, initialise une base de données si non existante,
Initialise les 2 combattants (saisie clavier du nom et de la catégorie de chaque combattant),
Lance le combat (fonction Main_Combat() ),
Met à jour la DB avec les évolutions des caractéritiques des personnages créés,
Affiche le résultat à chaque échange puis affiche le résultat final.
"""
import random
import sqlite3
class Personnage:
2 years ago
2 years ago
def __init__ (self, nom, cat):
'''Initialisation de la class "Personnage" ayant comme attribus:
nom, hp (pdv, points de vie), xp (exp), cat, inventaire
'''
'''Attributs invariants :
nom : nom du personnage
cat : la catégorie (guerrier, magicien, voleur, elfe)
Attribut "suplémentaire" pour l'utilisation de la DB :
ident : l'ident du personnage dans la DB
(Dans cette version du jeu, 'ident' n'est utile que pour différentier 2 joueurs
du même nom et de même catégorie des fois qu'on tombe sur un petit malin :-) )
'''
2 years ago
2 years ago
self.nom = nom
self.hp = 20
self.xp = 1
self.cat = cat
2 years ago
2 years ago
if self.cat == "guerrier" :
self.inventaire = "épée, potion"
elif self.cat == "magicien" :
self.inventaire = "bâton, potion"
elif self.cat == "voleur" :
self.inventaire = "dague, potion"
elif self.cat == "elfe" :
self.inventaire = "arc, potion"
2 years ago
2 years ago
'''On met à jour la DB avec les infos du personnage et on récupère son identification DB :'''
2 years ago
2 years ago
c_myDB.execute("INSERT INTO Personnages (nom, cat, xp, hp, inventaire) VALUES (?,?,?,?,?);", (self.nom, self.cat, self.xp, self.hp, self.inventaire))
conn.commit()
c_myDB.execute("SELECT last_insert_rowid();")
self.ident = c_myDB.fetchone()[0]
2 years ago
2 years ago
def jet_attaque (self):
'''Renvoie le jet d'attaque.'''
if self.cat == "guerrier" or self.cat == "magicien":
coef = 10
elif self.cat == "voleur":
coef = 3
elif self.cat == "elfe":
coef = 8
return random.randint(1, 20) + self.xp * coef
2 years ago
2 years ago
def jet_defense (self):
'''Renvoie le jet de défense.'''
if self.cat == "guerrier":
coef = 8
elif self.cat == "magicien":
coef = 7
elif self.cat == "voleur":
coef = 9
elif self.cat == "elfe":
coef = 10
return random.randint(1, 20) + self.xp * coef
2 years ago
2 years ago
def change_hp (self, nb_hp):
self.hp = self.hp + nb_hp
c_myDB.execute("UPDATE personnages SET hp=? WHERE ident=?;", (self.hp, self.ident))
conn.commit()
2 years ago
2 years ago
def change_xp (self, nb_xp):
self.xp = self.xp + nb_xp
c_myDB.execute("UPDATE personnages SET xp=? WHERE ident=?;", (self.xp, self.ident))
conn.commit()
2 years ago
2 years ago
def affiche_caracteristiques (self):
print("Le Grand", self.nom, " : ", self.cat, ", Points de vie : ", self.hp, ", Expérience : ", self.xp)
2 years ago
2 years ago
def affiche_inventaire (self):
print("Inventaire : ", self.inventaire)
2 years ago
2 years ago
def Main_Combat ():
'''
2 years ago
Fonction qui simule un combat
2 years ago
Player 1 attaque en premier, puis player 2 ... jusqu'à ce qu'un joueur n'ait plus de point de vie.
Mise à jour de la DB au fur et à mesure que la partie avance
Sortie : on affiche le gagnant et les caractéristiques des combattants (le gagnant voyant son Xp incrémentée de 1)
2 years ago
2 years ago
'''
2 years ago
2 years ago
'''
Initialisation d'une variable i permettant de changer d'attaquant entre deux coups :
dans le code, si i est impaire, player 1 attaque, si i est paire, player 2 attaque.
'''
print("**********************************")
2 years ago
2 years ago
i=1
2 years ago
2 years ago
while player1.hp > 0 and player2.hp > 0:
if i % 2 != 0 :
''' i impair : attaque de player 1 '''
if player1.jet_attaque() > player2.jet_defense() :
player2.change_hp(- random.randint(1, 8))
print(player1.nom," gagne son attaque, ", player2.nom," perd des points !" )
else :
player1.change_hp(- random.randint(1, 4))
print(player1.nom, " perd son attaque, ", player1.nom," perd des points !")
2 years ago
else :
2 years ago
''' i pair => attaque de player 2'''
if player2.jet_attaque() > player1.jet_defense() :
player1.change_hp(- random.randint(1, 8))
print(player2.nom," gagne son attaque, ", player1.nom," perd des points !" )
else :
player2.change_hp(- random.randint(1, 4))
print(player2.nom, " perd son attaque, ", player2.nom," perd des points !" )
i=i+1
2 years ago
2 years ago
print("Bilan des 2 joueurs suite à l'attaque :")
player1.affiche_caracteristiques()
player2.affiche_caracteristiques()
print("**********************************")
2 years ago
2 years ago
if player1.hp <= 0:
winner = player2.nom
player2.change_xp(+1)
else :
winner = player1.nom
player1.change_xp(+1)
2 years ago
2 years ago
print("FIN DU COMBAT !!!")
print("Le gagnant du combat est le Grand ", winner, " en ", i-1, " échange(s)")
player1.affiche_caracteristiques()
player2.affiche_caracteristiques()
print("**********************************")
2 years ago
2 years ago
'''Rejouer :'''
rejouer()
2 years ago
2 years ago
def rejouer():
2 years ago
2 years ago
print("ΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦ")
print("Vous pouvez rejouer, vos combattants seront remis à leur état de vie initiale, mais garderont l'expérience gagnée")
replayQuestion = input("Voulez-vous rejouer ? (oui ou non)")
print("ΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦ")
2 years ago
2 years ago
if replayQuestion == 'oui':
player1.hp = 20
player2.hp = 20
2 years ago
2 years ago
Main_Combat()
elif replayQuestion == 'non':
print('Bonne journée')
''' Fermeture DB : '''
conn.close()
else:
rejouer()
'''********************************************************************'''
''' Lancement application '''
'''********************************************************************'''
print ("Jeu de rôle - choississez 2 combattants : leurs noms et leurs catégories, et le combat démarre !")
''' *** 1. connexion et création DB : *** '''
conn = sqlite3.connect('jeu_db.db')
c_myDB = conn.cursor()
c_myDB.execute ('''CREATE TABLE if not exists Personnages
(ident INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT NOT NULL, cat TEXT NOT NULL, xp FLOAT NOT NULL, hp FLOAT NOT NULL, inventaire TEXT NOT NULL) ''')
''' *** 2. Instanciation de 2 combattants : *** '''
Test=False
while (Test==False):
player1 = Personnage(input("Joueur 1, veuillez choisissez votre nom : "), input("Joueur 1, veuillez choisissez votre catégorie (guerrier, magicien, elfe, voleur) : "))
player2 = Personnage(input("Joueur 2, veuillez choisissez votre nom : "), input("Joueur 2, veuillez choisissez votre catégorie (guerrier, magicien, elfe, voleur): "))
if (player1.cat=="guerrier" or player1.cat=="magicien" or player1.cat=="voleur" or player1.cat=="elfe" ) and (player2.cat=="guerrier" or player2.cat=="magicien" or player2.cat=="voleur" or player2.cat=="elfe"):
Test = True
else:
print("Cette catégorie de personnage n'existe pas !")
2 years ago
2 years ago
''' *** 3. Fonction Combat (qui intègre les échanges avec la DB) : *** '''
Main_Combat()