# -*- coding: utf-8 -*-
# @Time : 2018/7/30 16:19
# @Author : G.Hope
# @Email : 1638327522@qq.com
# @File : 吃球.py
# @Software: PyCharm
import pygame
import random
import math
# 生成随机颜色
def random_color():
return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
# 判断是否碰撞,并使大球吃掉小球(小球消失,大球变大)
def eat(ball1, ball2):
x1, y1 = ball1['pos']
x2, y2 = ball2['pos']
x_distance = x1 - x2
y_distance = y1 - y2
distance = math.sqrt(x_distance ** 2 + y_distance ** 2)
if distance < ball1['r'] + ball2['r']:
if ball1['r'] > ball2['r']:
ball1['r'] = ball2['r'] + ball1['r']
all_balls.remove(ball2)
else:
ball2['r'] = ball2['r'] + ball1['r']
all_balls.remove(ball1)
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode((800, 600))
screen.fill((255, 255, 255))
pygame.display.flip()
# all_balls中保存多个球
# 每个球要保存:半径、圆心坐标、颜色、x速度、y速度
all_balls = [
{
'r': random.randint(10, 20),
'pos': (100, 100),
'color': random_color(),
'x_speed': random.randint(-1, 1),
'y_speed': random.randint(-1, 1)
},
{
'r': random.randint(10, 20),
'pos': (200, 200),
'color': random_color(),
'x_speed': random.randint(-1, 1),
'y_speed': random.randint(-1, 1)
},
{
'r': random.randint(10, 20),
'pos': (300, 300),
'color': random_color(),
'x_speed': random.randint(-1, 1),
'y_speed': random.randint(-1, 1)
}
]
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.MOUSEBUTTONDOWN:
# 点一下鼠标创建一个球
ball = {
'r': random.randint(10, 20), # 随机大小
'pos': event.pos, # 设置圆心为当前鼠标点击的坐标
'color': random_color(),
'x_speed': random.randint(-1, 1), # 随机方向
'y_speed': random.randint(-1, 1)
}
# 保存球
all_balls.append(ball)
# 刷新界面
screen.fill((255, 255, 255))
for ball_dict in all_balls:
# 取出原理的x,y坐标以及他们的速度
x, y = ball_dict['pos']
x_speed = ball_dict['x_speed']
y_speed = ball_dict['y_speed']
if x >= 800: # 设置边界并更改移动方向
x = 800
x_speed = -1
ball_dict['x_speed'] = x_speed
if x < 0:
x = 0
x_speed = 1
ball_dict['x_speed'] = x_speed
if y >= 600:
y = 600
y_speed = -1
ball_dict['y_speed'] = y_speed
if y < 0:
y = 0
y_speed = 1
ball_dict['y_speed'] = y_speed
x += x_speed
y += y_speed
pygame.draw.circle(screen, ball_dict['color'], (x, y), ball_dict['r'])
# 更新球对应的坐标
ball_dict['pos'] = x, y
pygame.display.update()
# 碰撞
for ball1 in all_balls:
for ball2 in all_balls:
if ball1 == ball2:
continue
eat(ball1, ball2)
大球吃小球
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...