Я новичок в Python и пытаюсь написать код для такой игры, как Space Invaders.
Я создал все, но когда я перемещаю своего персонажа и стреляю, пуля продолжает стрелять из исходное положение персонажа.
Мне нужно, чтобы оно каждый раз снималось с фактического положения персонажа.
main.pyfrom turtle import Turtle, Screen
from player import Player
from bullet import Bullet, BULLET_SPEED
turtle = Turtle()
screen = Screen()
screen.setup(width=800, height=800)
screen.title("Shmup Test")
screen.bgcolor("black")
player = Player()
bullet = Bullet()
screen.listen()
screen.onkey(key="Up", fun=player.go_up)
screen.onkey(key="Down", fun=player.go_down)
screen.onkey(key="Left", fun=player.go_left)
screen.onkey(key="Right", fun=player.go_right)
screen.onkey(key="space", fun=bullet.fire_bullet)
while True:
bullet.forward(BULLET_SPEED)
player.py
from turtle import Turtle, Screen
MOVE_DISTANCE = 10
screen = Screen()
class Player(Turtle):
def __init__(self):
super().__init__()
self.image = "penguin.gif"
screen.register_shape(self.image)
self.shape(self.image)
self.penup()
self.speed(0)
self.setposition(0, -180)
self.setheading(90)
def go_up(self):
new_y = self.ycor() + MOVE_DISTANCE
if new_y > 330:
new_y = 330
self.goto(self.xcor(), new_y)
def go_down(self):
new_y = self.ycor() - MOVE_DISTANCE
if new_y < -330:
new_y = -330
self.goto(self.xcor(), new_y)
def go_left(self):
new_x = self.xcor() - MOVE_DISTANCE
if new_x < -330:
new_x = -330
self.goto(new_x, self.ycor())
def go_right(self):
new_x = self.xcor() + MOVE_DISTANCE
if new_x > 330:
new_x = 330
self.goto(new_x, self.ycor())
bullet.py
from turtle import Turtle, Screen
from player import Player
BULLET_SPEED = 10
self = Turtle()
player = Player()
screen = Screen()
class Bullet(Turtle):
def __init__(self):
super().__init__()
self.color("red")
self.shape("circle")
self.penup()
self.speed(0)
self.setposition(player.xcor(), player.ycor())
self.setheading(90)
self.shapesize(.5, .5)
self.hideturtle()
def fire_bullet(self):
x_pos = player.xcor()
y_pos = player.ycor()
self.setposition(x_pos, y_pos)
self.showturtle()
Подробнее здесь: https://stackoverflow.com/questions/793 ... e-invaders
Пули стреляют из неправильной позиции после перемещения игрока в небольшой игре «Space Invaders» ⇐ Python
Программы на Python
1736006104
Anonymous
Я новичок в Python и пытаюсь написать код для такой игры, как Space Invaders.
Я создал все, но когда я перемещаю своего персонажа и стреляю, пуля продолжает стрелять из исходное положение персонажа.
Мне нужно, чтобы оно каждый раз снималось с фактического положения персонажа.
main.pyfrom turtle import Turtle, Screen
from player import Player
from bullet import Bullet, BULLET_SPEED
turtle = Turtle()
screen = Screen()
screen.setup(width=800, height=800)
screen.title("Shmup Test")
screen.bgcolor("black")
player = Player()
bullet = Bullet()
screen.listen()
screen.onkey(key="Up", fun=player.go_up)
screen.onkey(key="Down", fun=player.go_down)
screen.onkey(key="Left", fun=player.go_left)
screen.onkey(key="Right", fun=player.go_right)
screen.onkey(key="space", fun=bullet.fire_bullet)
while True:
bullet.forward(BULLET_SPEED)
player.py
from turtle import Turtle, Screen
MOVE_DISTANCE = 10
screen = Screen()
class Player(Turtle):
def __init__(self):
super().__init__()
self.image = "penguin.gif"
screen.register_shape(self.image)
self.shape(self.image)
self.penup()
self.speed(0)
self.setposition(0, -180)
self.setheading(90)
def go_up(self):
new_y = self.ycor() + MOVE_DISTANCE
if new_y > 330:
new_y = 330
self.goto(self.xcor(), new_y)
def go_down(self):
new_y = self.ycor() - MOVE_DISTANCE
if new_y < -330:
new_y = -330
self.goto(self.xcor(), new_y)
def go_left(self):
new_x = self.xcor() - MOVE_DISTANCE
if new_x < -330:
new_x = -330
self.goto(new_x, self.ycor())
def go_right(self):
new_x = self.xcor() + MOVE_DISTANCE
if new_x > 330:
new_x = 330
self.goto(new_x, self.ycor())
bullet.py
from turtle import Turtle, Screen
from player import Player
BULLET_SPEED = 10
self = Turtle()
player = Player()
screen = Screen()
class Bullet(Turtle):
def __init__(self):
super().__init__()
self.color("red")
self.shape("circle")
self.penup()
self.speed(0)
self.setposition(player.xcor(), player.ycor())
self.setheading(90)
self.shapesize(.5, .5)
self.hideturtle()
def fire_bullet(self):
x_pos = player.xcor()
y_pos = player.ycor()
self.setposition(x_pos, y_pos)
self.showturtle()
Подробнее здесь: [url]https://stackoverflow.com/questions/79329076/bullets-shooting-from-wrong-position-after-player-moved-in-small-space-invaders[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия