Skip to main content

Pygame keyError

I have run into a big road block as my code is not updating points and health when player collides with coins or falls in pits. I have successfully created my own map and assigned all properties. The id of my gold coin is 163. I have spent a week now reviewing my code but can't see where the issue is; especially with collision not updating points either in console or on the screen. More confusing is the keyError concerning id. Not sure why since I am using exactly the id for the coin as printed in the console and same as in my tiled map. Here is my main code and the fetch_properties code.

def run(self):
        player_right_frame = 0  # index to track members of right image list
        player_left_frame = 0  # index to track members of left image list
        player_jump_frame = 0  # index to track jumping image
        quit = False
        player_speed = 10
        player_health = 100 #allows decrement of health of player
        player_points = 0
        clock = pygame.time.Clock()
        direction = 'stand'  # by default, sprite starts by standing
        ground_position = self.screen.get_height() - 355
        x = 170
        y = ground_position
 
        while not quit:
            self.redraw()
            points_image = self.font.render(f"Points: {player_points}", 1, white)
            health_image = self.font.render(f'Health: {player_health}', 1, yellow)
            self.screen.blit(points_image, (100, 5))
            self.screen.blit(health_image, (200, 5))
 
            for event in pygame.event.get():
                if event.type == KEYDOWN:
                    if event.key == K_ESCAPE:
                        quit = True
                    if event.key == K_RETURN:
                        pause = False
                elif event.type == KEYUP:
                    direction = 'stand'
                elif event.type == QUIT:
                    quit = True
            keys = pygame.key.get_pressed()  # checking pressed keys
            if keys[K_UP]:
                # check to see if solid tile is above the player
 
                above_tile = fetch_tile_properties(self.tmx_data, x + image_width, y - player_speed,self.view_hole)
                if not above_tile['solid']:
                    y -= player_speed
                    # check to see if player is on ground to allow a jump
                    if on_tile['ground']:
                        player_jump_frame = 10
            elif keys[K_DOWN]:
                pass  # no longer needed since gravity takes care of coming down
            if keys[K_RIGHT]:
                right_tile = fetch_tile_properties(self.tmx_data, x + image_width + player_speed, y + image_height/2, self.view_hole)
                if not right_tile['solid']:
                    # move right
                    x += player_speed
                    direction = 'right'
                
                # check property of tile player is standing on now
 
            elif keys[K_LEFT]:
                left_tile = fetch_tile_properties(self.tmx_data, x - player_speed, y + image_height/2, self.view_hole)
                if not left_tile['solid']:
                    # move left
                    x -= player_speed
                    direction = 'left'
 
            # check property of tile player is standing on now
            on_tile = fetch_tile_properties(
                self.tmx_data, x + image_width/2, y + image_height, self.view_hole)
            # Check player collision
            collided = fetch_tile_properties(self.tmx_data, x + image_width, y, self.view_hole)
            player_health = player_health + collided['health']
            player_points = player_points + collided['points']
 
            # Quit game once player is out of life
            if player_health <= 0:
                quit = True
 
            # Remove coin that is collected by player via collision check
 
            if collided['id'] == 163:
                player_points = player_points + collided['points']
                tile_x = collided['x']
                tile_y = collided['y']
                #  remove coin touched from tmx_data
                self.tmx_data.layers[0].data[tile_y][tile_y] = 0
                # self.tmx_data.layers[0].remove(tile_x, tile_y)
 
            print(on_tile) # testing to see if points or health change values
 
            # check if player is jumping up
            if player_jump_frame > 0:
                y -= player_speed
                direction = 'up'
                player_jump_frame = player_jump_frame - 1
            # check if player is  on a solid otherwise fall down
            elif on_tile['ground'] == False:
                direction = 'down'
                y += player_speed
 
def fetch_tile_properties(tmxdata, x, y, view_hole):
    view_x = x - view_hole[0]
    view_y = y - view_hole[1]
 
    tile_x = view_x // 35  # scaling by size of the tile
    tile_y = view_y // 35  # ensuring only the integer value of division
 
    try:
        properties = tmxdata.get_tile_properties(
            tile_x, tile_y, 0)  # this would be a dictionary returned
    except ValueError:
        properties = {id: -1, 'canClimb': False, 'ground': False, 'health': -99999,  
        'points': 0, 'provide': '', 'require': '', 'solid' : False
        }
 
    #  check if player is moving in free space, no tiles beneath it
    if properties is None:
        # specify defined custom properties since the get_properties function only
        # works for where there is a tile. Use id of -1 to check error
        #  and free space motion
        properties = {id: -1, 'canClimb': False, 'ground': False, 'health': 0,
                      'points': 0, 'provide': '', 'require': '', 'solid': False}
    # Since properties is a dictionary, we can append extra data to it
    # useful data would be the position of the tile player is colliding wit
    # or standing on
 
    properties['x'] = tile_x
    properties['y'] = tile_y
    return properties


source https://stackoverflow.com/questions/73015011/pygame-keyerror

Comments

Popular posts from this blog

Prop `className` did not match in next js app

I have written a sample code ( Github Link here ). this is a simple next js app, but giving me error when I refresh the page. This seems to be the common problem and I tried the fix provided in the internet but does not seem to fix my issue. The error is Warning: Prop className did not match. Server: "MuiBox-root MuiBox-root-1" Client: "MuiBox-root MuiBox-root-2". Did changes for _document.js, modified _app.js as mentioned in official website and solutions in stackoverflow. but nothing seems to work. Could someone take a look and help me whats wrong with the code? Via Active questions tagged javascript - Stack Overflow https://ift.tt/2FdjaAW

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console