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.