Music Playing; But Screen Is Blank. Pygame Help!!! - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Music Playing; But Screen Is Blank. Pygame Help!!!

nnekymoennekymoe Posts: 4Member
I'm a new programmer working on a memory game for my computer science summative. I'm basically done but I really want to get the game to play music while the user is playing. I finally got the music to play, but unfortunately now the screen is just blank and I have no idea why.

Any help would be appreciated. Thanks:)[code

]import pygame , sys
import random
import time
size=[500,500]
pygame.init()
screen=pygame.display.set_mode(size)


# MUSIC
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=4096)
print "Mixer settings", pygame.mixer.get_init()
print "Mixer channels", pygame.mixer.get_num_channels()
pygame.mixer.music.set_volume(1.0)
pygame.mixer.music.load("Wings.wav")
pygame.mixer.music.play()

clock = pygame.time.Clock()
while pygame.mixer.music.get_busy():
# check if playback has finished
clock.tick(30)




# Colours
LIME = (0,255,0)
RED = (255, 0, 0)
BLACK = (0,0,0)
PINK = (255,102,178)
SALMON = (255,192,203)
WHITE = (255,255,255)
LIGHT_PINK = (255, 181, 197)
SKY_BLUE = (176, 226, 255)
PURPLE = (104, 34, 139)
screen.fill(BLACK)

# Width and Height of game box
width=50
height=50

# Margin between each cell
margin = 5

#Loop until the user clicks the close button.
done=False

# Used to manage how fast the screen updates
clock=pygame.time.Clock()

# INSTRUCTIONS!!!!!!!!!
# This is a font we use to draw text on the screen (size 36)
font = pygame.font.Font(None, 36)

display_instructions = True
instruction_page = 1

# -------- Instruction Page Loop -----------
while done==False and display_instructions:
for event in pygame.event.get(): # User did something
if event.type == pygame.QUIT: # If user clicked close
done=True # Flag that we are done so we exit this loop
if event.type == pygame.MOUSEBUTTONDOWN:
instruction_page += 1
if instruction_page == 3:
display_instructions = False

# Set the screen background
screen.fill(BLACK)

if instruction_page == 1:
# Draw instructions, page 1
# This could also load an image created in another program.
# That could be both easier and more flexible.

text=font.render("Welcome to Spatial Recall: ", True, PURPLE)
screen.blit(text, [10, 10])
text=font.render("The game that tests your memory!!!", True, WHITE)
screen.blit(text, [10, 40])

text=font.render("Click for instructions", True, RED)
screen.blit(text, [110, 100])

if instruction_page == 2:
# Draw instructions, page 2
text=font.render("This is how the game goes: The", True, WHITE)
screen.blit(text, [10, 10])

text=font.render("computer is going to flash some green", True, WHITE)
screen.blit(text, [10, 40])

text=font.render("boxes at random positions. It's", True, WHITE)
screen.blit(text, [10, 70])

text=font.render("up to you to decide where you", True, WHITE)
screen.blit(text, [10, 100])

text=font.render("think they are hidden.", True, WHITE)
screen.blit(text, [10, 130])

text=font.render("Good Luck!!.", True, PURPLE)
screen.blit(text, [20, 160])

text=font.render("Play game", True, RED)
screen.blit(text, [320, 310])
# Limit to 20 frames per second
clock.tick(20)

# Go ahead and update the screen with what we've drawn.
pygame.display.flip()

width=50
height=50

# Margin between each cell
margin = 5

coord=[]

# Create a 2 dimensional array. A two dimesional
# array is simply a list of lists.
grid=[]
for row in range(20):
# Add an empty array that will hold each cell
# in this row
grid.append([])
for column in range(20):
grid[row].append(0) # Append a cell

# Set row 1, cell 5 to one. (Remember rows and
# column numbers start at zero.)
grid[1][5] = 0

# Set title of screen
pygame.display.set_caption("Spatial Recall")

#Loop until the user clicks the close button.
done=False

# Used to manage how fast the screen updates
clock=pygame.time.Clock()

#draw the grid all pink
for row in range(20):
for column in range(20):
color = LIGHT_PINK
pygame.draw.rect(screen,color,[(margin+width)*column + margin,
(margin+height)*row+margin,width,height])
pygame.display.flip()
'''
#create list of random coodinates
x = random.randint(0, 10)
y = random.randint(0, 10) '''


#cover pink squares with green squares at the list of coodinates
#loop through the list, for every coordinate in list, turn green

for i in range(random.randint(2,10)):
x = random.randint(2, 10)
y = random.randint(2, 10)
color = LIME
pygame.draw.rect(screen,color,[(margin+width)*y + margin,
(margin+height)*x+margin,width,height])
coord.append((x,y))
pygame.display.flip()
time.sleep(2)

for row in range(20):
for column in range(20):
color = LIGHT_PINK
pygame.draw.rect(screen,color,[(margin+width)*column + margin,
(margin+height)*row+margin,width,height])
pygame.display.flip()


clock.tick(100)


# -------- Main Program Loop -----------
while done==False:
for event in pygame.event.get(): # User did something
if event.type == pygame.QUIT: # If user clicked close
done=True # Flag that we are done so we exit this loop
elif event.type == pygame.MOUSEBUTTONDOWN:
# User clicks the mouse. Get the position
pos = pygame.mouse.get_pos()
# Change the x/y screen coordinates to grid coordinates
column=pos[0] // (width+margin)
row=pos[1] // (height+margin)
print coord
print [row,column]
if (row,column) in coord:
color = LIME
pygame.draw.rect(screen,color,[(margin+width)*column + margin,
(margin+height)*row+margin,width,height])
else:
color = RED
pygame.draw.rect(screen,color,[(margin+width)*column + margin,
( margin+height)*row+margin,width,height])
pygame.display.flip()

#x = random.randint(0, 10)
#y = random.randint(0, 10)


pygame.quit ()[/code]

Comments

  • me0wcatme0wcat Posts: 4Member
    I noticed that the rectangles only appeared after I closed the program/broke the loop. I realised that you misindented your code
    i.e [code]# -------- Instruction Page Loop -----------
    while done==False and display_instructions:

    for event in pygame.event.get(): # User did something

    if event.type == pygame.QUIT: # If user clicked close
    done=True # Flag that we are done so we exit this loop

    if event.type == pygame.MOUSEBUTTONDOWN:

    instruction_page += 1


    #instruction pages set

    [hr]
    if instruction_page == 3:
    display_instructions = False

    # Set the screen background
    screen.fill(BLACK)

    elif instruction_page == 1:
    # Draw instructions, page 1
    # This could also load an image created in another program.
    # That could be both easier and more flexible.

    text=font.render("Welcome to Spatial Recall: ", True, PURPLE)
    screen.blit(text, [10, 10])
    text=font.render("The game that tests your memory!!!", True, WHITE)
    screen.blit(text, [10, 50])

    text=mmfont.render("Click for instructions", True, RED)
    screen.blit(text, [40, 150])

    [color=Red]pygame.display.update()
    screen.fill(BLACK)[/color]

    elif instruction_page == 2:
    # Draw instructions, page 2
    text=font.render("This is how the game goes: The", True, WHITE)
    screen.blit(text, [10, 10])

    text=font.render("computer is going to flash some green", True, WHITE)
    screen.blit(text, [10, 40])

    text=font.render("boxes at random positions. It's", True, WHITE)
    screen.blit(text, [10, 70])

    text=font.render("up to you to decide where you", True, WHITE)
    screen.blit(text, [10, 100])

    text=font.render("think they are hidden.", True, WHITE)
    screen.blit(text, [10, 130])

    text=font.render("Good Luck!!.", True, PURPLE)
    screen.blit(text, [20, 180])

    text=mmfont.render("PLAY GAME", True, RED)
    screen.blit(text, [120, 330])
    # Limit to 20 frames per second
    clock.tick(20)

    # Go ahead and update the screen with what we've drawn.
    pygame.display.flip()

    [/code]

    This is properly indented.

    Note: You can't do anything for the first 10 seconds or so
    Also the text needs a update function i.e beneath the "Click for instructions" code(It's red). Plus according to my Python Shell pygame can't load wave files.

    Otherwise the code is fine apart from maybe needing a win animation

    P.S : Why were you doing this at 2am in the morning?


    Edit: Strange, for some reason I posted 3 times.


  • me0wcatme0wcat Posts: 4Member
    I noticed that the rectangles only appeared after I closed the program/broke the loop. I realised that you misindented your code
    i.e [code]# -------- Instruction Page Loop -----------
    while done==False and display_instructions:

    for event in pygame.event.get(): # User did something

    if event.type == pygame.QUIT: # If user clicked close
    done=True # Flag that we are done so we exit this loop

    if event.type == pygame.MOUSEBUTTONDOWN:

    instruction_page += 1


    #instruction pages set

    [hr]
    if instruction_page == 3:
    display_instructions = False

    # Set the screen background
    screen.fill(BLACK)

    elif instruction_page == 1:
    # Draw instructions, page 1
    # This could also load an image created in another program.
    # That could be both easier and more flexible.

    text=font.render("Welcome to Spatial Recall: ", True, PURPLE)
    screen.blit(text, [10, 10])
    text=font.render("The game that tests your memory!!!", True, WHITE)
    screen.blit(text, [10, 50])

    text=mmfont.render("Click for instructions", True, RED)
    screen.blit(text, [40, 150])

    [color=Red]pygame.display.update()
    screen.fill(BLACK)[/color]

    elif instruction_page == 2:
    # Draw instructions, page 2
    text=font.render("This is how the game goes: The", True, WHITE)
    screen.blit(text, [10, 10])

    text=font.render("computer is going to flash some green", True, WHITE)
    screen.blit(text, [10, 40])

    text=font.render("boxes at random positions. It's", True, WHITE)
    screen.blit(text, [10, 70])

    text=font.render("up to you to decide where you", True, WHITE)
    screen.blit(text, [10, 100])

    text=font.render("think they are hidden.", True, WHITE)
    screen.blit(text, [10, 130])

    text=font.render("Good Luck!!.", True, PURPLE)
    screen.blit(text, [20, 180])

    text=mmfont.render("PLAY GAME", True, RED)
    screen.blit(text, [120, 330])
    # Limit to 20 frames per second
    clock.tick(20)

    # Go ahead and update the screen with what we've drawn.
    pygame.display.flip()

    [/code]

    This is properly indented.

    Note: You can't do anything for the first 10 seconds or so
    Also the text needs a update function i.e beneath the "Click for instructions" code(It's red). Plus according to my Python Shell pygame can't load wave files.

    Otherwise the code is fine apart from maybe needing a win animation

    P.S : Why were you doing this at 2am in the morning?





  • me0wcatme0wcat Posts: 4Member
    I noticed that the rectangles only appeared after I closed the program/broke the loop. I realised that you misindented your code
    i.e [code]# -------- Instruction Page Loop -----------
    while done==False and display_instructions:

    for event in pygame.event.get(): # User did something

    if event.type == pygame.QUIT: # If user clicked close
    done=True # Flag that we are done so we exit this loop

    if event.type == pygame.MOUSEBUTTONDOWN:

    instruction_page += 1


    #instruction pages set

    [hr]
    if instruction_page == 3:
    display_instructions = False

    # Set the screen background
    screen.fill(BLACK)

    elif instruction_page == 1:
    # Draw instructions, page 1
    # This could also load an image created in another program.
    # That could be both easier and more flexible.

    text=font.render("Welcome to Spatial Recall: ", True, PURPLE)
    screen.blit(text, [10, 10])
    text=font.render("The game that tests your memory!!!", True, WHITE)
    screen.blit(text, [10, 50])

    text=mmfont.render("Click for instructions", True, RED)
    screen.blit(text, [40, 150])

    [color=Red]pygame.display.update()
    screen.fill(BLACK)[/color]

    elif instruction_page == 2:
    # Draw instructions, page 2
    text=font.render("This is how the game goes: The", True, WHITE)
    screen.blit(text, [10, 10])

    text=font.render("computer is going to flash some green", True, WHITE)
    screen.blit(text, [10, 40])

    text=font.render("boxes at random positions. It's", True, WHITE)
    screen.blit(text, [10, 70])

    text=font.render("up to you to decide where you", True, WHITE)
    screen.blit(text, [10, 100])

    text=font.render("think they are hidden.", True, WHITE)
    screen.blit(text, [10, 130])

    text=font.render("Good Luck!!.", True, PURPLE)
    screen.blit(text, [20, 180])

    text=mmfont.render("PLAY GAME", True, RED)
    screen.blit(text, [120, 330])
    # Limit to 20 frames per second
    clock.tick(20)

    # Go ahead and update the screen with what we've drawn.
    pygame.display.flip()

    [/code]

    This is properly indented.

    Note: You can't do anything for the first 10 seconds or so
    Also the text needs a update function i.e beneath the "Click for instructions" code(It's red). Plus according to my Python Shell pygame can't load wave files.

    Otherwise the code is fine apart from maybe needing a win animation

    P.S : Why were you doing this at 2am in the morning?





Sign In or Register to comment.