нужна помощь не работает код:(

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
написал свой код по макету игры зделал фон, картинку спрайта и написал движение спрайта а когда пытаюсь запустить код выводит картинку спрайта, картинку фона
а движения спрайта не работает не знаю в чем проблема код вроде правильный вот сам код:
import sys

import pygame


pygame.init()



screen = pygame.display.set_mode((1200, 800))

backgrounde = pygame.image.load("image_for_python\dirt.bmp")

ship_image = pygame.image.load("image_for_python\ship_alien_#4.png")

ship = ship_image.get_rect()

screen_rect = screen.get_rect()

ship.center = screen_rect.center

ship_speed_factor = 0.8

center = float(ship.centerx)
def update():
moving_right = False
moving_left = False

if moving_right and ship.right < 1270:
center += ship_speed_factor
if moving_left and ship.left > -30:
center -= ship_speed_factor

def blitme():
screen.blit(backgrounde,(0, 0))
screen.blit(ship_image, ship)
pygame.display.flip()

def run():


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


elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
moving_right = True
elif event.key == pygame.K_LEFT:
moving_left = True

elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
moving_right = False
elif event.key == pygame.K_LEFT:
moving_left = False


while True:
run()
blitme()
update()

заранее спасибо
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Код вставляйте через кнопку ... -> код -> python.
 

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
Код вставляйте через кнопку ... -> код -> python.
А чем отличается?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
А чем отличается?
Форматированием.
 

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
Форматированием.
Спасибо
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
В книге этот код написан с использованием классов. Но вам видимо нужно без них. Вот пример с использованием global:
Python:
import sys

import pygame


pygame.init()

screen = pygame.display.set_mode((1200, 800))

backgrounde = pygame.image.load("image_for_python\dirt.bmp")

ship_image = pygame.image.load("image_for_python\ship_alien_#4.png")

ship = ship_image.get_rect()

screen_rect = screen.get_rect()

ship.center = screen_rect.center

ship_speed_factor = 0.8

center = float(ship.centerx)

moving_right = False
moving_left = False


def update():
    global center, moving_right, moving_left
    if moving_right and ship.right < 1270:
        center += ship_speed_factor

    if moving_left and ship.left > -30:
        center -= ship_speed_factor
    ship.centerx = center


def blitme():
    screen.fill((230, 230, 230))
    screen.blit(backgrounde, (0, 0))
    screen.blit(ship_image, ship)
    pygame.display.flip()


def run():
    global moving_right, moving_left
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                moving_right = True
            elif event.key == pygame.K_LEFT:
                moving_left = True

        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                moving_right = False
            elif event.key == pygame.K_LEFT:
                moving_left = False

while True:
    run()
    blitme()
    update()
 

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
В книге этот код написан с использованием классов. Но вам видимо нужно без них. Вот пример с использованием global:
Python:
import sys

import pygame


pygame.init()

screen = pygame.display.set_mode((1200, 800))

backgrounde = pygame.image.load("image_for_python\dirt.bmp")

ship_image = pygame.image.load("image_for_python\ship_alien_#4.png")

ship = ship_image.get_rect()

screen_rect = screen.get_rect()

ship.center = screen_rect.center

ship_speed_factor = 0.8

center = float(ship.centerx)

moving_right = False
moving_left = False


def update():
    global center, moving_right, moving_left
    if moving_right and ship.right < 1270:
        center += ship_speed_factor

    if moving_left and ship.left > -30:
        center -= ship_speed_factor
    ship.centerx = center


def blitme():
    screen.fill((230, 230, 230))
    screen.blit(backgrounde, (0, 0))
    screen.blit(ship_image, ship)
    pygame.display.flip()


def run():
    global moving_right, moving_left
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                moving_right = True
            elif event.key == pygame.K_LEFT:
                moving_left = True

        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                moving_right = False
            elif event.key == pygame.K_LEFT:
                moving_left = False

while True:
    run()
    blitme()
    update()
Спасибо завтра проверю.У меня есть код который в книжке я просто тренировался и писал свой код скорочено, и в книжке не было показано как ставить задний фон потому и я учился делать з задним фоном.Может ещё чего не знаю я просто 244 ст учил ставить граници,не видел что на дальнейших листках.Еще раз спасибо
 

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
Спасибо завтра проверю.У меня есть код который в книжке я просто тренировался и писал свой код скорочено, и в книжке не было показано как ставить задний фон потому и я учился делать з задним фоном.Может ещё чего не знаю я просто 244 ст учил ставить граници,не видел что на дальнейших листках.Еще раз спасибо
Не работает и я наверное знаю почему.
Когда я убрал ship.centerx = center то код виводиться на екран но спрайт не двигается но когда я добавили ship.centerx = center то выводит ошибку:
TabError:inconcistent use of tabs and spaces in indentation.Вроде ошибка говорит не юзать таб и пробел но я
Пару раз пытался написать без пробелов только з табами то самое может чего не знаю? Подскажите как решить
 

Jerry

Пользователь
Пользователь
Июл 28, 2020
29
12
3
TabError:inconcistent use of tabs and spaces in indentation.

Ошибка означает, что используется микс из табов и пробелов в отступе(-ах).

Как починить:
  1. Задайте редактору использование пробелов вместо табуляций.
  2. Сделайте поиск и замену по файлам, чтобы все табуляции заменить на 4 пробела.
  3. Убедитесь, что редактор настроен отображать табы как 8 пробелов.
Примечание: Причина для 8 пробелов при отображении табуляций в том, что вы сразу заметите их непреднамеренную вставку - такую как копипаст кода, который использует табы вместо пробелов.
 
  • Мне нравится
Реакции: kerelko

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
Ошибка означает, что используется микс из табов и пробелов в отступе(-ах).

Как починить:
  1. Задайте редактору использование пробелов вместо табуляций.
  2. Сделайте поиск и замену по файлам, чтобы все табуляции заменить на 4 пробела.
  3. Убедитесь, что редактор настроен отображать табы как 8 пробелов.
Примечание: Причина для 8 пробелов при отображении табуляций в том, что вы сразу заметите их непреднамеренную вставку - такую как копипаст кода, который использует табы вместо пробелов.
Спасибо,
обязательно проверю
 

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
Ошибка означает, что используется микс из табов и пробелов в отступе(-ах).

Как починить:
  1. Задайте редактору использование пробелов вместо табуляций.
  2. Сделайте поиск и замену по файлам, чтобы все табуляции заменить на 4 пробела.
  3. Убедитесь, что редактор настроен отображать табы как 8 пробелов.
Примечание: Причина для 8 пробелов при отображении табуляций в том, что вы сразу заметите их непреднамеренную вставку - такую как копипаст кода, который использует табы вместо пробелов.
 

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
А можно как то решить без настроек редактора?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
А можно как то решить без настроек редактора?
В каждой строке удаляйте все табы и пробелы и добавляйте нужное количество пробелов.
 

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
В каждой строке удаляйте все табы и пробелы и добавляйте нужное количество пробелов.
спасибо.Незнаю почему но ошибка сама решилась когда я написал ship.centerx = center опять, незнаю c чем это связано.Код работает, но в cmd выводит следущее:
DeprecationWarning: an integer is required (got type float). Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.
ship.centerx = center
Это что-что с обновлением связано ?
 

Malchik_molodoi

Новичок
Пользователь
Июл 29, 2020
19
4
3
20
спасибо.Незнаю почему но ошибка сама решилась когда я написал ship.centerx = center опять, незнаю c чем это связано.Код работает, но в cmd выводит следущее:
DeprecationWarning: an integer is required (got type float). Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.
ship.centerx = center
Это что-что с обновлением связано ?
У меня была такая же ошибка(предупреждение если быть точнее),точно не знаю, но по-моему, она заключается в том, что некоторые координаты имеют тип float и некоторые пиксели то ли пропадают, то ли что. В последующих версиях это предупреждение станет ошибкой и игра не будет работать.
Исправляется просто — переведи переменные(координаты) в целое число(int)
В твоем случае это решается так:
Python:
ship.centerx = int(center)
 

kerelko

Новичок
Пользователь
Июл 29, 2020
17
0
1
У меня была такая же ошибка(предупреждение если быть точнее),точно не знаю, но по-моему, она заключается в том, что некоторые координаты имеют тип float и некоторые пиксели то ли пропадают, то ли что. В последующих версиях это предупреждение станет ошибкой и игра не будет работать.
Исправляется просто — переведи переменные(координаты) в целое число(int)
В твоем случае это решается так:
Python:
ship.centerx = int(center)
Спасибо
 

Форум IT Специалистов