Найти - Пользователи
Полная версия: Замкнутая функция
Начало » Python для новичков » Замкнутая функция
1
Poputchik77
В наличии замкнутая функция (появление шаров на игровом экране) она работает в паре с функцией щелчка мыши(идет подсчет попаданий, промахов, упущеных шаров) требуется добавить окончание игры по времени, по очкам или по количеству выстрелов. Не получается вставить цикл в функции, прога продолжает кидать шары (т.к. функция закольцована) Если разомкнуть функцию появления шара а в функцию клика добавить условия, то шар появляется только по клику. В общем Help me 3 дня не могу выход найти.
from tkinter import *
from random import randrange as rnd, choice
import time
root = Tk()
root.geometry('800x600')
root.title("Поймай шарик!")
canv = Canvas(root,width=800,height=550,bg='lightblue')
canv.pack()

colors = ['lightyellow','lightgray','gray','pink','violet','brown','red','orange','yellow','green','cyan','blue','magenta','black','gray','lightgreen']
x = 0
y = 0
r = 0
points =0
miss = 0
zero = 0
def new_ball():
global x, y, r, zero, res
canv.delete(ALL)
res = canv.create_text(300,20,text="заработал " + str(points)+ " очков"
+'/'+"промазал "+str(miss)+" раз"+'/'+
"проворонил "+str(zero)+" шаров", font = 'Arial 15')
x = rnd(100,700)
y = rnd(100,500)
r = rnd(20,50)
target = canv.create_oval(x-r,y-r,x+r,y+r,fill = choice(colors), width=0)
root.after(rnd(500, 3000),new_ball)
zero+=1
def click(event):
global points, miss, zero, res
if abs(x-event.x) < r/2 and abs(y-event.y)<r/2:
points += 2
zero-=1
elif abs(x-event.x) < r and abs(y-event.y)<r:
points += 1
zero-=1
else:
miss += 1
canv.delete(ALL)
res = canv.create_text(300,20,text="заработал " + str(points)+ " очков"
+'/'+"промазал "+str(miss)+"раз "+'/'+
"проворонил "+str(zero)+" шаров", font = 'Arial 15')

root.after(1000,new_ball)
canv.bind('<Button-1>',click)
mainloop()
FishHook
А что такое есть “замкнутая функция”?
Poputchik77
Да сам ее так обозвал, она сама себя запускает, получается бесконечное воспроизводство, но не цикл, смотри код. Все ребята разобрался. Игра закончится по набору 20 баллов.
 from tkinter import *
from random import randrange as rnd, choice
import time
root = Tk()
root.geometry('800x600')
root.title("Поймай шарик!")
canv = Canvas(root,width=800,height=550,bg='lightblue')
canv.pack()
colors = ['lightyellow','lightgray','gray','pink','violet','brown','red','orange','yellow','green','cyan','blue','magenta','black','gray','lightgreen']
x = 0
y = 0
r = 0
points = 0
miss = 0
zero = 0
def new_ball():
global x, y, r, zero, res, points
canv.delete(ALL)
res = canv.create_text(300,20,text="заработал " + str(points)+ " очков"
+'/'+"промазал "+str(miss)+" раз"+'/'+
"проворонил "+str(zero)+" шаров", font = 'Arial 15')
x = rnd(100,700)
y = rnd(100,500)
r = rnd(20,50)
target = canv.create_oval(x-r,y-r,x+r,y+r,fill = choice(colors), width=2)
if points < 20:
root.after(rnd(500, 3000),new_ball)
else:
canv.delete(ALL)
res = canv.create_text(350,250,text="Вы выйграли! Вы наколотили: " +
str(points)+ " балла(ов)", font = 'Arial 25')
zero+=1
def click(event):
global points, miss, zero, res, xz
if abs(x-event.x) < r/2 and abs(y-event.y)<r/2:
points += 2
zero-=1
elif abs(x-event.x) < r and abs(y-event.y)<r:
points += 1
zero-=1
else:
miss += 1
canv.delete(ALL)
res = canv.create_text(300,20,text="заработал " + str(points)+ " очков"
+'/'+"промазал "+str(miss)+" раз"+'/'+
"проворонил "+str(zero)+" шаров", font = 'Arial 15')
root.after(1000,new_ball)
canv.bind('<Button-1>',click)
mainloop()
Poputchik77
Просто надо было добавить условие разрыва функции и сделать доступ к этой глобальной переменной из функции
JOHN_16
Poputchik77
уау, вы открыли для себя рекурсию. Сколько еще открытий чудных…
Успехов в обучении!
JOHN_16
Poputchik77
ах да, что бы еще больше васс просвятить почитайте что такое замыкание
Poputchik77
Спасиб
Manu_Vilks.Py
Poputchik77
Да сам ее так обозвал, она сама себя запускает, получается бесконечное воспроизводство, но не цикл, смотри код. Все ребята разобрался. Игра закончится по набору 20 баллов.
Если кликать по одному шарику незколько раз то колво-очков увеличивается
Так и было задуманно?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB