Nothing being displayed by Pygame - python

I am using Pygame for the first time so I am following a tutorial online. I recreated the code almost exactly and the window opens normally but nothing will display. I've tried copying other examples for simple Pygame setup and each time I run it the window opens but nothing else happens.
I am using python 3.7.5
Here is my code for reference:
import pygame
from pygame.locals import *
def game_init() :
global SURFACE_MAIN
SURFACE_MAIN = pygame.display.set_mode( ( GAME_WIDTH, GAME_HEIGHT ) )
pygame.display.set_caption( "rouge_like" )
def game_draw() :
# Clear surface
SURFACE_MAIN.fill( COLOR_DEFAULT_BG )
# Draw map
# Draw player
SURFACE_MAIN.blit( PLAYER_SPRITE, ( 100, 100 ) )
# Update display
pygame.display.flip()
pygame.display.update()
def game_main_loop() :
while True :
# Process events
for event in pygame.event.get() :
#print(event)
if event.type == QUIT :
pygame.quit()
sys.exit()
# Draw Game
game_draw()
def main() :
pygame.init()
game_init()
game_main_loop()
if __name__ == '__main__' :
main()

Turns out this is an issue with VSCode. Running the program from my regular computer terminal works just fine.

Related

Pygame screen dosen't close

I'm a Macbook user and I have just recently started learning programming games using python.
my issue is that every time I try to close the screen it doesn't close.
import pygame
import sys
pygame.init()
width = 800
hight = 600
screen = pygame.display.set_mode((width , hight))
game_over= False
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT :
sys.exit()
When I point the cursor to the screen it turns to a circle... Cursur, so usually I just press force to quit "on the snake icone" in the dock
So how can I fix this and make the screen close just by pressing the close button ?
I'm using python 3.
Thank you.
Full edited and tested code :
import pygame
import sys
pygame.init()
width = 800
hight = 600
running = True
screen = pygame.display.set_mode((width , hight))
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT :
pygame.quit()
sys.exit()
Test on Linux mint with visual studio code. Tested more than 5 times. Expected results.

Pygame game crashes when trying to close the app

So im just following a simple Pygame tutorial on youtube and it should work but for some reason every time i try to close the app it crashes and doesn't close normally, here's the code:
import pygame
# Initialize the pygame
pygame.init()
# Create the screen
screen = pygame.display.set_mode((800, 600))
# Title and Icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
# Run game until x is pressed
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
im using the latest version of pycharm and python.
Add a pygame.display.quit() at the last line, you need to tell it to close the window.

change an image in pygame after a length of time

Hi I am new to this site.
Here is the question.
Currently the program displays an image which is supposed to be the start up screen for three seconds.
I then want it to stop displaying the first image and display another one instead continuously.
I am using pygame version 1.9.1 and python version 2.7.9.
The code is below.
Thanks in advance too.
import pygame, sys
from pygame.locals import *
pygame.init()
gameDisplay=pygame.display.set_mode((600,600))
pygame.display.set_caption("Platypus")
white=255,255,255
black=0,0,0
red=255,0,0
important_platypus=pygame.image.load("C:/Users/Sarah_2/Pictures/no_one_knows_why_Duck_Billed_Platypi_are_important.jpg")
important_platypus=pygame.transform.scale(important_platypus,(600,600))
gameExit=False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
gameDisplay.blit(important_platypus, (0, 0) )
pygame.display.update()
pygame.quit()
quit()
time.sleep is the function you want. Below is a full example:
import pygame, sys
from pygame.locals import *
pygame.init()
gameDisplay=pygame.display.set_mo de((600,600))
pygame.display.set_caption ("Platypus")
time.sleep(3)
gameDisplay=pygame.display.set_mo de((600,600))
pygame.display.set_caption ("second image")

pygame crashes when i try to resize window

This exact question was asked on this forum last April. However, the only answer was: "Your script works on my system, check and make sure that you have the pygame module intended for your version of python." So I checked this first and it checked out. (I have Python 2.7 and Pygame Version 1.9.1 release for Python 2.7.)
So it's not that, but the following code produces the same error the other person reported:
This application has requested the runtime to terminate it in an unusual way. Please contact the application's support team for more info.
I wish the original poster had said what they did to fix it, because I'm stumped. Note that I do NOT have administrator rights on the machine I'm trying to run this on. Could that be the problem?
The script is below. (This was taken directly from the book Beginning Game Development with Python and Pygame.) It runs right up to the instant you try to resize the window.
background_image_filename = 'sushiplate.jpg'
import pygame
from pygame.locals import *
from sys import exit
SCREEN_SIZE = (640, 480)
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32)
background = pygame.image.load(background_image_filename).convert()
while True:
event = pygame.event.wait()
if event.type == QUIT:
exit()
if event.type == VIDEORESIZE:
SCREEN_SIZE = event.size
screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32)
pygame.display.set_caption("Window resized to "+str(event.size))
screen_width, screen_height = SCREEN_SIZE
for y in range(0, screen_height, background.get_height()):
for x in range(0, screen_width, background.get_width()):
screen.blit(background, (x, y))
pygame.display.update()
Warning, you are drawing for every event fired. You instead want:
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
elif event.type == VIDEORESIZE:
# ...
elif event.type == KEYDOWN:
# ...
# draw.
pygame.display.update()
This next code doesn't make sense: What are you trying to do?
screen_width, screen_height = SCREEN_SIZE
for y in range(0, screen_height, background.get_height()):
for x in range(0, screen_width, background.get_width()):
screen.blit(background, (x, y))
pygame.display.update()
Try removing the color depth on the resize mode setting:
screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE)
I get the same error as you with the color depth left in, and it goes away when I remove it. I don't know why it would fail, but there's no official documentation at all on the VIDEORESIZE event, other than the Event object has size, w and h fields set to something. (Checking this is difficult right now because pygame.org is down right now, reportedly due to a server RAID error, but you can Google for the information, and view Cached pages.)

Pygame screen freezes when I close it

The code loads up a pygame screen window, but when I click the X to close it, it becomes unresponsive. I'm running on a 64-bit system, using a 32-bit python and 32-bit pygame.
from livewires import games, color
games.init(screen_width = 640, screen_height = 480, fps = 50)
games.screen.mainloop()
Mach1723's answer is correct, but I would like to suggest another variant of a main loop:
while 1:
for event in pygame.event.get():
if event.type == QUIT: ## defined in pygame.locals
pygame.quit()
sys.exit()
if event.type == ## Handle other event types here...
## Do other important game loop stuff here.
I'd recommend the following code. First, it includes Clock so your program doesn't eat the CPU doing nothing but polling for events. Second, it calls pygame.quit() which prevents the program from freezing when running under IDLE on windows.
# Sample Python/Pygame Programs
# Simpson College Computer Science
# http://cs.simpson.edu/?q=python_pygame_examples
import pygame
# Define some colors
black = ( 0, 0, 0)
white = ( 255, 255, 255)
green = ( 0, 255, 0)
red = ( 255, 0, 0)
pygame.init()
# Set the height and width of the screen
size=[700,500]
screen=pygame.display.set_mode(size)
pygame.display.set_caption("My Game")
#Loop until the user clicks the close button.
done=False
# Used to manage how fast the screen updates
clock=pygame.time.Clock()
# -------- 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
# Set the screen background
screen.fill(black)
# Limit to 20 frames per second
clock.tick(20)
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# Be IDLE friendly. If you forget this line, the program will 'hang'
# on exit.
pygame.quit ()
This is a pretty simple issue, you need to handle the "QUIT" event, see the event documentation at: http://www.pygame.org/docs/ref/event.html
EDIT:
It occurs to me now that you might be handling the "QUIT" event and its not working
but without more details to your code I dunno.
A quick example of a simple way to handle the "QUIT" event:
import sys
import pygame
# Initialize pygame
pygame.init()
pygame.display.set_mode(resolution=(640, 480))
# Simple(ugly) main loop
curEvent = pygame.event.poll()
while curEvent.type != pygame.QUIT:
# do something
curEvent = pygame.event.poll()
In using pygame, you have to handle all events including QUIT so if you don't handle the quit event, your program will not quit. Here's a code.
import sys
import pygame
from pygame.locals import *
def main():
running = True
while running:
for event in pygame.event.get():
if event.type==QUIT: #QUIT is defined at pygame.locals
runnning = False
#other game stuff to be done
if __name__=='__main__':
pygame.init()
pygame.display.set_mode((640,480))
main()

Categories

Resources