Verbessereung meines Codes

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Guten Tag liebe Community,

also ich bin ein völliger Newbie was das programmieren angeht (nur etwas AHK und ein paar Scripte in RGSS (Ruby) sowie ssl/int (Fallout) scripten.

Wollte schon länge mit Python anfangen und als ich das pygames Modul eindeckt habe, habe ich mich gleich drangemacht.

Meine Frage ist ganz simpel bzw. Anfrage. kann mir jemand bitte den folgenden code so umschreiben das ich den Text (ISt der Titeltext meines Games) in eine Methode (DEF mit self Eigenschaften) packt. So das ich sie leidlich nur noch mit einer Zeile jederzeit abrufen kann. Hoffe ihr versteht wie ich das meine, spätestens dann wenn ihr den unorganisierten Code seht ^^

Ok genug der Wort und habt im Vorraus dank:


Code: Alles auswählen

#Mein erster Versuch mit Python und pygames was zu programmieren.



#Imports
import pygame, sys, os
from pygame.locals import *

#Einstellungen
title = "Fallen Angel"
titlemusic = "data/music/origen.mp3"
titlegraphic = "data/art/mainmenu.png"
width = 640
height = 480
#red = 150
#green = 150
#blue = 150


#Fenster
pygame.init()
screen = pygame.display.set_mode((width, height))
#screen.fill((red, green, blue))
#Baue den Hintergrund auf
#screen = pygame.display.get_surface() 
mainmenu = pygame.image.load(titlegraphic)
screen.blit(mainmenu, (0,0))

# Create a font
font = pygame.font.Font("data/fonts/style.ttf", 50)

# Render the text
text = font.render('FALLEN ANGEL', True, (255, 255, 255))
# Create a rectangle
textRect = text.get_rect()

# Center the rectangle
textRect.centerx = screen.get_rect().centerx
textRect.centery = 120

# Blit the text
screen.blit(text, textRect)





pygame.display.flip()
pygame.display.set_caption(title)
pygame.mouse.set_visible(1)
#Hintergrundmusik
mainmusic = pygame.mixer.music.load (titlemusic) #laedt das Musikfile
pygame.mixer.music.play(-1) #spilet das file (*) mal ab ( -1=unendlich)

while (pygame.event.wait().type != KEYDOWN): pass

MFG,
Mr.Wolna
BlackJack

@Mr.Wolna: Arbeite mal das Python-Tutorial in der Dokumentation durch. Dann solltest Du das selber können. Es bringt echt nichts *so* grundlegende Sachen wie Funktionen nicht selber lernen zu wollen.

Wobei Dir dann hoffentlich auch klar wird, warum Du für dieses kleine Beispiel noch keine Methoden brauchst, also kein `self`. Denn ab dem Zeitppunkt, wo Du die brauchst, müsstest Du Dich etwas intensiver mit Klassen und objektorientierter Programmierung (OOP) beschäftigen. Das ist dann sicher etwas, das man nicht mehr einfach nur durch abschreiben versteht.
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Hmm lese gerade n Haufen Zeug, darüber.
(Also wie man ne Funktion macht weiß ich bereits, nur die Argumente dahinter () machen mir noch Probleme)


mal ne andere Frage diesbezüglich wie kann ich ein simples Menü erstellen? Also z.b Start, Continue, Ende das angezeigt wird. Hab jetzt viele Sachen gelesen und viele Source von pygames angeschaut. So weit ich das sehe macht man das mit einer Liste, aber ich verzweifle echt gerade schon 2 Tage lang dran. Wenn ich das Ding vor mir gut Kommentiert hätte...

Das Problem allgemein um Python zu lernen, das es alles Theorie Zeug ist, ich lerne am besten Praktisch. Ein Tut wo man Schritt für Schritt ein Script z.b. nachschreibt und erklärt bekommt, das wäre eher meine Baustelle. Ich will damit sagen, ich will auf keinen Fall das andere für mich MEINE Arbeit machen, weil ich davon keinen Lerneffekt hätte. Was nicht der Sinn der Sache ist.

MfG,
Mr.Wolna
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kleiner Tipp: Vergiss pygame!

Das meine ich ernst! Versuche am Anfang nur mit Modulen aus der Standard-Lib etwas nettes zu basteln. Dort ist die Doku relativ einheitlich auf einem guten Stand.

Mache nichts grafisches! Schreibe eine Shell-Anwendung. Das kann auch Spaß machen und es gibt auch dafür interessante Projekte.

Beliebte Beispiele:
- Adressbuch
- ToDo-Liste

So etwas in der Art reicht doch vollkommen hin und bietet genug spannende Themen, die man nach und nach damit abhandeln kann.

1.) Datenstrukuren
2.) Ablauf (Text-Menü, gute Aufteilung auf Funktionen, Kommandozeieln-Parameter, Config-Dateien, usw)
3.) Persistenz (Speichern, Laden, Parsen)

Dabei kann man verdammt viel lernen und ggf. sogar etwas produktiv nutzbares schaffen.

Später ließe sich dann sogar eine GUI drum herum basteln.
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Hm, ich wüsste nicht wo ich anfangen soll mit den Standart Modulen. ICh muss das Ergebnis ja sehen können, sprich GUI eben.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Und was kann man bei einer Ausgabe in der Konsole nicht sehen? Eine GUI ist nicht dazu gedacht nur etwas anzuzeigen ... und mit pygame GUIs zu bauen .. nun ja.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

GUI = Graphical User Interface = Graphische Benutzerschnittstelle

mit pygame GUIs bauen (keine Spiele) macht doch überhaupt keinen Sinn schau der lieber dafür mal wxPython, Tkinter, QT, GTK+ an
the more they change the more they stay the same
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dav1d hat geschrieben:GUI = Graphical User Interface = Graphische Benutzerschnittstelle

mit pygame GUIs bauen (keine Spiele) macht doch überhaupt keinen Sinn schau der lieber dafür mal wxPython, Tkinter, QT, GTK+ an
Ja, aber auch das sollte er erst dann tun, wenn der die Grundlagen drauf hat.

Die lernt man nicht durch sperrigen Boiler Plate Code, den man immer bei GUIs hat und den er am Anfang nicht daurchschauen wird.
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Code: Alles auswählen

#!/usr/bin/python



l = int(raw_input('Geben Sie ihre Laenge ein: '))
b = int(raw_input('Geben Sie ihre Breite ein: '))

A = l * b
print 'Die Flaeche ist', A
print 'Der Umfang ist', 2 * (l + b)

while 1:
    pass
Hier mein erstes Programm. :lol:


hm villeicht sollte ich mit was simples anfangen. Kann man mit den Standart Modulen eine BMP anzeigen oder in jpg umwandeln lasseN? Oder sit es zu schwer für den Anfang? Was brauche ich den alles dazu. Wie ihr seht bin ich total ratlos, ich brauche strickte ANweisungen und eben Praxis keine Theorie.

MfG,
Mr.Wolna
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also die letzten zwei Zeilen im Code machen keinerlei Sinn und führen dazu dass die CPU zu 100% ausgelastet wird.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

ja aber sonst wird die Konsole nur 1 frame lang angezeigt.


@Admins könntet ihr den Thread in Allgemeine Fragen verschieben und ich bennene ihn um. Well ich doch noch ein paar Fragen habe, die nichts mit pygames zu tun haben. Hoffe das geht in Ordnung das ich nur ein Thread nutze, habe viele Fragen und ich will nicht zigs Thread aufmachen.

btw haben wir hier ein IRC CHANNEL?

und ah ja noch ne Frage wiso funktioniert dieser Code nicht so wie ich es mir gedahct habe?


Code: Alles auswählen

WORT = (raw_input ("Geben sie das Wort dessen Stellen gezaehlt werden sollen..."))

if WORT == 5:
    print " Das Wort hat 5 Stellen"
else:
    print len(WORT)
MfG,
WOLNA
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein wir machen das anders: Du liest das Tutorial und erstellst, wenn du immernoch fragen hast, jeweils einen Thread fuer das konkrete Problem.

@Konsolenproblem: Starte das Skript von der Konsole, siehe FAQ im Wiki.

@IRC: Es gibt jede menge Python-Channel.

Was soll der Code denn machen? Schau ihn dir nochmal ganz genau an, vor allem Zeilen 3 und 6. (Oder auch 1 und 6, aber dann solltest du wirklich ueber eine sinnvolle Namensvergabe nachdenken.)
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Welches Tutorial?

ahm das Script soll Stellen eines eingegebenen Worts zählen und ausgeben, was es ja auch tut.

aber bei bestimmter Anzahl von stellen (in diesem Beispiel 5) eine andere string ausgeben.

Ah ja und gibt es irgendwo ne Liste mit Befehlen? Hab in der Hilfe nichts gefunden. Ich brächte ne komplette Liste mit Erklärungen (nach Möglichkeit deutsch)

sry für die ganzen Fragen, aber wie ihr sehts versuche ich python zu lernen^^


Danke für die Antworten, die gekommen sind und für alle kommenden.

MfG

und sry für so viel OT.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Was für einen Typ gibt raw_input zurück? Lies dir außerdem mal die Links aus cofis Signatur durch.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

http://docs.python.org/

Das Tutorial gibts da auch (oder die Uebersetzung in meiner Signatur)
Deine Befehlsreferenz ist die Libraryreference (hier macht eine Uebersetzung keinen Sinn).

Zu deinem Snippet: Genau das macht es nicht, schau dir die Zeilen mal an die ich dir genannt hab, dort ist der Hund begraben.
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

derdon hat geschrieben:Was für einen Typ gibt raw_input zurück?
was meinst du, ist doch schon richtig so er muss den string ausgeben...ODER?

derdon hat geschrieben:Lies dir außerdem mal die Links aus cofis Signatur durch.
jo bin schon die ganze Zeit dabei.


MfG
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Das meine ich:

Code: Alles auswählen

>>> foo = raw_input('a number, please: ')
a number, please: 5
>>> type(foo), foo
(<type 'str'>, '5')
>>> bar = int(raw_input('a number, please: '))
a number, please: 5
>>> type(bar), bar
(<type 'int'>, 5)
Antworten