Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2018, 08:01   #1
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию игра Python pygame

Капельку переделала игру Астероиды. Пыталась сделать сообщение/уведомление о начале игры и Game Over, но что то не то получается помогите пожалуйста:
Код:
import sys, os, pygame, random
from pygame.locals import *

# Инициализируем переменные
# Начальное положение НЛО
x_coord=1
y_coord=600
# Начальная скорость НЛО
x_speed=0
y_speed=0
# Количество жизненной энергии НЛО
score=1000
# Переменная-счетчик определяет когда
# астероиды изменяют направление движения
shag=0
# Сдвиги по вертикали для астероидов
go1=0
go2=0
go3=0
     
def init_window():
    # Инициализируем pygame
    pygame.init()
    # Создаём игровое окно 550*400
    window = pygame.display.set_mode((500, 400))
    # Ставим свой заголовок окна
    pygame.display.set_caption('Получи диплом')

# Функция отображения картинок
def load_image(name, colorkey=None):
    # Добавляем к имени картинки имя папки
    fullname = os.path.join('data', name)
    # Загружаем картинку
    image = pygame.image.load(fullname)
    image = image.convert()
    # Если второй параметр =-1 делаем прозрачным
    # цвет из точки 0,0
    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0,0))
        image.set_colorkey(colorkey, RLEACCEL)
    return image, image.get_rect()
 
def draw_background():
    # Получаем поверхность, на которой будем рисовать
    screen = pygame.display.get_surface()
    # и ее размер
    background = pygame.Surface(screen.get_size()) 
    background = background.convert()
    # или загружаем картинку космоса
    back, back_rect = load_image("1452778276.jpg")
    # и рисуем ее
    screen.blit(back, (0, 0))
    # переключаем буфер экрана
    pygame.display.flip() 
    return back

# Класс описывающий летающие объекты
class Skything(pygame.sprite.Sprite):
    def __init__(self, img, cX, cY):
        # Создаем спрайт из картинки
        pygame.sprite.Sprite.__init__(self)
        self.image, self.rect = load_image(img, -1)
        screen = pygame.display.get_surface()
        self.area = screen.get_rect()
        # Перемещаем картинку в её начальные координаты
        self.rect.x = cX
        self.rect.y = cY

 
# Создаём дочерний класс NLO
class Nlo(Skything):
    def __init__(self, cX, cY):
        Skything.__init__(self, "f2193333.jpg", cX, cY)

# Создаём дочерний класс Asteroid
class Asteroid(Skything):
    def __init__(self, cX, cY):
        Skything.__init__(self, "Преподаватели.png", cX, cY)

def input(events):
    global x_coord, y_coord, x_speed, y_speed, life
    # Перехватываем нажатия клавиш на клавиатуре
    for event in events:
        if (event.type == QUIT) or (event.type == KEYDOWN and event.key == K_ESCAPE):
            pygame.quit()
            sys.exit(0)
        # Когда нажаты стрелки изменяем скорость НЛО
        # чтобы оно летело
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT: x_speed=-1
            if event.key == pygame.K_RIGHT: x_speed=1
            if event.key == pygame.K_UP: y_speed=-1
            if event.key == pygame.K_DOWN: y_speed=1
        # Когда стрелки не нажаты скорость ставим в ноль
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT: x_speed=0
            if event.key == pygame.K_RIGHT: x_speed=0
            if event.key == pygame.K_UP: y_speed=0
            if event.key == pygame.K_DOWN: y_speed=0
    # Меняем положение НЛО не выходя за рамки окна
    x_coord = x_coord + x_speed
    y_coord = y_coord + y_speed
    if(x_coord<0): x_coord=0
    if(x_coord>450): x_coord=450
    if(y_coord<0): y_coord=0
    if(y_coord>350): y_coord=350

def action(bk):
    global x_coord, y_coord, score, shag, go1, go2, go3
    screen = pygame.display.get_surface()
    # Создаём НЛО и астероиды
    nlo = Nlo(1,320) 
    asteroid = Asteroid(500,100) 
    asteroid2 = Asteroid(800,200)
    asteroid3 = Asteroid(1200,350)
    # Добавляем их в два массива
    asterow=[]
    asterow.append(asteroid)
    asterow.append(asteroid2)
    asterow.append(asteroid3)
    air = [] 
    air.append(nlo)
    # Рисуем их
    asteroids=pygame.sprite.RenderPlain(asterow)
    nlos = pygame.sprite.RenderPlain(air)
    timer = pygame.time.Clock()
    # Запускаем бесконечный цикл
    while 1:
        # Создаем паузу
        timer.tick(800)
        # Ждём нажатий клавиатуры
        input(pygame.event.get())
        # Проверяем столкновения
        blocks_hit_list = pygame.sprite.spritecollide(nlo, asteroids, False)
        # Если есть столкновения уменьшаем жизнь
        if len(blocks_hit_list) > 0:
            score -=len(blocks_hit_list)
            asteroids.draw(screen)
            nlos.draw(screen)
            if(score<1):
                 pygame.create_text(
                              text="GAME OVER!",
                              font="Arial 20",
                              fill="#ff0000")
                pygame.quit()
                sys.exit(0)
        # Обновляем координаты НЛО
        nlo.rect.x=x_coord
        nlo.rect.y=y_coord
        # Изменяем положение астероидов
        asteroid.rect.x=asteroid.rect.x-1
        asteroid2.rect.x=asteroid2.rect.x-1
        asteroid3.rect.x=asteroid3.rect.x-1
        if(asteroid.rect.x<0):
            asteroid.rect.x=500
            asteroid.rect.y=100
        if(asteroid2.rect.x<0):
            asteroid2.rect.x=800
            asteroid2.rect.y=200
        if(asteroid3.rect.x<0):
            asteroid3.rect.x=1200
            asteroid3.rect.y=350
        # Раз в 300 итераций астероиды
        # меняют направление движения
        if(shag>300):
            shag=0
            go1=random.randint(-1,1)
            go2=random.randint(-1,1)
            go3=random.randint(-1,1) 
        asteroid.rect.y+=go1 
        asteroid2.rect.y+=go2
        asteroid3.rect.y+=go3
        shag+=1
        # Заново прорисовываем объекты
        screen.blit(bk, (0, 0))
        font = pygame.font.Font(None, 25)
        white    = ( 255, 255, 255)
        life=int(score/10)
        text = font.render("Жизнь: "+str(life),True,white)
        # Рисуем надпись с жизнями
        screen.blit(text, [10,10])
        # Обновляем положение объектов
        asteroids.update() 
        nlos.update()
        # Обновляем кадр
        asteroids.draw(screen)
        nlos.draw(screen)
        pygame.display.flip()

def main():
    init_window()
    bk = draw_background()
    action(bk)

main()
Изображения
Тип файла: jpg Buhf.jpg (39.4 Кб, 165 просмотров)
РезедаМуратова вне форума Ответить с цитированием
Старый 25.05.2018, 10:11   #2
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

Написала таким образом, все равно надпись о конце игры не выходит(. Помогите пожалуйста
Код:
 # Если есть столкновения уменьшаем жизнь
        if len(blocks_hit_list) > 0:
            score -=len(blocks_hit_list)
            asteroids.draw(screen)
            nlos.draw(screen)
            if(score<1):
                white = ( 250, 0, 0)
                life=int(score/10)
                text = font.render("Game Over"+str(life),True,white)
                 # Рисуем надпись с жизнями
                screen.blit(text, [10,10])
                pygame.quit()
                sys.exit(0)
        # Обновляем координаты НЛО
        nlo.rect.x=x_coord
        nlo.rect.y=y_coord
        # Изменяем положение астероидов
        asteroid.rect.x=asteroid.rect.x-1
        asteroid2.rect.x=asteroid2.rect.x-1
        asteroid3.rect.x=asteroid3.rect.x-1
        if(asteroid.rect.x<0):
РезедаМуратова вне форума Ответить с цитированием
Старый 25.05.2018, 16:27   #3
nick-one
Пользователь
 
Регистрация: 28.03.2017
Сообщений: 35
По умолчанию

Скорее всего дело в том, что строчки
Код:
                pygame.quit()
                sys.exit(0)
завершают игру и сообщение просто не успевает отобразится. Нужна задержка:
Код:
                import time
                time.sleep(3) # 3 сек
                pygame.quit()
                sys.exit(0)
Возможно сработает.
nick-one вне форума Ответить с цитированием
Старый 27.05.2018, 17:37   #4
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

Задержка появилась, но а тест так и не появляется, что можно сделать в таком случае? Помогите пожалуйста.
РезедаМуратова вне форума Ответить с цитированием
Старый 28.05.2018, 11:59   #5
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

даже так не катит:
Код:
 # Если есть столкновения уменьшаем жизнь
        if len(blocks_hit_list) > 0:
            score -=len(blocks_hit_list)
            asteroids.draw(screen)
            nlos.draw(screen)
            if(score<1):
                 # Рисуем надпись с жизнями
                screen.blit(text, [10,10])
                import time
                time.sleep(3)
                pygame.create_text(
                    text="Game Over!",
                    font="Arial 20",
                    fill="#ff0000"
                )
                white = ( 250, 0, 0)
                life=int(score/10)
                text = font.render("Game Over"+str(life),True,white)
                 # Рисуем надпись с жизнями
                screen.blit(text, [10,10])
                pygame.quit()
                sys.exit(0)
просто попробовала два варианта
РезедаМуратова вне форума Ответить с цитированием
Старый 28.05.2018, 12:32   #6
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
что можно сделать в таком случае?
изучить предметную область. и второе оплатить задание и вам все сделают.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Документации, учебники, уроки и полезные материалы по Python, PyQt, PySide pompiduskus Python 4 22.07.2022 10:16
Настольная игра с шашками (Backend и Frontend). flash, python ManuMana Фриланс 4 29.03.2018 00:25
Начальный уровень Python. Функции - Python YYYUUU Python 5 09.06.2017 12:09
[Delphi] Игра Пятнашки. Помогите пожалуйста добавить окно "Вы выиграли", когда комбинация будет собрана правильно, и добавить кнопку "Новая игра" Аня20 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2017 08:12
Текстовая ролевая игра на Python Lektorfuja Помощь студентам 2 02.12.2016 13:50