概述
要求:
鼠标点击屏幕会自动产生不同大小的小球,小球会自动移动,碰到屏幕边界反弹回来,当不同大小的小球相遇在一起发生碰撞,大的小球会吃掉较小的小球,变得更大
代码:
import pygame
import random
import math
def random_color():
return random.randint(0,255),random.randint(0,255),random.randint(0,255)
if __name__=='__main__':
pygame.init()
screen = pygame.display.set_mode((600,400))
screen.fill((255,255,255))
pygame.display.set_caption('大球吃小球')
pygame.display.flip()
#all_ball中保存多少个球
#每个球要保存:半径,圆心坐标,颜色,x方向的速度,y方向的速度
all_balls=[
{
'r':random.randint(10,15),
'pos':(100,100),
'color':(random_color()),
'x_speed':random.randint(0,1),
'y_speed': random.randint(0, 1),
'live':True
}
]
#这里用到了python里面的字典!
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.MOUSEBUTTONDOWN:
#点击一下鼠标创建一个球
ball = {
'r': random.randint(10,15),
'pos': event.pos,
'color': (random.randint(0,255),random.randint(0,255),random.randint(0,255)),
'x_speed': random.randint(0,1),
'y_speed': random.randint(0,1),
'live': True
}
#保存球
all_balls.append(ball)
#刷新界面
screen.fill((255,255, 255))
for ball in all_balls:
# 取出球原来的x和y以及速度
x,y = ball['pos']
x_speed = ball['x_speed']
y_speed = ball['y_speed']
if x + ball['r'] >= 600:
x_speed *= -1
if x - ball['r'] <= 0:
x_speed *= -1
if y + ball['r'] >= 400:
y_speed *= -1
if y - ball['r'] <= 0:
y_speed *= -1
x += x_speed
y += y_speed
pygame.draw.circle(screen, ball['color'], (x,y), ball['r'])
# 更新球的坐标
ball['pos'] = x,y
ball['x_speed'] = x_speed
ball['y_speed']=y_speed
for ball1 in all_balls:
if all_balls.index(ball) == all_balls.index(ball1):
pass
else:
other_x, other_y=ball1['pos']
dx = x - other_x
dy = y - other_y
distance = math.sqrt(dx**2+dy**2) #距离
if distance < ball['r']+ball1['r']:
if ball['r'] > ball1['r']:
ball['r']=int(ball['r']+ball1['r']/5)
all_balls.remove(ball1)
pygame.display.update()
#这里是定义了大球吃小球
运行效果:
也可以鼠标点击产生很多小球:
是不是很神奇快来尝试一下!
最后
以上就是背后黄豆为你收集整理的python练习---大球吃小球游戏的全部内容,希望文章能够帮你解决python练习---大球吃小球游戏所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复