Seite 1 von 1
Eingabe durch Anwender
Verfasst: Mittwoch 13. Mai 2009, 18:38
von Volker Schulte
Hallo zusammen,
ich möchte in einem Spiel (mit Pygame) dem Anwender ermöglichen sich in einer Highscore_Liste einzutragen.
Wer kann helfen?
Gruß Volker.
Re: Eingabe durch Anwender
Verfasst: Mittwoch 13. Mai 2009, 22:33
von Leonidas
Volker Schulte hat geschrieben:Wer kann helfen?
Die Liste natürlich:
Code: Alles auswählen
highscores = list()
highscores.append(('Leonidas', 500))
highscores.append(('Volker Schulte', 499))
Verfasst: Donnerstag 14. Mai 2009, 00:02
von BlackJack
@Leonidas: Ich denke mal es ist eher gemeint, wie man die Namenseingabe in Pygame bewerkstelligt.
Ausserdem würde ich die Werte in den Tupeln vertauschen -- lässt sich dann leichter sortieren.
Verfasst: Donnerstag 14. Mai 2009, 00:21
von Leonidas
BlackJack hat geschrieben:@Leonidas: Ich denke mal es ist eher gemeint, wie man die Namenseingabe in Pygame bewerkstelligt.
Was ich damit andeuten wollte war ja dass nicht klar wird was der OP überhaupt machen will. In solchen Fällen ist es mir als potenziell Antwortenden zu blöd zu erraten was denn überhaupt gemeint ist.
Highscores würde ich aber generell wohl eher mit Objekten verwalten. Name, Datum, Score plus eventuell weitere Informationen die bei so einem Spiel anfallen.
Verfasst: Montag 18. Mai 2009, 19:07
von Volker Schulte
Hier eine mögliche Lösung:
Code: Alles auswählen
#! /usr/bin/env python
# import pdb
import os, sys
import pygame
from pygame.locals import *
if not pygame.font: print 'Warning, fonts disabled'
if not pygame.mixer: print 'Warning, sound disabled'
class PyManMain:
"""The Main PyMan Class - This class handles the main
initialization and creating of the Game."""
def __init__(self, width=640,height=480):
"""Initialize"""
"""Initialize PyGame"""
pygame.init()
"""Set the window Size"""
self.width = width
self.height = height
"""Create the Screen"""
self.screen = pygame.display.set_mode((self.width
, self.height))
def MainLoop(self):
"""Create the background"""
self.background = pygame.Surface(self.screen.get_size())
self.background = self.background.convert()
self.background.fill((0,0,0))
String =""
taste =-1
# Taste Nummer 13 entpricht der Eingabetaste
while taste<>13:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == KEYDOWN:
taste = event.key
# taste 32 ist die Leertaste
if not (pygame.key.get_mods() & (KMOD_ALT | KMOD_CTRL | KMOD_META)):
if taste ==32 or (taste >96 and taste <123) or (taste >47 and taste <58):
Zeichen = chr(taste)
#print pygame.key.get_mods()
if pygame.key.get_mods() & (KMOD_SHIFT | KMOD_CAPS) :
Zeichen = Zeichen.upper()
String +=Zeichen
elif taste ==8 and len(String)>0:
String = String[:-1]
#print String;
"""Do the Drawging"""
self.screen.blit(self.background, (0, 0))
if pygame.font:
font = pygame.font.Font(None, 36)
text = font.render("Name: %s" % String
, 1, (255, 0, 0))
textpos = (10,10)
# Textposition mittig (wird nicht benoetigt) :
#textpos = text.get_rect(centerx=self.background.get_width()/2)
self.screen.blit(text, textpos)
pygame.display.flip()
if __name__ == "__main__":
MainWindow = PyManMain(500,575) # Bildschirmgroesse darstellen
MainWindow.MainLoop()
Gruß Volker
Verfasst: Montag 18. Mai 2009, 20:38
von cofi
Sag mal was sollen denn die gut verteilten Multi-Line Strings? Den Leser zum Nachdenken animieren? Oder eine Kennzeichnung besonders wichtiger Kommentare, da die Strings anders gehighlightet werden?
Wenn du davon ausgehst, dass das Docstrings sind, liegst du falsch, das ist nur der erste String eines Blocks.
Ein paar Leerzeilen weniger wärn auch nicht schlecht.