~ S'évader de la banalité... Et entrer dans l'imaginaire ! ~
 
AccueilGuelnika, le site de E-m !S'enregistrerConnexion

Partagez | 
 

 Programmation (le retour du topic des geeks qui se lavent pas, ou peu)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4 ... 10, 11, 12  Suivant
AuteurMessage
Falco
Maker qui quitte vraiment E-m Lv 60
Maker qui quitte vraiment E-m Lv 60


Nombre de messages : 13506

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Jeu 14 Fév 2013 - 6:23

Y'en a qui s'y connaissent un peu en Batch ?
Je réalise une nouvel version de RM Launcher, et j'ai ce code pour l'installation de police :

Code:
rem on désactive l'écho local
@echo off
cls
rem on copie les polices
rem %windir% correspond ordinairement à C:\Windows\
copy polices\mapolice.ttf %windir%\Fonts\mapolice.ttf
...etc...
rem si Windows n'est pas un Windows de type NT,le programme quitte
rem sous Windows NT,le programme s'arrete automatiquement à la derniere ligne

if not "OS"=="Windows_NT" exit

J'aimerai replacer "copy polices/mpolice..ttf" par "copier tout ce qui se trouve dans le dossier polices", ça me ferai gagner un peu de temps.
Vous savez si c'est possible ?
Revenir en haut Aller en bas
garywiss6
Rétrograde Lv 54
Rétrograde Lv 54


Nombre de messages : 5175
Age : 21

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Jeu 14 Fév 2013 - 8:59

"copy polices/*" Owi toutafé olala

____________
Un soir banal sur skype a écrit:
Moi : C'était quoi ce cri ?
Choco : C'est ma saucisse qui a hurlé.
Revenir en haut Aller en bas
http://vuesubjective.org/Garywiss/
Empty
Mangeur de manettes Lv 65
Mangeur de manettes Lv 65


Nombre de messages : 16363
Age : 30

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Ven 22 Fév 2013 - 9:19

Pourquoi Eclipse me prend la tête une fois sur deux ?

Même un truc con comme un "hello world", sans erreur de syntaxe, sans la moindre erreur tout court, il ne veut pas compiler Boxing day

Vive les langages interprétés ...

____________
Revenir en haut Aller en bas
http://e-magination.jeun.fr
AristA
Maker qui quitte vraiment E-m Lv 60
Maker qui quitte vraiment E-m Lv 60


Nombre de messages : 10881
Age : 19

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Mer 6 Mar 2013 - 14:33

Comme dit le peu le précédemment dans la zone qui s'appelle le Jardin, j'ai commencé à faire le moteur de combat en texte en le Python.

Je suis à plus de 650 lignes là, mais j'arrive toujours pas à importer mes propres fichiers python donc du coup j'ai toutes les fonctions, les classes qui se baladent un peu, c'est le dawa, le bordel, le zouk, le bronx. D'ailleurs je travaille toujours avec l'IDLE de le Python, ce qui n'est pas très pratique du point de vue de l'organisation. KoZzY (ou quelqu'un d'autre peu importe), tu connaîtrais pas un bon workspace sur Linux compatible avec Python 3.3 (rien que ça) ?

J'ai essayé eclipse mais j'arrivais pas à lancer automatiquement python 3.3 au lieu du 2.7.

Eventuellement je peux passer le code (la phrase la plus dite par ma personne dans le topic ici présent j'ai l'impression) parce que c'est rigolo et épique (mais mal organisé).

edit : bon osef je passe le code quand même pour que vous me disiez si c'est rigolo ou pas (mais le rire est garanti)

Code:
#Combat en mode texte par AristA (épique !)
import random, sys, math

NOMDUJEU = "Combat en mode texte"
POINTS = 100

#Fonctions : #########################

def lancer(nbr=1, m=None):
    a = 0
    if m != None:
        print(m)
    if nbr == 1:
        print("\n>>Le dé est lancé...")
        a = random.randint(1,6)
        print("  -Lancé : {}\n".format(a))
    else:
        print("\n>>Les {} dés sont lancés...".format(nbr))
        for i in range(nbr):
            b = random.randint(1,6)
            print("  -Lancé {} : {}".format(i, b))
            a += b
        print("  -La somme des dés est de {}.\n".format(a))
    return a

def iAleatoire(maximum):
    """Renvoit True si le tirage est gagnant (r==1)"""
    r = random.randint(1,math.fabs(maximum))
    return r==1

def repNbr(maximum=999, minimum=0, m=""):
    """Demande un nombre."""
    message = ("La donnée entrée n'est pas correcte.")
    while 1:
        a = input(m)
        try:
            a = int(a)
            if a <= maximum:
                if a >= minimum:
                    return a
                else:
                    print(message, "(Nombre trop petit.)")
            else:
                print(message, "(Nombre trop élevé.)")
        except:
            print(message)

def defense(defenseur):
    print("{} se défend et triple sa défense.".format(defenseur.nom))
    return True

def attaque(attaquant, cible, spell=None):
    #Retourne les nouveaux pv de la cible
    annonce1 = "{} attaque...".format(attaquant.nom)
    annonce2 = "{} se défend...".format(cible.nom)
    annonce3 = "{} augmente les capacités de sa compétence...".format(attaquant.nom)
    if spell==None: #On fait une attaque de base.
        print("\n{} attaque {} !".format(attaquant.nom, cible.nom))
        c = cible.defense
        if cible.parade is True:
            c = c*3
        a = attaquant.basicAttack(lancer(m=annonce1)) - c
    else: #C'est à dire qu'on lance un sort.
        if cible == attaquant:
            print("\n{} utilise {} sur soi-même !".format(attaquant.nom, spell.nom))
            a = spell.dommages(attaquant,lancer(m=annonce3))
        else:
            print("\n{} utilise {} sur {} !".format(attaquant.nom, spell.nom, cible.nom))
            c = cible.defense
            if spell.genre == 'intel':
                a = spell.dommages(attaquant,lancer(m=annonce3)) - (c/3)
            else:
                if cible.parade is True:
                    c = c*3
                if cible is heros:
                    a = spell.dommages(attaquant,lancer(m=annonce3)) - (c*lancer(m=annonce2)/3.5)
                else: a = spell.dommages(attaquant,lancer(m=annonce3)) - (c*lancer(m=annonce2)/5)
        if spell.effet != None: #Il faut appliquer l'effet.
            b = lancer(m="{} lance le dé pour infliger {}...".format(attaquant.nom, spell.effet.nom))
            if spell.effet.win.count(b)>0:
                print("Lancé réussi !")
                if cible.etat.count(spell.effet)<1:
                    cible.etat.append(spell.effet)
                    print("{} est sous l'état {} désormais.".format(cible.nom, spell.effet.nom))
                else:
                    print("{} est déjà sous l'état {} !".format(cible.nom, spell.effet.nom))
            else:
                print("Lancé raté... \n{} ne subit aucun effet supplémentaire.".format(cible.nom))
    a = round(a)
    if spell == None:
        if a < 1:
            a = 1
    else:
        if spell.degats>0 and a<1:
            a=1
        elif spell.degats<0 and a>1:
            a=-1
    if a > 0: print("{} a perdu {} PV suite à l'attaque de {}.".format(cible.nom, round(a), attaquant.nom))
    else: print("{} a regagné {} PV suite à son attaque.".format(cible.nom, math.fabs(round(a))))
    if spell is None: return round(cible.hp - a)
    else: return round(cible.hp - a), attaquant.mp - spell.cout

def gameOver():
    print("Vous avez perdu... Le jeu s'arrête ici pour vous."
          "\nUn petit souvenir de votre personnage :")
    heros.affResume()
    heros.affSort()
    input("Appuyez sur Entrée pour quitter.")
    sys.exit()

def creerProtagoniste():
    while 1:
        pts = POINTS
        m = "\nIl vous reste {} points à attribuer."
        nom = input("Entrez le nom de votre héros : ").capitalize()
        if nom == "":
            nom = "Sriden"
        print("\nVous disposez de {} points à distribuer pour déterminer les\n "
              "caractéristiques de votre héros, {}. Attribuez les avec soin et,\n "
              "surtout, dépensez les tous !".format(pts, nom))
        print("\nCombien de Point de Vie (PV) ? Cela déteminera l'endurance de votre\n "
              "héros en combat. Minimum : 1 (sinon vous mourrez tout de suite)")
        print(m.format(pts))
        hp = repNbr(pts, 1)
        pts -= hp
        print("\nCombien de Point de Magie (MP) ? Cela déterminera combien de sorts\n "
              "pourra lancer votre héros.")
        print(m.format(pts))
        mp = repNbr(pts)
        pts -= mp
        print("\nCombien d'Attaque ? Cela déterminera la puissance des attaques de\n "
              "base et des sorts physiques de votre héros.")
        print(m.format(pts))
        attaque = repNbr(pts)
        pts -= attaque
        print("\nCombien d'Intelligence ? Cela déterminera la puissance des sorts\n "
              "magiques de votre héros.")
        print(m.format(pts))
        intel = repNbr(pts)
        pts -= intel
        print("\nCombien de Défense ? Cela déterminera votre abilité à résister aux\n "
              "différentes attaques adverses.")
        print(m.format(pts))
        defense = repNbr(pts)
        pts-= defense
        heros = Protagoniste(nom, hp, mp, attaque, intel, defense)
        heros.affResume()
        print("\nC'est correct ? (Oui/Non)")
        cont = input().lower()
        if cont == "oui" or cont == "o":
            print("Votre héros {} a bien été créé !\n".format(nom))
            break
        else:
            print("Dans ce cas, on recommence.\n")
    return heros

def newEnn(adv, nom=""):
    """Retourne l'adversaire."""
    if nom == "":
        nom = adv.nom
    a = Protagoniste(nom, adv.hp, adv.mp, adv.attaque, adv.intel, adv.defense)
    a.sorts = adv.sorts
    return a

def choixCible(adv):
    print("\n>>Quel cible ?")
    i=0
    for adversaire in adv:
        i+=1
        print("  {}. {}".format(i,adversaire.nom))
    rep = repNbr(i, 1)
    return rep-1

def menuCombat():
    """Affichage des options."""
    print("\n>>Que faire ?"
          "\n  1. Attaquer"
          "\n  2. Sort"
          "\n  3. Se défendre"
          "\n  4. Objet"
          "\n  5. Passer son tour.")
    action = repNbr(5,1)
    return action

def menuSort():
    """Retourne le sort choisi"""
    i = heros.affSorts()+1
    print("  {}. Annuler.".format(i))
    while 1:
        rep = repNbr(i, 1)
        if rep == i:
            return None
        elif heros.mp < heros.sorts[rep-1].cout:
            print("Vous n'avez pas assez de MP pour lancer ce sort !")
        else: return heros.sorts[rep-1]

def menuObjet():
    i = heros.affObjets()+1
    print("  {}. Annuler.".format(i))
    while 1:
        rep = repNbr(i, 1)
        if rep == i:
            return None
        else: return heros.objets[rep-1]

def testMorts(adv):
    testwin = True
    morts = list()
    i = 0
    for nadv in adv:
        if nadv.vivant() is True:
            testwin = False
        else:
            print("{} est mort !".format(nadv.nom))
            morts.append(i)
        i += 1
    for ide in morts:
        adv.pop(ide)
    return adv, testwin
           
def affrontement(adv):
    """Renvoit True (win) ou False (loose) en fonction de l'issue."""
    global heros
    #Rappel du combat
    advlit = ""
    i = 0
    for nadv in adv:
        i += 1
        advlit += nadv.nom
        if i < len(adv):
            advlit += ", "
    print("\n{} contre {}.".format(heros.nom, advlit))
    tour = 0
    while 1:
        tour+=1
        print("\n>>Tour {}.".format(tour))
        heros.tour()
        for nadv in adv:
            nadv.tour()
        if heros.hp<=0:
            print("{} est mort !".format(heros.nom))
            return False
        adv, testwin = testMorts(adv)
        if testwin is True:
            print("Victoire !")
            return True
        #Tour du héros
        while 1:
            action = menuCombat()
            heros.parade = False
            if action == 1:
                #Attaquer
                nadv = choixCible(adv)
                adv[nadv].hp = attaque(heros, adv[nadv])
                break
            elif action == 2:
                #Sort
                spell = menuSort()
                if spell != None:
                    if spell.degats>0:
                        nadv = choixCible(adv)
                        adv[nadv].hp, heros.mp = attaque(heros, adv[nadv], spell)
                        break
                    else: #Sort de soin
                        heros.hp, heros.mp = attaque(heros, heros, spell)
                        break
            elif action == 3:
                #Se défendre
                heros.parade = defense(heros)
                break
            elif action == 4:
                #Inventaire
                obj = menuObjet()
                if obj != None:
                    heros = obj.use(heros)
                    heros.objets[obj.position(heros)].qte -= 1
                    if heros.objets[obj.position(heros)].qte<1:
                        heros.objets.remove(obj)
                    break
            elif action == 5:
                #Passer son tour.
                break
        #Morts des ennemis
        adv, testwin = testMorts(adv)
        if testwin is False:
            print("\n>>Tour des ennemis.")
            #Tour des ennemis
            for nadv in range(len(adv)):
                input("Appuyez sur Entrée...")
                adv[nadv].parade = False
                adv[nadv] = iArtificielle(adv[nadv])
                if heros.hp<=0:
                    print("{} est mort !".format(heros.nom))
                    return False
        input("Appuyez sur Entrée...")

def iArtificielle(monstre):
    #Super intelligence artificielle 3000
    action = False
    if monstre.hp/monstre.maxhp < 10:
        if iAleatoire(3) is True and action is False: #On se défend
            monstre.parade = defense(monstre)
            action = True
    else:
        if iAleatoire(5) is True and action is False: #On se défend
            monstre.parade = defense(monstre)
            action = True
    if iAleatoire(2) is True and action is False: #On lance un sort
        if monstre.sorts != []:
            spell = random.choice(monstre.sorts)
            if spell != None and monstre.mp - spell.cout >= 0:
                heros.hp, monstre.mp = attaque(monstre, heros, spell)
                action = True
    if action is False:
        heros.hp = attaque(monstre, heros)
    return monstre
       
def choisirSort():
    print("\nLe vieillard vous montre sa besace, remplie de divers parchemins avec différentes inscriptions\n"
          "sur chacun d'eux :")
    i = vieux.affSorts()
    choix = repNbr(i,1)
    return vieux.sorts[choix-1]

def boutique(buyer):
    return buyer

#Classes : ############################
     
class Protagoniste:
    def __init__(self, nom, hp, mp, attaque, intel, defense):
        self.nom = nom
        self.lvl = 1
        self.pts = 0
        self.hp = hp
        self.mp = mp
        self.maxhp = hp
        self.maxmp = mp
        self.attaque = attaque
        self.intel = intel
        self.defense = defense
        self.etat = list()
        self.sorts = list()
        self.objets = list()
        self.parade = False
    def basicAttack(self, des):
        #Attaque de base, retourne les dégâts de l'attaque.
        x = ((2*des) + (self.attaque*2.8))/3
        return round(x)
    def learn(self, sort):
        #Apprend un sort au protagoniste
        if self.sorts.count(sort)<1:
            self.sorts.append(sort)
    def give(self,objet,x=1):
        #Donne un objet au protagoniste
        for i in range(x):
            if self.objets.count(objet)<1:
                self.objets.append(objet)
            else:
                self.objets[objet.position(self)].qte += 1
    def vivant(self):
        return self.hp > 0
    def maxhpmp(self):
        if self.hp > self.maxhp:
            self.hp = self.maxhp
        if self.mp > self.maxmp:
            self.mp = self.maxmp
        if self.mp < 0:
            self.mp = 0
        if self.hp < 0:
            self.hp = 0
    def tour(self):
        """A lancer à chaque tour"""
        #Régénération en mana et en hp.
        if self.vivant() is True:
            hp = round(((self.defense/1.5)+(self.maxhp/20))/7)
            mp = round(((self.intel/1.5)+(self.maxmp/20))/7)
            if self.hp+hp > self.maxhp:
                hp = self.maxhp - self.hp
            if self.mp+mp > self.maxmp:
                mp = self.maxmp - self.mp
            self.hp += hp
            self.mp += mp
            if hp > 0 and mp > 0:
                print("  -{} régénére {} PV et {} MP.".format(self.nom, hp, mp))
            elif hp > 0 and mp == 0:
                print("  -{} régénére {} PV.".format(self.nom, hp))
            elif hp == 0 and mp > 0:
                print("  -{} régénére {} MP.".format(self.nom, mp))
            #Application des dégâts des effets.
            if self.etat != None:
                for e in self.etat:
                    efDeg = e.degats
                    if self.hp-efDeg > self.maxhp:
                        efDeg = self.maxhp-self.hp
                    self.hp -= efDeg
                    if e.degats > 0:
                        print("  -{} perd {} PV suite à l'effet {}.".format(self.nom, efDeg, e.nom))
                    elif e.degats < 0:
                        print("  -{} regagne {} PV grâce à l'effet {}.".format(self.nom, math.fabs(efDeg), e.nom))
            self.maxhpmp()
            print("  -{} a {}/{} PV et {}/{} MP.".format(self.nom, self.hp, self.maxhp, self.mp, self.maxmp))
    def levelUp(self):
        self.lvl+=1
        print("Vous gagnez un nouveau niveau ! Vous êtes désormais niveau {}.".format(self.lvl))
        print("Vous gagnez 2 Points de Vie et 1 Point de Magie !")
        self.hpmax+=2
        self.mpmax+=1
        self.points += 10
        self.affResume()
        while 1:
            pts = self.points
            print("\nVous gagnez {} points à dépenser dans vos différentes caractéristiques.".format(pts))
            a1 = repNbr(0,pts,"Points de Vie ({}pts restants) : ".format(pts))
            pts -= a1
            a2 = repNbr(0,pts,"Points de Magie ({}pts restants) : ".format(pts))
            pts -= a2
            a3 = repNbr(0,pts,"Attaque ({}pts restants) : ".format(pts))
            pts -= a3
            a4 = repNbr(0,pts,"Intelligence ({}pts restants) : ".format(pts))
            pts -= a4
            a5 = repNbr(0,pts,"Intelligence ({}pts restants) : ".format(pts))
            pts -= a5
            print("\nIl vous reste {} point(s).".format(pts))
            self.maxhp += a1
            self.maxmp += a2
            self.attaque += a3
            self.intel += a4
            self.defense += a5
            self.affResume()
            print("\nC'est correct ? (Oui/Non)")
            rep = input().lower()
            if a == "o" or a == "oui":
                self.points -= a1+a2+a3+a4+a5
                print("Votre personnage a bien eu ses caractéristiques modifiées !")
                break
            else:
                self.maxhp -= a1
                self.maxmp -= a2
                self.attaque -= a3
                self.intel -= a4
                self.defense -= a5
        self.reposer()
    def reposer(self):
        """Remet les hp et les mp au max."""
        self.hp = self.hpmax
        self.mp = self.mpmax
    def affObjets(self):
        print("\nListe des objets :")
        i = 0
        for obj in self.objets:
            i+=1
            a = "  {}. "
            a += obj.aff()
            print(a.format(i))
        return i
    def affSorts(self):
        print("\n>>Liste des sorts :")
        i = 0
        for sort in self.sorts:
            i += 1
            a = "  {}. "
            a += sort.aff(self)
            print(a.format(i))
        return i
    def affResume(self):
        print("\n>>Résumé de votre personnage :"
              "\n  -Nom : {}\n  -PV : {}\n  -MP : {}\n  -Attaque : {}\n  "
              "-Intelligence : {} \n  -Défense : {}".format(self.nom, self.hp, self.mp, self.attaque, self.intel, self.defense))

class Sort:
    def __init__(self, nom, degats, ratio, cout, genre="intel", effet=None):
        self.nom = nom
        self.degats = degats
        self.genre = genre
        self.ratio = ratio
        self.cout = cout
        self.effet = effet
    def degatsBase(self, lanceur):
        if self.genre == "intel":
            a = lanceur.intel*self.ratio
        elif self.genre == "attaque":
            a = lanceur.attaque*self.ratio
        else:
            print("#Erreur : Sort de genre indéterminé.")
            a = 0
        if self.degats>0:
            return self.degats+a
        else: return self.degats-a
    def dommages(self, lanceur, des):
        b = des*self.cout/4
        if self.degats>0:
            return self.degatsBase(lanceur)+b
        else: return self.degatsBase(lanceur)-b
    def aff(self,lanceur):
        a, b = "{} ({} MP): ", ""
        if self.degats > 0:
            if self.genre == "intel":
                a += "Inflige {} dégâts magiques à l'adversaire. "
            elif self.genre == "attaque":
                a += "Inflige {} dégâts physiques à l'adversaire. "
        elif self.degats < 0:
            if self.genre == "intel":
                a += "Permet de regagner {} PV (ratio magique). "
            elif self.genre == "attaque":
                a += "Permet de regagner {} PV (ratio physique). "
        a = a.format(self.nom,self.cout,math.fabs(self.degatsBase(lanceur)))
        if self.effet != None:
            if self.effet.degats > 0:
                b = "\n  Peut également infliger {}, qui retire {} PV par tour à l'adversaire. "
            elif self.effet.degats < 0:
                b = "\n  Peut également infliger {}, qui vous redonne {} PV par tour. "
            else:
                b = "\n  Peut également infliger {}, qui ne blesse pas l'adversaire. "
            b = b.format(self.effet.nom, math.fabs(self.effet.degats))
        return a + b

class Effet: #Les effets altèrent l'état des protagonistes.
    def __init__(self, nom, lancersGagnants=[1], degatsParTour=0):
        self.nom = nom
        self.win = lancersGagnants
        self.degats = degatsParTour

class Objet:
    def __init__(self, nom, quantite, hpmodif, mpmodif):
        self.nom = nom
        self.hpmodif = hpmodif
        self.mpmodif = mpmodif
        self.qte = quantite
    def aff(self):
        a = "{} (x{})".format(self.nom, self.qte)
        t = False
        if self.hpmodif > 0:
            if t is False:
                a+= "\n  "
                t = True
            a+="Redonne {} PV. ".format(self.hpmodif)
        if self.mpmodif > 0:
            if t is False:
                a+= "\n  "
                t = True
            a+= "Redonne {} MP. ".format(self.mpmodif)
        return a
    def position(self, possesseur):
        i = 0
        for obj in possesseur.objets:
            if obj == self:
                return i
            i+=1
    def use(self, cible):
        cible.hp += self.hpmodif
        if self.hpmodif > 0:
            print("{} regagne {} PV grâce à l'utilisation de {}.".format(cible.nom, self.hpmodif, self.nom))
        cible.mp += self.mpmodif
        if self.mpmodif > 0:
            print("{} regagne {} MP grâce à l'utilisation de {}.".format(cible.nom, self.mpmodif, self.nom))
        cible.maxhpmp()
        return cible

#Contenu : ###########################
#Effets :
efSommeil = Effet("Sommeil")
efEtourdi = Effet("Etourdissement", [1,2])
efCicatrisation = Effet("Cicatrisation", [1,3], -7)
efPansement = Effet("Pansement", [1], -5)
efEmbrasement = Effet("Embrasement", [1,6], 7)
efImmolation = Effet("Immolation", [1,3], 11)
efSaignement = Effet("Saignement", [2,4,6], 5)

#Sorts :
#Sorts des monstres
soTaillade = Sort("Taillade",0.5,1.2,3,'attaque')
soJetdos = Sort("Jet d'os",3,0.6,2)
soGriffure = Sort("Griffure",5,0.4,2,'attaque')

#Sorts du héros
soBouleFeu = Sort("Boule de feu",9,1,3,effet=efEmbrasement)
soFlammes = Sort("Flammes",12,1.3,5,effet=efImmolation)
soSouffleRep = Sort("Souffle réptilien",15,1.5,7,effet=efImmolation)
soDecoupe = Sort("Découpe",2,1.5,3.5,'attaque')
soTrancher = Sort("Trancher",3,1.7,4.5,'attaque')
soInciser = Sort("Inciser",4,1.9,6,'attaque',efSaignement)
soSoin = Sort("Soin",-15,0.3,3.5)
soSoinU = Sort("Soin+",-20,0.4,5)
soSoinUU = Sort("Soin++",-25,0.55,8,effet=efCicatrisation)
soMedecine = Sort("Médecine",-7,0.2,3.5,'attaque')
soMedecineU = Sort("Médecine+",-15,0.35,5,'attaque',efPansement)

#Ennemis : #NOM, HP, MP, ATT, INTEL, DEF
enZombie = Protagoniste("Zombie",23,3,10,0,3)
enZombie.sorts = [soTaillade, soGriffure]
enSquelette = Protagoniste("Squelette",30,15,14,10,6)
enSquelette.sorts = [soJetdos]
enBourreau = Protagoniste("Bourreau",50,8,20,9,9)
enBourreau.sorts = [soTaillade,None]
enChien = Protagoniste("Chien",13,0,26,1,4)

#Objets :
obFioleRouge = Objet("Fiole rouge", 1, 20, 0)
obFioleBleue = Objet("Fiole bleue", 1, 0, 10)

#Jeu ! Enfin !
vieux = Protagoniste("Vieillard",1,1,0,0,0)

print(">>{} par AristA, un jeu épique et mouvementé pour les plus tarés d'entre nous.\n".format(NOMDUJEU))
print(">>Dans quel mode jouer ?\n  -Test (t)\n  -Histoire (h)")
mode = input().lower()
if mode == 'h':
    print("Dans un monde où le chaos règne, dans un monde où la magie est devenue une arme, dans un monde \n"
          "où chacun est libre de se battre, vous voici arrivé. Oui, vous, épée à la main, brandie vers le \n"
          "ciel, fier et vaillant, prêt à tout pour combattre les dépravés et les hérétiques. Votre soif de \n"
          "sang est insatiable et, nerveusement, vous n'attendez que le combat.\n\nMais, pour cela, il vous "
          "faut déjà savoir qui vous êtes.\n")
    heros = creerProtagoniste()
    print("Vous pénétrez dans l'immense colisée où on lieu tous les affrontements, mais un viellard vous \n"
          "arrête en vous prenant par l'épaule. Vous vous retournez, surpris, et l'aïeul vous dit :\n\n"
          "« Vous allez vous battre ? Je vois. Vous savez, personne ne gange à main nues, pas même les \n"
          "plus braves et les plus vaillants des guerriers ; mais vous m'avez croisé, et j'admire votre \n"
          "obstination aveugle envers le combat. Je vous offre un sortilège, qui consommera vos Points de \n"
          "Magie lorsque vous le lancerez en combat. Tous les deux niveaux que vous gagnerez, où vous \n"
          "deviendrez plus fort, je vous en offrirait un autre, afin que vous puissiez diversifier \nvos techniques. »")
    vieux.sorts = [soBouleFeu,soDecoupe,soSoin,soMedecine]
    #vieux.objets =
    heros.learn(choisirSort())
    print("Vous vous apprêtez à partir, mais le vieillard vous retient encore une fois, cette fois en vous \n"
          "tendant des fioles bleues et rouges. « Vous en aurez besoin » vous assure-t-il alors que vous le \n"
          "quittez.\n")
    heros.give(obFioleRouge,2)
    heros.give(obFioleBleue,2)
    print("Mais déjà, votre premier combat se profile. Face à vous se dresse un premier groupe de monstres.\n"
          "La foule les acclame, impatiente de voir le massacre qu'ils vont faire de vous, mais vous ne\n"
          "l'entendez pas de cette oreille. Vous faites craquer vos doigts, et vous avancez au centre sableux\n"
          "de la large arène circulaire.\n")
else:
    heros = Protagoniste("Gérard",30,10,20,20,20)
    heros.sorts=[soBouleFeu,soFlammes,soSouffleRep,soDecoupe,soTrancher,soInciser,
                soSoin,soSoinU,soSoinUU,soMedecine,soMedecineU]
    heros.give(obFioleRouge,5)
    heros.give(obFioleBleue, 10)
    mode = 't'
v = True
while v:
    print(">>PREMIER COMBAT !\n")
    input("Appuyez sur Entrée pour continuer...")
    v = affrontement([newEnn(enZombie, "Zombie 1"),newEnn(enZombie, "Zombie 2"),newEnn(enSquelette)])
    if v is False: break
    print("Vous vous relevez, affaibli par le combat mais vaillant. La foule est déçue, elle voulait vous\n"
          "voir dévoré par les avides créatures. Mais ce n'est pas vous, vous êtes bien plus coriace que ça.\n")
    heros.levelUp()
    heros = boutique(heros)
    print("Vous vous relevez, tremblant.")
    #Bon je ferai la suite plus tard bande de moules
gameOver()

Normalement ça devrait boucler/crasher après/avant le premier combat.
Revenir en haut Aller en bas
http://arista.lescigales.org
garywiss6
Rétrograde Lv 54
Rétrograde Lv 54


Nombre de messages : 5175
Age : 21

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Jeu 7 Mar 2013 - 10:39

Tu as oublié le shebang ET l'encoding nerd

Sinon je test ça de suite Very Happy

EDIT :

Code:
>>Combat en mode texte par AristA, un jeu épique et mouvementé pour les plus tarés d'entre nous.

>>Dans quel mode jouer ?
  -Test (t)
  -Histoire (h)

Traceback (most recent call last):
  File "./RPG.py", line 609, in <module>
    mode = input().lower()
  File "<string>", line 0
   
    ^
SyntaxError: unexpected EOF while parsing

Ah ou c'est pas bien, très mauvaise gestion des erreurs Nerd Sang (anyway je ne sais pas comment demarrer nerd )

____________
Un soir banal sur skype a écrit:
Moi : C'était quoi ce cri ?
Choco : C'est ma saucisse qui a hurlé.
Revenir en haut Aller en bas
http://vuesubjective.org/Garywiss/
AristA
Maker qui quitte vraiment E-m Lv 60
Maker qui quitte vraiment E-m Lv 60


Nombre de messages : 10881
Age : 19

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Jeu 7 Mar 2013 - 10:48

C'est quoi le shebang et l'encoding ? Tu l'as bien lancé avec Python 3.3 également ?

La dernière version (qui peut être ne plante pas)

Revenir en haut Aller en bas
http://arista.lescigales.org
garywiss6
Rétrograde Lv 54
Rétrograde Lv 54


Nombre de messages : 5175
Age : 21

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Jeu 7 Mar 2013 - 10:54

Le shebang et l'encoding c'est

#!/usr/bin/python3.3
# -*-coding:Utf-8 -*

Mais ça n'y etais pas sur le code du topic

Et je n'ai pas python3.3 donc je le dl de suite

____________
Un soir banal sur skype a écrit:
Moi : C'était quoi ce cri ?
Choco : C'est ma saucisse qui a hurlé.
Revenir en haut Aller en bas
http://vuesubjective.org/Garywiss/
AristA
Maker qui quitte vraiment E-m Lv 60
Maker qui quitte vraiment E-m Lv 60


Nombre de messages : 10881
Age : 19

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Jeu 7 Mar 2013 - 10:55

Ah oui

En effet je l'avais pas mis avant parce que je savais pas à quoi ça servait, mais j'ai vu après qu'il fallait le mettre donc je l'ai mis. AlexRoiToc
Revenir en haut Aller en bas
http://arista.lescigales.org
Empty
Mangeur de manettes Lv 65
Mangeur de manettes Lv 65


Nombre de messages : 16363
Age : 30

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Sam 9 Mar 2013 - 17:51

J'utilise Python 3 depuis le début et je n'ai jamais eu besoin d'entrer le chemin d'accès sous Linux. (shebang)
L'encoding UTF-8 je le fais par réflexe (et c'est un bon réflexe) mais je n'ai jamais eu de problème avec ça non plus :/

____________
Revenir en haut Aller en bas
http://e-magination.jeun.fr
AristA
Maker qui quitte vraiment E-m Lv 60
Maker qui quitte vraiment E-m Lv 60


Nombre de messages : 10881
Age : 19

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Sam 9 Mar 2013 - 18:21

T'utilisais pas Python 2.7 toi ? .__.
Revenir en haut Aller en bas
http://arista.lescigales.org
Empty
Mangeur de manettes Lv 65
Mangeur de manettes Lv 65


Nombre de messages : 16363
Age : 30

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Sam 9 Mar 2013 - 18:44

Les deux =]

____________
Revenir en haut Aller en bas
http://e-magination.jeun.fr
AlexRE
Admin trop trizo Lv 65
Admin trop trizo Lv 65


Nombre de messages : 29430
Age : 29

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Mer 20 Mar 2013 - 12:20

Pour mes cours, je dois faire une application Android de lecture et écriture de Tweets.

Je connais très peu le Java, je savais même pas comment insérer un .jar dans mon projet.

Ça va être drôle. AlexRoiToc
Revenir en haut Aller en bas
http://www.alexzone.net
Blizzard
/!\ Utilisateur instable /!\


Nombre de messages : 6317
Age : 24

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Mer 20 Mar 2013 - 13:47

Surtout que le Java sur Android, c'est juste n'importe quoi et très spécifique à utiliser. M'enfin, c'est seulement ce que j'ai appris de potes qui avaient fait un module "Programmation pour supports portables", dans mon ancien IUT…
Bon courage. AlexRoiToc

____________
Revenir en haut Aller en bas
AlexRE
Admin trop trizo Lv 65
Admin trop trizo Lv 65


Nombre de messages : 29430
Age : 29

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Lun 25 Mar 2013 - 1:45

Pour mon problème avec le Java : il suffisait juste de cocher une case à un endroit...

C'est assez bizarre, je vois pas trop quelle est l'utilité : à partir du moment où j'importe un .jar c'est que je veux l'utiliser ?... Enfin bref.

C'est mieux le PHP ou le C, c'est moins tout compliqué. AlexRoiToc
Revenir en haut Aller en bas
http://www.alexzone.net
Blizzard
/!\ Utilisateur instable /!\


Nombre de messages : 6317
Age : 24

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Lun 25 Mar 2013 - 7:02

Va faire du C sur Android. Avec le nombre de tutos qu'il y a sur Internet, tu vas t'amuser, tiens… AlexRoiToc

(En gros, apparemment, de ce que j'ai vu sur le net, faut utiliser une méthode un poil compliquée à base de chaînes de compilation et de cross-compilation. La démarche à faire est celle-ci. FUNNY.)

____________
Revenir en haut Aller en bas
garywiss6
Rétrograde Lv 54
Rétrograde Lv 54


Nombre de messages : 5175
Age : 21

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Lun 25 Mar 2013 - 11:00

Le c sur android c'est inutile puisque que le gain de performance que tu as, par rapport au java, est très minime nerd Surtout que l'api android à été faite pour être utilisé avec du java.

____________
Un soir banal sur skype a écrit:
Moi : C'était quoi ce cri ?
Choco : C'est ma saucisse qui a hurlé.
Revenir en haut Aller en bas
http://vuesubjective.org/Garywiss/
Blizzard
/!\ Utilisateur instable /!\


Nombre de messages : 6317
Age : 24

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Lun 25 Mar 2013 - 15:32

Bien entendu. Ma phrase était ironique, en fait. Il y a que dalle de tutos sur le C pour Android, sur Internet. Et pourtant, j'ai cherché. D'où ma phrase avec le smiley, après.
AlexRoiToc

____________
Revenir en haut Aller en bas
AlexRE
Admin trop trizo Lv 65
Admin trop trizo Lv 65


Nombre de messages : 29430
Age : 29

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Lun 25 Mar 2013 - 15:47

Ah je savais pas, gary. C'est bon à savoir. cactus smile
Revenir en haut Aller en bas
http://www.alexzone.net
AristA
Maker qui quitte vraiment E-m Lv 60
Maker qui quitte vraiment E-m Lv 60


Nombre de messages : 10881
Age : 19

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Lun 25 Mar 2013 - 15:59

Bonsoir les amis je suis moi aussi un programmateur/programmisateur (selon les goûts) assez complètement affirmé dans tout ce qui est programmationnalisation programmative (ès programmature programmationnelle)

Je voulais demander à tout le monde comment vous organisez l'architecture de votre jeu pour gérer un petit jeu de plate forme, étant donné que c'est ce que j'essaie de faire avec pygame depuis quelques jours. J'arrive à gérer les affichages etc, c'est pas autant l'utilisation du module qui m'importe mais vraiment l'organisation, comment coordonner les différentes fonctions etc. Python est en programmation orientée objet donc c'est à noter.

Pour l'instant j'ai un Objet Gameobject, qui représenterait tous les éléments graphiques affichés à l'écran. De cette classe hérite la classe character, qui représenterait tous les personnages mobiles. De cette classe hérite la classe player, qui contient toutes les commandes pour déplacer le personnage principal. J'ai un Objet "carte" qui a une fonction "camera" qui sert à déplacer le héros sur le screen (c'est à dire les coordonnées réelles du héros, faire le scrolling quoi) et à déplacer la carte.

Je gère pour l'instant les événements dans cette ordre :

-> gérer les touches pressées et déplacer le héros sur la carte
-> obtenir la nouvelle position sur l'écran de tous les sprites du jeu
-> afficher la carte (donc l'arrière plan) et déterminer les nouvelles coordonnées relatives à l'écran du héros
-> afficher tous les objets de la carte
-> afficher le héros

en code ça fait ça
Code:
while 1:
    for event in pygame.event.get():
        if event.type is QUIT:
            sys.exit()
           
    heros = heros.inputs(carte)
    for e in team:
        e.update(objects,carte)
    heros = carte.update(screen,heros)
    for obj in objects:
        obj.positionner(heros,carte)
    objects.draw(screen)
    team.draw(screen)

    pygame.display.flip()
    pygame.time.delay(2)

(Je suis pas super certain de l'intérêt du delay, qui permet de pauser le jeu, à la fin)

Je trouve ça au final assez galère et peut être pas super évident/clean/bien organisé, et je me dis qu'au final à un moment ça va lagguer (j'ai pas trop confiance en pygame pour gérer des jeux de ouf). Je me reporte donc sur vous. Vous connaissez des principes d'organisation qui marchent bien pour ce genre de jeu ? Y'a-t-il des sites pour apprendre à faire cela ? Comment devrait-je mettre chacune de mes méthodes ? Est ce que obtenir les coordonnées du héros en appelant une méthode de la classe carte c'est un truc débile ? Devrait-je n'actualiser que les objets qui sont à l'écran ? Comment gérer la gravité et les sauts de façon optimale ?

Comme vous êtes des pros j'espère que vous me répondrez. Merci d'avance les copains
Revenir en haut Aller en bas
http://arista.lescigales.org
coco
Dieu Maker Lv 44
Dieu Maker Lv 44


Nombre de messages : 2979
Age : 22

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Lun 25 Mar 2013 - 17:11

Pour l'ordre des événements, ça me semble pas mal, j'ai fait la même chose pour corolia à peu près. Pour ce qui est du scrolling, j'ai fait un "objet" map, qui contient 2 variables de scrolling (x et y ), modifiées par les déplacements du joueur, c'est plus simple que ta solution je pense. Normalement, la partie du code qui fait lagger c'est l'affichage, donc à part l'affichage tu peux actualiser tous les objets (c'est plutôt au niveau du game design que ça peut poser problème ).

Au niveau de la gravité, pour Corolia, j'incrémente la variable "vitesse y" de chaque objet à chaque frame jusqu’à une vitesse limite. La "vitesse" est bien entendu gardée en mémoire d'une frame à l'autre, et il suffit d'ajouter la vitesse à l'ancienne position pour trouver la position actuelle. J'ai fait ça complétement au pif à l'époque, mais maintenant que j'ai suivi quelques cours de mécanique, je me rends compte que bien que très (très ) imparfait, ce modèle est plutôt cohérent. Je ne referais surement pas la même chose, mais c'est très simple à mettre en place et gère aussi les sauts (il suffit de rendre la vitesse négative lors de l'appui sur la touche pour obtenir un saut ).
Un article du site du zéro sur les sauts : ICI Very Happy (article en C, mais c'est surtout de la théorie, donc applicable à n'importe lequel langage ).
Si tu veux des sauts "réalistes", faut chercher du coté de la mécanique newtonienne. C'est pas très compliqué et si tu l'as pas encore fait en cours je peux t'expliquer le principe si tu veux. Wink

Un article sur le tile mapping au passage (et le scrolling, les collision d'un objet avec le décor ) : PAR LA angel (toujours un tuto pour le C, mais toujours de la théorie réutilisable )

Enfin au niveau des collisions, un objet hitbox est indispensable. Je gérais ça à la grosse pour Corolia au début, mais sans une structure de hitbox commune à tous les objets ça devient un bordel sans nom.

____________
Revenir en haut Aller en bas
AristA
Maker qui quitte vraiment E-m Lv 60
Maker qui quitte vraiment E-m Lv 60


Nombre de messages : 10881
Age : 19

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Lun 25 Mar 2013 - 17:26

Merci beaucoup ! Je lis tous les articles (c'était exactement ce que je cherchais !) puis je double post pour incrémenter mon compteur de post.

J'avais peur à propos d'une chose en fait : si on descend de 3 pixels vers le bas (avec ta méthode par exemple) d'un coup, et qu'on se retrouve dans un mur (donc collision). Qu'est ce qu'il se passe ? Est ce qu'on est censé remonter ? Ok c'est expliqué dans le tutoriel bon sang il est parfait.

Merci encore une fois pour tes précieux conseils (je n'osais pas t'invoquer mais je pensais secrètement à toi Hihihihihi)
Revenir en haut Aller en bas
http://arista.lescigales.org
AlexRE
Admin trop trizo Lv 65
Admin trop trizo Lv 65


Nombre de messages : 29430
Age : 29

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Mar 23 Avr 2013 - 7:43

Programmation Java sous Android : Pourquoi ça ne marche jamaiiiiiiiis ? alex boom
Revenir en haut Aller en bas
http://www.alexzone.net
garywiss6
Rétrograde Lv 54
Rétrograde Lv 54


Nombre de messages : 5175
Age : 21

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Mar 23 Avr 2013 - 8:20

C'est quoi ton problème alexre ? Sad

____________
Un soir banal sur skype a écrit:
Moi : C'était quoi ce cri ?
Choco : C'est ma saucisse qui a hurlé.
Revenir en haut Aller en bas
http://vuesubjective.org/Garywiss/
AlexRE
Admin trop trizo Lv 65
Admin trop trizo Lv 65


Nombre de messages : 29430
Age : 29

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Mar 23 Avr 2013 - 8:58

Je viens de régler ça. fan hystérique

Les version récentes d'Android n'acceptent pas qu'une méthode qui prend du temps (une méthode qui récupère des Tweets par exemple) ne soit pas dans un Thread.

Mais c'est bon, j'ai réussi à faire marcher AsyncTask (ça crée des Threads très facilement). fan hystérique
Revenir en haut Aller en bas
http://www.alexzone.net
Blizzard
/!\ Utilisateur instable /!\


Nombre de messages : 6317
Age : 24

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Mar 23 Avr 2013 - 11:33

What ?!
Mais… Mais…
MAIS C'EST COMPLÈTEMENT CON !

(C'était le commentaire "je floode, et je le vaux bien" du jour, de Blizzard.)

____________
Revenir en haut Aller en bas
Empty
Mangeur de manettes Lv 65
Mangeur de manettes Lv 65


Nombre de messages : 16363
Age : 30

MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Mar 23 Avr 2013 - 12:19

@garywiss6 a écrit:
C'est quoi ton problème alexre ? Sad

Bin il vient de le dire... Il programme en Java Nerd Sang [/troll vindicatif]

____________
Revenir en haut Aller en bas
http://e-magination.jeun.fr
Contenu sponsorisé




MessageSujet: Re: Programmation (le retour du topic des geeks qui se lavent pas, ou peu)   Aujourd'hui à 0:00

Revenir en haut Aller en bas
 
Programmation (le retour du topic des geeks qui se lavent pas, ou peu)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 3 sur 12Aller à la page : Précédent  1, 2, 3, 4 ... 10, 11, 12  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
E-magination :: LE VILLAGE ~ Forums de la communauté et de discussions ~ :: La Taverne-
Sauter vers: