Seite 1 von 1

pygame - pacmanansatz

Verfasst: Sonntag 27. August 2006, 00:17
von _-Ba$ics-_
Hallo ich bins schon wida :D ... hab mal ne frage : kennt sich vllt jemand mit pygame aus und kann mir helfen ?! also ich habe angefangen pacman zu schreiben aber iwie funktioniert der anfang schon nciht ich habe bis jetzt die spielfigur die sachen die man einsammeln muss und dei anzegie wieviel man eingesammelt hat geschriebn aber ich finde meinen fehler nciht
vllt schaut ihr euch einfach mal den code an vielen dank schon im vorfeld

Code: Alles auswählen

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




if not pygame.font: print 'Achtung, Textdatei nicht verfügbar'
if not pygame.mixer: print 'Achtung, Sound nicht verfügbar'

class MonsterManMain:
    def __init__(self, width=640,height=480):
        pygame.init()
        self.width = width
        self.height = height
        self.screen = pygame.display.set_mode((self.width , self.height))
            
    def MainLoop(self):
        self.LoadSprites();

        pygame.key.set_repeat(500, 30)

        self.background = pygame.Surface(self.screen.get_size())
        self.background = self.background.convert()
        self.background.fill((0,0,0))  
        
        while 1:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()
                elif event.type == KEYDOWN:
                    if ((event.key == K_RIGHT)
                        or (event.key == K_LEFT)
                        or (event.key == K_UP)
                        or (event.key == K_DOWN)):
                            self.snake.move(event.key)

            lstCols = pygame.sprite.spritecollide(self.monster
                                                 , self.Essen_sprites
                                                 , True)

            self.monster.Essen = self.monster.Essen + len(lstCols)


            self.screen.blit(self.background, (0, 0))     
            if pygame.font:
                font = pygame.font.Font(None, 36)
                text = font.render("Burger %s" % self.monster.Essen
                                   , 1, (255, 0, 0))
                textpos = text.get_rect(centerx=self.background.get_width()/2)
                self.screen.blit(text, textpos)

                                
                if __name__ == "__main__":
                    MainWindow = MonsterManMain()
                    MainWindow.MainLoop()

            self.Essen_sprites.draw(self.screen)
            self.monster_sprites.draw(self.screen)
            pygame.display.flip()

    def LoadSprites(self):
        self.monster = Monster()
        self.monster_sprites = pygame.sprite.RenderPlain((self.monster))
 
        nNumHorizontal = int(self.width/64)
        nNumVertical = int(self.height/64)

        self.Essen_sprites = pygame.sprite.Group()
        for x in range(nNumHorizontal):
            for y in range(nNumVertical):
                self.Essen_sprites.add(Essen(pygame.Rect(x*64, y*64, 64, 64)))
                
        
        
class Monster(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite._init_(self)
        self.image, self.rect = load_image('monster.png',-1)
        self.Essen = 0

        self.x_dist = 5
        self.y_dist = 5

    def move(self, key):

        xMove = 0;
        yMove = 0;

        if (key == K_RIGHT):
            xMove = self.x_dist
        elif (key == K_LEFT):
            xMove = -self.x_dist
        elif (key == K_UP):
            yMove = -self.y_dist
        elif (key == K_DOWN):
            yMove = self.y_dist
        self.rect.move_ip(xMove,yMove);

        

class Essen(pygame.sprite.Sprite):
        
    def __init__(self, rect=None):
        pygame.sprite.Sprite.__init__(self) 
        self.image, self.rect = load_image('Essen.png',-1)
        if rect != None:
            self.rect = rect                             


if __name__ == "__main__":
    MainWindow = MonsterManMain()
    MainWindow.MainLoop()


MfG Basics

Verfasst: Sonntag 27. August 2006, 07:53
von Nirven
Python gibt (bei einigermaßen einfachen Sachen) recht hilfreiche Fehlermeldungen, da steht eigentlich immer drin wo es welches Problem gibt.

1.) In Zeile 79 rust du eine _init_ auf, das muss __init__ heißen.
2.) Du rufst ein load_image (Zeile 80 und 107), hast diese Funktion aber weder definiert, noch importiert. Ich gehe mal davon aus, du benutzt die Funktion aus dem PyGame-Tutorial?

Edit: Und wenn du noch

Code: Alles auswählen

#-*- coding: utf-8 -*-
an den Anfang setzt gibt es auch keine Warnung weil du Umlaute benutzt ohne ein entsprechendes Decoding definiert zu haben.

Edit2: So, wenn du jetzt noch 54, 55, 56 löscht wird sogar was angezeigt. Was hat denn das da zu suchen?

Verfasst: Sonntag 27. August 2006, 08:09
von _-Ba$ics-_
Ja ich hab dieses spiel vom tutorial ich bin alle schritte beim tutorial durchgegangen aber da wird acuh nichts von load_image definition gesagt
könntest du mir mal bitte sagen wie der code aussehn muss damit es funktioniert?
danke

Verfasst: Sonntag 27. August 2006, 08:20
von Nirven
Chimp-Tutorial, da wird die Funktion definiert.

Ich würde die Funktion in ein eigenes Modul schreiben, zusammen mit load_sound und ähnlichem, und das dann importieren wo benötigt. Das erspart dir die Arbeit, Sachen die eh immer wieder gebraucht werden mehrfach zu schreiben.

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: utf-8 -*-

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




if not pygame.font: print 'Achtung, Textdatei nicht verf�gbar'
if not pygame.mixer: print 'Achtung, Sound nicht verf�gbar'

def load_image(name, colorkey=None):
    fullname = os.path.join('data', name)
    try:
        image = pygame.image.load(fullname)
    except pygame.error, message:
        print 'Cannot load image:', name
        raise SystemExit, message
    image = image.convert()
    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0,0))
        image.set_colorkey(colorkey, RLEACCEL)
    return image, image.get_rect()

class MonsterManMain:
    def __init__(self, width=640,height=480):
        pygame.init()
        self.width = width
        self.height = height
        self.screen = pygame.display.set_mode((self.width , self.height))
           
    def MainLoop(self):
        self.LoadSprites();

        pygame.key.set_repeat(500, 30)

        self.background = pygame.Surface(self.screen.get_size())
        self.background = self.background.convert()
        self.background.fill((0,0,0)) 
       
        while 1:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()
                elif event.type == KEYDOWN:
                    if ((event.key == K_RIGHT)
                        or (event.key == K_LEFT)
                        or (event.key == K_UP)
                        or (event.key == K_DOWN)):
                            self.snake.move(event.key)

            lstCols = pygame.sprite.spritecollide(self.monster
                                                 , self.Essen_sprites
                                                 , True)

            self.monster.Essen = self.monster.Essen + len(lstCols)


            self.screen.blit(self.background, (0, 0))     
            if pygame.font:
                font = pygame.font.Font(None, 36)
                text = font.render("Burger %s" % self.monster.Essen
                                   , 1, (255, 0, 0))
                textpos = text.get_rect(centerx=self.background.get_width()/2)
                self.screen.blit(text, textpos)          

            self.Essen_sprites.draw(self.screen)
            self.monster_sprites.draw(self.screen)
            pygame.display.flip()

    def LoadSprites(self):
        self.monster = Monster()
        self.monster_sprites = pygame.sprite.RenderPlain((self.monster))
 
        nNumHorizontal = int(self.width/64)
        nNumVertical = int(self.height/64)

        self.Essen_sprites = pygame.sprite.Group()
        for x in range(nNumHorizontal):
            for y in range(nNumVertical):
                self.Essen_sprites.add(Essen(pygame.Rect(x*64, y*64, 64, 64)))
               
       
       
class Monster(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image, self.rect = load_image('monster.png',-1)
        self.Essen = 0

        self.x_dist = 5
        self.y_dist = 5

    def move(self, key):

        xMove = 0;
        yMove = 0;

        if (key == K_RIGHT):
            xMove = self.x_dist
        elif (key == K_LEFT):
            xMove = -self.x_dist
        elif (key == K_UP):
            yMove = -self.y_dist
        elif (key == K_DOWN):
            yMove = self.y_dist
        self.rect.move_ip(xMove,yMove);

       

class Essen(pygame.sprite.Sprite):
       
    def __init__(self, rect=None):
        pygame.sprite.Sprite.__init__(self)
        self.image, self.rect = load_image('Essen.png',-1)
        if rect != None:
            self.rect = rect                             


if __name__ == "__main__":
    MainWindow = MonsterManMain()
    MainWindow.MainLoop()

Danke

Verfasst: Sonntag 27. August 2006, 08:50
von _-Ba$ics-_
Cool, Vielen Dank, nun klappt es!...
Hier mal ein Screenshot :wink:

http://shortyxl.sh.funpic.de/upload_fil ... ages/Spiel

So nun kommt noch ein Level und Gegner dazu :D

MfG Ba$ics

Verfasst: Dienstag 29. August 2006, 21:30
von abgdf
Hi,

wegen der Gegner fällt mir ein: Die Geister beim Original-Arcade-Pacman hatten jeweils einen Name und einen "Charakter":

Einer verfolgt einen immer, ein anderer läuft immer vor einem weg ("ängstlich") usw.

http://www.djgallagher.com/games/classi ... acters.php

Diese Charaktere haben allzuviele Pacman-Clones vernachlässigt, aber vor allem das machte das Original-Pacman interessant.

Wär doch schön, wenn Du das - irgendwann - auch in Deiner Python-Fassung hättest.

Viele Grüße