2D game engine for Python with physics, collision detection, and texture support
Project description
Jwarol Engine
2D игровой движок для Python на C++ и pybind11. Полностью автономный — не нужно подключать другие библиотеки для ходьбы, физики и управления.
Установка
pip install jwarol==0.3.5
Быстрый старт
import jwarol
engine = jwarol.Engine()
engine.init(800, 600, "My Game")
player = engine.create_object(100, 100, 50, 50, jwarol.ObjectType.PLAYER)
while engine.is_open():
engine.clear(0.2, 0.2, 0.2)
engine.draw_rect(player, 0.0, 1.0, 0.0)
engine.update()
engine.close()
API Справочник
Типы объектов
jwarol.ObjectType.OBJECT # Обычный объект
jwarol.ObjectType.PLAYER # Игрок
jwarol.ObjectType.ITEM # Предмет
jwarol.ObjectType.GUI # Интерфейс
Коды клавиш (Windows)
# Стрелки
jwarol.VK_LEFT # 37
jwarol.VK_UP # 38
jwarol.VK_RIGHT # 39
jwarol.VK_DOWN # 40
# WASD
jwarol.VK_W # 87
jwarol.VK_A # 65
jwarol.VK_S # 83
jwarol.VK_D # 68
# Пробел
jwarol.VK_SPACE # 32
Методы Engine
| Метод | Описание |
|---|---|
init(w, h, title) |
Создание окна |
create_object(x, y, w, h, type) |
Создание объекта, возврат ID |
set_position(id, x, y) |
Установка позиции |
set_velocity(id, vx, vy) |
Установка скорости |
apply_gravity(id, dt) |
Гравитация (увеличивает vel_y) |
apply_velocity(id, dt) |
Движение по vel_x/vel_y |
apply_force(id, fx, fy) |
Применение силы |
is_key_pressed(keycode) |
Проверка нажатия клавиши (встроенная) |
move_object(id, dx, dy, speed) |
Простое движение (встроенное) |
is_object(id, type) |
Проверка типа |
check_collision(id1, id2) |
Проверка коллизии |
is_open() |
Окно открыто? |
clear(r, g, b) |
Очистка экрана |
draw_rect(id, r, g, b) |
Отрисовка |
update() |
Обновление экрана |
close() |
Закрытие |
Примеры использования
Пример 1: Платформер (автономный, только jwarol)
import jwarol
import time
engine = jwarol.Engine()
engine.init(800, 600, "Platformer - No Extra Libs")
# Объекты
player = engine.create_object(100, 300, 40, 60, jwarol.ObjectType.PLAYER)
ground = engine.create_object(0, 550, 800, 50, jwarol.ObjectType.OBJECT)
platform = engine.create_object(300, 400, 200, 20, jwarol.ObjectType.OBJECT)
gravity = 0.5
jump_force = -12
speed = 5
on_ground = False
while engine.is_open():
engine.clear(0.4, 0.6, 1.0) # Небо
# Гравитация
engine.apply_gravity(player, gravity)
# Управление (встроенное, не нужен pygame или другие библиотеки)
if engine.is_key_pressed(jwarol.VK_LEFT):
engine.move_object(player, -1, 0, speed)
if engine.is_key_pressed(jwarol.VK_RIGHT):
engine.move_object(player, 1, 0, speed)
if engine.is_key_pressed(jwarol.VK_SPACE) and on_ground:
engine.set_velocity(player, 0, jump_force)
on_ground = False
# Движение
engine.apply_velocity(player, 1.0)
# Коллизии с землей
if engine.check_collision(player, ground):
engine.set_velocity(player, 0, 0)
on_ground = True
# Платформа
if engine.check_collision(player, platform):
engine.set_velocity(player, 0, 0)
# Отрисовка
engine.draw_rect(player, 0.0, 1.0, 0.0) # Игрок
engine.draw_rect(ground, 0.0, 0.5, 0.0) # Земля
engine.draw_rect(platform, 0.5, 0.3, 0.1) # Платформа
engine.update()
time.sleep(0.016)
engine.close()
Пример 2: Top-down шутер (автономный)
import jwarol
import time
engine = jwarol.Engine()
engine.init(800, 600, "Top-Down - No Extra Libs")
player = engine.create_object(400, 300, 40, 40, jwarol.ObjectType.PLAYER)
enemy = engine.create_object(200, 200, 40, 40, jwarol.ObjectType.OBJECT)
wall = engine.create_object(300, 250, 200, 20, jwarol.ObjectType.OBJECT)
speed = 4
while engine.is_open():
engine.clear(0.1, 0.1, 0.1)
# Управление WASD (встроенное)
dx, dy = 0.0, 0.0
if engine.is_key_pressed(jwarol.VK_W): dy = -1
if engine.is_key_pressed(jwarol.VK_S): dy = 1
if engine.is_key_pressed(jwarol.VK_A): dx = -1
if engine.is_key_pressed(jwarol.VK_D): dx = 1
engine.move_object(player, dx, dy, speed)
engine.apply_velocity(player, 1.0)
# Коллизии
if engine.check_collision(player, wall):
print("Hit wall!")
if engine.check_collision(player, enemy):
print("Hit enemy!")
# Отрисовка
engine.draw_rect(player, 0.0, 1.0, 0.0)
engine.draw_rect(enemy, 1.0, 0.0, 0.0)
engine.draw_rect(wall, 0.5, 0.5, 0.5)
engine.update()
time.sleep(0.016)
engine.close()
Пример 3: Свободный полет (космос)
import jwarol
import time
engine = jwarol.Engine()
engine.init(800, 600, "Space Flight")
ship = engine.create_object(400, 300, 60, 30, jwarol.ObjectType.PLAYER)
while engine.is_open():
engine.clear(0.0, 0.0, 0.1) # Космос
# Управление (без гравитации)
if engine.is_key_pressed(jwarol.VK_UP):
engine.apply_force(ship, 0, -0.3)
if engine.is_key_pressed(jwarol.VK_DOWN):
engine.apply_force(ship, 0, 0.3)
if engine.is_key_pressed(jwarol.VK_LEFT):
engine.apply_force(ship, -0.3, 0)
if engine.is_key_pressed(jwarol.VK_RIGHT):
engine.apply_force(ship, 0.3, 0)
# Торможение
engine.apply_force(ship, -0.05, -0.05)
# Движение
engine.apply_velocity(ship, 1.0)
engine.draw_rect(ship, 0.0, 1.0, 1.0)
engine.update()
time.sleep(0.016)
engine.close()
Философия движка
Полностью автономный:
- ✅ Не нужен pygame для клавиш
- ✅ Не нужны дополнительные библиотеки для движения
- ✅ Встроенная проверка нажатий
is_key_pressed() - ✅ Простое движение
move_object()
Инструменты, а не правила:
- Гравитация есть? Применяй когда нужно
- Нужен платформер? Используй гравитацию + прыжки
- Нужен вид сверху? Не используй гравитацию
- Нужен космос? Создавай свои силы
Планы развития
-
get_position(id)— получение координат -
load_texture(id, path)— загрузка текстур -
draw_texture(id, tex_id)— отрисовка с текстурой - Камера (следование за игроком)
- Звук
- Анимации
- Tilemap
Лицензия
MIT License — см. LICENSE
Автор
ruslan
Ссылки
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
jwarol-0.3.6.tar.gz
(7.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jwarol-0.3.6.tar.gz.
File metadata
- Download URL: jwarol-0.3.6.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c404bafe67ca341719ed6d0bb834d0a72411c2512adfa2fd6de50b92819e858e
|
|
| MD5 |
24d379743407e1a875fea73efa6cd755
|
|
| BLAKE2b-256 |
83dead69805a8c4cc0fb320350e1210c61b279ee2575b143943cb60fc5df0e8a
|
File details
Details for the file jwarol-0.3.6-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: jwarol-0.3.6-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 109.1 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9bad3c4c17ad519c11430a6d5bb84602630ec1246f25d841d9409d72ebd6043
|
|
| MD5 |
b38bb70a7c8660a166390cfd8a30135a
|
|
| BLAKE2b-256 |
c1e4444d9be09f64cefc9bf5544dc0835400caa14d477eddfd4338b37077bd29
|