Гайд PyGame 2

substandard rank
Забаненный
Статус
Оффлайн
Регистрация
21 Янв 2019
Сообщения
424
Реакции[?]
113
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Продолжение темы - https://yougame.biz/threads/143174/

6. Отрисовка объектов

Опять-таки, для удобства, добавим функцию:

Python:
def drawing(screen, color, x_pos, y_pos, radius):
    pygame.draw.circle(screen, color, (x_pos, y_pos), radius)
С помощью нее мы можем нарисовать круг, например - drawing(screen, (50, 100, 50), 150, 300, 50)

Так же как и изображение, круг нужно рисовать после заполнения экрана цветом.
screen.fill((0, 150, 200))
drawing(screen, (50, 100, 50), 150, 300, 50)


Чтобы рисовать остальные объекты, следует прочитать про модуль draw -
Пожалуйста, авторизуйтесь для просмотра ссылки.
(noad)

С любой нарисованной вами геометрической фигурой, вы можете взаимодействовать так же как и с изображением (передвигать, перекрашивать, уменьшать и тд)

Например -
Python:
        if DRAW_X < 51 and DRAW_SPEED == -2: #x_pos < (1 + radius) and obj_speed = -2
            DRAW_SPEED = 2 #draw speed изначально равна -2
        elif DRAW_X > (500 - 50) and DRAW_SPEED == 2: # x_pos > (screen_width - radius) and obj_speed = 2
            DRAW_SPEED = -2
        else:
            DRAW_X += DRAW_SPEED     

        screen.fill((0, 150, 200)) #Заполняем окно цветом fill((r, g, b), rect, flags)
        drawing(screen, (50, 100, 50), DRAW_X, DRAW_Y, 50)
Теперь наш круг отталкивается от стен

7. Добавим код для простой игры

Под игрой подразумевается дойти изображением до "лунки", после чего сменить положение "лунки" и опять дойти до нее.
Чтобы провернуть это, нам нужно проверять начальные точки по X и по Y, так же конечные точки X и Y.
Перед этим вернемся в самый верх и импортируем библиотеку random
Выглядеть это будет вот так:
Python:
       if Y+5 >= DRAW_Y-50 and DRAW_Y+50 >= Y+95: #Если начальная позиция Y+5 >= начальной позиции круга и конечная позиция круга >= конечной позиции по Y
            if X+10 >= DRAW_X-50 and DRAW_X+50 >= X+90: #Если нач поз по X+10 >= нач поз X круга и кон поз X круга >= кон поз X
                msg(screen, "You won!") #Выводим надпись "Ты победил!"
                time.sleep(0.5) #Останавливаем программу на 0.5 секунды
                DRAW_X = random.randint(50, 450) #Помещаем нашу "лунку" в другое место с помощью библиотеки random
                DRAW_Y = random.randint(50, 450)
 

        screen.fill((0, 150, 200)) #Заполняем окно цветом fill((r, g, b), rect, flags)
        drawing(screen, (50, 100, 50), DRAW_X, DRAW_Y, 50) #Отрисовываем "лунку"


8. Добавим систему очков

Для начала нам нужна переменная для количества очков. Я назову ее score.
После добавим новую функцию отображения текста для очков:
Python:
def draw_score(screen):
    font = pygame.font.SysFont(None, 25) #На этот раз будем использовать обычный, мелкий шрифт
    text = font.render("Score: "+str(score), True, (0,0,0)) #Получаем текст для отображения
    screen.blit(text,(10,10)) #Отображаем текст на экране, в правом верхнем углу
Обязательно прописываем global score в начале основной функции, иначе мы не сможем изменить переменную.
После строки msg(screen, "You won!") добавляем score += 1

И вызываем нашу новую функцию для отображения текста после заполнения экрана цветом
screen.fill((0, 150, 200))
draw_score(screen)


9. Добавим маленькую систему прокачки

Так же ничего трудного нет, делаем условие на количество очков, если их >= 10, повышаем скорость изображения.
Перед этим добавим переменную (я назову ее IMAGE_SPEED) для скорости изображения, приравняем ее к 2.
После заменим на нее цифры 2 в коде.
Код:
Python:
        if score > 0 and score >= (10*(IMAGE_SPEED-1)): #Если score больше 0 и score >= 10 * на нашу скорость
            IMAGE_SPEED += 1
10. Главное меню

Почти у каждой игры есть свое меню.
Чтобы добавить простое меню с одной кнопкой нужен этот код (опять-таки для удобства добавим функцию):
Python:
def menu(screen):

    InMenu = True

    while InMenu: #Пока мы в меню
        mouse_x, mouse_y = pygame.mouse.get_pos()
        for event in pygame.event.get(): #Перебираем все event`ы
            if event.type == QUIT: #Если event == выходу
                InMenu = False #Закрываем меню
                pygame.quit() #Завершаем работу с pygame
                quit() #Выходим

            if event.type == KEYDOWN: #Если нажата любая кнопка
                if event.key == K_SPACE: #Если нажат пробел
                    InMenu = False #Закрываем меню
            
            if event.type == MOUSEBUTTONDOWN: #Если нажата любая из кнопок мыши
                if event.button == BUTTON_LEFT: #Если была нажата левая кнопка мыши
                    if mouse_x >= 100 and mouse_x <= 400: #Если курсор между нач точкой X кнопки и кон точкой X кнопки
                        if mouse_y >= 325 and mouse_y <= 400: #Если курсор между нач точкой Y кнопки и кон точкой Y кнопки
                            InMenu = False #Выходим из меню
                

        screen.fill((255,255,255)) #Заливаем экран белым цветом
        pygame.draw.rect(screen, (0, 200, 100), [100, 325, 300, 75]) #Рисуем прямоугольник (кнопку)

        start_font = pygame.font.SysFont(None, 40) #Шрифт для надписи Start
        start_text = start_font.render("Start", True, (0,0,0)) #Получаем текст
        screen.blit(start_text,(215,335)) #Отображаем надпись Start

        space_font = pygame.font.SysFont(None, 30) #Шрифт для надписи Press Space or Start Button
        space_text = space_font.render("Press Space or Start Button", True, (0,0,0)) #Получаем текст
        screen.blit(space_text, (115, 365)) #Отображаем надпись Press Space or Start Button

        msg(screen, "Mini Game") #Отрисовываем по центру текст "Mini Game"
В основной функции, после строки pygame.display.flip(), вызываем меню menu(screen)



Исходник -
Пожалуйста, авторизуйтесь для просмотра ссылки.

VT на python файл -
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Забаненный
Статус
Оффлайн
Регистрация
16 Июл 2020
Сообщения
28
Реакции[?]
11
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
спасибо,годный гайд! благодоря тебе и таким как ты питонщиков становится все больше и больше :seemsgood:
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,442
Реакции[?]
671
Поинты[?]
30K
Спасибо за гайд, я его не читал, но когда-нибудь, камень-ножницы-бумага(которая туалетная) сделаю
 
Забаненный
Статус
Оффлайн
Регистрация
16 Июл 2020
Сообщения
28
Реакции[?]
11
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Спасибо за гайд, я его не читал, но когда-нибудь, камень-ножницы-бумага(которая туалетная) сделаю
так никто же не преуменьшает значение и вклад разработчиков, но и старания энтузиастов(не важно какого уровня) имеют значения,наверное:blush:
 
Забаненный
Статус
Оффлайн
Регистрация
30 Июн 2019
Сообщения
81
Реакции[?]
17
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
тупа по приколу что-то сделать будет норм но а так игры не для python он слишком медленный для игр
 
Сверху Снизу