Davin Gonzales
Davin Gonzales

Reputation: 1

Pygame is not interpreting keyboard input

So I need to eventually create a game for one of my classes and I want to use pygame. So I was trying to follow a tutorial and pygame is not recognizing keyboard input. The game loads with no errors, but m character doesn't move. Any help? My code:

#Import
import pygame
from pygame.locals import*

#initialization
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))


#keys
keys = [False, False, False, False]
playerpos=[100,100]

#images
player = pygame.image.load("resources/images/dude.png")
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")

#loop
while 1:
    #clear screen
    screen.fill(0)
     #screen elements
    for x in range(width/grass.get_width()+1):
     for y in range(height/grass.get_height()+1):
             screen.blit(grass,(x*100,y*100))
    screen.blit(castle,(0,30))
    screen.blit(castle,(0,135))
    screen.blit(castle,(0,240))
    screen.blit(castle,(0,345))
    screen.blit(player,playerpos)
    #update screen
    pygame.display.flip()
    #loop events
    for event in pygame.event.get():
        #check if event is the X button
        if event.type==pygame.QUIT:
            #key_input
            if event.type == pygame.KEYDOWN:
                if event.key==K_w:
                    keys[0]=True
                elif event.key==K_a:
                    keys[1]=True
                elif event.key==K_s:
                    keys[2]=True
                elif event.key==K_d:
                    keys[3]=True
            if event.type == pygame.KEYUP:
                if event.key==pygame.K_w:
                    keys[0]=False
                elif event.key==pygame.K_a:
                    keys[1]=False
                elif event.key==pygame.K_s:
                    keys[2]=False
                elif event.key==pygame.K_d:
                    keys[3]=False
            #if it quits
            pygame.quit()
            exit(0)
    #9-Move player
    if keys[0]:
        playerpos[1]-=5
    elif keys[2]:
        playerpos[1]+=5
    if keys[1]:
        playerpos[0]-=5
    elif keys[3]:
         playerpos[0]+=5

Again, the character loaded doesn't move when I press wasd. Any help would be much appreciated as I am trying to learn more about game dev (:

Upvotes: 0

Views: 173

Answers (1)

CWuest
CWuest

Reputation: 627

You are checking the event.type for keypresses inside the if-statement where you check

if event.type == pygame.QUIT

Meaning, that your program only checks key-presses after you try to quit the program.

Move all if statements where you check key actions one tab to the left and it should work.

However, you are going to have to move the code to be executed when quitting right beneath

if event.type == pygame.QUIT

like so:

if event.type==pygame.QUIT:
    #if it quits
    pygame.quit()
    exit(0)
#key_input
elif event.type == pygame.KEYDOWN:
    if event.key==K_w:
        keys[0]=True
    elif event.key==K_a:
        keys[1]=True
    elif event.key==K_s:
        keys[2]=True
    elif event.key==K_d:
        keys[3]=True
elif event.type == pygame.KEYUP:
    if event.key==pygame.K_w:
        keys[0]=False
    elif event.key==pygame.K_a:
        keys[1]=False
    elif event.key==pygame.K_s:
        keys[2]=False
    elif event.key==pygame.K_d:
        keys[3]=False

To improve performance, use elif-statements to check the event.type instead of if-statements, since event.type can't be pygame.QUIT, pygame.KEYDOWN and pygame.KEYUP.

Upvotes: 1

Related Questions