-1

While I was working in python, I decided to go check my code, on line 7 (SCREEN = pygame.display.set_mode((1280, 720)) ) my code had an error stating pygame.error no available video device appeared, there is more code after this and if I need put it in, please tell me

import random
import time
import pygame, sys
from button import Button
pygame.init()

SCREEN = pygame.display.set_mode((1280, 720))
pygame.display.set_caption("Menu")
  • this works only on local computer with desktop GUI - because it want to direct access to local video card and local monitor. On `replit` you have to create special project which will use special version of `pygame` - which will use fake video card and redirect output to browser. – furas Jun 22 '22 at 10:30

2 Answers2

1

This works only on local computer with desktop GUI - because pygame (or rather C/C++ library SDL which full name is Simple DirectMedia Layer) was created to use direct access to local video card and local monitor.

But when you try to run on server then it tries to access video card on server and display it on monitor connected to server. But servers often don't have video cards and they don't have monitors because they are useless for users.

On replit you have to create special project which will use special version of pygame - which will use fake video card (on server without GUI) and special methods to redirect output to browser instead of monitor (connected to server).enter image description here

furas
  • 134,197
  • 12
  • 106
  • 148
0

as long as you're using PyGame (there are three different things of python in the replit database as far as I know: normal Python, Python with Turtle, and PyGame) the code is perfectly fine. if you want a more, visually appealing background, you just have to use the command:

pygame.draw.rect()

and make something like a list that shows what your map wants to look like:

map1 = ["WWWWWWWWWWWWWWWWWWWWWWW",
        "WWWWWWWWWGGGWWWWWWWWWWW",
        "WWWWWGGGGGGGGGGGWWWWWWW", 
        "WWWWGGGGGFFFGGGGGGWWWWW",
        "WWWGGGGGFFFFFFGGGGGWWWW", 
        "WWWGGGGGGFFFFFGGGGGGWWW",
        "WWGGGGGGGGGFFGGGGGGGWWW", 
        "WWGGGGGGGGGGGGGGGGGGGWW",
        "WWGGGGGGSSSSSSSGGGGGGGW", 
        "WWGGGGSSSSSSSSSSGGGGGGW",
        "WGGGGGGGSSGGGGGGGGGGGSW", 
        "WGGGGGGGGGGGGGGGGGGGSSW",
        "WSGGGGGGGGFFGGGGGGGGSSW", 
        "WSSGGGGGGFFFGGGGGFFGGSW",
        "WSSGGGGGFFFFFFGGFFFFFGW", 
        "WSGGGGFFFFFFFFFFFFFFGGW",
        "WWGGGGGFFFFFFFFFFFFGGWW", 
        "WWGGGGGGGFFFFFFFFGGGWWW",
        "WWWWGGGGGGGGFFGGGGGWWWW", 
        "WWWWWWSSSSSGGGGSSSWWWWW",
        "WWWWWWWWWSSSSSSSSWWWWWW", 
        "WWWWWWWWWWWWWWSWWWWWWWW",
        "WWWWWWWWWWWWWWWWWWWWWWW"
        ]

with each of the letters representing a different color:

WATER = (0, 0, 255)
SAND = (194, 176, 128)
GRASS = (124, 252, 0)
FOREST = (0, 100, 0)
WALL =  (124,79,19)
FLOOR = (183,141,106)
STONEFLOOR = (133,133,133)
STONEWALL = (77,77,77)

TileColor = {'W': WATER, 'S': SAND, 'G': GRASS, 'F': FOREST, 'A': WALL, 'L': FLOOR, }

you can pretty much make whatever base you want

full code of something a bit simple (with a moving character if you want it):

import pygame, sys

WATER = (0, 0, 255)
SAND = (194, 176, 128)
GRASS = (124, 252, 0)
FOREST = (0, 100, 0)
WALL =  (124,79,19)
FLOOR = (183,141,106)
STONEFLOOR = (133,133,133)
STONEWALL = (77,77,77)

TileColor = {'W': WATER, 'S': SAND, 'G': GRASS, 'F': FOREST, 'A': WALL, 'L': FLOOR, }

map1 = ["WWWWWWWWWWWWWWWWWWWWWWW",
        "WWWWWWWWWGGGWWWWWWWWWWW",
        "WWWWWGGGGGGGGGGGWWWWWWW", 
        "WWWWGGGGGFFFGGGGGGWWWWW",
        "WWWGGGGGFFFFFFGGGGGWWWW", 
        "WWWGGGGGGFFFFFGGGGGGWWW",
        "WWGGGGGGGGGFFGGGGGGGWWW", 
        "WWGGGGGGGGGGGGGGGGGGGWW",
        "WWGGGGGGSSSSSSSGGGGGGGW", 
        "WWGGGGSSSSSSSSSSGGGGGGW",
        "WGGGGGGGSSGGGGGGGGGGGSW", 
        "WGGGGGGGGGGGGGGGGGGGSSW",
        "WSGGGGGGGGFFGGGGGGGGSSW", 
        "WSSGGGGGGFFFGGGGGFFGGSW",
        "WSSGGGGGFFFFFFGGFFFFFGW", 
        "WSGGGGFFFFFFFFFFFFFFGGW",
        "WWGGGGGFFFFFFFFFFFFGGWW", 
        "WWGGGGGGGFFFFFFFFGGGWWW",
        "WWWWGGGGGGGGFFGGGGGWWWW", 
        "WWWWWWSSSSSGGGGSSSWWWWW",
        "WWWWWWWWWSSSSSSSSWWWWWW", 
        "WWWWWWWWWWWWWWSWWWWWWWW",
        "WWWWWWWWWWWWWWWWWWWWWWW"
        ]

TILESIZE = 22
MAPWIDTH = 23
MAPHEIGHT = 23

pygame.init()
DISPLAY = pygame.display.set_mode((MAPWIDTH * TILESIZE, MAPHEIGHT * TILESIZE))
clock = pygame.time.Clock()

character = [5, 11]
run = True
while run:
    c_col, c_row = character
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                c_col += 1  
            if event.key == pygame.K_LEFT:
                c_col -= 1
            if event.key == pygame.K_UP:
                c_row -= 1  
            if event.key == pygame.K_DOWN:
                c_row += 1   

    if 0 <= c_col < MAPWIDTH and 0 <= c_row < MAPHEIGHT:
        if map1[c_row][c_col] == 'G':
            character = [c_col, c_row]  
        elif map1[c_row][c_col] == 'F':
            character = [c_col, c_row]  
        elif map1[c_row][c_col] == 'S':
            character = [c_col, c_row]  
    for row in range(MAPHEIGHT):
        for col in range(MAPWIDTH):
            pygame.draw.rect(
                DISPLAY, TileColor[map1[row][col]],
                (col * TILESIZE, row * TILESIZE, TILESIZE, TILESIZE))

    pygame.draw.rect(
        DISPLAY, (202, 141, 61),
        (character[0] * TILESIZE, character[1] * TILESIZE, TILESIZE, TILESIZE))

    pygame.display.update()
    clock.tick(100)

pygame.quit()
sys.exit()
roarg
  • 27
  • 5