Моя первая игра - карточная Roguelike игра с кучей механик и предметов!
Привет! Я сделал игру вдохновлённую мобильной игрой Dungeon Cards. В ней вам нужно бесконечно продвигаться вперёд в полном опасностей подземелье, убивать монстров и получать за них монеты, находить сокровища, ценные предметы и драгоценные камни!
Я если честно не уверен, буду ли я её апдейтить, так как не уверен наберёт ли она хоть какую-то популярность. Но врагов не настолько много как хотелось, да и предметов хотелось бы ещё добавить, так что посмотрим!
скачать:
Установка pygame
Работая с python, столкнулся с проблемой: нигде в интернете не указано как установить библиотеку pygame на Windows. Да, сайтов есть много, но ни на одном нет толкового объяснения. Поэтому я создал этот небольшой гайд.
Шаг 1. Установка Python.
Предполагается, что он уже установлен. Об этом говорить не буду, есть много подробных объяснений.
Шаг 2. Добавление библиотеки.
По ссылке, на яндекс диске расположены файлы библиотеки:
Их надо скопировать, и дальше начинается самое интересное! Сначала в проводнике во вкладке "Вид" нажимаем галочку "Скрытые элементы".
Этот компьютер - Диск - Пользователи - Имя вашего пользователя - скрытая папка "AppData" - Local - Programs - Python - Python312 (ваша версия для работы) - include
Как только вы зайдёте в последнюю папку, там будет много файлов типа header file. К ним и добавляем файлы с диска.
Шаг 3. Работа с pygame.
Все шаги для работы сделаны. Начинаем работать.
Посоветую сайт для обучения (там есть весь Python, pygame - часть 13):
Пожалуйста, поднимите пост в лучшее, чтобы увидели многие. Спасибо)
Помогите с python
Написал вот такой код. Пишет ошибку if prect.colliderect (el):
TypeError: Invalid rect, all 4 fields must be numeric
Такая ошибка произошла после того, как я хотел сделать бесконечную генерацию врагов (wr)
Помогите, кто знает, как исправить код
import pygame
clock = pygame.time.Clock()
pygame.init()
skr = pygame.display.set_mode((1000, 563)) #, flags=pygame.NOFRAME
pygame.display.set_caption('pixel game')
png = pygame.image.load('images/214717_wangwang_china_chinese_alibaba_icon.png').convert_alpha()
pygame.display.set_icon(png)
ps = 10
px = 150
py = 370
isj = False
jk = 10
bg = pygame.image.load('fonts/1678708864_bogatyr-club-p-fon-arkadi-foni-vkontakte-62.jpg').convert_alpha()
Wk = [pygame.image.load('2д персы/New Piskel (9).gif').convert_alpha(),
pygame.image.load('2д персы/New Piskel (8).gif').convert_alpha(),
]
wr = [pygame.image.load('2д персы/New Piskel (6).gif').convert_alpha(),
pygame.image.load('2д персы/New Piskel (7).gif').convert_alpha(),
]
elx = 620
wrlist = []
el = []
pac = 0
bg_su = pygame.mixer.Sound('sounds/Для игры (online-audio-converter.com).mp3')
bg_su.play(-1)
wrt = pygame.USEREVENT + 1
pygame.time.set_timer(wrt, 1000)
bg_x = 0
run = True
while run:
skr.blit(bg, (bg_x, 0))
skr.blit(bg, (bg_x + 1000, 0))
skr.blit(Wk[pac], (px, py))
prect = Wk[0].get_rect(topleft=(px, py))
if wrlist:
for el in wrlist:
skr.blit(wr[pac], el)
elx -= 10
if prect.colliderect (el):
print('Вы проирали')
k = pygame.key.get_pressed()
if k[pygame.K_s] and px > 1:
px -= ps
elif k[pygame.K_w] and px < 900:
px += ps
if not isj:
if k[pygame.K_SPACE]:
isj = True
else:
if jk >= -10:
if jk > 0:
py -= (jk ** 2) / 2
else:
py += (jk ** 2) / 2
jk -= 1
else:
isj = False
jk = 10
if pac == 1:
pac = 0
else:
pac += 1
bg_x -=2
if bg_x == -1000:
bg_x = 0
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
if event.type == wrt:
wrlist.append(wr[pac].get_rect(topleft=(620, 370)))
clock.tick(15)
Сделал игру
Всем привет! Никогда не имел опыта в программировании и вот, в 35 лет, решил начать изучать питон. Начал с самого начала, "Hello World!" все дела. Учился самостоятельно в течение года и когда добрался до библиотеки pygame, решил сделать небольшую игру. Она простенькая, и конечно можно еще многое добавить или поправить, но для первого проекта думаю сойдет. Кому интересно можете попробовать поиграть, сделал инстальник, ссылку прикреплю. Вирусов там нет.
Цель игры: уворачиваться от падающих листьев и пёселя)
Сайт для сервера
Делаю свою онлайн игру на питоне(3.11), с помощью библиотеки pygame(2.5.2). И вот я реализовал клиент, реализовал сервер, но так же потребовалось сделать веб-сайт на фреймворке flask(3.0.2), на котором будут отображаться основные данные о сервере. Обычное(последовательное) программирование отпало сразу. Стал пробовать выполнять задачу через асинхронное программирование, библиотека asyncio, пытался запускать функции через метод "create_task"(обе запускаемы таким образом функции я переделал в асинхронные), однако при запуске программы я получаю следующую ошибку: "RuntimeError: no running event loop; sys:1: RuntimeWarning: coroutine 'main' was never awaited". Ошибку я перевёл, но так и не понял, что она значит. Если здесь есть люди, которые разбираются в подобном, подскажите пожалуйста, как эту ошибку починить? Заранее спасибо за оставленные советы и критику.
P.S. Если понадобится ещё какая-то информация, то вот гитхаб проекта, файл main.py - клиент, server_test.py - сервер.
Проект на Pygame
Всем привет, делаю онлайн игру для проектной работы. Игру пишу на python с помощью pygame, для обмена данными пользуюсь библиотекой socket, для запаковки информации использую json. Сначала я думал кидать клиенту с сервера игровое поле в виде списка строк(шифр с условными обозначениями), но уже во время реализации идеи и её отладки я понял что это будет той ошибкой, которая будет преследовать меня даже во снах, поэтому я решил, что будет хорошей идеей передавать в json'е список спрайтов, но json стукнул меня по голове и вежливо сказал, что спрайты компоновать он не может(Object of type Wall is not JSON serializable). Как можно избежать подобных ругательств и/или решить данную подзадачу эффективнее? Если вам кажется, что я изобретаю велосипед, и Вы можете объяснить, как такое решают нормальные люди, то поделитесь пожалуйста своим опытом в комментариях, он может быть полезен не только мне. Заранее спасибо.
P.S. Совсем забыл указать гитхаб проекта, если кому-то понадобится, вот он. На момент написания поста актуален коммит ca33bdf. Если вы так же где-то заметили мои глупости, просьба не пинать тапками, я только начинающий программист(сейчас это вроде называют говнокодерами).
Если вас бесит Pygame
Возможно, вас, как и меня, дико раздражает та реализация обработки событий в Pygame, которая приводится, как пример, во всех возможных учебниках. А именно: в игровом цикле вложенный цикл перебирает очередь, и, в лучшем случае, вызывает методы объектов, но, обычно, еще и расчёты игровой механики идут там же. Отчего программа выглядит как месиво примеров из документации и костылей, перемотанное изолентой (не синей).
Моё решение
Создаём класс (в том числе, для всех настроек и глобальных действий игры)
Метод events сохраняет копию очереди событий, и отдаёт её по запросу, обновляя, при необходимости. Метод isRun предназначен для реакции на закрытие окна. Для общего случая он не нужен.
В целом, программы теперь можно писать так:
Таким образом, реакции на события обрабатываются внутри объектов, как и положено в нормальном мире.
Успешных разработок!






