Richelle
Richelle

Reputation: 33

Pygame Menu: calling another .py file

I'm learning pygame by helping a friend make a Menu for his interactive TicTacToe game. It's simple enough, a title and 2 buttons for starting and exiting the game. He has the game done, I just need to link my menu to his game.

After fiddling with pygame, I finally finished making the images appear in the pygame window(I never thought that seeing text appear in a blank window for the first time could look so beautiful! T^T). I believe that the next step is to make the images act like buttons to call another python file.

Here is my simple code for the menu:

import pygame
from pygame.locals import *
from sys import exit

pygame.init()

resX, resY = 640, 480

windowObj = pygame.display.set_mode((resX,resY))

titleImg = pygame.image.load("title.png")
startImg = pygame.image.load("start.png")
exitImg =  pygame.image.load("exit.png")

def width_center(img):
    """For horizontally setting an image."""
    return resX/2 - x(img)/2

def height_center(img):
    """For vertically setting an image."""
    return resY/2 - y(img)/2

def x(img):
    """Width of object."""
    return img.get_width()
def y(img):
    """Height of object."""
    return img.get_height()

while True:
    pygame.display.update()
    windowObj.fill((255,255,255))

    windowObj.blit(titleImg,(width_center(titleImg), 30))
    #This I want to link:
    windowObj.blit(startImg,(width_center(startImg),height_center(startImg)-10))

    windowObj.blit(exitImg,(width_center(exitImg),height_center(exitImg)+y(startImg)))

    for i in pygame.event.get():
        if i.type == QUIT:
            exit()

Simply put, I want to know how to make the startImg call TTTClick.py. Should there also be a certain format for his TTTClick.py?

Thanks :)

Upvotes: 2

Views: 1502

Answers (1)

ninMonkey
ninMonkey

Reputation: 7511

If it's one project, you can have 'title screen' state, and 'game' states.

Psuedo code:

class Game():
    def __init__(self):
        self.done = False
        self.state = "title"

    def game_draw(self):
        # game draw

    def game_update(self):
        # game event handling, and physics

    def title_draw(self):
        # title draw

    def title_update(self):
        # on event click
        self.state = "game"

    def loop(self):
        # main loop
        while not self.done:
            if state == 'title':
                title_update()
                title_draw()
            elif state == 'game':
                game_update()
                game_draw()

if __name__ == "__main__":
    game = Game()
    game.loop()

Note: x, height_center ect. already exist in pygame.Rect

# if Surface
titleImage.get_rect().width

# if Sprite
titleImage.rect.width

There's more, rect.center, rect.centerx, see the full listing at http://www.pygame.org/docs/ref/rect.html

Upvotes: 1

Related Questions