Seite 1 von 1

Output Text in Pygame

Verfasst: Dienstag 26. Juni 2018, 16:33
von StitZle
Guten Tag liebe Python Foren Mitglieder,

das hier ist mein erster Post hier, und ich hoffe ich mache alles richtig.

Zurzeit versuche ich mir etwas Python zu erlernen. Dazu möchte ich gerne ein Spiel Programmieren.
Das klappt auch ganz gut.
Das Spiel soll ein Text basierendes Spiel werden. Welches ohne viel Graphischen SchnickSchnack auskommt. Nun komme ich immer weiter in der Entwicklung,
jedoch merke ich zunehmend das es wohl besser wäre mit Pygame weiter zu arbeiten. Gerade weil ich den Text Output besser Formatieren und Darstellen möchte, z.B.: Zentriert.

Ich möchte gerne Text in Pygame ausgeben, wie in der Console:

Bild
Link zum Bild

Nun ich weiß wie man ein Wort in Pygame ausgeben kann, und auch wie man ein Schwarzes Fenster baut, jedoch scheitere ich dann schon wenn es darum geht mehrer Zeilen anzuzeigen.

Code: Alles auswählen

import pygame,time,

 
pygame.init()
 
pygame.display.set_caption('Test')
size = [640, 480]
screen = pygame.display.set_mode(size)
 

def text_typer(text) :
    font = pygame.font.SysFont("arial", 25)
    text = font.render(text, True, (255, 255, 255))

    textrect = text.get_rect()
    textrect.centerx = screen.get_rect().centerx
    textrect.centery = screen.get_rect().centery
    screen.fill((0, 0, 0))
    screen.blit(text, textrect)
 
    pygame.display.update() 
    time.sleep(1)


text_typer("Hello")
text_typer("Test")



 
 
So bekomme ich es hin mehrere Zeilen auszugeben, aber ich möchte ja das diese stehen bleiben. So wie in dem Bild oben.

Zudem wird in meinem Jetzigen "Programm" jeder Buchstabe eines Wortes einzeln nacheinander ausgegeben.
Sprich Hallo ---> H (0.03 sec pause) a (0.03 sec pause) l (0.03 sec pause) l (0.03 sec pause) o
Das habe ich versucht auch einzubauen bekomme es aber nicht hin.

Hier die Funktion dafür:

Code: Alles auswählen

import sys

def text_typer(string, delay) :
    for letter in string:
        sys.stdout.write(letter)
        sys.stdout.flush()
        time.sleep(delay)

text_typer ("Hallo", 0.03)

Vielleicht habt ihr da Ideen wie man so etwas richtig einbaut.

Ich freue mich auf eure Antworten :D

Niclas

Re: Output Text in Pygame

Verfasst: Dienstag 26. Juni 2018, 16:59
von __blackjack__
Überleg mal was die Zeile mit dem ``screen.fill((0, 0, 0))`` macht.

Re: Output Text in Pygame

Verfasst: Dienstag 26. Juni 2018, 17:14
von StitZle
__blackjack__ hat geschrieben: Dienstag 26. Juni 2018, 16:59 Überleg mal was die Zeile mit dem ``screen.fill((0, 0, 0))`` macht.
Danke, du hast recht. Aber jetzt wird der Text nur überschrieben.

Ist es überhaupt sinnvoll so ein Textbasiertes Spiel mit Pygame zu erstellen ?

Re: Output Text in Pygame

Verfasst: Dienstag 26. Juni 2018, 18:32
von ThomasL
Klar, Pygame hat neben der Möglichkeit Text darzustellen auch viele andere Funktionen.
Habe deinen Code mal etwas modifiziert.

Code: Alles auswählen

import pygame
import time

pygame.init()
pygame.display.set_caption('Test')
size = [640, 480]
screen = pygame.display.set_mode(size)

def draw_text(text):
    font = pygame.font.SysFont("arial", 25)
    y_pos = x_pos = 5
    for line in text.splitlines():
        for pos in range(1, len(line)+1):
            text = font.render(line[:pos], 1, (255, 255, 255))
            screen.blit(text, (x_pos, y_pos))
            pygame.display.update()
            time.sleep(0.1)
        y_pos += 25
        x_pos += 20

draw_text('Dies ist ein Text\nmit mehreren Zeilen\ndie auch eingerückt werden können.')
time.sleep(3)

Re: Output Text in Pygame

Verfasst: Dienstag 26. Juni 2018, 19:14
von StitZle
ThomasL hat geschrieben: Dienstag 26. Juni 2018, 18:32 Klar, Pygame hat neben der Möglichkeit Text darzustellen auch viele andere Funktionen.
Habe deinen Code mal etwas modifiziert.

Code: Alles auswählen

import pygame
import time

pygame.init()
pygame.display.set_caption('Test')
size = [640, 480]
screen = pygame.display.set_mode(size)

def draw_text(text):
    font = pygame.font.SysFont("arial", 25)
    y_pos = x_pos = 5
    for line in text.splitlines():
        for pos in range(1, len(line)+1):
            text = font.render(line[:pos], 1, (255, 255, 255))
            screen.blit(text, (x_pos, y_pos))
            pygame.display.update()
            time.sleep(0.1)
        y_pos += 25
        x_pos += 20

draw_text('Dies ist ein Text\nmit mehreren Zeilen\ndie auch eingerückt werden können.')
time.sleep(3)

Danke. Das hat mir sehr geholfen.

Ich habe das time.sleep abgeändert, so kann man bestimmen wie lange jeder Text/ Buchstabe ausgeben werden soll.

Code: Alles auswählen

import pygame
import time

pygame.init()
pygame.display.set_caption('Test')
size = [640, 480]
screen = pygame.display.set_mode(size)

def draw_text(text, wait_time):
    font = pygame.font.SysFont("arial", 25)
    y_pos = x_pos = 5
    for line in text.splitlines():
        for pos in range(1, len(line)+1):
            text = font.render(line[:pos], 1, (255, 255, 255))
            screen.blit(text, (x_pos, y_pos))
            pygame.display.update()
            time.sleep(wait_time)
        y_pos += 25
        x_pos += 20

draw_text('Dies ist ein Beispiel Text\nZweite Zeile', 0.03)
time.sleep(3)