# Гра. Стрибучий м'яч
Розробимо гру з стрибаючим м'ячем і ракеткою. М'яч буде літати по екрану, а гравець - відбивати його ракеткою. Якщо м'яч торкнеться нижньої межі екрану, гра завершиться. На малюнку лівопуч показано, як буде виглядати закінчена гра.
Хоча на перший погляд гра досить проста, її код буде складнішим, ніж всі, що ми писали досі,
оскільки програма повинна виконувати багато різних дій.
Наприклад, потрібно анімувати ракетку і м'яч, а також обробляти зіткнення м'яча з ракеткою і контролювати границі ігрового поля.
#
from tkinter import*
import random
import time
class Ball: # м'яч
def __init__(self, canvas, paddle, color):
self.canvas = canvas
self.paddle = paddle
self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
self.canvas.move(self.id, 245, 100)
starts = [-3, -2, -1, 1, 2, 3]
random.shuffle(starts)
self.x = starts[0]
self.y = -3
self.canvas_height = self.canvas.winfo_height()
self.canvas_width = self.canvas.winfo_width()
self.hit_bottom = False
def hit_paddle(self, pos):
paddle_pos = self.canvas.coords(self.paddle.id)
if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
return True
return False
def draw(self):
self.canvas.move(self.id, self.x, self.y)
pos = self.canvas.coords(self.id)
if pos[1] <= 0:
self.y = 3
if pos[3] >= self.canvas_height:
self.hit_bottom = True
if self.hit_paddle(pos) == True:
self.y = -3
if pos[0] <= 0:
self.x = 3
if pos[2] >= self.canvas_width:
self.x = -3
class Paddle: # ракетка
def __init__(self, canvas, color):
self.canvas = canvas
self.id = canvas.create_rectangle(0, 0, 250, 10, fill=color)
self.canvas.move(self.id, 200, 300)
self.x = 0
self.canvas_width = self.canvas.winfo_width()
self.canvas.bind_all('<KeyPress-Left>', self.turn_left)
self.canvas.bind_all('<KeyPress-Right>', self.turn_right)
def draw(self):
self.canvas.move(self.id, self.x, 0)
pos = self.canvas.coords(self.id)
if pos[0] <= 0:
self.x = 0
elif pos[2] >= self.canvas_width:
self.x = 0
def turn_left(self, evt):
self.x = -2
def turn_right(self, evt):
self.x = 2
tk = Tk()
tk.title("Гра")
tk.resizable(False, False) # не змінювати розміри вікна
tk.wm_attributes("-topmost", 1) # wm - віконний менеджер(вікно # поверх всіх вікон)
canvas = Canvas(tk, width=500, height=400, # полотно для гри
bd=0, # товщина контуру полотна = 0
highlightthickness=0) # товщина підсвітки контуру
canvas.pack()
tk.update() # уможливлення анімації
paddle = Paddle(canvas, 'blue') # створення об'єкта ракетка
ball = Ball(canvas, paddle, 'red') # створення об'єкта м'яч
while True:
if ball.hit_bottom == False:
ball.draw()
paddle.draw()
tk.update_idletasks()
tk.update()
time.sleep(0.015)
Розробимо гру з стрибаючим м'ячем і ракеткою. М'яч буде літати по екрану, а гравець - відбивати його ракеткою. Якщо м'яч торкнеться нижньої межі екрану, гра завершиться. На малюнку лівопуч показано, як буде виглядати закінчена гра.
Хоча на перший погляд гра досить проста, її код буде складнішим, ніж всі, що ми писали досі,
оскільки програма повинна виконувати багато різних дій.
Наприклад, потрібно анімувати ракетку і м'яч, а також обробляти зіткнення м'яча з ракеткою і контролювати границі ігрового поля.
#
from tkinter import*
import random
import time
class Ball: # м'яч
def __init__(self, canvas, paddle, color):
self.canvas = canvas
self.paddle = paddle
self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
self.canvas.move(self.id, 245, 100)
starts = [-3, -2, -1, 1, 2, 3]
random.shuffle(starts)
self.x = starts[0]
self.y = -3
self.canvas_height = self.canvas.winfo_height()
self.canvas_width = self.canvas.winfo_width()
self.hit_bottom = False
def hit_paddle(self, pos):
paddle_pos = self.canvas.coords(self.paddle.id)
if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
return True
return False
def draw(self):
self.canvas.move(self.id, self.x, self.y)
pos = self.canvas.coords(self.id)
if pos[1] <= 0:
self.y = 3
if pos[3] >= self.canvas_height:
self.hit_bottom = True
if self.hit_paddle(pos) == True:
self.y = -3
if pos[0] <= 0:
self.x = 3
if pos[2] >= self.canvas_width:
self.x = -3
class Paddle: # ракетка
def __init__(self, canvas, color):
self.canvas = canvas
self.id = canvas.create_rectangle(0, 0, 250, 10, fill=color)
self.canvas.move(self.id, 200, 300)
self.x = 0
self.canvas_width = self.canvas.winfo_width()
self.canvas.bind_all('<KeyPress-Left>', self.turn_left)
self.canvas.bind_all('<KeyPress-Right>', self.turn_right)
def draw(self):
self.canvas.move(self.id, self.x, 0)
pos = self.canvas.coords(self.id)
if pos[0] <= 0:
self.x = 0
elif pos[2] >= self.canvas_width:
self.x = 0
def turn_left(self, evt):
self.x = -2
def turn_right(self, evt):
self.x = 2
tk = Tk()
tk.title("Гра")
tk.resizable(False, False) # не змінювати розміри вікна
tk.wm_attributes("-topmost", 1) # wm - віконний менеджер(вікно # поверх всіх вікон)
canvas = Canvas(tk, width=500, height=400, # полотно для гри
bd=0, # товщина контуру полотна = 0
highlightthickness=0) # товщина підсвітки контуру
canvas.pack()
tk.update() # уможливлення анімації
paddle = Paddle(canvas, 'blue') # створення об'єкта ракетка
ball = Ball(canvas, paddle, 'red') # створення об'єкта м'яч
while True:
if ball.hit_bottom == False:
ball.draw()
paddle.draw()
tk.update_idletasks()
tk.update()
time.sleep(0.015)
Комментариев нет:
Отправить комментарий