pygame - pacmanansatz

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
_-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
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

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?
_-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
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

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()
_-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
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
Antworten