Тема: pygame 2d платформер
Пишу 2d платформер, в бібліотеці pygame, по суті майже все є, потрібна допомога з генерацією ворогів. Які мають атакувати головного героя.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Python → pygame 2d платформер
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Пишу 2d платформер, в бібліотеці pygame, по суті майже все є, потрібна допомога з генерацією ворогів. Які мають атакувати головного героя.
Можу скинути кудись, оскільки там і спрайти і монстрів почав писати окремим кодом і імпротувати в основний, але зайшов у тупік оскільки новачок і тільки почав вивчати.
Якщо брати чисто алгоритм, то має бути список ворогів, тобто список об'єктів ворогів. Далі в залежності від якоїсь події, добавляєте в список (вірніше, ініціалізуєте) новий об'єкт ворога. Поведінку якого прописуєте методами у класі, а викликаєте їх вже в ігровому циклі.
Найпростіший варіант, в циклі (ігоровому) перевіряти кількість ворогів (довжину списку), якщо вона менша, ніж ..., то додаєте нового ворога. А далі вже перебираючи всіх ворогів (всі елементи списку) виконуєте якісь дії: перевіряєте здоров'я, рухаєте тощо. І окремо перевіряєте всі об'єкти на екрані на колізію (зіткнення). Але це вже залежить від гри. З PyGame не працював, тому не знаю як це там влаштовано, але основний алгоритм такий.
P.S. Сподіваюся допоміг. Якщо Ваша проблема була саме в цьому. Тому що, незалежно від рушія, алгоритм подібний зостається.
Для початку - перейдіть до об'єктно-орієнтованого проектування. У вас є клас bullet; тепер:
1. Винесіть обробку подій, пов'язаних із кулями, в цей клас. Тобто замість
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x += bullet.vel
else:
bullets.pop(bullets.index(bullet))
і ще кількох шматків в основному коді зробіть функції в класі snaryad (перейменуйте його краще на Bullet), а в основному циклі їх смикайте.
class Bullet:
...
def move(self):
self.x += self.vel
def check(self):
return self.x < 500
...
Основний цикл:
for b in bullets:
b.move()
if not b.check(): ...
Це допоможе, зокрема, вам розуміти, що саме відбувається - не "координата кулі змінилася на vel одиниць", а "куля перемістилася". Так зручніше думати над кодом.
2. Створіть клас Player, винесіть у нього поведінку гравця, і смикайте так само.
Якщо цей об'єкт матиме такі самі функції, як і куля, то можна буде їх викликати в одному циклі:
for object in game_objects:
object.move() #для кулі - просунутися, для гравця - перевірити клавіатуру і відреагувати
if not object.check(): #для кулі - якщо не вийшла за екран, для гравця - якщо не наштовхнувся на кулю, наприклад
...
3. Створіть клас Enemy, і тоді стане зрозуміло, як вам його генерувати.
4. Швидше за все, вам ще знадобиться об'єкт, щоб тримати решту - Stage чи Board чи ще якось так.
Не сприймайте ці фрагменти коду як однозначно правильні - це ваша гра, вам видніше, що саме робити з об'єктами. Але в цілому воно буде якось так.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися