Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2015 14:04:22

Poputchik77
Зарегистрирован: 2015-04-18
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Замкнутая функция

В наличии замкнутая функция (появление шаров на игровом экране) она работает в паре с функцией щелчка мыши(идет подсчет попаданий, промахов, упущеных шаров) требуется добавить окончание игры по времени, по очкам или по количеству выстрелов. Не получается вставить цикл в функции, прога продолжает кидать шары (т.к. функция закольцована) Если разомкнуть функцию появления шара а в функцию клика добавить условия, то шар появляется только по клику. В общем 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()

Офлайн

#2 Авг. 23, 2015 15:02:22

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Замкнутая функция

А что такое есть “замкнутая функция”?



Офлайн

#3 Авг. 23, 2015 15:10:45

Poputchik77
Зарегистрирован: 2015-04-18
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Замкнутая функция

Да сам ее так обозвал, она сама себя запускает, получается бесконечное воспроизводство, но не цикл, смотри код. Все ребята разобрался. Игра закончится по набору 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()

Офлайн

#4 Авг. 23, 2015 15:12:23

Poputchik77
Зарегистрирован: 2015-04-18
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Замкнутая функция

Просто надо было добавить условие разрыва функции и сделать доступ к этой глобальной переменной из функции

Офлайн

#5 Авг. 23, 2015 16:57:04

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Замкнутая функция

Poputchik77
уау, вы открыли для себя рекурсию. Сколько еще открытий чудных…
Успехов в обучении!



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Авг. 23, 2015 16:59:15

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Замкнутая функция

Poputchik77
ах да, что бы еще больше васс просвятить почитайте что такое замыкание



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Авг. 23, 2015 19:24:21

Poputchik77
Зарегистрирован: 2015-04-18
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Замкнутая функция

Спасиб

Офлайн

#8 Авг. 31, 2015 11:28:59

Manu_Vilks.Py
Зарегистрирован: 2015-08-27
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Замкнутая функция

Poputchik77
Да сам ее так обозвал, она сама себя запускает, получается бесконечное воспроизводство, но не цикл, смотри код. Все ребята разобрался. Игра закончится по набору 20 баллов.
Если кликать по одному шарику незколько раз то колво-очков увеличивается
Так и было задуманно?

Отредактировано Manu_Vilks.Py (Авг. 31, 2015 11:30:41)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version