[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Help with the 3rd Lecture, first tutorial



Now, Now!
 
    Patience, I will show you why you got the path /data/... it is because the OS.Path gives you the location you are in and that is the unprinted default and adds onto that the print-out you got on the screen for that was the join part of the path and only the join part of the path...
    fullname = os.path.join('data', name)
        self.image, self.rect = load_image('chimp.bmp', -1)
NOTE:
    Then name in parenthesis is the chimp.bmp. In other words the variable with that name inside, pointing to it.
SO:
    os.path.join(... will be the path you reside in at the time you ran your program. In other words that will be the c:\python25\ directory. Or if you are in examples it would be c:\python25\examples. But since you can not find that file name it is because you are not in the examples folder.
NOW:
     Since you have placed the Chimp.py file in your Python25 directory you must now locate the data directory which is mentioned in the program below and copied above for this example. Remember the only thing mentioned in the program after the join statement is /dat/ which is correct for the file is in the data folder, but, you are not in the examples folder where the data folder resides. You are in the Python25 folder or directory where the examples directory or folder resides.
 
    Thus, you either change the join statement to include the examples folder or move into the examples folder and run from there. Which is what the batch file does. It places you into the examples folder to run the Chimp.py module. Which when running it is running from the examples folder and not the Python25 folder, so the os.path will have inside of it c:/Python25/examples/ and the join will append onto it, join, the path inside the '...' or data/
 
    Now my example or batch file is placing you into the folder you wish to be in. The examples folder has example programs. The data folder has data for these games/programs/modules.
    so the batch file starts you in the Python25 folder, jumps you into the examples folder, then runs the Chimp.py from that folder. Once you exit the game you go back inside the batch file which has a CD .. or CD c:\python25 command to move back to the previous directory or the the python directory...
 
    In other words the command CD .. means move back one directory, or folder.
 
FINALLY:
    I gave you the batch file to use that you can use anywhere inside any folder. A batch file with no path and the name for that batch file can be named to correspond to what you wish to run. Like EX.BAT for example programs and will jump into examples folder if you wish to start and remain inside the Python25 folder. Having no path inside of the batch file allows you to be anywhere and go anywhere. By deleting the CD .. at the end means you wish to stay in that folder so it is dependent on what you intend to do.
 
    Now in the batch file I added %1 %2 %3 ... these correspond to any added switches or commands placed on the command line before hitting enter to run the program from the batch file. If they are blank then nothing gets passed. But %1 must be there for the name of the file you wish to run in Python.
 
ALSO:
    The downloadable program he mentions is a program that gets placed into your MY Computer or Explorer file menu or context menu. It says Open Command Here when you cursor down the file or context menu. Click on it when hovering over the folder, such as the examples folder, it will take you to DOS right at that point and you will be right inside the examples folder.
 
    This is an easy way as long as the DOS folder you wish to be in is located by the system path for the Python25 executable. But that should not be a problem as long as the system path points to the Python25.exe file. He did give you an example to set it and I think you probably do have it already for the downloads now automatically set it up for you. but if not, then change it as he suggested.
 
    For the system path is needed to run programs and when using the download he gives you will be able to go into any folder you desire to run DOS from. When you type exit you just go back to the last Windows command or window you were in, unless you closed it to clear the screen.
 
    So please decide on what you wish to do. My batch file below if copied into the folder you wish to be in then give it any name to correspond to what you wish to do. My batch file below has to reside in the folder you have the .py file in. The other example I will add below it and that will allow you to be in the Python25 folder and jump into any folder beneath it or if you wish to go somewhere else then you will have to add the path to it. The second example will just jump you into the example folder and back out or up to the Python25 folder above it. Or parent of the child folder.
 
The name you place on the batch file can be like I did below P.BAT for a Python load and run, or EX.BAT to load Python25 and run a .py name you give on the command line from the Python25 folder into the examples folder. I used short names just to make it easier for you to type and get into your program to run.
 
    I hope this helps, Bruce
 
 

I am thoroughly confused at this point. I guess I need to change the path. You guys really are nerds, goddamit!

On 10/31/07, RR4CLB < chester_lab@xxxxxxxxxxxx> wrote:
Hi Both!

    I also downloaded it and it is an easy way to get to folders from the desk top. FOr if I have Python25 folder on my desk top then I click on it. Then go to the examples folder and hit the context menu key. It is a nice way to do it and quick.
    Also to have the least amount of work then he can make up a batch file for the loading of Python25 or run a program using it.

Batch file:
Either copy the text and paste it into Notepad or
Type each and hit enter, <enter>, at the end of each line below:
1) P>BAT batch file:
copy con: P.BAT <enter>
@echo off <enter>
python25 %1.py %2 %3 %4 %5 <enter>
@echo on <enter>
ctrl Z <enter>
 
Screen says: '1 file(s) copied'
 
2) EX.BAT file placed in Python25 folder:
copy con: EX.BAT <enter>
@echo off <enter>
CD EXAMPLE
python25 %1.py %2 %3 %4 %5 <enter>
CD .. <enter>
@echo on <enter>
ctrl Z <enter>
Screen says: '1 file(s) copied'

#!/usr/bin/env python
"""
This simple example is used for the line-by-line tutorial
that comes with pygame. It is based on a 'popular' web banner.
Note there are comments here, but for the full explanation,
follow along in the tutorial.
"""
 

#Import Modules
import os, pygame
from pygame.locals import *
 
if not pygame.font: print 'Warning, fonts disabled'
if not pygame.mixer: print 'Warning, sound disabled'
 

#functions to create our resources
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:', fullname
        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()
 
def load_sound(name):
    class NoneSound:
        def play(self): pass
    if not pygame.mixer or not pygame.mixer.get_init():
        return NoneSound()
    fullname = os.path.join('data', name)
    try:
        sound = pygame.mixer.Sound(fullname)
    except pygame.error, message:
        print 'Cannot load sound:', fullname
        raise SystemExit, message
    return sound
       
 
#classes for our game objects
class Fist(pygame.sprite.Sprite):
    """moves a clenched fist on the screen, following the mouse"""
    def __init__(self):
        pygame.sprite.Sprite.__init__(self) #call Sprite initializer
        self.image, self.rect = load_image('fist.bmp', -1)
        self.punching = 0
 
    def update(self):
        "move the fist based on the mouse position"
        pos = pygame.mouse.get_pos()
        self.rect.midtop = pos
        if self.punching:
            self.rect.move_ip(5, 10)
 
    def punch(self, target):
        "returns true if the fist collides with the target"
        if not self.punching:
            self.punching = 1
            hitbox = self.rect.inflate(-5, -5)
            return hitbox.colliderect(target.rect)
 
    def unpunch(self):
        "called to pull the fist back"
        self.punching = 0
 

class Chimp(pygame.sprite.Sprite):
    """moves a monkey critter across the screen. it can spin the
       monkey when it is punched."""
    def __init__(self):
        pygame.sprite.Sprite.__init__(self) #call Sprite intializer
        self.image, self.rect = load_image('chimp.bmp', -1)
        screen = pygame.display.get_surface()
        self.area = screen.get_rect()
        self.rect.topleft = 10, 10
        self.move = 9
        self.dizzy = 0
 
    def update(self):
        "walk or spin, depending on the monkeys state"
        if self.dizzy:
            self._spin()
        else:
            self._walk()
 
    def _walk(self):
        "move the monkey across the screen, and turn at the ends"
        newpos = self.rect.move((self.move, 0))
        if self.rect.left < self.area.left or \
            self.rect.right > self.area.right:
            self.move = -self.move
            newpos = self.rect.move((self.move, 0))
            self.image = pygame.transform.flip(self.image, 1, 0)
        self.rect = newpos
 
    def _spin(self):
        "spin the monkey image"
        center = self.rect.center
        self.dizzy = self.dizzy + 12
        if self.dizzy >= 360:
            self.dizzy = 0
            self.image = self.original
        else:
            rotate = pygame.transform.rotate
            self.image = rotate(self.original, self.dizzy)
        self.rect = self.image.get_rect(center=center)
 
    def punched(self):
        "this will cause the monkey to start spinning"
        if not self.dizzy:
            self.dizzy = 1
            self.original = self.image
       
 
def main():
    """this function is called when the program starts.
       it initializes everything it needs, then runs in
       a loop until the function returns."""
#Initialize Everything
    pygame.init()
    screen = pygame.display.set_mode((468, 60))
    pygame.display.set_caption('Monkey Fever')
    pygame.mouse.set_visible(0)
 
#Create The Backgound
    background = "">    background = "">    background.fill((250, 250, 250))
   
#Put Text On The Background, Centered
    if pygame.font:
        font = pygame.font.Font(None, 36)
        text = font.render("Pummel The Chimp, And Win $$$", 1, (10, 10, 10))
        textpos = text.get_rect(centerx=background.get_width()/2)
        background.blit(text, textpos)
 
#Display The Background
    screen.blit(background, (0, 0))
    pygame.display.flip()
   
#Prepare Game Objects
    clock = pygame.time.Clock()
    whiff_sound = load_sound('whiff.wav')
    punch_sound = load_sound('punch.wav')
    chimp = Chimp()
    fist = Fist()
    allsprites = pygame.sprite.RenderPlain((fist, chimp))
   
#Main Loop
    while 1:
        clock.tick(60)
 
    #Handle Input Events
        for event in pygame.event.get():
            if event.type == QUIT:
                return
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                return
            elif event.type == MOUSEBUTTONDOWN:
                if fist.punch(chimp):
                    punch_sound.play() #punch
                    chimp.punched()
                else:
                    whiff_sound.play() #miss
            elif event.type == MOUSEBUTTONUP:
                fist.unpunch()
 
        allsprites.update()
 
    #Draw Everything
        screen.blit(background, (0, 0))
        allsprites.draw(screen)
        pygame.display.flip()
 
#Game Over
 

#this calls the 'main' function when this script is executed
if __name__ == '__main__': main()