Python3-Game-Programming

Auf der Suche nach einer freien Python3-Spiele-Bibliothek inklusive Tutorials für Einsteiger. Gerne auch auf Englisch.

Frameworks[Bearbeiten | Quelltext bearbeiten]

pygame[Bearbeiten | Quelltext bearbeiten]

  • Die Tutorial-Doku scheint ziemlich veraltet zu sein (Jahr 2002):
  • Die API-Doku scheint aktuell zu sein:
  • Gute Beispiele und didaktische Aufbereitung siehe unten ("programarcadegames.com: Program Arcade Games With Python And Pygame")
  • Funktioniert nicht auf Anhieb ("Fatal Python error: (pygame parachute) Segmentation Fault"), aber mit Pygame_SDL2, siehe nächster Abschnitt

Pygame_SDL2[Bearbeiten | Quelltext bearbeiten]

Wenn man vor dem import pygame folgendes schreibt, kann man pygame mit Python2 und 3 verwenden:

#
# taken from http://www.pygame.org/docs/tut/intro/intro.html and modified
#
import sys

# see http://pygame-sdl2.readthedocs.io/en/latest/
import pygame_sdl2
pygame_sdl2.import_as_pygame()

import pygame

pygame.init()

size = width, height = 620, 440
speed = [20, 10]
black = 0, 0, 0
BLUE  = (0, 0, 255)

screen = pygame.display.set_mode(size)

#ball = pygame.image.load("ball.gif") # needs the image file from the tutorial
# we create our own ball:
ball = pygame.Surface((100, 100)) # http://www.pygame.org/docs/ref/surface.html
pygame.draw.circle(ball, BLUE, (50, 50), 50) # http://www.pygame.org/docs/ref/draw.html
ballrect = ball.get_rect()
clock = pygame.time.Clock()

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()

    ballrect = ballrect.move(speed[0], speed[1])
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]

    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()
    # http://www.pygame.org/docs/ref/time.html
    # By calling Clock.tick(30) once per frame, the program will never run at more than 30 frames per second.
    # leider trotzdem tearing, siehe http://stackoverflow.com/questions/1082562/how-to-avoid-tearing-with-pygame-on-linux-x11
    # (wird mit Wayland kein Problem mehr sein)
    clock.tick(30)

Run: python3 pygame1.py

pybox2d[Bearbeiten | Quelltext bearbeiten]

"pybox2d is a 2D rigid body simulation library for games. Programmers can use it in their games to make objects move in believable ways and make the game world more interactive." (https://github.com/pybox2d/pybox2d/wiki/manual) (siehe auch Programming box2d in javascript – tutorial on basics" on BinaryTides - Genuine how-to guides on Linux, Ubuntu and FOSS)

Getting started (https://github.com/pybox2d/pybox2d/blob/master/INSTALL.md):

Install:

sudo zypper install python3-conda
conda create -n py34 python=3.4
source activate py34
conda install -c https://conda.anaconda.org/kne pybox2d

Install pygame_sdl2 backend and clone examples:

conda install -c https://conda.anaconda.org/kne pygame_sdl2
git clone https://github.com/pybox2d/pybox2d -b 2.3.1

Run an example:

$ cd pybox2d

# List all of the examples available:
$ ls examples/*.py

# Try the web example:
$ python -m examples.web --backend=pygame

# Or another:
$ python -m examples.rope --backend=pygame
$ python -m examples.pyramid --backend=pygame

Funktioniert (getestet auf openSUSE 42.1)


Anleitung:

arcade[Bearbeiten | Quelltext bearbeiten]

http://pythonhosted.org/arcade/index.html

Vergleich mit pygame: http://pythonhosted.org/arcade/pygame_comparison.html#pygame-comparison

Installation: http://pythonhosted.org/arcade/installation_linux.html, vorbildlich mit virtualenv:

#virtualenv ~/.virtualenvs/arcade -p python3
# für openSUSE 42.1 benötigen wir dieses Paket, weil arcade min. Python 3.5 braucht: https://software.opensuse.org/package/opt-python35
virtualenv ~/.virtualenvs/arcade -p /opt/python/bin/python3.5
source ~/.virtualenvs/arcade/bin/activate
pip install arcade
# dauert eine Weile, weil Dinge kompiliert werden

Mit dem python3.5 kommt folgende Fehlermeldung:

"Failed building wheel for pillow", der folgende Test-Code funktionierte aber trotzdem.

Beispiel-Code: http://pythonhosted.org/arcade/examples/index.html

Davon "Sprites: move with walls" herausgepickt:

  • http://pythonhosted.org/arcade/examples/sprite_move_walls.html
  • 1. Innerhalb der aktivierten virtualenv arbeiten
  • 2. Code in sprites1.py kopieren
  • 3. Zwei Bild-Dateien images/boxCrate_double.png und images/character.png erstellen
  • 4. python sprites1.py
  • 5. Ein Fenster erscheint, in dem man mit einer kleinen Figur gegen Mauern laufen kann.

Hinweis zu kdevelop: Das kann leider nicht in den virtualenv-arcade-Bibliothek reinschauen, siehe https://bugs.kde.org/show_bug.cgi?id=368970

PySDL2[Bearbeiten | Quelltext bearbeiten]

NOCH NICHT ausprobiert

https://pysdl2.readthedocs.io/en/rel_0_9_4/index.html

  • Installation: https://pysdl2.readthedocs.io/en/rel_0_9_4/install.html
    • Python 2.7, 3.2+, PyPy 1.8.0+, SDL2_*
  • Tutorials:
        Hello World
            Importing
            Window creation and image loading
            Making the application responsive
            And here it ends...
        The Pong Game
            Getting started
            Adding the game world
            Moving the ball
            Bouncing
            Reacting on player input
            Improved bouncing
            Creating an enemy
            Next steps
        PySDL2 for Pygamers
            Technical differences
            API differences

Qt/QPainter[Bearbeiten | Quelltext bearbeiten]

zetcode.com Tetris[Bearbeiten | Quelltext bearbeiten]

  • http://zetcode.com/gui/pyqt5/tetris/
  • Code kopieren und qt-zetcode-tetris.py speichern und ausführbar machen
  • ./qt-zetcode-tetris.py
    • Funktioniert und das Fenster ist sogar skalierbar.

Qt/QML[Bearbeiten | Quelltext bearbeiten]

Installierte Code-Beispiele:

  • /usr/lib64/qt5/examples/quick/demos/
    • maroon/
      • maroon ausführen: Ein schönes Meeresspiel erscheint.
    • samegame/
      • samegame ausführen: Spiel mit schönen Partikeleffekten erscheint.

2016: wenig Online-Doku zu QML für Spiele gefunden.

todo: http://pyqt.sourceforge.net/Docs/PyQt5/qml.html


kivy[Bearbeiten | Quelltext bearbeiten]

  • "open source Python library for developing mobile apps and other multitouch application software with a natural user interface (NUI). It can run on Android, iOS, Linux, OS X, and Windows" (https://en.wikipedia.org/wiki/Kivy)
    • MIT license, developed by the Kivy organization
    • Spezielle Kv language - ähnlich zu QML
    • sieht für mich wie eine Qt-Alternative aus
  • Tutorial: Pong Game: https://kivy.org/docs/tutorials/pong.html
  • Installation für openSUSE sudo zypper install python-Kivy
  • Adhoc-Test schlug fehl:
    • python kivy1.py -> "Fatal Python error: (pygame parachute) Segmentation Fault"
    • python3 kivy1.py -> "ImportError: No module named 'kivy'"
    • todo: mit virtualenv probieren

Weitere[Bearbeiten | Quelltext bearbeiten]

Tutorials / Ideen[Bearbeiten | Quelltext bearbeiten]

zetcode.com: Java 2D games tutorial[Bearbeiten | Quelltext bearbeiten]

http://zetcode.com/tutorials/javagamestutorial/

TOC: Basics, Animation, Moving sprites, Collision detection, Puzzle, Snake, Breakout, Tetris, Pacman, Space Invaders, Minesweeper, Sokoban

programarcadegames.com: Program Arcade Games With Python And Pygame[Bearbeiten | Quelltext bearbeiten]

http://programarcadegames.com/index.php

Before getting started...
1: Create a Custom Calculator
2: What is a Computer Language?
3: Quiz Games and If Statements
4: Guessing Games with Random Numbers and Loops
5: Introduction to Graphics
6: Back to Looping
7: Introduction to Lists
8: Introduction to Animation
9: Functions
10: Controllers and Graphics
11: Bitmapped Graphics and Sound
12: Introduction to Classes
13: Introduction to Sprites
14: Libraries and Modules
15: Searching
16: Array-Backed Grids
17: Sorting
18: Exceptions
19: Recursion
20: Formatting
Labs

Viele Beispiele:


Quiz-Fragen: http://programarcadegames.com/quiz/progress.php

Arbeitsblätter: http://programarcadegames.com/index.php?chapter=sample_worksheets

Übungen:

Andere[Bearbeiten | Quelltext bearbeiten]

LÖVE[Bearbeiten | Quelltext bearbeiten]

Ideen für Spiele[Bearbeiten | Quelltext bearbeiten]

z. B. Retrospiele.

Pong[Bearbeiten | Quelltext bearbeiten]

  • ...

Leaper (Frogger)[Bearbeiten | Quelltext bearbeiten]

  • mit Qt, mit Graphiken, Sound

Snake[Bearbeiten | Quelltext bearbeiten]

Tetris[Bearbeiten | Quelltext bearbeiten]

  • ...

Antix[Bearbeiten | Quelltext bearbeiten]

  • ...
 ZurückWeiter