3

as part of my Pygame learning course I have to create simple helicopter game, similar to flappy bird. It also should have a score count - so everytime you pass gap between blocks with helicopter the score should add 1. Game logic and everything else works fine, except everytime helicopter pases thru the blocks the score is not added, so all the time score shows 0. Below is the code, can anyone please help

import pygame
import time
from random import randint


black = (0,0,0)
white = (255,255,255)
pygame.init()
surfaceWidth = 1280
surfaceHeight = 720

imageHeight = 30
imageWidth = 60


surface = pygame.display.set_mode((surfaceWidth,surfaceHeight))
pygame.display.set_caption('EVGENY GAME')
#clock = frames per second
clock = pygame.time.Clock()

img = pygame.image.load('Helicopter.jpg')

def score(count):
    font = pygame.font.Font('freesansbold.ttf', 20)
    text = font.render("Score: "+str(count), True, white)
    surface.blit(text, [0,0])



def blocks(x_block, y_block, block_width, block_height, gap):
    pygame.draw.rect(surface, white, [x_block, y_block, block_width, block_height])
    pygame.draw.rect(surface, white, [x_block, y_block+block_height+gap, block_width, surfaceHeight])

def replay_or_quit():
    for event in pygame.event.get([pygame.KEYDOWN, pygame.KEYUP, pygame.QUIT]):
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

        elif event.type == pygame.KEYDOWN:
            continue

        return event.key
    return None


def makeTextObjs(text, font):
    textSurface = font.render(text, True, white)
    return textSurface, textSurface.get_rect()

def msgSurface(text):
    smallText = pygame.font.Font('freesansbold.ttf', 20)
    largeText = pygame.font.Font('freesansbold.ttf', 150)

    titleTextSurf, titleTextRect = makeTextObjs(text, largeText)
    titleTextRect.center = surfaceWidth / 2, surfaceHeight / 2
    surface.blit(titleTextSurf, titleTextRect)

    typTextSurf, typTextRect = makeTextObjs('Press any key to continue', smallText)
    typTextRect.center = surfaceWidth / 2, ((surfaceHeight / 2) + 100)
    surface.blit(typTextSurf, typTextRect)

    pygame.display.update()
    time.sleep(1)

    while replay_or_quit() == None:
        clock.tick()

    main()

def gameover():
    msgSurface('GAME OVER')

def helicopter(x, y, image):
    surface.blit(img, (x,y,))

# first constance = game over, while not true we are playing game

def main():
    x = 50
    y = 100
    y_move = 0

    x_block = surfaceWidth
    y_block = 0
    block_width = 100
    block_height = randint(0, surfaceHeight/2)
    gap = imageHeight * 8
    block_move = 3


    current_score = 0

    game_over = False
    while not game_over:#this will keep running until it hits pygame.quit
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    y_move = -10
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_UP:
                    y_move = 5
        y += y_move

        surface.fill(black)
        helicopter(x,y,img)

        score(current_score)


        blocks(x_block, y_block, block_width, block_height, gap)
        x_block -= block_move

        if y > surfaceHeight-40 or y < 0:
            gameover()

        if x_block < (-1*block_width):
            x_block = surfaceWidth
            block_height = randint(0, surfaceHeight/2)

        if x + imageWidth > x_block:
            if x < x_block + block_width:
                if y < block_height:
                    if x - imageWidth < block_width + x_block:
                        gameover()
        if x + imageWidth > x_block:
            if y + imageHeight > block_height+gap:
                gameover()
        if x < x_block and x > x_block-block_move:
            current_score += 1



        pygame.display.update()#update, updates specific area on display, flip - updates whole display
        clock.tick(100)#100 frames per second
main()
pygame.quit()    
quit()            enter code here
2
  • 1
    Hi! Welcome to StackOverflow! I would suggest you to provide also the images that are referenced in your code, so that it is possible to run it and better see where it goes wrong.
    – norok2
    Commented Feb 21, 2019 at 13:25
  • 1
    When runnning your code I noticed that your score counter condition if x < x_block and x > x_block-block_move: never executes. Just put a print in there and watch the stdout. Also printing the current_score shows the same result: you never increase the score.
    – BoboDarph
    Commented Feb 21, 2019 at 13:43

1 Answer 1

2

Your score counter never updates because your score counter condition is never reached. Change

if x < x_block and x > x_block-block_move:

to

if x_block >= x > x_block-block_move:
0

Not the answer you're looking for? Browse other questions tagged or ask your own question.