Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.02.2023
Сообщений: 33

Не двигается корабль и не стреляет. Только картинка при запуске. Что не так с кодом?

17.02.2023, 16:21. Показов 1302. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
alien_invasion.py
Python
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
import pygame
from pygame.sprite import Group
 
from settings import Settings
from ship import Ship
import game_functions as gf
 
def run_game():
#Initilizian game and create object of display.
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode(
        (ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")
    
#Create the ship.
    ship = Ship(ai_settings, screen)
    #Create the group for saving of bullets.
    bullets = Group()
 
#Choose main color background.
    bg_color = (0, 0, 255)
 
#Start tne main range of game.
    while True:
        gf.check_events(ai_settings, screen, ship, bullets)
        ship.update()
        gf.update_bullets(bullets)
        gf.update_screen(ai_settings, screen, ship, bullets)
    
#Monitor display and mouse events.
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
 
#Screen is drawn with each transition of the loop.
                screen.fill(ai_settings.bg_color)
                ship.blitme()
 
 
#Display last drawn screen.
                pygame.display.flip()
         
run_game()
game_functions

Python
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
import pygame
from bullet import Bullet
 
def check_keydown_events(event, ai_settings, screen, ship, bullets):
    """Responds to key presses."""
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
    elif event.key == pygame.K_SPACE:
        fire_bullet(ai_settings, screen, ship, bullets)
 
def fire_bullet(ai_settings, screen, ship, bullets):
    """Fires a bullet if the maximum has not yet been reached."""
        #Create new bullet and include it in groups bullets.
    if len(bullets) < ai_settings.bullets_allowed:
        new_bullet = Bullet(ai_settings, screen, ship)
        bullets.add(new_bullet)
                
def check_keyup_events(event, ship):
    """Responds to key release."""
    if event.key == pygame.K_RIGHT:
        ship.moving_right = False
    elif event.key == pygame.K_LEFT:
        ship.moving_left = False
                
def check_events(ai_settings, screen, ship, bullets):
    """Handles keystrokes and mouse events."""
    for event in pygame.event.get():
        
        if event.type == pygame.QUIT:
            sys.exit()
            
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(event, ai_settings, screen, ship, bullets)
            if event.key == pygame.K_RIGHT:
                ship.moving_right = True
        elif event.type == pygame.KEYUP:
            check_keyup_events(event, ship)
            if event.key == pygame.K_RIGHT:
                ship.moving_right = False
                # Move the ship right.
                ship.rect.centerx += 1
       
def update_screen(ai_settings, screen, ship, bullets):
    """Refreshes the screen image and displays the new screen."""
    screen.fill(ai_settings.bg_color)
    #All bullets display behind ships and aliens.
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    # Display the last rendered screen.
    pygame.display.flip()
 
def update_bullets(bullets):
    """Update position bullets and delete old bullets."""
    #Update position of bullets.
    bullets.update()
    #Delete bullets what gone off edge of the screen.
    for bullet in bullets.copy():
            if bullet.rect.bottom <= 0:
                bullets.remove(bullet)
                print(len(bullets))
Ship.py
Python
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
import pygame
 
class Ship():
 
    def __init__(self, ai_settings, screen):
        """Initialiez the ship and creates its initial position."""
        self.screen = screen
        self.ai_settings = ai_settings
 
        # Load image ship and receiving rectangle.
        self.image = pygame.image.load('ship.bmp')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()
        # Each new ship appears at the bottom of the screen.
        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom
        # Saving the real coordinate of the center of the ship.
        self.center = float(self.rect.centerx)
        # Movement flag.
        self.moving_right = False
        self.moving_left = False
 
    def update(self):
        """ Update position ship based on the flag."""
        # Update atribute center but not rect.
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.center += self.ai_settings.ship_speed_factor
        if self.moving_left and self.rect.left > 0:
            self.center -= self.ai_settings.ship_speed_factor
 
        # Update atribute rect based self.center.
        self.rect.centerx = self.center
        
    def blitme(self):
        """Draw the ship in current position."""
        self.screen.blit(self.image, self.rect)
Settings.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Settings():
    """Class for save all options for game Alien Invasion."""
 
    def __init__(self):
        """Initilization options game."""
        #Settings screen
        self.screen_width = 1366
        self.screen_height = 768
        self.bg_color = (0, 0, 255)
        #Settings ship
        ship_speed_factor = 1.5
        #Settings of bullet
        self.bullet_speed_factor = 1
        self.bullet_width = 3
        self.bullet_height = 15
        self.bullet_color = 60, 60, 60
        self.bullets_allowed = 3
bullet.py
Python
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
import pygame
from pygame.sprite import Sprite
 
class Bullet(Sprite):
    """Class for manage bullets from ship."""
 
def __init__(self, ai_settings, screen, ship):
    """Create a bullet at now position of ship."""
    super(Bullet, self).__init__()
    self.screen = screen
 
    #Create bullet in position (0,0) and destination correct position.
    self.rect = pygame.Rect(0, 0, ai_settings.bullet_width,
                            ai_settings.bullet_height)
    self.rect.centerx = ship.rect.centerx
    self.rect.top = ship.rect.top
 
    #Bullet position is stored in real format.
    self.y = float(self.rect.y)
 
    self.color = ai_settings.bullet_color
    self.speed_factor = ai_settings.bullet_speed_factor
 
def update(self):
    """Move the bullet on display up."""
    #Update bullet position in real formate.
    self.y -= self.speed_factor
    #Update rectangle position.
    self.rect.y = self.y
 
def draw_bullet(self):
    """Display the bullet."""
    pygame.draw.rect(self.screen, self.color, self.rect)

Ошибок Шелл не выдает
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2023, 16:21
Ответы с готовыми решениями:

В аниматоре при просмотре анимации все работает правильно, но при запуске персонаж двигается не так
В аниматоре при переходе из бега в слайд персонаж опускается как и в анимации, которую импортировал из блендера, но в игре после бега...

Корабль стреляет в самолёт!
Всем привет помогите пожалуйста написать программу в которой корабль стреляет в сомалёт, после чего самолёт исчезает,при этом они должны...

Выводится картинка на view сразу при запуске программы и только один раз
Ну собственно это продолжение вопроса на мой предыдущий вопрос про вывод картинки, с выводом я почти разобрался, в свойстве customclass...

1
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
18.02.2023, 12:33
Цитата Сообщение от Uristoshka992 Посмотреть сообщение
Python
1
2
3
4
#Monitor display and mouse events.
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        sys.exit()
Цитата Сообщение от Uristoshka992 Посмотреть сообщение
Python
1
2
3
4
5
6
def check_events(ai_settings, screen, ship, bullets):
    """Handles keystrokes and mouse events."""
    for event in pygame.event.get():
        
        if event.type == pygame.QUIT:
            sys.exit()
У Вас обработка событий идет в двух местах, причем первый вариант из всех событий обрабатывает только QUIT. Как минимум один блок лишний.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2023, 12:33
Помогаю со студенческими работами здесь

Что не так с кодом? В синий цвет окрашивается абзац на карточке с арбузом и заголовок, а синим должен быть только текст
Что не так с кодом? В синий цвет окрашивается абзац на карточке с арбузом и заголовок, а синим должен быть только текст &quot;Watermelon...

Сделать так чтобы при клике на картинку оставалась только эта картинка и выводился текст.
Помогите решить проблему начинающему в JS. У меня есть блок в котором три картинки 1,2,3. Надо сделать так что бы при клике на картинку 1...

Не могу понять что не так с кодом (сжатие кодом Хэмминга)
Написали код по заданию &quot;Считать картинку bmp по пикселям: R 8 бит, G 8 бит, B 8 бит. Старший бит в каждом байте оставить без...

Шифр Цезаря на c++. Что не так с кодом ? При вводе пробела ошибка
#include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;clocale&gt; using namespace std; int main() { setlocale(LC_CTYPE,&quot;russian&quot;);...

Подскажите пожалуйста что не так с кодом, при нажатии Button вылетает ошибка
:( Вот задание: Преобразовать массив Х по следующему правилу: все отрицательные элементы массива перенести в начало, а все остальные –...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru