2016-02-05 4 views
-1

Я создаю игру в Python (tkinter), но я никогда не писал на Python раньше. Объектов я пытаюсь переместить овалы называемых «мина»Перемещение объектов в python?

def create_mines(): 
    x1 = randint(600,800) 
    y1 = randint(600,800) 
    x2 = randint(600,800) 
    y2 = randint(600,800) 
    r = randint(5,100) 
    mine = c.create_oval(x1,y1, x2, y2) 
    bubble_r.append(r) 
    bubble_id.append(mine) 

имени список bubble_id, и каждая шахта находится в списке. Я пытаюсь переместить овалы на вершину холста, и мои инструкции - переместить их с помощью цикла for. Использую ли цикл for для перемещения по списку? И как я могу обеспечить, чтобы мины продолжали двигаться вверх во время выполнения программы? Кроме того, базовый код, который мне предоставлен, не принимает никаких параметров.

ответ

0

Вы используете цикл for, чтобы создать больше мин и просмотреть список с минами.

Вы должны использовать root.after для повторного запуска функции, которая перемещает мины с небольшим шагом. Таким образом, вы не останавливаете mainloop.

import tkinter as tk 
import random 

# --- functions --- 

def create_mines(canvas): 

    bubbles = [] 

    for __ in range(10): 

     x = random.randint(0, 400) 
     y = random.randint(0, 400) 
     r = random.randint(5, 10) 

     mine = canvas.create_oval(x-r, y-r, x+r, y+r) 

     bubbles.append([mine, r]) 

    return bubbles 


def moves_mines(canvas, bubbles): 

    for mine, r in bubbles: 

     #canvas.move(mine, 0, -1) 

     # get position 
     x1, y1, x2, y2 = canvas.coords(mine) 

     # change 
     y1 -= 1 
     y2 -= 1 

     # if top then move to the bottom 
     if y2 <= 0: 
      y1 = 300 
      y2 = y1 + 2*r 

     # set position 
     canvas.coords(mine, x1, y1, x2, y2) 

    # run after 40ms - it gives 25FPS 
    root.after(40, moves_mines, canvas, bubbles) 

# --- main --- 

root = tk.Tk() 

canvas = tk.Canvas(root) 
canvas.pack() 

bubbles = create_mines(canvas) 

# run after 40ms - it gives 25FPS 
root.after(40, moves_mines, canvas, bubbles) 

root.mainloop() 
Смежные вопросы