Игра на Python за 10 минут | TKinter

preview_player
Показать описание
В данном уроке мы за 10 минут создадим игру Поймай шарик на языке Python используя встроенную библиотеку TKinter которая служит для создания GUI приложений.

Пишем игру «Поймай шарик».
Суть игры довольна проста. Необходимо поймать шарик, который случайным образом
появляется на холсте на несколько мгновений. Но на примере подобной игры можно создавать
свои. Например, тир, охота на уток, стрелялки и т.д.
Поэтому мы поступим следующим образом. Вместе напишем движок – рабочий код для
реализации данной программы, а дальнейшие «навороты» вы придумаете сами.
Рекомендации по теме
Комментарии
Автор

Здравствуйте, можно ли вместо шарика на который нажимает игрок, добавить изображение? Если да то подскажите пожалуйста как)

quix.
Автор

успел до 10к подписот спасибо за контент

demare
Автор

Немного модернизации на это же идее
from tkinter import *
from random import *
window = Tk()
# Размеры и положение
window.title("Поймай шарик")
c=Canvas(window, width=600, height=600, bg='lightblue')
p=Canvas(window, width=600, height=100, bg='lightgreen')
c.pack(); p.pack()
colors=['green', 'red', 'blue', 'orange', 'yellow', 'purple']
words=['Лови', 'Ну же', 'Ты можешь', 'Давай еще',
'Ты точно туда нажал?', 'Ты чемпион',
'Да левая клавиша а не правая ;)']
k=0
def ball():
global k
c.delete(ALL)
x=randint(10, 580)
y=randint(10, 580)
r=randint(5, 50)
new_ball=c.create_oval(x, y, x+r, y+r, fill=choice(colors))
c.tag_bind(new_ball, '<Button-1>', click)
window.after(4000-k*50, ball)
c.create_text(250, 15, font='Arial 18', text=choice(words))
def click(event):
global k
k= k + 1
p.delete(ALL)
p.create_text(80, 30, font='Arial 18', text='Попаданий: '+str(k))
if k>30:
p.create_text(200, 50, font='Arial 16', text='Уже сложнее? ;)')
if k>50:
p.create_text(200, 70, font='Arial 14', text='Спорим что не наберешь 80? ;)')
ball()
p.create_text(200, 30, font='Arial 18', text='Нажимай на шарик и выигрывай')
window.mainloop()

NikolayUchitel
Автор

у меня ошибку говорит в click_on_circle

twentymisha
Автор

а как остановить код допустим уже 20 попаданий и нужно что бы код остановился

rhniter
Автор

Здравствуйте, конечно простите за вопрос, но как увеличить скорость смены позиции

dwmjnxn
Автор

а как сделать картинку вместо шарика а ?

HardDima
Автор

Да, я дибил. Пишу огромные игры-проекты на tkinter где-то в разделе 3-4х тысяч строк и получается все равно дичь. Планирую перейти на ursina engine, ведь на tkinter делать платформеры с элементами шутера практически не реально.

missclickerbedwars
Автор

А что если сделать так?

from tkinter import *
import random

def create_cricle():
global radius, cricle, color_cricle
posx = random.randrange(0, 470)
posy = random.randrange(0, 370)
color = random.choice(color_cricle)
cricle = canvas.create_oval(posx, posy, posx + radius, posy + radius, fill=color, width=0)

def game():
global time
time += 1
if time == 1500:
time = 0
canvas.delete(cricle)
create_cricle()
canvas.tag_bind(cricle, "<Button-1>", tag_cricle)
canvas.after(1, game)

def tag_cricle(event):
global time, text, text_ball, Ball
time = 0
canvas.delete(cricle, text)
Ball += 1
text_ball = "Вы поймали " + str(Ball) + " шариков"
text=canvas.create_text(250, 500, text = text_ball, font="Arial 30")
create_cricle()




root = Tk()
root.title("Помай шарик")
canvas = Canvas(root, width=500, height=600, bg="white")
canvas.pack()
canvas.create_rectangle(0, 400, 500, 600, fill="yellow", width="0")
Ball = 0
text_ball = "Вы поймали " + str(Ball) + " шариков"
text=canvas.create_text(250, 500, text = text_ball, font="Arial 30")

color_cricle = ["blue", "red", "green", "orange", "yellow"]
radius = 30
time = 0

create_cricle()


canvas.after(1, game)
root.mainloop()
from tkinter import *
import random

def create_cricle():
global radius, cricle, color_cricle
posx = random.randrange(0, 470)
posy = random.randrange(0, 370)
color = random.choice(color_cricle)
cricle = canvas.create_oval(posx, posy, posx + radius, posy + radius, fill=color, width=0)

def game():
global time
time += 1
if time == 1500:
time = 0
canvas.delete(cricle)
create_cricle()
canvas.tag_bind(cricle, "<Button-1>", tag_cricle)
canvas.after(1, game)

def tag_cricle(event):
global time, text, text_ball, Ball
time = 0
canvas.delete(cricle, text)
Ball += 1
text_ball = "Вы поймали " + str(Ball) + " шариков"
text=canvas.create_text(250, 500, text = text_ball, font="Arial 30")
create_cricle()




root = Tk()
root.title("Помай шарик")
canvas = Canvas(root, width=500, height=600, bg="white")
canvas.pack()
canvas.create_rectangle(0, 400, 500, 600, fill="yellow", width="0")
Ball = 0
text_ball = "Вы поймали " + str(Ball) + " шариков"
text=canvas.create_text(250, 500, text = text_ball, font="Arial 30")

color_cricle = ["blue", "red", "green", "orange", "yellow"]
radius = 30
time = 0

create_cricle()


canvas.after(1, game)
root.mainloop()

ДанилаХлопцев
Автор

как программисты умудряются запоминать такой большой код?

demare
Автор

Привет, надеюсь кто то поможет мне с моей проблемой. Проблема такова, у меня есть картинка, на картинку наложил квадрат, ну rectangle все идеально, но, когда я передвигаюсь к еде которая спавнится я не знаю как ее съесть, просто я вхожу в еду, я хотел что то сделать но не получается( Надеюсь поможете. Спасибо!

Serene_Sage
Автор

Вот куда можно загрузить персонажа-вируса, который получился случайно по одному из ваших видеороликов)

qhpgevp
Автор

У меня этот код не работает. Почему? Можете помочь?

import random
from tkinter import *
window = Tk()
window.title("Ball")
c=Canvas(window, width=600, height=600, bg="white")
p=Canvas(window, width=600, height=100, bg="orange")
c.pack
p.pack
colors=['green', 'red', 'blue', 'orange']
count=0

def ball():
c.delete(ALL)
x = random.randint(10, 580)
y = random.randint(10, 580)
r=30
new_ball = c.create_oval(x, y, x+r, y+r, fill=random.choice(colors), width=0)
c.tag_bind(new_ball, '<Button-1>', click_on_circle)
window.after(1500, ball)
def click_on_circle(event):
global count
count= count + 1
print(str(count))
p.delete(ALL)
p.create_text(80, 30, font='Arial 18', text='Ball')
p.create_text(180, 30, font='Arial 20', text=str(count))

ball()
window.mainloop()

danylokravchuk