0

So, I found a video of Tech with Tim, where he was creating a flappy bird py file.. Well, my issue is the pygame window in not popping up after running it. I'm using ubuntu 20.04.. Searched for solutions, and mixed all I've learnt since I'm a complete beginner in pygame.. need help :(

import os
import pygame
pygame.init()
import neat
import time
import random
WIN_WIDTH = 600
WIN_HEIGHT = 800

BIRD_IMGS = [pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "bird1.png"))),pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "bird2.png"))),pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "bird3.png")))]
PIPE_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "pipe.png")))
BASE_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "base.png")))
BG_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("imgs", "bg.png")))

class Bird:
    IMGS = BIRD_IMGS
    MAX_ROTATION = 25
    ROTATION_VELOCITY = 20
    ANIMATION_TIME = 5

    def __init__(self, x, y):
        self.x = x 
        self.y = y 
        self.tilt = 0
        self.tick_count = 0
        self.vel = 0
        self.height = self.y
        self.img_count = 0
        self.img = self.IMGS[0]

    def jump(self):
        self.vel = -10.5
        self.tick_count = 0
        self.height = self.y

    def move(self):
        self.tick_count += 1
        d = self.vel * self.tick_count + 1.5*self.tick_count**2

        if d >= 16:
            d = 16
        if d < 0:
            d -= 2

        self.y = self.y + d

        if d < 0 or self.y < self.height + 50:
            if self.tilt < self.MAX_ROTATION:
                self.tilt = self.MAX_ROTATION
        else:
            self.tilt > -90
            self.tilt -= self.ROTATION_VELOCITY
    def draw(self, win):
        self.img_count += 1

        if self.img_count < self.ANIMATION_TIME:
            self.img = self.IMGS[0]
        elif self.img_count < self.ANIMATION_TIME*2:
            self.img = self.IMGS[1]
        elif self.img_count < self.ANIMATION_TIME*3:
            self.img = self.IMGS[2]
        elif self.img_count == self.ANIMATION_TIME*4:
            self.img = self.IMGS[1]
        elif self.img_count < self.ANIMATION_TIME*4+1:
            self.img = self.IMGS[0]
            self.img_count = 0
        if self.tilt <= -80:
            self.img = self.IMGS[1]
            self.img_count = self.ANIMATION_TIME*2

        rotated_image = pygame.transform.rotate(self.img, self.tilt)
        new_rect = rotated_image.get_rect(center=self.img.get_rect(topleft = (self.x, self.y)).center)
        win.blit(rotated_image, new_rect.topleft)

    def get_mask(self):
        return pygame.mask.from_surface(self.img)

def draw_window(win, bird):
    win.blit(BG_IMG, (0,0))
    bird.draw(win)
    pygame.display.update()

def main():
    bird = Bird(200,200)
    win = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
    run = True
    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False

        draw_window(win, bird)


    pygame.quit()
    quit()

main()

The traceback I get is :

Traceback (most recent call last):
  File "/home/user/Python/Flappybird-Ai/flappy_bird.py", line 98, in <module>
    main()
  File "/home/user/Python/Flappybird-Ai/flappy_bird.py", line 85, in main
    win = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.error: No available video device
n1tr0z3n
  • 53
  • 2
  • 9

1 Answers1

1

os.environ["SDL_VIDEODRIVER"] = "dummy"

This line makes pygame use its "dummy", meaning "fake", video driver.

With a fake video driver, of course the window isn't showing up. Try just removing it.

Dharman
  • 30,962
  • 25
  • 85
  • 135
Starbuck5
  • 1,649
  • 2
  • 7
  • 13
  • But if I remove it, I get another issue.. :\ pygame.error: No available video device – n1tr0z3n May 19 '21 at 11:28
  • @n1tr0z3n well then that’s your real error. Is that coming from the set_mode line or from somewhere else? You could edit your post with the exact traceback. – Starbuck5 May 19 '21 at 11:38
  • I've edited the post and I've removed os.environ["SDL_VIDEODRIVER"] = "dummy". And this is the error I get : Traceback (most recent call last): File "/home/user/Python/Flappybird-Ai/flappy_bird.py", line 98, in main() File "/home/user/Python/Flappybird-Ai/flappy_bird.py", line 85, in main win = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT)) pygame.error: No available video device – n1tr0z3n May 19 '21 at 11:45
  • I found this post where OP managed to fix it in the comments: https://stackoverflow.com/questions/64379965/pygame-doesnt-open-window-pygame-error-no-available-video-device – Starbuck5 May 19 '21 at 11:56
  • Thank you so much sir! It worked! I really appreciate it :) – n1tr0z3n May 19 '21 at 12:08