IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

probleme geometrie pour petit jeu


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut probleme geometrie pour petit jeu
    Bonjour,
    Je suis en train de faire un petit jeu,
    après avoir fais une classe pour qu’une cible suive un monstre,
    j'essaye de faire une classe pour que une cible suive une direction avec une vitesse constante et qui la dévie vers le monstre que l'on dirige(fleche).
    Mais je n'y arrive pas vraiment
    J'ai déjà fais cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    import pygame
    from pygame.locals import *
    from math import*
    pygame.init()
    r=2*pi
    class fleche():
        def __init__(self,x,y):
            self.img=pygame.image.load("cible.png").convert_alpha()
            self.p_fleche=self.img.get_rect()
            self.vo=0
            self.vr=3
            self.px=x
            self.py=y
            self.p_fleche=self.p_fleche.move(x,y)
        def disp_fleche(self):
            fenetre.blit(self.img,self.p_fleche)
        def update_vec(self,point):
            an=atan2(point[0]-self.p_fleche[0],point[1]-self.p_fleche[1])
            if (self.vo-an)%r<pi:
                self.vo+=0.1
            else:
                self.vo-=0.1
            self.px+=self.vr*cos(self.vo)
            self.py+=self.vr*sin(self.vo)
            self.p_fleche[0]=int(self.px)
            self.p_fleche[1]=int(self.py)
    class cible():
        def __init__(self,x,y):
            self.img=pygame.image.load("cible.png").convert_alpha()
            self.p_cible=self.img.get_rect()
            self.vx=0.0
            self.vy=0.0
            self.px=x
            self.py=y
            self.p_cible=self.p_cible.move(x,y)
        def disp_cible(self):
            fenetre.blit(self.img,self.p_cible)
        def update_vec(self,point):
            an=atan2(self.p_cible[0]-point[0],self.p_cible[1]-point[1])
            self.vx=-2*sin(an)
            self.vy=-2*cos(an)
            self.px+=self.vx
            self.py+=self.vy
            self.p_cible[0]=int(self.px)
            self.p_cible[1]=int(self.py)
    fenetre = pygame.display.set_mode((640, 480))
    perso =pygame.image.load("monstre.png").convert_alpha()
    fond =pygame.image.load("fond.png").convert_alpha()
    cible1=cible(40,40)
    fleche1=fleche(300,40)
    pos_fond=fond.get_rect()
    position_perso = perso.get_rect()
    fenetre.blit(perso, position_perso)
    pygame.display.flip()
    pygame.key.set_repeat(10,10)
    continuer = True
    position_perso = position_perso.move(0,460)
    vy=0
    key=[False]*323
    while continuer:
        pygame.time.Clock().tick(100)
        for event in pygame.event.get():
            if event.type == QUIT:
                continuer = False
            if event.type == KEYDOWN:
                key[event.key]=True
            if event.type == KEYUP:
                key[event.key]=False
        if key[K_UP]:
            vy=-5
        if key[K_RIGHT]:
            position_perso = position_perso.move(3,0)
        if key[K_LEFT]:
            position_perso = position_perso.move(-3,0)
        position_perso = position_perso.move(0,vy)
        if position_perso[0]<=0:
            position_perso[0]=0
        if position_perso[0]>=620:
            position_perso[0]=620
        if position_perso[1]<=0:
            position_perso[1]=1
            vy=0
        if position_perso[1]>460:
            position_perso[1]=460
            vy=0
        vy+=0.3
        cible1.update_vec(position_perso)
        fleche1.update_vec(position_perso)
        fenetre.blit(fond, pos_fond)
        cible1.disp_cible()
        fleche1.disp_fleche()
        fenetre.blit(perso, position_perso)
        pygame.display.flip()
    pygame.quit()
    Malheureusement,ça ne marche pas

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    dans ce genre ?
    le carré suit la souris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    from pygame import *
    from math import hypot
    scr = display.set_mode((640, 480))
     
    nmi 	  = Rect(0,0,10,10)
    nmihotspotx,nmihotspoty = nmi.center = 320,240
    nmi_vit   = 1
     
    while True:
    	mousex,mousey = mouse.get_pos()
    	hypo = hypot(mousex-nmihotspotx,mousey-nmihotspoty)
    	if hypo > nmi_vit:
    		nmi_color = -1
    		nmihotspotx += (mousex-nmihotspotx)/hypo*nmi_vit
    		nmihotspoty += (mousey-nmihotspoty)/hypo*nmi_vit
    		nmi.center = nmihotspotx,nmihotspoty
    	else:
    		nmi_color = 200,0,0
    		nmi.center = mousex,mousey
    	scr.fill(0)
    	scr.fill(nmi_color,nmi)
    	display.flip()
     
    	for ev in event.get():
    		if ev.type == QUIT: break
    	else: continue
    	break
    	time.wait(20)

  3. #3
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    ça,je l'ai déjà fait,c'est ma classe cible qui fait ça
    Mais pour ma classe flèche,je voudrais faire comme une fusée qui dévie vers sa cible
    du coup,si tu l'esquive,elle amorcera un virage pour se remettre dans l'axe vers sa cible

  4. #4
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    finalement,il suffisait d'un modulo bien placé et un +pi pour le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    r=2*pi
    class fleche():
        def __init__(self,x,y):
            self.img=pygame.image.load("c.png").convert_alpha()
            self.p_fleche=self.img.get_rect()
            self.vo=pi
            self.vr=5
            self.px=x
            self.py=y
            self.p_fleche=self.p_fleche.move(x,y)
        def disp_fleche(self):
            fenetre.blit(self.img,self.p_fleche)
        def update_vec(self,point):
            an=atan2(point[0]-self.p_fleche[0],point[1]-self.p_fleche[1])
            if ((self.vo+0.5*pi-an)%r)<pi:
                self.vo-=0.05
            else:
                self.vo+=0.05
            self.px+=self.vr*cos(self.vo)
            self.py-=self.vr*sin(self.vo)
            self.p_fleche[0]=int(self.px)
            self.p_fleche[1]=int(self.py)
    on ajuste aussi les vitesses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Bénévole] Recherche Developpeur Android pour petit jeu MMO
    Par starmindfr dans le forum Autres
    Réponses: 0
    Dernier message: 11/11/2014, 14h30
  2. Probleme INCLUDE pour un jeu en SDL
    Par kanak09 dans le forum C
    Réponses: 2
    Dernier message: 20/01/2010, 21h49
  3. Réponses: 2
    Dernier message: 08/01/2009, 16h21
  4. probleme pour un jeu de dames en python
    Par doudou152 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo