Problème dans la programmation des coups d'épée
Spacewiki
-
Spacewiki -
Spacewiki -
Bonjour,
je n'arrive pas à programmer mon personnage de telle sorte à ce qu'il donne un seul coup d'épée quand on appuie sur une touche donnée. Quelqu'un aurait une idée ? Voici tout le code qui pourra vous servir :
Fichier du testEngine :
Le fichier du joueur:
Le fichier de l'épée:
Le fichier du jeu :
je n'arrive pas à programmer mon personnage de telle sorte à ce qu'il donne un seul coup d'épée quand on appuie sur une touche donnée. Quelqu'un aurait une idée ? Voici tout le code qui pourra vous servir :
Fichier du testEngine :
import pygame from game import * from tkinter import * #Le module pickle servira à la gestion des fichiers de sauvegarde. import pickle #On charge le fond en damier et on le redimensionne pour l'adapter à la taille de la fenêtre. bg=pygame.image.load('resource/img/testResource/8x8bwcheck.jpg') windowIcon=pygame.image.load('resource/img/common/windowIcon.png') background=pygame.transform.scale(bg, (900, 900)) pygame.init() running=True #Les trois lignes ci-dessous permettent de définir les propriétés de la fenêtre. pygame.display.set_caption("TestEngine") pygame.display.set_icon(windowIcon) screen=pygame.display.set_mode([900, 900]) pygame.display.init() clock=pygame.time.Clock() #Cette boucle fait tourner le jeu. game=Game() while running: clock.tick(30) screen.blit(background, (0, 0)) screen.blit(game.shade.image, game.shade.rect) screen.blit(game.link.image, game.link.rect) screen.blit(game.sword.image, game.sword.rect) if game.pressed.get(pygame.K_RIGHT): game.link.move_right() game.shade.move_right() elif game.pressed.get(pygame.K_LEFT): game.link.move_left() game.shade.move_left() elif game.pressed.get(pygame.K_DOWN): game.link.move_down() game.shade.move_down() elif game.pressed.get(pygame.K_UP): game.link.move_up() game.shade.move_up() else: game.link.action="idle" game.sword.method="not_used" pygame.display.flip() for event in pygame.event.get(): if event.type==pygame.QUIT: running=False pygame.quit() elif event.type == pygame.KEYDOWN: if event.key in game.pressed: game.pressed[event.key] = True else: if event.key==pygame.K_RETURN: pass elif event.key==pygame.K_SPACE: pass if game.link.action=="idle": if event.key==pygame.K_y: game.link.swordSlash() game.sword.slash() elif event.key==pygame.K_g: pass elif event.type==pygame.KEYUP: if event.key in game.pressed: game.pressed[event.key] = False game.link.setImage()
Le fichier du joueur:
import pygame #Le fichier playerIMG contient toutes les images qui serviront pour l'animation #et la représentation du joueur. from playerIMG import * #La classe Shadow correspond à l'ombre de Link, que l'on peut apercevoir sous lui #notamment lorsqu'il saute, puisque le reste du temps elle est cachée par le #personnage en lui-même. playerTurn="SOUTH" playerX=415 playerY=415 class Shadow(pygame.sprite.Sprite): def __init__(self): super().__init__() self.velocity=14 self.image=shadeIMG self.rect=self.image.get_rect() self.rect.x=431 self.rect.y=445 self.mask=pygame.mask.from_surface(self.image) def move_right(self): self.rect.x+=self.velocity def move_left(self): self.rect.x-=self.velocity def move_up(self): self.rect.y-=self.velocity def move_down(self): self.rect.y+=self.velocity #La classe PlayerChar définit toutes les méthodes que le joueur pourra utiliser. class PlayerChar(pygame.sprite.Sprite): def __init__(self): super().__init__() self.default_max_health=12 #La variable default_max_health détermine combien de coeurs le joueur #aura lors de la création d'un nouveau fichier de sauvegarde. self.velocity=14 #L'image idleS1 a été importée via playerIMG self.image=idleS1 self.rect=self.image.get_rect() self.rect.x=415 self.rect.y=415 self.mask=pygame.mask.from_surface(self.image) #La variable ci-dessous détermine dans quelle direction regarde le joueur. #Par défaut (au début d'une partie ou à la sortie d'une maison), #le joueur regardera vers le bas de l'écran. self.direction="SOUTH" self.action="idle" #Là où image est le fichier à afficher à l'écran, frame est le numéro de #l'image à utiliser dans l'animation. self.frame=1 playerX=self.rect.x playerY=self.rect.y playerTurn=self.direction def move_right(self): self.action="move" self.direction = "EAST" playerTurn=self.direction self.rect.x+=self.velocity playerX=self.rect.x def move_left(self): self.action="move" self.direction="WEST" self.rect.x-=self.velocity playerTurn=self.direction playerX=self.rect.x def move_up(self): self.action="move" self.direction="NORTH" playerTurn=self.direction self.rect.y-=self.velocity playerY=self.rect.y def move_down(self): self.action="move" self.direction="SOUTH" playerTurn=self.direction self.rect.y+=self.velocity playerY=self.rect.y def jump(self): pass def swordSlash(self): self.action="use_item" def setImage(self): if self.action == "idle": if self.direction == "SOUTH": self.image = idleS1 elif self.direction == "NORTH": self.image = idleN1 elif self.direction == "WEST": self.image = idleW elif self.direction == "EAST": self.image = idleE self.frame=1 elif self.action=="move": if self.frame==2: if self.direction=="SOUTH": self.image=idleS2 elif self.direction=="NORTH": self.image=idleN2 elif self.direction=="EAST": self.image=walkE elif self.direction=="WEST": self.image=walkW self.frame-=1 elif self.frame==1: if self.direction=="SOUTH": self.image=idleS1 elif self.direction=="NORTH": self.image=idleN1 elif self.direction=="EAST": self.image=idleE elif self.direction=="WEST": self.image=idleW self.frame+=1 pygame.time.wait(75) elif self.action=="use_item": if self.frame==2: if self.direction=="SOUTH": self.image=useItemS2 elif self.direction=="NORTH": self.image=useItemN2 elif self.direction=="WEST": self.image=useItemW2 elif self.direction=="EAST": self.image=useItemE2 self.frame-=1 elif self.frame==1: if self.direction=="SOUTH": self.image=useItemS1 elif self.direction=="NORTH": self.image=useItemN1 elif self.direction=="WEST": self.image=useItemW1 elif self.direction=="EAST": self.image=useItemE1 self.frame+=1 pygame.time.wait(35) self.mask=pygame.mask.from_surface(self.image)
Le fichier de l'épée:
import pygame from playerIMG import * import random from player import * #En important ce morceau de programme, on pourra accéder à la position du joueur. pygame.mixer.init() error=pygame.mixer.Sound(file='resource/snd/common/Oracle_Error.wav') slash1=pygame.mixer.Sound(file='resource/snd/common/Oracle_Sword_Slash1.wav') slash2=pygame.mixer.Sound(file='resource/snd/common/Oracle_Sword_Slash2.wav') slash3=pygame.mixer.Sound(file='resource/snd/common/Oracle_Sword_Slash3.wav') swordShoot=pygame.mixer.Sound(file='resource/snd/common/Oracle_Sword_Shoot.wav') class PlayerSword(pygame.sprite.Sprite): def __init__(self): self.default_level=1 self.level=1 self.damage=4 self.image=sword3 self.rect=self.image.get_rect() self.rect.x=-25 self.rect.y=-65 self.frame=1 self.sound=1 self.method="not_used" self.oob=False def chooseSound(self): self.sound=random.choice([1, 2, 3]) if self.sound==1: slash1.play() elif self.sound==2: slash2.play() elif self.sound==3: slash3.play() else: pass def getOutOfBounds(self): self.image=sword3 self.rect.x=-25 self.rect.y=-65 def slash(self): self.method="slash" for x in range(1, 3): self.setImage() def setImage(self): if self.method=="not_used": self.image=sword3 elif self.method=="slash": if self.frame==3: if playerTurn=="SOUTH": self.image=sword2 self.rect.x=playerX+32 self.rect.y=playerY+64 self.chooseSound() elif playerTurn=="NORTH": self.image=sword1 self.rect.x=playerX+4 self.rect.y=playerY-60 self.chooseSound() elif playerTurn=="WEST": self.image=sword3 self.rect.x=playerX-60 self.rect.y=playerY+35 self.chooseSound() elif playerTurn=="EAST": self.image=sword4 self.rect.x=playerX+64 self.rect.y=playerY+36 self.chooseSound() self.frame=1 self.oob=True elif self.frame==2: if playerTurn=="SOUTH": self.image=swordSlash3 self.rect.x=playerX-50 self.rect.y=playerY+55 elif playerTurn=="NORTH": self.image=swordSlash2 self.rect.x=playerX+53 self.rect.y=playerY-52 elif playerTurn=="WEST": self.image=swordSlash1 self.rect.x=playerX-52 self.rect.y=playerY-52 elif playerTurn=="EAST": self.image=swordSlash2 self.rect.x=playerX+52 self.rect.y=playerY-52 self.frame=3 elif self.frame==1: if playerTurn=="SOUTH": self.image=sword3 self.rect.x=playerX-50 self.rect.y=playerY+32 elif playerTurn=="NORTH": self.image=sword4 self.rect.x=playerX+63 self.rect.y=playerY+16 elif playerTurn=="WEST": self.image=sword1 self.rect.x=playerX+20 self.rect.y=playerY-60 elif playerTurn=="EAST": self.image=sword1 self.rect.x=playerX+20 self.rect.y=playerY-60 self.frame=2 pygame.time.wait(50) if self.oob==True: self.getOutOfBounds() self.oob=False
Le fichier du jeu :
import pygame from player import * from gear import * class Game: def __init__(self): self.lines=[] #Apparition du joueur self.link=PlayerChar() self.shade=Shadow() self.sword=PlayerSword() #Ce dictionnaire permet de définir toutes les touches utilisables en jeu. #Par exemple, K_RIGHT correspond à la flèche de droite. self.pressed={ "K_RIGHT":False, "K_LEFT":False, "K_UP":False, "K_DOWN":False } def initMap(self, screenCoords, world): pass def initSideScrollPart(self, dungeon, warp): pass
Configuration: Windows / Firefox 81.0
A voir également:
- Problème dans la programmation des coups d'épée
- Application de programmation - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Forcer la fermeture d'un programme - Guide
- Couper des séquences dans une vidéo - Guide
- Mettre en veille des programmes - Guide
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, que se passe-t-il? il donne plusieurs coups d'épées?