HTML 页面上的 Python 游戏

问题描述

我是 Python 新手,我的朋友让我为我们的网站制作一个蟒蛇游戏。我做到了,但我们的网站上只显示了 python 代码。但是我们需要有我们的游戏节目,这样人们才能玩这个游戏。我试过这种方式:

<!DOCTYPE HTML>
<html>
<head>

</head>

<body>
 <iframe src="main.py"></iframe>
</body>
</html>

另外,这里是python代码

import pygame
import sys
import random
import pygame_menu

pygame.init()

bgImg = pygame.image.load("just_white_background.jpg")

# colors
FRAME_COLOR = (216,191,222)  # pale purple
WHITE = (255,255,255)
HEADER_COLOR = (195,155,204)
PURPLE = (205,147,219)  # 205,219
SNAKE_COLOR = (139,59,155)
FOOD_COLOR = (139,155)
BLACK = (0,0)

# blocks
BLOCK_COUNT = 20
BLOCK_SIZE = 20

# margins
BLOCK_MARGIN = 2
HEADER_MARGIN = 70

size = [BLOCK_SIZE * BLOCK_COUNT + 2 * BLOCK_SIZE + BLOCK_MARGIN * BLOCK_COUNT,BLOCK_SIZE * BLOCK_COUNT + 2 * BLOCK_SIZE + BLOCK_MARGIN * BLOCK_SIZE + HEADER_MARGIN]

print(size)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Snake Game")
timer = pygame.time.Clock()
textFont = pygame.font.SysFont('courier',24)

class SnakeBlock:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def is_inside(self):
        return 0 <= self.x < BLOCK_SIZE and 0 <= self.y < BLOCK_SIZE

    def __eq__(self,other):
        return isinstance(other,SnakeBlock) and self.x == other.x and self.y == other.y

def get_random_empty_block():
    x = random.randint(0,BLOCK_COUNT - 1)
    y = random.randint(0,BLOCK_COUNT - 1)
    empty_block = SnakeBlock(x,y)
    while empty_block in snake_blocks:
        empty_block.x = random.randint(0,BLOCK_COUNT - 1)
        empty_block.y = random.randint(0,BLOCK_COUNT - 1)
    return empty_block

def draw_block(color,row,column):
    pygame.draw.rect(screen,color,[BLOCK_SIZE + column * BLOCK_SIZE + BLOCK_MARGIN * (column + 1),HEADER_MARGIN + BLOCK_SIZE + row * BLOCK_SIZE + BLOCK_MARGIN * (row + 1),BLOCK_SIZE,BLOCK_SIZE])

def start_the_game():

    def get_random_empty_block():
        x = random.randint(0,BLOCK_COUNT - 1)
        y = random.randint(0,BLOCK_COUNT - 1)
        empty_block = SnakeBlock(x,y)
        while empty_block in snake_blocks:
            empty_block.x = random.randint(0,BLOCK_COUNT - 1)
            empty_block.y = random.randint(0,BLOCK_COUNT - 1)
        return empty_block

    snake_blocks = [SnakeBlock(9,3),SnakeBlock(9,4),5)]
    food = get_random_empty_block()
    d_row = buf_row = 0
    d_column = buf_column = 1
    score = 0
    speed = 1

    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                print("exit")
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP and d_column != 0:
                    buf_row = -1
                    buf_column = 0
                elif event.key == pygame.K_DOWN and d_column != 0:
                    buf_row = 1
                    buf_column = 0
                elif event.key == pygame.K_LEFT and d_row != 0:
                    buf_row = 0
                    buf_column = -1
                elif event.key == pygame.K_RIGHT and d_row != 0:
                    buf_row = 0
                    buf_column = 1

        screen.fill(FRAME_COLOR)
        pygame.draw.rect(screen,HEADER_COLOR,[0,size[0],HEADER_MARGIN])

        score_total = textFont.render(f"score: {score}",BLACK)
        speed_label = textFont.render(f"Speed: {speed}",BLACK)
        screen.blit(speed_label,(250,20))
        screen.blit(score_total,(20,20))

        for row in range(BLOCK_COUNT):
            for column in range(BLOCK_COUNT):
                if (row + column) % 2 == 0:
                    color = PURPLE
                else:
                    color = WHITE

                    draw_block(color,column)

        head = snake_blocks[-1]
        if not head.is_inside():
            print("Game Over")
            break
            # pygame.quit()
            # sys.exit()

        draw_block(FOOD_COLOR,food.x,food.y)
        for block in snake_blocks:
            draw_block(SNAKE_COLOR,block.x,block.y)


        pygame.display.flip()

        if food == head:
            score += 1
            speed = score // 5 + 1
            snake_blocks.append(food)
            food = get_random_empty_block()

        d_row = buf_row
        d_column = buf_column
        new_head = SnakeBlock(head.x + d_row,head.y + d_column)

        if new_head in snake_blocks:
            print('crashed yourself')
            break
            # pygame.quit()
            # sys.exit()

        snake_blocks.append(new_head)
        snake_blocks.pop(0)

        timer.tick(3 + speed)

# game menu


menu = pygame_menu.Menu(220,300,'Snake Game',theme=pygame_menu.themes.THEME_SOLARIZED)

menu.add_button('Play',start_the_game)

while True:

    screen.blit(bgImg,(0,0))

    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            exit()

    if menu.is_enabled():
        menu.update(events)
        menu.draw(screen)

    pygame.display.update()

网站上有 result 个此代码

如果你有什么不明白的,那就写下来,我会为你解释一切

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)