Форум сайта python.su
Всем доброго времени суток. Недавно начал изучать программирование, и питон. Пытаюсь заниматься по курсу Т. Хирьянова из МФТИ. Имеется некий код с игрой, она называется “Поймай шарик”. Там рандомно появляются шары, и при щелке мыши в командной строке пишется слово “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)
Офлайн
Alexey_88Списки/словари. Каждый шарик храниться в списке , назовем его balls, например.
как сделать так, чтобы по экрану каталось несколько шариков в произвольных направлениях?
Находил решения, но через классы, но классы еще не проходили до этого задания. Буду признателен за наводящие подсказки или может быть псевдокод для этих функций.
[code python][/code]
Отредактировано PEHDOM (Дек. 24, 2020 20:53:13)
Офлайн
PEHDOM
функция new_ball делает все тоже что и делала, но вместо глобальных обьектов x, y… создает словарь с ключами X,Y… и возвращает егоЕсли я правильно понял, то это делается так? Или словарь ball мы создаем вне тела функции, а в функции создаем еще один словарь?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)
Отредактировано Alexey_88 (Дек. 27, 2020 14:46:38)
Офлайн
Alexey_88Alexey_88, да ,пока все правильно. Только balls.append(new_ball())
Если я правильно понял, то это делается так?
[code python][/code]
Отредактировано PEHDOM (Янв. 8, 2021 12:47:39)
Офлайн