Найти - Пользователи
Полная версия: Pygame игра с шариками
Начало » Python для новичков » Pygame игра с шариками
1
Alexey_88
Всем доброго времени суток. Недавно начал изучать программирование, и питон. Пытаюсь заниматься по курсу Т. Хирьянова из МФТИ. Имеется некий код с игрой, она называется “Поймай шарик”. Там рандомно появляются шары, и при щелке мыши в командной строке пишется слово “Click”. Данную программу необходимо доделать, используя знания полученные в прошлых лекциях. Необходимо при щелчке мышкой по шарику определять попал ты или нет. Также осуществить подсчет очков. Всё это вроде бы понятно. Вот код, который описывает эти действия:
 import pygame
from pygame.draw import *
from random import randint
pygame.init()
FPS = 1
screen = pygame.display.set_mode((1200, 900))
RED = (255, 0, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
GREEN = (0, 255, 0)
MAGENTA = (255, 0, 255)
CYAN = (0, 255, 255)
BLACK = (0, 0, 0)
COLORS = [RED, BLUE, YELLOW, GREEN, MAGENTA, CYAN]
def new_ball():
    global x, y, r
    x = randint(100,700)
    y = randint(100,500)
    r = randint(30,50)
    color = COLORS[randint(0, 5)]
    circle(screen, color, (x, y), r)
def click(event):
    print(x, y, r)
pygame.display.update()
clock = pygame.time.Clock()
finished = False
A = []
n = 0
while not finished:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            finished = True
        elif event.type == pygame.MOUSEBUTTONDOWN:
            A = pygame.mouse.get_pos()
            x1 = A[0]
            y1 = A[1]
            if ((x1-x)**2 + (y1-y)**2)**0.5 <= r:
                print('goal')
                n+=1
            else:
                print('miss')
    new_ball()
    pygame.display.update()
    screen.fill(BLACK)
pygame.quit()
print('Количество очков', n)

Далее нужно сделать так, чтоб шар двигался в произвольном направлении и отталкивался от стен.
Вот код, пришлось убрать функцию появления шарика, так как что-то не удалось заставить его двигаться через функцию.
import pygame
from pygame.draw import *
from random import randint
pygame.init()

FPS = 200
screen = pygame.display.set_mode((1200, 900))

RED = (255, 0, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
GREEN = (0, 255, 0)
MAGENTA = (255, 0, 255)
CYAN = (0, 255, 255)
BLACK = (0, 0, 0)
COLORS = [RED, BLUE, YELLOW, GREEN, MAGENTA, CYAN]
x = 100
y = 100
r = 50
dx = 1
dy = 1
def click(event):
print(x, y, r)

pygame.display.update()
clock = pygame.time.Clock()
finished = False
A = []
n = 0

while not finished:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
finished = True

elif event.type == pygame.MOUSEBUTTONDOWN:
A = pygame.mouse.get_pos()
x1 = A[0]
y1 = A[1]
if ((x1-x)**2 + (y1-y)**2)**0.5 <= r:
print('goal')
n+=1
else:
print('miss')
x += dx
y += dy

circle(screen, RED, (x, y), r)
if x >= 1150 or x < 50:
dx *= -1
if y >= 850 or y < 50:
dy *= -1
pygame.display.update()
screen.fill(BLACK)
pygame.quit()
print('Количество очков', n)
И вот теперь самый главный вопрос, как сделать так, чтобы по экрану каталось несколько шариков в произвольных направлениях?
Находил решения, но через классы, но классы еще не проходили до этого задания. Буду признателен за наводящие подсказки или может быть псевдокод для этих функций.
PEHDOM
Alexey_88
как сделать так, чтобы по экрану каталось несколько шариков в произвольных направлениях?
Находил решения, но через классы, но классы еще не проходили до этого задания. Буду признателен за наводящие подсказки или может быть псевдокод для этих функций.
Списки/словари. Каждый шарик храниться в списке , назовем его balls, например.
Каждый шарик представляет собой словарь с ключами : X,Y,dX,dY, color.. ну и еще что там дожно быть.
функция new_ball делает все тоже что и делала, но вместо глобальных обьектов x, y… создает словарь с ключами X,Y… и возвращает его. Потом помещаем словарь в список balls
В цикле событий проходите по каждому элементу(котороый является словарем) списка balls, и перемещаете шарики согласно значениям ключей dX,dY из словаря для каждого конкретного шарика.
Alexey_88
PEHDOM
функция new_ball делает все тоже что и делала, но вместо глобальных обьектов x, y… создает словарь с ключами X,Y… и возвращает его
balls = [  ]
def new_ball():
ball = {x:randint(100,500), y:randint(100,500), dx:1, dy:1, COLORS:RED, r:50}
circle(screen, RED, (x, y), r)
return(ball)
balls.append(ball)
Если я правильно понял, то это делается так? Или словарь ball мы создаем вне тела функции, а в функции создаем еще один словарь?
PEHDOM
Alexey_88
Если я правильно понял, то это делается так?
Alexey_88, да ,пока все правильно. Только balls.append(new_ball())
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