Question

Je fais un jeu de serpent en python avec pygame et pour déplacer le personnage que j'ai un entier qui est les degrés de l'angle, il doit se déplacer. Est-il possible que je peux obtenir le changement de x et y pour le déplacer en fonction des degrés? Par exemple: func(90) # [0, 5] ou func(0) # [5, 0]

Était-ce utile?

La solution

import math

speed = 5
angle = math.radians(90)    # Remember to convert to radians!
change = [speed * math.cos(angle), speed * math.sin(angle)]

Autres conseils

Le sinus et cosinus de l'angle, multiplié par le montant total du déménagement, vous donnera les changements X et Y.

import math
def func(degrees, magnitude):
    return magnitude * math.cos(math.radians(degrees)), magnitude * math.sin(math.radians(degrees))

>>> func(90,5)
(3.0616169978683831e-16, 5.0)
>>> func(0,5)
(5.0, 0.0)

Si le serpent ne peut se déplacer sous certains angles (par exemple 90 ou 45 degrés), ce qui est typique dans un tel jeu, il n'y a que 4 ou 8 directions, vous pouvez aller. Vous pouvez diviser simplement votre angle par l'incrément autorisé et obtenir un indice de direction, qui peut ensuite être utilisé pour indexer dans un tableau des décalages X / Y. Ce sera beaucoup plus rapide que d'utiliser la trigonométrie.

x, y = 100, 100   # starting position of the snake

direction = angle / 90 % 4   # convert angle to direction

directions = [(0,-1), (1, 0), (0, 1), (-1, 0)]   # up, right, down, left

# convert the direction to x and y offsets for the next move
xoffset, yoffset = directions[direction]

# calculate the next move
x, y = x + xoffset, y + yoffset

Mieux encore, le concept Renoncer à angle entièrement et il suffit d'utiliser une variable de direction. Puis tourner le serpent est une question de simple incrémenter ou décrémenter la direction.

# rotate counter-clockwise
direction = (direction - 1) % 4

# rotate clockwise
direction = (direction + 1) % 4

Cela peut facilement être étendue à 8 directions (se déplaçant à incréments de 45 degrés), si désiré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top