Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2020 December 08

a

arnold in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
#Вопрос 3 ЛАБА  Сделать игру с шариками
Столкновение с стенками шаров осуществил , а вот как осуществить столкновение шаров с шарами никто не подскажет примерно?
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
arnold
#Вопрос 3 ЛАБА  Сделать игру с шариками
Столкновение с стенками шаров осуществил , а вот как осуществить столкновение шаров с шарами никто не подскажет примерно?
в чем вопрос
источник

OM

Oleg Makarikhin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
std::slavik
в чем вопрос
два объекта типа turtle ( направление, скорость) t1,t2  "сталкиваются". какие они должны получить "направления,скорость" после столкновения.
источник

a

arnold in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Oleg Makarikhin
два объекта типа turtle ( направление, скорость) t1,t2  "сталкиваются". какие они должны получить "направления,скорость" после столкновения.
Нет не turtle , pygame
 import pygame
from pygame.draw import *
from random import randint
import math

pygame.init()

FPS=20
screen=pygame.display.set_mode((900, 600))

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]
score=0
n=7
SPEED=10

list_ball=[0] * n


def click(position):
   global score
   for i in range(n):
       T = list_ball[i]
       (x, y, r, color, x_forward, y_forward)=T
       up=x+r
       down=x-r
       left=y-r
       right=y+r
       if position [0] < up and position [0] > down and position [1] < right and position [1] > left:
           score+=1
           print(score)


def new_ball():
   global x, y, r

   for i in range(n):
       x=randint(100, 800)
       y=randint(100, 500)
       r=randint(10, 50)
       color=COLORS [randint(0, 5)]
       alpha=randint(0, 360)
       x_forward=SPEED * math.cos(alpha)
       y_forward=SPEED * (math.sin(alpha) * math.pi / 2)
       circle(screen, color, (x, y), r)
       list_ball [i]= (x, y, r, color, x_forward, y_forward)


def move_ball():
   global M
   for i in range(len(list_ball)):

       M= list_ball [i]

       (x, y, r, color, x_forward, y_forward)=M

       M=(x+x_forward, y+y_forward, r, color, x_forward, y_forward)

       circle(screen, M [3], (M [0], M [1]), M [2])

       list_ball [i] =M


def reflection():
   for i in range(n):
       R =list_ball[i]

       (x, y, r, color, x_forward, y_forward)=R


       if x+r+5 >= 900:
           R=(x, y, r, color, -x_forward, y_forward)

       elif x-r+5 <= 0:
           R=(x, y, r, color, -x_forward, y_forward)

       elif y+r+5 >= 580:
           R=(x, y, r, color, x_forward, -y_forward)

       elif y-r+5 <= 0:
           R=(x, y, r, color, x_forward, -y_forward)

       else:
           R=(x, y, r, color, x_forward, y_forward)

       list_ball [i]=R


pygame.display.update()
clock=pygame.time.Clock()
finished=False
gracie=False
new_ball()

while not finished:
   clock.tick(FPS)
   for event in pygame.event.get():
       reflection()
       if event.type == pygame.QUIT:
           finished=True
       elif event.type == pygame.MOUSEBUTTONDOWN:
           position=event.pos
           click(position)


   reflection()
   move_ball()
   pygame.display.update()
   screen.fill(BLACK)



pygame.quit()
источник

a

arnold in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
arnold
Нет не turtle , pygame
 import pygame
from pygame.draw import *
from random import randint
import math

pygame.init()

FPS=20
screen=pygame.display.set_mode((900, 600))

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]
score=0
n=7
SPEED=10

list_ball=[0] * n


def click(position):
   global score
   for i in range(n):
       T = list_ball[i]
       (x, y, r, color, x_forward, y_forward)=T
       up=x+r
       down=x-r
       left=y-r
       right=y+r
       if position [0] < up and position [0] > down and position [1] < right and position [1] > left:
           score+=1
           print(score)


def new_ball():
   global x, y, r

   for i in range(n):
       x=randint(100, 800)
       y=randint(100, 500)
       r=randint(10, 50)
       color=COLORS [randint(0, 5)]
       alpha=randint(0, 360)
       x_forward=SPEED * math.cos(alpha)
       y_forward=SPEED * (math.sin(alpha) * math.pi / 2)
       circle(screen, color, (x, y), r)
       list_ball [i]= (x, y, r, color, x_forward, y_forward)


def move_ball():
   global M
   for i in range(len(list_ball)):

       M= list_ball [i]

       (x, y, r, color, x_forward, y_forward)=M

       M=(x+x_forward, y+y_forward, r, color, x_forward, y_forward)

       circle(screen, M [3], (M [0], M [1]), M [2])

       list_ball [i] =M


def reflection():
   for i in range(n):
       R =list_ball[i]

       (x, y, r, color, x_forward, y_forward)=R


       if x+r+5 >= 900:
           R=(x, y, r, color, -x_forward, y_forward)

       elif x-r+5 <= 0:
           R=(x, y, r, color, -x_forward, y_forward)

       elif y+r+5 >= 580:
           R=(x, y, r, color, x_forward, -y_forward)

       elif y-r+5 <= 0:
           R=(x, y, r, color, x_forward, -y_forward)

       else:
           R=(x, y, r, color, x_forward, y_forward)

       list_ball [i]=R


pygame.display.update()
clock=pygame.time.Clock()
finished=False
gracie=False
new_ball()

while not finished:
   clock.tick(FPS)
   for event in pygame.event.get():
       reflection()
       if event.type == pygame.QUIT:
           finished=True
       elif event.type == pygame.MOUSEBUTTONDOWN:
           position=event.pos
           click(position)


   reflection()
   move_ball()
   pygame.display.update()
   screen.fill(BLACK)



pygame.quit()
Как мне заставить шары отталкиваться друг от друга ?
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
arnold
Как мне заставить шары отталкиваться друг от друга ?
в разные стороны их двигать
источник

a

arnold in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
std::slavik
в разные стороны их двигать
Понимаю , не понимаю в какой части кода сделать это сравнение , и что с чем более конкретно? потому как в разное время в разных итерациях естесвенно разные показатели шаров, не могу словить тот момент который нужно сравнивать
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну здесь например
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
тут отражения от стенок сделаны
нужно проверять еще и соприкосновение шаров
и если соприкосаются - менять скорости
по закону сохранения импульса
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну и еще стоит обратить внимание на застревание у стенок
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
это типичная проблема, подумайте как решить и из за чего она
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
некоторые шары еще за карту улетают
источник

a

arnold in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
std::slavik
некоторые шары еще за карту улетают
+ ищу решение
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну и я бы рекомендовал использовать классы
источник

a

arnold in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
std::slavik
ну и я бы рекомендовал использовать классы
Занятие на глобалках сделано поидее, и классы я пока на Хирьянове не дошел, потому думаю сделать на глобаках а следом после занятия о классах отрефакторить
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
поигрался немного с задачкой - чисто попрактиковаться с конструкциями языка:
https://gist.github.com/SlavikMIPT/d1cee8f260ca3ff53a77793a0b824f9f
Может кому интересно будет или добавить что будет
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
одним из открытий для меня стал декоратор @property)
https://habr.com/ru/post/122082/
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от std::slavik
источник