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.

215 lines
7.8 KiB

# -*- coding: utf-8 -*-
"""
Cahier des charges respecté, sans ajout personnel.
Pas de gestion d'un joueur qui existerait déjà.
Code propre et fonctionnel.
Note : 9 / 10
"""
"""
É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:
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 :-) )
'''
self.nom = nom
self.hp = 20
self.xp = 1
self.cat = cat
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"
'''On met à jour la DB avec les infos du personnage et on récupère son identification DB :'''
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]
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
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
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()
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()
def affiche_caracteristiques (self):
print("Le Grand", self.nom, " : ", self.cat, ", Points de vie : ", self.hp, ", Expérience : ", self.xp)
def affiche_inventaire (self):
print("Inventaire : ", self.inventaire)
def Main_Combat ():
'''
Fonction qui simule un combat
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)
'''
'''
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("**********************************")
i=1
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 !")
else :
''' 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
print("Bilan des 2 joueurs suite à l'attaque :")
player1.affiche_caracteristiques()
player2.affiche_caracteristiques()
print("**********************************")
if player1.hp <= 0:
winner = player2.nom
player2.change_xp(+1)
else :
winner = player1.nom
player1.change_xp(+1)
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("**********************************")
'''Rejouer :'''
rejouer()
def rejouer():
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("ΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦΦ")
if replayQuestion == 'oui':
player1.hp = 20
player2.hp = 20
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 !")
''' *** 3. Fonction Combat (qui intègre les échanges avec la DB) : *** '''
Main_Combat()