Я пытался реализовать функцию в игре, которую я делаю (на основе Царства Безумного Бога), где вы можете стрелять там, где нажимаете.Чтобы сделать это, я пытался использовать Пифагор и правило треугольников с наклоном или разбегом, чтобы выяснить, как далеко х и у должны проходить каждый раз, чтобы сохранять постоянный темп и оставаться в этом темпе каждый раз, когда я нажимаю.Куда бы я ни посмотрел, люди используют angles и python 2, в то время как сейчас я работаю над python 3, поэтому совместимость кода была более сложной, чем просто вопрос.Мой код использует классы для создания препятствий и текстур.Я использую массивы, чтобы хранить и создавать маркеры внутри игрового шлейфа и рисовать их на экране, используя функцию прямоугольника Pygames.См. Ниже мой код (не весь код включен).
import pygame, random, time
pygame.init()
shoot= []
class Projectiles(object):
def __init__(self, pos):
self.rect = pygame.Rect(pos[0], pos[1], 20, 20)
shoot.append(self)
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
quit()
if event.key == pygame.K_a:
movement_status = pcharl
x_change = 5
if event.key == pygame.K_w:
movement_status = pcharb
y_change = 5
if event.key == pygame.K_s:
movement_status = pchar
y_change = -5
if event.key == pygame.K_d:
movement_status = pcharr
x_change = -5
if event.key == pygame.K_e:
pygame.display.toggle_fullscreen()
if event.key == pygame.K_SPACE:
shooting = True
if movement_status == pcharl:
Projectiles((x, y))
direction = "left"
bx_change = -8
shooting = True
if movement_status == pcharr:
Projectiles((x+30, y))
direction = "right"
bx_change = 8
shooting = True
if movement_status == pcharb:
Projectiles((x + 30, y))
direction = "up"
by_change = -8
shooting = True
if movement_status == pchar:
Projectiles((x + 30, y))
direction = "down"
by_change = 8
shooting = True
if event.type == pygame.KEYUP:
x_change = 0
y_change = 0
if event.type == pygame.MOUSEBUTTONDOWN:
xm,ym = pygame.mouse.get_pos()
shooting_arr = True
if movement_status == pchar:
Projectiles((x + 60, y))
bullx = 560
if movement_status == pcharb:
Projectiles((x + 60, y))
bullx = 560
if movement_status == pcharr:
Projectiles((x + 60, y))
bullx = 560
if movement_status == pcharl:
Projectiles((x, y))
bullx = 500
for bullet in shoot:
pygame.draw.rect(screen, (255, 100, 0), bullet.rect)
xm = xm - bullx
ym = ym - 500
if xm % 2 == 0 and ym % 2 == 0:
xm = xm / 2
ym = ym / 2
xm = xm / ym
ym = ym / xm
bx_change = xm
by_change = ym
print(str(xm) + " " + str(ym))
xm = 0
ym = 0
shooting = True
screen.fill((225, 50, 25))
if shooting:
for bullet in shoot:
pygame.draw.rect(screen, (255, 0, 255), bullet.rect)
bullet.rect.x += bx_change
bullet.rect.y += by_change
if bullet.rect.x <= 0:
shoot.remove(bullet)
if bullet.rect.x >= 1000:
shoot.remove(bullet)
if bullet.rect.y <= 0:
shoot.remove(bullet)
if bullet.rect.y >= 1000:
shoot.remove(bullet)
x и y равны 500, размер экрана 1000x1000