Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 25, 2012 10:29:33

Vadimoto
Зарегистрирован: 2012-11-11
Сообщения: 17
Репутация: +  -3  -
Профиль   Отправить e-mail  

Движение

Окружность постоянно двигается по горизонтали
или по вертикале. Нажатие клавиши W изменяет
направление движения на вверх, нажатие S
изменяет направление движения на вниз,
соответственно A на лево, а D на право

Офлайн

#2 Ноя. 25, 2012 11:23:37

tolen.maksut
Зарегистрирован: 2012-10-31
Сообщения: 11
Репутация: +  0  -
Профиль  

Движение

я могу сделать на PyGame-е… выложить код?

Отредактировано tolen.maksut (Ноя. 25, 2012 12:30:27)

Офлайн

#3 Ноя. 25, 2012 11:24:59

Vadimoto
Зарегистрирован: 2012-11-11
Сообщения: 17
Репутация: +  -3  -
Профиль   Отправить e-mail  

Движение

буду очень благодарен вам)

Офлайн

#4 Ноя. 25, 2012 11:56:52

tolen.maksut
Зарегистрирован: 2012-10-31
Сообщения: 11
Репутация: +  0  -
Профиль  

Движение

вот код, но для этого вам понадобится модуль PyGame
и фото в *.png формате

import sys, pygame, pygame.mixer
from pygame.locals import *
pygame.init();
size = width, height = 600,400#window size
black = 200,0,255#color of background
screen = pygame.display.set_mode(size)#display screen
tux = pygame.image.load('delete.png')#load image
x = 200
y = 200
r = 0
up = True
down = True
right = True
left = True
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit(0)
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN or event.key == pygame.K_s:
                down = False
                up = True
                right = True
                left = True
            elif event.key == pygame.K_UP or event.key == pygame.K_w:
                up = False
                down = True
                right = True
                left = True
            elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:
                right = False
                down = True
                up = True
                left = True
            elif event.key == pygame.K_LEFT or event.key == pygame.K_a:
                left = False
                down = True
                right = True
                up = True
    if down == False:
        y = y + 0.2
    elif up == False:
        y = y - 0.2
    elif right == False:
        x = x + 0.2
    elif left == False:
        x = x - 0.2
    screen.fill((r,0,0))# repaint()     
    screen.blit(tux,(x, y))#location of image 
    pygame.display.flip()#display image
   
   

Отредактировано tolen.maksut (Ноя. 25, 2012 12:29:06)

Офлайн

#5 Ноя. 25, 2012 12:15:48

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Движение

на ткинтере

import Tkinter as t
W = 800
H = 600
vector = (0,0)
def keyPress(e):
    global vector
    key = e.char.lower()
    if key == "w":
        vector = (0,-3)
    elif key == "s":
        vector = (0,3)
    if key == "a":
        vector = (-3,0)
    elif key == "d":
        vector = (3,0)
    elif key == " ":
        vector = (0,0)
 
 
def tick():
    app.after(20,tick)
    canv.move(iCircle,*vector)
    x,y,_,_  = canv.coords(iCircle)
    if x<0:
        canv.move(iCircle,W,0)
    if x>W:
        canv.move(iCircle,-W,0)
    if y> H:
        canv.move(iCircle,0,-H)
    if y< 0:
        canv.move(iCircle,0,H)
 
 
app = t.Tk()
app.bind("<Key>", keyPress)
canv = t.Canvas(app,width = W, height = H)
canv.pack()
iCircle = canv.create_oval(0,0,10,10)
tick()
app.mainloop()



Офлайн

#6 Ноя. 25, 2012 15:19:45

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Движение

sp3
По моему мнению, вместо:

key = e.char.lower()
Лучше использовать:
key = e.keycode
В этом случае действие не будет зависить от раскладки клавиатуры.

Только придется предварительно узнать кода клавиш
def keyPress(e):
    print e.keycode
Или посмотреть их в таблице к Tkinter…



Офлайн

#7 Ноя. 25, 2012 15:25:37

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Движение

sp3, я не придираюсь. Понимаю, что листинг написан по-быстрому, но надо бы попробовать сделать листинг без постоянного вызова функции для анализа местоположения (функция tick вызывается сама себя каждые 20 мс)… Но сейчас мне просто лень. Может вечером попробую.



Отредактировано 4kpt (Ноя. 25, 2012 15:26:59)

Офлайн

#8 Ноя. 26, 2012 09:21:52

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Движение

Модератор: Тема перемещена в центр помощи

Со всеми последующими темами, в которых автор просит налабать ему готовый код буду поступать так же



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version