用Python制作一个简单的球球大作战

LogicVoyantX
• 阅读 889

大家好,我是查理。今天教大家制作一个简化版球球大作战\
话不不多说,上代码

# -*- 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)

制作不易,记得三连哦

点赞
收藏
评论区
推荐文章
深度学习基础 (包括前馈神经网络反向传播和卷积网络反向传播)
聊一聊深度学习(三天肝完深度学习基础,球球让我过吧!!)最近有场考试!!所以来过一遍深度学习,记录一些笔记备考看老师的ppt与花书,双管齐下应对深度学习(保佑我不挂吧!!)废话结束!引言人工智能领域的流派1.符号主义:逻辑主义,心理学派(推理期,心理期)2.连接主义:仿生学派或生理学派(殊途同归,各有所长)机器学
Irene181 Irene181
4年前
小伙Python爬虫并自制新闻网站,太好玩了
大家好,我又来了,我是银牌厨师豆腐!我们总是在爬啊爬,爬到了数据难道只是为了做一个词云吗?当然不!这次我就利用flask为大家呈现一道小菜。Flask是python中一个轻量级web框架,相对于其他web框架来说简单,适合小白练手。使用Flask爬虫,教大家如何实时展示自己爬下来的数据到网页上。先给大家展示一下这个丑丑的网页↓(给个面子,别笑)演示三
学会提示-AI时代职场必修课
当你在写提数代码时,小张已经完成了数据分析;当你正在整理材料时,小王却在和对象逛环球影城;述职时,你发现小郑的汇报有了质的飞跃,但是他明明最近8点就去打羽毛球。之前大家工作效率相差无几,为何他们突然开了挂,难道是在家偷偷卷?原因其实很简单,只因AI时代到了,你需要【学会提示】。
Stella981 Stella981
3年前
IntelliJ IDEA 卡成球了?该怎么优化?
在和同事的一次讨论中发现,对IntelliJIDEA内存采用不同的设置方案,会对IDE的速度和响应能力产生不同的影响。!(https://oscimg.oschina.net/oscnet/bd07884d333b458cb68178a35c74e038.png)昨天,大家就是否自定义IntelliJIDEA的内存设置进行了
Wesley13 Wesley13
3年前
Unity中的网格与材质球合并
https://blog.csdn.net/dardgen2015/article/details/51517860很多时候我们需要把具有相同shader的材质球合并,从而减少drawcall的产生。比如九龙战里面,一个人物带有10个部位,10个部位各自来自不同的fbx文件,加上身体,就有11个材质球,占上11个drawcall。如果主城里面跑着1
Wesley13 Wesley13
3年前
Unity Mesh基础系列(四)mesh变形(制作一个弹力球)
目录1场景搭建2Mesh调节器2.1准备2.2顶点速度3Mesh调节器的输入3.1输入检测3.2施加力3.3力偏移4最基础的变形4.1将力转换为速度4.2移动顶点5保持形状5.1弹簧5.2阻尼6处理变换6.1调整缩放本章内容重点向对象投射射线
Wesley13 Wesley13
3年前
Unity 用ml
目录本次示例:训练一个追踪红球的白球AI1\.新建Unity项目,导入package2\.编写Agent脚本voidOnEpisodeBegin()voidCollectObservations(VectorSensorsensor)voidOnActionRe
Stella981 Stella981
3年前
Flutter贝塞尔曲线之水波纹与球形进度(二)
续上篇,再用贝塞尔曲线绘制一个循环水波纹,一个水波纹进度球,先看效果,以下效果的实现用的都是二阶贝塞尔曲线。效果图!(https://oscimg.oschina.net/oscnet/db689ecfebdfa10dbc59b588184913f7c6f.gif"bezierShow4.gif")bezierShow4.
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Python进阶者 Python进阶者
1年前
Pandas我这个填充nan值为什么填充不上呢?
大家好,我是Python进阶者。一、前言前几天在Python钻石交流群【逆光】问了一个Python数据处理的问题,问题如下:请问一下,我这个填充nan值为什么填充不上呢二、实现过程这里【瑜亮老师】给了个思路如下:试试看这样,代码如下:sfmergetota
京东云开发者 京东云开发者
10个月前
ChatGPT背后的AI背景、技术门道和商业应用(万字长文,建议收藏)
作者:京东科技李俊兵各位看官好,我是球神(江湖代号)。自去年11月30日ChatGPT问世以来,迅速爆火出圈。起初我依然以为这是和当年Transformer,Bert一样的“热点”模型,但是当一篇篇文章/报告不断推送到我的眼前,我后知后觉地发现这次真的不一
LogicVoyantX
LogicVoyantX
Lv1
林间新绿一重重,小蕾深藏数点红。
文章
5
粉丝
0
获赞
0