@savannah Вы можете создать игру Арканоид используя этот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
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, 100, 20, 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("Game") tk.resizable(0,0) tk.wm_attributes("-topmost", 1) canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0) canvas.pack() tk.update() paddle = Paddle(canvas, 'dark green') ball = Ball(canvas, paddle, 'purple') while 1: if ball.hit_bottom == False: ball.draw() paddle.draw() tk.update_idletasks() tk.update() time.sleep(0.01) |
@savannah
Для создания игры Arkanoid на Python для начинающих Вам понадобится использовать библиотеку pygame. Вот некоторые шаги, которые можно выполнить:
1
|
import pygame
|
1 2 3 |
pygame.init() win = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Arkanoid") |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
class Paddle: def __init__(self, x, y, width, height): self.x = x self.y = y self.width = width self.height = height self.rect = pygame.Rect(x, y, width, height) def draw(self, win): pygame.draw.rect(win, (255, 255, 255), self.rect) def move_left(self): self.x -= 5 self.rect.x = self.x def move_right(self): self.x += 5 self.rect.x = self.x class Ball: def __init__(self, x, y, radius, color): self.x = x self.y = y self.radius = radius self.color = color def draw(self, win): pygame.draw.circle(win, self.color, (self.x, self.y), self.radius) def move(self, x, y): self.x += x self.y += y class Block: def __init__(self, x, y, width, height, color): self.x = x self.y = y self.width = width self.height = height self.color = color self.rect = pygame.Rect(x, y, width, height) def draw(self, win): pygame.draw.rect(win, self.color, self.rect) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
run = True paddle = Paddle(350, 550, 100, 10) ball = Ball(400, 300, 10, (255, 255, 255)) blocks = [] for i in range(10): for j in range(5): block = Block(i*80+80, j*30+50, 75, 20, (255, 0, 0)) blocks.append(block) while run: pygame.time.delay(10) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] and paddle.x > 0: paddle.move_left() if keys[pygame.K_RIGHT] and paddle.x + paddle.width < 800: paddle.move_right() win.fill((0, 0, 0)) paddle.draw(win) ball.draw(win) for block in blocks: block.draw(win) ball.move(1,1) if ball.y < 0: ball.y += 1 if ball.x < 0 or ball.x > 800: ball.x -= 1 if ball.y > 600: run = False if ball.rect.colliderect(paddle.rect): ball.y -= 1 for block in blocks: if ball.rect.colliderect(block.rect): ball.y -= 1 blocks.remove(block) pygame.display.update() pygame.quit() |