Python

abcd

Пользователь
Здесь полностью с Вами согласен. К сожалению безопасности в PHP должно уделяться очень много времени =(
 

Weeds

Новичок
Изучаю Python. У меня вопрос: вот я по учебнику написал программу, в которой шарик летает в окне (шарик - рисунок png). Запускаю эту программу, а он мне пишет, что не может открыть (Couldn't open) рисунок шарика. В чём может быть дело? У автора учебника аналогичная программа работает.
 

Socket

Пользователь
Что за учебник?
И какая графическая библиотека?

Да и желательно код в студию.
 

Weeds

Новичок
Что за учебник?
И какая графическая библиотека?

Да и желательно код в студию.
Учебник - журнал Linux Format. Код вот:
Код:
from pygame import *
import random

ballpic = image.load('ball.png')

done = false 

ballx = 0
bally = 0
ballxmove = 1
ballymove = 1

init()
screen = display.set_mode((640,480))
display.set_caption('Ball game')

while done == false:
screen.fill(0)
screen.blit(ballpic, (ballx, bally))
display.update()

time.delay(1)

ballx = ballx + ballxmove
bally = bally + ballymove

if ballx > 600:
ballxmove = -1
if ballx < 0:
ballxmove = 1
if bally > 440:
ballymove = -1
if bally < 0:
ballymove = 1

for e in event.get():
if e.type == KEYUP:
if e.key == K_ESCAPE:
done = True
 

Socket

Пользователь
Может нет рисунка? у меня в другом месте ошибка...

Все проверил, рисунок нарисовал... Исправленный код (может не все правильно, но работает):
Код:
 #!/usr/bin/python

from pygame import *
import random

ballpic = image.load('ball.png')
done = "false"
ballx = 0
bally = 0
ballxmove = 1
ballymove = 1
init()
screen = display.set_mode((640,480))
display.set_caption('Ball game')
while done == "false":
screen.fill(0)
screen.blit(ballpic, (ballx, bally))
display.update()
time.delay(1)
ballx = ballx + ballxmove
bally = bally + ballymove
if ballx > 600:
ballxmove = -1
if ballx < 0:
ballxmove = 1
if bally > 440:
ballymove = -1
if bally < 0:
ballymove = 1
for e in event.get():
if e.type == KEYUP:
if e.key == K_ESCAPE:
done = "True"
 

Weeds

Новичок
Может нет рисунка? у меня в другом месте ошибка...

Все проверил, рисунок нарисовал... Исправленный код (может не все правильно, но работает):
Рисунок есть. Ваша программа заработала, вот только принципиальных отличий от своего кода я не нашёл. А в чём ошибка моя была? И ещё вопрос: pygame умеет анимационные gif открывать?
 

Socket

Пользователь
Рисунок есть. Ваша программа заработала, вот только принципиальных отличий от своего кода я не нашёл. А в чём ошибка моя была? И ещё вопрос: pygame умеет анимационные gif открывать?

На счет гифа - без понятия. Про pygame только сейчас узнал.
Вот и отличия: done = "false" и while done == "false": Кавычки добавил.
 

Weeds

Новичок
На счет гифа - без понятия. Про pygame только сейчас узнал.
Вот и отличия: done = "false" и while done == "false": Кавычки добавил.
Мда, отличия... А я голову ломал сидел, а там оказывается кавычки надо поставить... Спасибо за помощь.
 

Socket

Пользователь
Поправил код: теперь работает выход из программы.
 

Weeds

Новичок
Поправил код: теперь работает выход из программы.
А как будет выглядеть код, если имеется 2 рисунка, один из них выведен на экран, и при нажатии на кнопку один рисунок заменяется другим? (Более точно - имеется картинка png человечка, и картинка gif его ходьбы, при нажатии на кнопку вправо, человечек должен начать идти (т.е. рисунок png заменяется рисунком gif))?
 

Socket

Пользователь
Пока не получается сделать, думаю завтра будет готово. Самому интересно что получится ;) .
 

Weeds

Новичок
Пока не получается сделать, думаю завтра будет готово. Самому интересно что получится ;) .
Ок. Ну наверно там основная строка такого типа должна быть:
Код:
if <нажата_кнопка>:  
1pic = 2pic
Но это только догадки чайника))). Кстати в том же Linux Format описывалось как игру Звездолёт сделать. Космический корабль летает в космосе и стреляет по метеоритам. Надо посмотреть. Скорее всего от этого не сильно отличается.
 

Socket

Пользователь
Я тут глянул доки - не все так просто. В pygame есть только KEYDOWN (кнопка нажата) и KEYUP (кнопка отпущена), т.е. не получится сделать так: кнопку зажал - картинка поехала ;) . Так получается 1 нажатие - перемещение на 1 пиксел (или больше).
Хотя может есть другие способы...
 

Weeds

Новичок
Я тут глянул доки - не все так просто. В pygame есть только KEYDOWN (кнопка нажата) и KEYUP (кнопка отпущена), т.е. не получится сделать так: кнопку зажал - картинка поехала ;) . Так получается 1 нажатие - перемещение на 1 пиксел (или больше).
Хотя может есть другие способы...
Ёжползёж, тоесть так не получится: Если KEYDOWN, то.... Ну ведь делают же как-то люди, я говорю, надо просто учебники почитать, я когда до вышеупомянутого Звездолёта доберусь, напишу этот код.
 

Weeds

Новичок
Это не то...
Мой совет: почитайте документацию.
А какой номер журнала?
Да я просто попробовал в программе с шариком заменить KEYUP на KEYDOWN и теперь, когда я удерживаю Escape программа закрывается... Про шар летающий - LF №103 с.62, про звездолёт не помню, Вот ссылка внешняя на довольно интересную игру.
 

Socket

Пользователь
Да я просто попробовал в программе с шариком заменить KEYUP на KEYDOWN и теперь, когда я удерживаю Escape программа закрывается... Про шар летающий - LF №103 с.62, про звездолёт не помню, Вот ссылка внешняя на довольно интересную игру.

Попробуйте 1 раз нажать кнопку. Происходит задержка, потом окно закрывается.
 

sami

Местный
Я тут глянул доки - не все так просто. В pygame есть только KEYDOWN (кнопка нажата) и KEYUP (кнопка отпущена), т.е. не получится сделать так: кнопку зажал - картинка поехала ;) . Так получается 1 нажатие - перемещение на 1 пиксел (или больше).
Хотя может есть другие способы...
Все просто. В программе уже есть состояние, которое меняется по действиям с кнопкой и проверяется в основном цикле - done.
Нужно всего-то завести еще одно состояние, которое будет изначально выключено, включаться будет по KEYDOWN с соответствующим кодом, а выключаться по KEYUP.
Т.е. добавится состояние, немного усложнится цикл обработки нажатий кнопок, и все.

Фактически можно вместо специальной переменной использовать переменную, в которой лежит картинка и по событию клавишь просто подгружать другую картинку. Но это не позволит анализировать "нажата ли кнопка хотьбы". А такой анализ может потребоваться!
 

Socket

Пользователь
Решил написать простенькую прогу, последовательно проигрывающую wav файлы.
С помощью модуля pygame все делается просто:
Код:
import pygame
pygame.init()
pygame.mixer.Sound('1.wav').play()
Если все это выполнять в питоновской консоли, т.е.:
Код:
[maxi@localhost test_wav]$ python
Python 2.6.2 (r262:71600, Jan 25 2010, 18:46:45) 
[GCC 4.4.2 20091222 (Red Hat 4.4.2-20)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
>>> pygame.init()
(6, 0)
>>> pygame.mixer.Sound('1.wav').play()
<Channel object at 0xb77eb180>
>>> exit()
[maxi@localhost test_wav]$
- все работает. Файл воспроизводится.
Если же поместить этот код в файл (например test_wav.py), и выполнить
Код:
python test_wav.py
- ничего не происходит :), хотя функции возвращают нормальные значения.
В чем соль?
 

pkv

Vega-Service, LLC
Команда форума
Сотрудники Вега-Интернет
Решил написать простенькую прогу, последовательно проигрывающую wav файлы.
С помощью модуля pygame все делается просто:
Код:
import pygame
pygame.init()
pygame.mixer.Sound('1.wav').play()
Если все это выполнять в питоновской консоли, т.е.:
Код:
[maxi@localhost test_wav]$ python
Python 2.6.2 (r262:71600, Jan 25 2010, 18:46:45) 
[GCC 4.4.2 20091222 (Red Hat 4.4.2-20)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
>>> pygame.init()
(6, 0)
>>> pygame.mixer.Sound('1.wav').play()
<Channel object at 0xb77eb180>
>>> exit()
[maxi@localhost test_wav]$
- все работает. Файл воспроизводится.
Если же поместить этот код в файл (например test_wav.py), и выполнить
Код:
python test_wav.py
- ничего не происходит :), хотя функции возвращают нормальные значения.
В чем соль?


#!/usr/bin/python
в первой строчке не забыли?
chmod +x на скрипт
 
Сверху