Bonjour à tous,
Je me suis dernièrement mis à faire du Python, avec l'idée de créer un jeu jouable en tour par tour, sans intelligence artificielle, avec 2 personnages (player 1 et player 2).
J'ai créé la carte, les 2 persos apparaissant bien dessus, et un compteur de tour augmentant de 1 chaque fois la barre d'espace pressée (l'idée étant qu'un personnage joue et bouge durant les tours pairs, et l'autre durant les tours impairs). Les personnages sont définis pour pouvoir bouger dans les 4 directions, et cela marche si les touches ordononant les mouvements sont différentes d'un perso à l'autre. Sauf que j'aimerais qu'ils puissent bouger avec les mêmes touches (si jamais je voulais par exemple qu'il y ait 10 persos, ce serait plus pratique).
J'ai donc essayer de créer une boucle pour permettre cela, mais elle ne fonctionne pas: le premier à jouer se déplace bien dès que c'est son tour, mais pour l'autre, c'est comme si aucune commande ne lui était affecté…
Voici la boucle:
if nb_tours in range (0,400,2): (partie à 400 tours, commençant au tour 0)
turtle.listen()
turtle.onkey(player1.go_left,"Left")
turtle.onkey(player1.go_right,"Right")
turtle.onkey(player1.go_down,"Down")
turtle.onkey(player1.go_up,"Up")
if nb_tours in range (1,400,2):
turtle.listen()
turtle.onkey(player2.go_left,"Left")
turtle.onkey(player2.go_right,"Right")
turtle.onkey(player2.go_down,"Down")
turtle.onkey(player2.go_up,"Up")
En revanche, si je met des touches differentes ça fonctionne, comme par exemple:
turtle.onkey(player1.go_left,"q")
turtle.onkey(player1.go_right,"d")
turtle.onkey(player1.go_down,"s")
turtle.onkey(player1.go_up,"z")
turtle.onkey(player2.go_left,"Left")
turtle.onkey(player2.go_right,"Right")
turtle.onkey(player2.go_down,"Down")
turtle.onkey(player2.go_up,"Up")
Si vous trouvez la solution à mon problème, ce serait très sympa!
# J'ai un un gros doute...
Posté par GuieA_7 (site web personnel) . Évalué à 6.
… sur le fait que tu doives utiliser un
if
sur unrange
(qu'on utilise 99% du temps avec unfor
).Avec quelques
print
dans ton code tu pourrais voir ce qui se passe et trouver tes bugs seul (ce qui est 90% du travail d'un codeur haha).Bonne chance !
[^] # Re: J'ai un un gros doute...
Posté par _kaos_ . Évalué à 1. Dernière modification le 02 mai 2020 à 09:55.
Salut,
Oui, c'est douteux. D'autant plus qu'en général (mais ce n'est peut-être pas le cas ici, ça peut être en tours limités), on voit plus du
while(True)
.Matricule 23415
[^] # Re: J'ai un un gros doute...
Posté par WrathOfThePixel . Évalué à 1.
C'est probablement pas optimal, mais ça marche.
[^] # Re: J'ai un un gros doute...
Posté par _kaos_ . Évalué à 1. Dernière modification le 02 mai 2020 à 13:29.
Salut,
Mouais, ok.
Il doit manquer du code englobant et un peu de mise en forme ;)
Matricule 23415
[^] # Re: J'ai un un gros doute...
Posté par WrathOfThePixel . Évalué à 1. Dernière modification le 02 mai 2020 à 13:36.
Oui, il manque la boucle, manifestement :D
edit : et l'indentation
edit edit : d'ailleurs l'OP, l'indentation est bien présente dans le source, oui ?
[^] # Re: J'ai un un gros doute...
Posté par _kaos_ . Évalué à 1.
edith
!Ok -> []
Pour l'OP : il faut peut-être regarder du côté des restes des divisions euclidiennes pour faire marcher ton idée.
Donc pour une session à
X
joueurs pourY
tours, ça boucle surX*Y
et le reste de la division te dis à qui jouer. Non ?Matricule 23415
# Une hypothèse
Posté par foobarbazz . Évalué à 2.
Là, comme ça, sans rien savoir, ça pourrait être que turtle.onkey définit une callback sur la touche frappée, définissant une fois pour toute le comportement de la touche. Et donc, il n'y a que le second joueur pour laquelle cette fonction a été appelée qui marche.
Dans cette hypothèse, une solution serait de réaffecter les callback seulement sur le bon joueur au bon tour, ou alors de faire une fonction qui va faire bouger la bonne tortue pour callback.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.