def show(game): win = getWin(game) bg = getBackground(game) level = getLevel(game) player = getPlayer(game) win.erase() Background.show(bg, win) showCursor(player, win) for n in range(0, len(level['horde'])): Animat.show(level['horde'][n], win) Player.show(player, win) Tower.show(player, win)
def show(): global background, animat, animation, timeStep, listeDeBalle, temps #rafraichissement de l'affichage #effacer la console sys.stdout.write("\033[1;1H") # déplace le curseur en 1,1 sys.stdout.write("\033[2J") # clear the screen and move to 0,0 #affichage des différents éléments Background.show(background) #debug() print temps, "secondes" Animat.show(animat) for i in listeDeBalle: Balle.show(i) # Affichage de toutes les balles de la liste #deplacement curseur sys.stdout.write("\033[1;1H\n") # déplace le curseur en 1,1
def creation_monstres(nb_monstres=15): global monstres, max_x, max_y for m in range(nb_monstres): monstres.append( Animat.create(x=random.randint(1, max_x), y=random.randint(3, max_y), type_objet="monstre"))
def show(): #affichage des differents elements du jeu global background, animat, robot2, joker, shot, name Background.show(background, joker) chrono() Shoot.show(shot[1]) Shoot.show(shot[2]) Shoot.show(shot[3]) Robot2.show(robot2) Shoot.show(shot[0]) Animat.show(animat, name) #restoration couleur sys.stdout.write("\033[37m") sys.stdout.write("\033[40m") #deplacement curseur sys.stdout.write("\033[1;1H\n")
def contactAnimatBalle(): global animat, listeDeBalle for i in listeDeBalle: c = Animat.collisionBalle(animat, i) if c == 1: time.sleep(0.7) finDeJeu() else: pass
def move(r2,bg,a,s,direction): #deplacer un tir if s["etat"]== "missile": #missile x1,y= getPosition(s) x=x1+2*direction if Background.getChar(bg,x,y)==" ":#deplacement si case libre s["x"]=x setColor(s,2) if Background.getChar(bg,x,y)=="*" or Background.getChar(bg,x,y)=="|": #collision mur setColor(s,6) x,y=Robot2.getPosition(r2) setPosition(s,x+8,y+s["decalage"]) move(r2,bg,a,s,direction) x,y = getPosition(s) x1,y1 = Animat.getPosition(a) if x==x1 and y==y1 or x-1==x1 and y==y1 :#collision joueur a["life"] = a["life"] - random.randint(1,3)*r2["degat"] Animat.setColor(a,7) elif s["etat"]=="roquette": #roquette x1,y1= getPosition(s) x=x1+3*direction y= y1+ random.randint(-1,1) if Background.getChar(bg,x,y)==" ":#deplacement si case libre s["x"]=x s["y"]=y setColor(s,2) if Background.getChar(bg,x,y)=="*" or Background.getChar(bg,x,y)=="|": #collision mur setColor(s,6) x,y=getPosition(r2) setPosition(s,x+8,y+s["decalage"]) move(r2,bg,a,s,direction) x,y = getPosition(s) x1,y1 = Animat.getPosition(a) if x==x1 and y==y1 or x-1==x1 and y==y1 or x+1==x1 and y==y1 :#collision joueur a["life"] = a["life"] - random.randint(2,4)*r2["degat"] Animat.setColor(a,7) elif s["etat"] == "tir": #tir du joueur x1,y=getPosition(s) x=x1+direction if Background.getChar(bg,x,y)==" " or Background.getChar(bg,x,y)=="|":#deplacement si case libre + gestion obstacle s["x"]=x setColor(s,5) if Background.getChar(bg,x,y)=="*":#collision mur x,y=getPosition(a) setPosition(s,x,y) move(r2,bg,a,s,direction) m,b= getPosition(r2) #position robot positionR=[(m+1,b+2),(m+2,b+2),(m+3,b+2),(m+4,b+2),(m+5,b+2),(m+6,b+2),(m+7,b+2),(m+8,b+2),(m+1,b+3),(m+2,b+3),(m+3,b+3),(m+4,b+3),(m+5,b+3),(m+6,b+3),(m+7,b+3),(m+8,b+3),(m+1,b+4),(m+2,b+4),(m+3,b+4),(m+4,b+4),(m+5,b+4),(m+6,b+4),(m+7,b+4),(m+8,b+4),(m+1,b+5),(m+2,b+5),(m+3,b+5),(m+4,b+5),(m+5,b+5),(m+6,b+5),(m+7,b+5),(m+8,b+5),(m+1,b+6),(m+2,b+6),(m+3,b+6),(m+4,b+6),(m+5,b+6),(m+6,b+6),(m+7,b+6),(m+8,b+6)] for p in positionR : if getPosition(s) == p: #collision tir joueur avec robot r2["life"]=r2["life"] - 1 setColor(r2,7)
def interact(): global personnage, background, level, fleches, monstres #gestion des evenement clavier c = "" has_moved = False level_has_changed = False # si une touche est appuyee if isData(): # recuperation touche appuye c = sys.stdin.read(1) # print ord(c) if c == '\x1b': # x1b is ESC quitGame() elif c == 'k': # Touche k appuye : creation fleche avec pour coordonnees celle # du personnage et une direction de deplacement en x egale a celle # du personnage personnage["weapon"] = "arc" fleches.append( Animat.create(x=personnage["x"], y=personnage["y"], type_objet="fleche", last_move_x=personnage["last_move_x"])) elif c == 'q' or 'd' or ' ': # deplacement a droite ou a gauche, ou saut personnage["weapon"] = "arc" personnage["direction"] = c # Permet de changer de direction du personnage [has_moved, level, level_has_changed ] = Animat.changeDirection(personnage, level, c, monstres) return has_moved, level_has_changed
def init(): global animat, background, timeStep, robot2, shot, joker, animation # creation des elements du jeu animat = Animat.create() background, joker = Background.create("Background.txt") robot2 = Robot2.create() shot = [] tirjoueur = Shoot.create(x=55, y=4, color=5, decalage=0, etat="tir", tir="--") shot.append(tirjoueur) roquetterobot = Shoot.create(x=10, y=14, color=2, decalage=4, etat="roquette", tir="-->") shot.append(roquetterobot) missilerobot = Shoot.create(x=10, y=12, color=2, decalage=2, etat="missile", tir="--") shot.append(missilerobot) missile2robot = Shoot.create(x=10, y=16, color=2, decalage=6, etat="missile", tir="--") shot.append(missile2robot) animation = [] win = Animation.create(filename="win.txt") animation.append(win) lose = Animation.create(filename="lose.txt") animation.append(lose) start = Animation.create(filename="start.txt") animation.append(start) #effacer la console sys.stdout.write("\033[1;1H") sys.stdout.write("\033[2J")
def init(): global animat, background, temps, listeDeBalle #initialisation de la partie temps = 0.0 # Creation des élèments du jeu # Pas de création de balle ici car déja fait avec la fonction createBalles() # le fond background = Background.create("fond2.txt") # l'animat animat = Animat.create(2, 19) # Interaction clavier tty.setcbreak(sys.stdin.fileno()) # Effacer la console sys.stdout.write("\033[1;1H") sys.stdout.write("\033[2J")
def interact(): #gestion des evenement clavier global animat, background, timeStep, robot2, shot #si une touche est appuyee if isData(): c = sys.stdin.read(1) if c == '\x1b': # x1b is ESC quitGame() elif c == "z": #deplacement haut Animat.moveH(animat, robot2, background) elif c == "q": #deplacement gauche Animat.moveL(animat, robot2, background) elif c == "s": #deplacement bas Animat.moveD(animat, robot2, background) elif c == "d": #deplacement droite Animat.moveR(animat, robot2, background) elif c == '6' or c == '0': #touche triche pour joueur cheat()
def interact(): # Gestion des evenement clavier # Si une touche est appuyee, renvoie True if isData(): c = sys.stdin.read(1) if c == '\x1b': # x1b is ESC quitGame() elif c == 'q' or c == 'Q': Animat.decelerationVX(animat) elif c == 'd' or c == "D": Animat.accelerationVX(animat) elif c == '\x20': #x20 est espace Animat.accelerationVY(animat)
def create(nbMonster, horde, bg, nbLevel): level = dict() level["nbMonster"] = nbMonster level["horde"] = horde level['nbLevel'] = nbLevel for i in range(0, level["nbMonster"] - 1): animat = Animat.create( direction="right", x=bg["spawn"][1], y=bg["spawn"][0], cara="M", finishx=bg["finish"][1], finishy=bg["finish"][0], color=1, life=4, mvt=False ) level["horde"].append(animat) return level
def init(debug=False): global personnage, background, timeStep, level, monstres, boss, max_x, max_y max_y, max_x = Background.get_terminal_size() #print max_y #print max_x #initialisation de la partie # Creation des elements du jeu (personnage et monstres) personnage = Animat.create(x=2, y=5, type_objet="personnage") # boss = Animat.create(x=random.randint(5,max_x), y=5, type_objet="boss") creation_monstres(nb_monstres=20) # Creation du fond Background.init_background('galerie.txt') Background.display_background() # interaction clavier tty.setcbreak(sys.stdin.fileno())
def move(j, a, bg): # deplacement joker vie x1, y1 = getPosition(j) x = x1 + 1 y = y1 if getChar(bg, x, y) == " ": #deplacement si case libre j['x'] = x setColor(j, 1) elif getChar( bg, x, y) == "*": #collision mur du joker si le joueur ne l'a pas pris setColor(j, 6) x = 3 y = random.randint(2, 21) setPosition(j, x, y) move(j, a, bg) if getPosition(j) == Animat.getPosition(a): #joueur recupere bonus vie a["life"] = a["life"] + random.randint(1, 5) x = 3 y = random.randint(2, 21) setPosition(j, x, y) move(j, a, bg)
def moveAnimat(): global animat, friction, gravite, timeStep, background # Inialisation des variables x = Animat.getX(animat) y = Animat.getY(animat) vx = Animat.getVX(animat) vy = Animat.getVY(animat) # Application de la friction et de la gravité sur les vitesses pour qu'elles diminuent vx = vx - vx * friction vy = vy - gravite # avant : vy - vy * gravite # Limiter les vitesses if vx > 7.0: vx = 7.0 elif vx < -7.0: vx = -7.0 if vy > 7.0: vy = 7.0 elif vy < -7.0: vy = -7.0 # Changement des vitesses Animat.setVX(animat, vx) Animat.setVY(animat, vy) ## Gestion des collisions # Calcul de la prochaine position X et Y théorique par rapport à la vitesse dx = vx * timeStep dy = vy * timeStep nx = x + dx ny = y - dy # Car on a un repère orthonormé inversé # Détection d'obstacle à la prochaine position if Background.getElement(background, nx, y) == 0: # rien Animat.setX(animat, nx) else: #rebond sur un mur Animat.setVX(animat, -vx / 2) if Background.getElement(background, x, ny) == 0: # rien Animat.setY(animat, ny) else: # atterrissage sur plafond ou sol ou plateforme Animat.setVY(animat, 0) return
def run(debug=False): global personnage, level, monstres list_pos_to_restore = [] # Boucle de simulation while 1: #effacer la console if False: sys.stdout.write("\033[1;1H") sys.stdout.write("\033[2J") # Interaction avec l'objet [has_movedA, level_has_changed1] = interact() [has_movedB, level, level_has_changed2] = Animat.move_personnage(personnage, level, monstres, debug) if level_has_changed1 == True or level_has_changed2 == True: supprimer_monstres() creation_monstres(nb_monstres=(level + 1) * 10) # has_moved = Animat.move_monstre(boss,level) # affichage des differents elements # On garde en memoire les positions pour une restauration # ulterieure du fond d'ecran # Mieux vaut rafraichir la position du personnage tout le temps # Il etait souvent efface par la collision avec les montres Background.partial_restore_background(list_pos_to_restore) list_pos_to_restore = Animat.show(personnage) # if has_moved: # list_pos_to_restore.extend( Animat.show(boss) ) for monstre in monstres: has_moved = Animat.move_monstre(monstre) if has_moved: list_pos_to_restore.extend(Animat.show(monstre)) # Deplacement des fleches ind_fleche = 0 list_arrow_to_remove = [] for fleche in fleches: [has_moved, delete_fleche] = Animat.move_fleche(fleche) if has_moved: list_pos_to_restore.extend(Animat.show(fleche)) if delete_fleche == False: # actualisation des points de vie delete_fleche = Animat.monster_life(fleche, monstres) if delete_fleche == True: list_arrow_to_remove.append(ind_fleche) ind_fleche += 1 # On supprime les fleches qui doivent l'etre for ind_arrow in list_arrow_to_remove: #print('Suppression fleche %d' % ind_arrow) fleches.pop(ind_arrow) # On test la collision entre le personnage et les monstres game_over = Animat.player_life(personnage, monstres) # Arret du jeu if game_over == True or level == 4: quitGame() # restoration couleur sys.stdout.write("\033[37m") sys.stdout.write("\033[40m") #deplacement curseur sys.stdout.write("\033[0;0H\n") time.sleep(0.0365)