Задать вопрос
@AI-problem
Люблю решать проблемы если получается

Не могу произвести запуск приложения, выдает ошибку. Как решить?

import pygame
from random import randrange
from pygame.locals import *
from tkinter import *
import tkinter as tk
import pygame as pg
import sys
import random

pygame.init()

pygame.mixer.music.load('ms1.mp3')
pygame.mixer.music.play(-1)

root = Tk()
root.geometry('1300x760')
cube = 10

x, y = randrange(cube, root - cube, cube), randrange(cube, root - cube, cube)
apple = randrange(cube, root - cube, cube), randrange(cube, root - cube, cube)
length = 1
snake = [(x, y)]
dx, dy = 0, 0
fps = 60
kl = {'W': True, 'S': True, 'A': True, 'D': True, }
score = 0
speed_count, snake_speed = 0, 10

pygame.init()
surface = pygame.display.set_mode([root, root])
clock = pygame.time.Clock()
font_score = pygame.font.SysFont('Arial', 26, bold=True)
font_end = pygame.font.SysFont('Arial', 66, bold=True)
img = pygame.image.load('1.jpg').convert()

runing = True
 
def run():
    def quit():
        root.destroy()
 
    def exit():
        global runing
        runing = False
        root.destroy()
 
    root = tk.Tk()
    tk.Button(root, text="Перегрузить", command=quit).pack()
    tk.Button(root, text="Закрыть", command=exit).pack()
    root.mainloop()
 
while runing:
    run()

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

while True:
    surface.blit(img, (0, 0))
    
    [pygame.draw.rect(surface, pygame.Color('green'), (i, j, cube - 1, cube - 1)) for i, j in snake]
    pygame.draw.rect(surface, pygame.Color('red'), (*apple, cube, cube))
    
    render_score = font_score.render(f'SCORE: {score}', 1, pygame.Color('orange'))
    surface.blit(render_score, (5, 5))
    
    speed_count += 1
    if not speed_count % snake_speed:
	    x += dx * cube
	    y += dy * cube
	    snake.append((x, y))
	    snake = snake[-length:]
    
    if snake[-1] == apple:
        apple = randrange(cube, root - cube, cube), randrange(cube, root - cube, cube)
        length += 1
        score += 1
        snake_speed -= 1
        snake_speed = max(snake_speed, 4)
    
    if x < 0 or x > root - cube or y < 0 or y > root - cube or len(snake) != len(set(snake)):
        while True:
            render_end = font_end.render('GAME OVER', 1, pygame.Color('orange'))
            surface.blit(render_end, (root // 2 - 200, root // 3))
            pygame.display.flip()
            close_game()

    pygame.display.flip()
    root.mainloop()
    clock.tick(fps)
    close_game()
    
    key = pygame.key.get_pwidth, pressed()
    if key[pygame.K_w]:
        if kl['W']:
            dx, dy = 0, -1
            kl = {'W': True, 'S': False, 'A': True, 'D': True, }
    elif key[pygame.K_s]:
        if kl['S']:
            dx, dy = 0, 1
            kl = {'W': False, 'S': True, 'A': True, 'D': True, }
    elif key[pygame.K_a]:
        if kl['A']:
            dx, dy = -1, 0
            kl = {'W': True, 'S': True, 'A': True, 'D': False, }
    elif key[pygame.K_d]:
        if kl['D']:
            dx, dy = 1, 0
            kl = {'W': True, 'S': True, 'A': False, 'D': True, }
  • Вопрос задан
  • 196 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 1
@galoned
Как я Вас понял, то посмотрев данный видеоролик Вы написали игру "Змейка", исходный код которой находится по этой ссылке. После этого Вы решили создать некоторое окно при входе, но использовав tkinter, вместо pygame.

15 строка

root = Tk()
root.geometry('1300x760')
cube = 10

x, y = randrange(cube, root - cube, cube), randrange(cube, root - cube, cube)

Переменной root вы присваиваете экземпляр класса Tk(), а потом вычитаете из него 10, что вызывает ошибку TypeError.

99 строка

key = pygame.key.get_pwidth, pressed()
Откуда это взялось я не знаю, но скорее всего тут должно быть, смотря в код на GitHub
key = pygame.key.get_pressed()

И это только малая часть, так как в написанном коде две библиотеки конфликтуют между собой, поэтому рефакторить этот код довольно сложно. Советую Вам начать с основ языка python, тем более изучить строение самой программы. После теории разрабатывать консольные приложения, а уже потом браться за программы с интерфейсом, так как на данном этапе Вам будет очень сложно писать, рабочий по крайней мере, код и видоизменять его под свои нужды.
Если эти слова Вам показались туфтой, то гуглите что-то типа такого: Как сделать два окна(дисплея) на pygame.
P.S. В следующий раз прикрепляйте текст ошибки, как Вам советовали в комментариях.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы