Eingabe durch Anwender

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Volker Schulte
User
Beiträge: 20
Registriert: Sonntag 8. Februar 2009, 10:23
Wohnort: Lüdenscheid

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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))
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Volker Schulte
User
Beiträge: 20
Registriert: Sonntag 8. Februar 2009, 10:23
Wohnort: Lüdenscheid

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Antworten