hallo,
ich bastel grade an meinem informatik projekt, ein moorhuhn remake.
Dieses will jedoch nicht laufen ausser wenn ich in die while schleife in der main() print "" schreibe.
Bin selber nur auf das print gekommen, weil ich meine cursor position anzeigen lassen wollte, da ich dachte die maus würde in dem program nicht gehen. Und siehe da, mein program lief!
ich erhalte keine fehlermeldung, daher weiss ich nicht so recht welchen teil vom code ich posten soll, wenn ich den ganzen code posten soll (ist nicht viel, bin noch nicht weit), dann sagt bitte bescheid
danke für eure hilfe
programm läuft nur mit print"" in der main() while
holla geht as schnell
hier ist der code
Edit (Leonidas): Code in Python-Tags gesetzt.

Code: Alles auswählen
#alles importieren
import os, pygame
from pygame.locals import *
#image quickload
def load_image(name, colorkey=None):
#imagepfad
pfad = os.path.join('Bilder', name)
#image laden aus imagepfad und konvertieren
image = pygame.image.load(pfad).convert()
#transparenz einer farbe des images bestimmen
if colorkey is not None:
#wenn colorkey -1 dann soll die farbe der linken oben ecke transparent werden
if colorkey is -1:
colorkey = image.get_at((0,0))
#transparenz der gewählten farbe festlegen
image.set_colorkey(colorkey, RLEACCEL)
#den wert image zurückgeben
return image
#sound quickload
def load_sound(name):
#soundpfad
pfad = os.path.join('Sounds', name)
#sound laden aus soundpfad
sound = pygame.mixer.Sound(pfad)
#den wert sound zurückgeben
return sound
#hintergrundmusik quickload
def load_musik(name):
#musikpfad
pfad = os.path.join('mp3', name)
#musik laden aus musikpfad
musik = pygame.mixer.music.load(pfad)
#den wert musik zurückgeben
return musik
#Tiere
class Tiere:
def nix():
print "nix"
#hier kommt die level funktion hin
i=0
#MAIN
def main():
#initialisieren
pygame.init()
#fenster öffnen
screen = pygame.display.set_mode((800, 600))
#fenstertitel
pygame.display.set_caption('Save the Animals')
#mauszeiger unsichtbar
pygame.mouse.set_visible(0)
#background images in eine liste laden
backgroundliste = ['Landschaft.bmp','Wald.bmp','Meer.bmp','Urwald.bmp','Wüste.bmp','Weltall.bmp']
#hintergrund laden je nach level
background = load_image(backgroundliste[i])
#lade Fadenkreuz image
fadenkreuz = load_image('Fadenkreuz.bmp', -1)
#gib fadenkreuz höhe und weite
fkhoehe,fkweite=fadenkreuz.get_size()
#hintergrundmusik lieder in eine listeladen
musikliste = ['Beatles - RocknRoll music.mp3','Beatles - Help.mp3','Beatles - A hard days night.mp3','Beatles - Eight days a week.mp3']
#lege musik variable fest
l=-1
#hauptschleife
while 1:
#gib x und y koordinate der mausposition
mausposx,mausposy=pygame.mouse.get_pos()
#imagepos=mausposition um hälfte der imagehöhe und -weite verschoben damit imagemitte=mausposition
fkpos=(mausposx-fkhoehe/2),(mausposy-fkweite/2)
#hintergrund anzeigen
screen.blit(background, (0, 0))
#zeig fadenkreuz imagemitte an mausposition
screen.blit(fadenkreuz, fkpos)
#Fenster aktualisieren
pygame.display.flip()
#check ob musik läuft
if pygame.mixer.music.get_busy() == False:
#variable l für nächstes lied erhöhen
l+=1
#wenn das letzte lied gelaufen ist wieder von vorn anfangen
if l>3:
l=0
#lade lied
load_musik(musikliste[l])
#spiel lied ab
pygame.mixer.music.play()
#bugbehebung
print
Code: Alles auswählen
#alles importieren
import os, pygame
from pygame.locals import *
#image quickload
def load_image(name, colorkey=None):
#imagepfad
pfad = os.path.join('Bilder', name)
#image laden aus imagepfad und konvertieren
image = pygame.image.load(pfad).convert()
#transparenz einer farbe des images bestimmen
if colorkey is not None:
#wenn colorkey -1 dann soll die farbe der linken oben ecke transparent werden
if colorkey is -1:
colorkey = image.get_at((0,0))
#transparenz der gewählten farbe festlegen
image.set_colorkey(colorkey, RLEACCEL)
#den wert image zurückgeben
return image
#sound quickload
def load_sound(name):
#soundpfad
pfad = os.path.join('Sounds', name)
#sound laden aus soundpfad
sound = pygame.mixer.Sound(pfad)
#den wert sound zurückgeben
return sound
#hintergrundmusik quickload
def load_musik(name):
#musikpfad
pfad = os.path.join('mp3', name)
#musik laden aus musikpfad
musik = pygame.mixer.music.load(pfad)
#den wert musik zurückgeben
return musik
#Tiere
class Tiere:
def nix():
print "nix"
#hier kommt die level funktion hin
i=0
#MAIN
def main():
#initialisieren
pygame.init()
#fenster öffnen
screen = pygame.display.set_mode((800, 600))
#fenstertitel
pygame.display.set_caption('Save the Animals')
#mauszeiger unsichtbar
pygame.mouse.set_visible(0)
#background images in eine liste laden
backgroundliste = ['Landschaft.bmp','Wald.bmp','Meer.bmp','Urwald.bmp','Wüste.bmp','Weltall.bmp']
#hintergrund laden je nach level
background = load_image(backgroundliste[i])
#lade Fadenkreuz image
fadenkreuz = load_image('Fadenkreuz.bmp', -1)
#gib fadenkreuz höhe und weite
fkhoehe,fkweite=fadenkreuz.get_size()
#hintergrundmusik lieder in eine listeladen
musikliste = ['Beatles - RocknRoll music.mp3','Beatles - Help.mp3','Beatles - A hard days night.mp3','Beatles - Eight days a week.mp3']
#lege musik variable fest
l=-1
#hauptschleife
while 1:
#gib x und y koordinate der mausposition
mausposx,mausposy=pygame.mouse.get_pos()
#imagepos=mausposition um hälfte der imagehöhe und -weite verschoben damit imagemitte=mausposition
fkpos=(mausposx-fkhoehe/2),(mausposy-fkweite/2)
#hintergrund anzeigen
screen.blit(background, (0, 0))
#zeig fadenkreuz imagemitte an mausposition
screen.blit(fadenkreuz, fkpos)
#Fenster aktualisieren
pygame.display.flip()
#check ob musik läuft
if pygame.mixer.music.get_busy() == False:
#variable l für nächstes lied erhöhen
l+=1
#wenn das letzte lied gelaufen ist wieder von vorn anfangen
if l>3:
l=0
#lade lied
load_musik(musikliste[l])
#spiel lied ab
pygame.mixer.music.play()
#bugbehebung
print
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Aha, PyGame benutzt du, interresant 
Also daran kann ich jetzt spontan nicht erkenne, warum es nicht auch ohne dem letzten Print gehen soll... Was passiert denn, wenn das print nicht da ist??? Oder an andere Stelle?
Ach, ist ja schön, das du das Programm so gut dokumentierst! Aber ich würde immer die Kommentarzeile ebenfalls einrücken! Das ist wesendlich lesbarer
(Warum hast du den Thread in "Python und Netzwerke" eröffnet???)

Also daran kann ich jetzt spontan nicht erkenne, warum es nicht auch ohne dem letzten Print gehen soll... Was passiert denn, wenn das print nicht da ist??? Oder an andere Stelle?
Ach, ist ja schön, das du das Programm so gut dokumentierst! Aber ich würde immer die Kommentarzeile ebenfalls einrücken! Das ist wesendlich lesbarer

(Warum hast du den Thread in "Python und Netzwerke" eröffnet???)
ähm sry vllt könntet ihr den thread verschieben, ich hab nur python und unten klein programmierung gelesen...
wenn das print nicht da ist, dann bewegt sich mein fadenkreuz net... kannst es ja ausprobieren indem du andere lieder (oder die funktion löschst) und 800*600 bilder reinhaust
aber eine fehlermeldung kommt nicht, das ist ja das komische
wenn ich das print ausserhalb der while platziere passiert auch nix
werde mir den tipp mit den komenntaren zu herzen nehmen
wenn das print nicht da ist, dann bewegt sich mein fadenkreuz net... kannst es ja ausprobieren indem du andere lieder (oder die funktion löschst) und 800*600 bilder reinhaust
aber eine fehlermeldung kommt nicht, das ist ja das komische
wenn ich das print ausserhalb der while platziere passiert auch nix
werde mir den tipp mit den komenntaren zu herzen nehmen

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich habe mal deinen Code angepasst:
Versuchs mal damit.
Achja, ich habe deinen Thread verschoben.
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import os
import pygame
from pygame.locals import *
def load_image(name, colorkey=None):
"""image quickload"""
#imagepfad
pfad = os.path.join('Bilder', name)
#image laden aus imagepfad und konvertieren
image = pygame.image.load(pfad).convert()
#transparenz einer farbe des images bestimmen
if colorkey != None:
#wenn colorkey -1 dann soll die farbe der linken oben ecke transparent werden
if colorkey == -1:
colorkey = image.get_at((0,0))
#transparenz der gewählten farbe festlegen
image.set_colorkey(colorkey, RLEACCEL)
#den wert image zurückgeben
return image
def load_sound(name):
"""sound quickload"""
#soundpfad
pfad = os.path.join('Sounds', name)
#sound laden aus soundpfad
sound = pygame.mixer.Sound(pfad)
#den wert sound zurückgeben
return sound
def load_musik(name):
"""hintergrundmusik quickload"""
#musikpfad
pfad = os.path.join('mp3', name)
#musik laden aus musikpfad
musik = pygame.mixer.music.load(pfad)
#den wert musik zurückgeben
return musik
#Tiere
class Tiere:
def nix():
print "nix"
#hier kommt die level funktion hin
i=0
def main():
"""MAIN"""
#initialisieren
pygame.init()
#fenster öffnen
screen = pygame.display.set_mode((800, 600))
#fenstertitel
pygame.display.set_caption('Save the Animals')
#mauszeiger unsichtbar
pygame.mouse.set_visible(False)
#background images in eine liste laden
backgroundliste = ['Landschaft.bmp',
'Wald.bmp','Meer.bmp','Urwald.bmp','Wüste.bmp',
'Weltall.bmp']
#hintergrund laden je nach level
background = load_image(backgroundliste[i])
#lade Fadenkreuz image
fadenkreuz = load_image('Fadenkreuz.bmp', -1)
#gib fadenkreuz höhe und weite
fkhoehe, fkweite=fadenkreuz.get_size()
#hintergrundmusik lieder in eine listeladen
musikliste = ['Beatles - RocknRoll music.mp3',
'Beatles - Help.mp3',
'Beatles - A hard days night.mp3',
'Beatles - Eight days a week.mp3']
#lege musik variable fest
l =- 1
#hauptschleife
while True:
#gib x und y koordinate der mausposition
mausposx, mausposy=pygame.mouse.get_pos()
#imagepos=mausposition um hälfte der imagehöhe und -weite verschoben damit imagemitte=mausposition
fkpos = (mausposx-fkhoehe/2), (mausposy-fkweite/2)
#hintergrund anzeigen
screen.blit(background, (0, 0))
#zeig fadenkreuz imagemitte an mausposition
screen.blit(fadenkreuz, fkpos)
#Fenster aktualisieren
pygame.display.flip()
#check ob musik läuft
if not pygame.mixer.music.get_busy():
#variable l für nächstes lied erhöhen
l +=1
#wenn das letzte lied gelaufen ist wieder von vorn anfangen
if l > 3:
l = 0
#lade lied
load_musik(musikliste[l])
#spiel lied ab
pygame.mixer.music.play()
#bugbehebung
if __name__ == '__main__':
main()
Achja, ich habe deinen Thread verschoben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nein es geht nicht, aber ich habe von einem freund aus unserem info kurs den tipp bekommen das hier in meine funktion einzubauen
jetzt geht es
danke für eure bemühungen
Code: Alles auswählen
for event in pygame.event.get():
pass
danke für eure bemühungen
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Die Schleife ist ja eigentlich Sinnlos... Reich nicht evtl auch einfach ein:
Code: Alles auswählen
pygame.event.get()
das programm ist ja noch nicht fertig, da kommen noch objekte rein die sich hin und her bewegen
ich hab ein test program erstellt welches ein bild rein und raus zoomt, aber das ganze bild nimmt die farbe der linken oberen ecke an, warum? wie kann ich das umgehen?
Code: Alles auswählen
import pygame, os
#image quickload
def load_image(name):
pfad=os.path.join('Bilder',name)
image=pygame.image.load(pfad).convert()
return image
#main
def test():
#erstelle eine fenster
screen=pygame.display.set_mode((800, 600))
#lade den hintergrund
background=load_image('Meer.bmp')
#lade tier
Tier=load_image('Tier.bmp')
#rechteck an 0.0
TierRect=Tier.get_rect()
#zoomfaktor
Zoomfaktor=1.2
while 1:
#mal hintergrund an 0.0
screen.blit(background, (0, 0))
#mal tierimage in tierRect
screen.blit(Tier, TierRect)
#zoom tierimage mal zoomfaktor
Tier=pygame.transform.scale(Tier,(Tier.get_width()*Zoomfaktor,Tier.get_height()*Zoomfaktor))
#wenn zoomfaktor zu groß zoom raus
if Tier.get_width()>70:
Zoomfaktor=0.8
#wenn zoomfaktor zu klein zoom rein
if Tier.get_width()<10:
Zoomfaktor=1.2
#fenster aktualisieren
pygame.display.update()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich würde es ja so machen:
Anderungen: Code an Styleguide angepasst (Freiräume zwischen '='), kommentare eingerückt, Aus einigen Kommentaren Docstrings gemacht, FPS-Limiting eingebaut (auf 10 fps gestellt, so kann man dem Bug auf die Schliche kommen), Eventverarbeitung eingebaut, Kopie von Tier, TierSurf erstellt (um nicht das skalierte Bild zu skalieren sondern das Original, häufig Problematisch bei pygame und SDL).
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import os
import pygame
import pygame.locals as pyl
def load_image(name):
"""image quickload"""
pfad = os.path.join('data', name)
image = pygame.image.load(pfad).convert()
return image
def test():
"""main"""
#erstelle ein Fenster
pygame.init()
screen = pygame.display.set_mode((800, 600))
#lade den Hintergrund
background = load_image('background.jpg')
#lade Tier
Tier = load_image('gnome-foot.png')
#rechteck an 0.0
TierRect = Tier.get_rect()
#zoomfaktor
Zoomfaktor = 1.2
clock = pygame.time.Clock()
TierSurf = Tier
while True:
clock.tick(10)
#mal hintergrund an 0.0
screen.blit(background, (0, 0))
#mal tierimage in tierRect
screen.blit(TierSurf, TierRect)
#zoom tierimage mal zoomfaktor
TierSurf = pygame.transform.scale(Tier,
(int(TierSurf.get_width() * Zoomfaktor),
int(TierSurf.get_height() * Zoomfaktor)))
#wenn zoomfaktor zu groß zoom raus
if TierSurf.get_width() > 70:
Zoomfaktor = 0.8
#wenn zoomfaktor zu klein zoom rein
if TierSurf.get_width() < 10:
Zoomfaktor = 1.2
#fenster aktualisieren
pygame.display.update()
for event in pygame.event.get():
if event.type == pyl.QUIT or event.type == pyl.KEYDOWN:
return
if __name__ == '__main__':
test()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ich erhalte bei diesem veränderten code diesen fehler:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 138, in run_module_event
filename = self.getfilename()
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 188, in getfilename
self.editwin.io.save(None)
File "D:\Python24\lib\idlelib\IOBinding.py", line 336, in save
self.save_as(event)
File "D:\Python24\lib\idlelib\IOBinding.py", line 358, in save_as
self.updaterecentfileslist(filename)
File "D:\Python24\lib\idlelib\IOBinding.py", line 543, in updaterecentfileslist
self.editwin.update_recent_files_list(filename)
File "D:\Python24\lib\idlelib\EditorWindow.py", line 598, in update_recent_files_list
rf_file.writelines(rf_list)
TypeError: writelines() argument must be a sequence of strings
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 141, in run_module_event
code = self.checksyntax(filename)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 100, in checksyntax
return compile(source, filename, "exec")
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 93: ordinal not in range(128)
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 141, in run_module_event
code = self.checksyntax(filename)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 100, in checksyntax
return compile(source, filename, "exec")
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 93: ordinal not in range(128)
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 141, in run_module_event
code = self.checksyntax(filename)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 100, in checksyntax
return compile(source, filename, "exec")
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 93: ordinal not in range(128)
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 141, in run_module_event
code = self.checksyntax(filename)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 100, in checksyntax
return compile(source, filename, "exec")
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 93: ordinal not in range(128)
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 141, in run_module_event
code = self.checksyntax(filename)
File "D:\Python24\lib\idlelib\ScriptBinding.py", line 100, in checksyntax
return compile(source, filename, "exec")
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 93: ordinal not in range(128)
Ich konnte auf die schnelle kein 'ä' in dem Quelltext entdecken. Das hat nämlich die Fehlermeldung ausgelöst. Entweder hast Du die Zeile mit dem Encoding vergessen -- ``# -*- encoding: latin-1 -*-`` oder welches auch immer Du benutzt -- oder das ist ein Problem von IDLE. Versuchs mal ohne IDLE auszuführen.
Der Fehler kommt doch gar nicht im Programm sondern beim speichern/übersetzen. Und ein Unicode-Encode-Fehler ist auch nicht unbedingt auf IDLE oder Tkinter zurück zu führen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also kenn man keine Programme speichern, weil der Editor gerade mal keine Lust dazu hat.BlackJack hat geschrieben:Der Fehler kommt doch gar nicht im Programm sondern beim speichern/übersetzen.
Nein, durchaus nicht. Nur ist dies recht oft der Fall, und wenn das Programm nichmal Unicode nutzt ist das einfach nur traurig. Was wäre wenn vim oder emacs solche Probleme hätten? Aber nein, interessanterweise hat nicht nur IDLE gerne Bugs, auch DrPython der ein ansonsten recht gelungener Editor ist, hatte auf meinem System gleich mehrere Bugs (allesamt nun gefixt).BlackJack hat geschrieben:Und ein Unicode-Encode-Fehler ist auch nicht unbedingt auf IDLE oder Tkinter zurück zu führen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
2 fragen:
1. warum geht das nicht? (keine fehlermeldung, setzt aber meine objekte nicht zurück wenn ich sie treffe)
2. ich möchte (sobald diese funktion geht) die farben der hitboxen unsichtbar machen, wird dann trotzdem noch diese abfrage gehen welche farbe der getroffene pixel hat?
1. warum geht das nicht? (keine fehlermeldung, setzt aber meine objekte nicht zurück wenn ich sie treffe)
Code: Alles auswählen
for z in range(3):
if hitboxliste[z].pos.collidepoint(pygame.mouse.get_pos()):
hitboxposx, hitboxposy = hitboxliste[z].pos.topleft
if hitboxliste[z].name.get_at(((mausposx - hitboxposx),(mausposy - hitboxposy))) == (0,0,255):
tierliste[z].setzzurueck()
hitboxliste[z].setzzurueck()
else:
pass