鱼C论坛

 找回密码
 立即注册
查看: 2261|回复: 12

[作品展示] python弹小球

[复制链接]
发表于 2022-12-30 06:58:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 学习编程中的Ben 于 2022-12-30 07:00 编辑

对不起了各位支持我的鱼油,这段时间我白天恐怕是不能上线了,
但我会在晚上11点以后进行统一回复,所以大家给我发消息想收到回复就等到第二天吧


其他话也不说了,照常晒个作品
这次的作品是一个小动画,许多小球、正方形会在屏幕内滑动,遇到边缘反弹,他们还会时不时闪烁!
效果图依旧在下方

代码:
import pygame
import sys
from pygame.sprite import Group
from pygame.sprite import Sprite
import random

# 小球个数
number = int(input("请输入小球的个数:"))
move_speed = int(input("请输入小球的移动速度:"))
up_left = 7
up_right = 9
down_left = 3
down_right = 1

black = (0, 0, 0)
blue = (0, 0, 255)

windows_width = 1200
windows_height = 600
r = 10


# 小球类
class Bound(Sprite):
    def __init__(self, direction, color, circle_x, circle_y):
        super(Bound, self).__init__()
        self.circle_x = circle_x
        self.circle_y = circle_y
        self.color = color
        self.start_direction = direction

    # 检查边界,并设置反弹
    def check_border(self):
        if self.circle_y <= 0:
            # 左上
            if self.start_direction == up_left:
                self.start_direction = down_left
            # 右上
            elif self.start_direction == up_right:
                self.start_direction = down_right
        elif self.circle_y >= windows_height:
            # 右下
            if self.start_direction == down_right:
                self.start_direction = up_right
            # 左下
            elif self.start_direction == down_left:
                self.start_direction = up_left
        elif self.circle_x <= 0:
            # 左上
            if self.start_direction == up_left:
                self.start_direction = up_right
            # 左下
            elif self.start_direction == down_left:
                self.start_direction = down_right
        elif self.circle_x >= windows_width:
            # 右上
            if self.start_direction == up_right:
                self.start_direction = up_left
            # 右下
            elif self.start_direction == down_right:
                self.start_direction = down_left

    # 判断走的方向,并更新数据
    def type_judge(self):
        if self.start_direction == up_right:
            self.circle_y -= move_speed
            self.circle_x += move_speed
        elif self.start_direction == up_left:
            self.circle_y -= move_speed
            self.circle_x -= move_speed
        elif self.start_direction == down_left:
            self.circle_y += move_speed
            self.circle_x -= move_speed
        elif self.start_direction == down_right:
            self.circle_y += move_speed
            self.circle_x += move_speed

    def draw_buf(self, windows):
        pygame.draw.circle(windows, self.color, (self.circle_x, self.circle_y), r)


class Sq(Sprite):
    def __init__(self, direction, start_x, start_y, color):
        super(Sq, self).__init__()
        self.color = color
        self.start_direction = direction
        self.rect = pygame.Rect(start_x, start_y, 20, 20)

    # 检查边界,并设置反弹
    def check_border(self):
        if self.rect.top <= 0:
            # 左上
            if self.start_direction == up_left:
                self.start_direction = down_left
            # 右上
            elif self.start_direction == up_right:
                self.start_direction = down_right
        elif self.rect.bottom >= windows_height:
            # 右下
            if self.start_direction == down_right:
                self.start_direction = up_right
            # 左下
            elif self.start_direction == down_left:
                self.start_direction = up_left
        elif self.rect.left <= 0:
            # 左上
            if self.start_direction == up_left:
                self.start_direction = up_right
            # 左下
            elif self.start_direction == down_left:
                self.start_direction = down_right
        elif self.rect.right >= windows_width:
            # 右上
            if self.start_direction == up_right:
                self.start_direction = up_left
            # 右下
            elif self.start_direction == down_right:
                self.start_direction = down_left

    # 判断走的方向,并更新数据
    def type_judge(self):
        if self.start_direction == up_right:
            self.rect.top -= move_speed
            self.rect.right += move_speed
        elif self.start_direction == up_left:
            self.rect.top -= move_speed
            self.rect.left -= move_speed
        elif self.start_direction == down_left:
            self.rect.bottom += move_speed
            self.rect.left -= move_speed
        elif self.start_direction == down_right:
            self.rect.bottom += move_speed
            self.rect.right += move_speed

    def draw_buf(self, windows):
        pygame.draw.rect(windows, self.color, self.rect)


# 主程序
def run():
    pygame.init()
    windows = pygame.display.set_mode((windows_width, windows_height))
    pygame.display.set_caption('弹球游戏')

    # 小球组
    bufs = Group()
    for i in range(number//2):
        direction = random.choice([1, 3, 7, 9])

        color1 = random.randint(0, 255)
        color2 = random.randint(0, 255)
        color3 = random.randint(0, 255)
        color = [color1, color2, color3]

        circle_x = random.randint(0, windows_width)
        circle_y = random.randint(0, windows_height)

        new_buf = Bound(direction, color, circle_x, circle_y)
        bufs.add(new_buf)

    for i in range(number//2):
        direction = random.choice([1, 3, 7, 9])

        color1 = random.randint(0, 255)
        color2 = random.randint(0, 255)
        color3 = random.randint(0, 255)
        color = [color1, color2, color3]

        start_x = random.randint(0, windows_width)
        start_y = random.randint(0, windows_height)

        new_buf = Sq(direction, start_x, start_y, color)
        bufs.add(new_buf)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        for buf in bufs:
            buf.check_border()
            buf.type_judge()
            buf.draw_buf(windows)

            font1 = pygame.font.Font('resoures/myfont.ttf', 100)
            tip1 = font1.render("PYTHON 弹小球", True, (255, 0, 0))
            windows.blit(tip1, (250, 0))

            pygame.display.flip()
            pygame.time.delay(1)
        windows.fill(black)


if __name__ == '__main__':
    run()

望大家能多评一些分!!!
祝我早日升到中级鱼油!!!bye!明天见!
屏幕截图 2022-12-30 065752.jpg

评分

参与人数 6荣誉 +13 鱼币 +13 贡献 +5 收起 理由
元豪 + 1 + 1 鱼C有你更精彩^_^
AhrimanSefid + 1 鱼C有你更精彩^_^
liuhongrun2022 + 1 感谢楼主无私奉献!
Mike_python小 + 5 + 5 不要啊……
香蕉那个不拿拿 + 1 + 1 .
青出于蓝 + 5 + 5 + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-30 07:04:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-30 08:00:17 | 显示全部楼层
别啊……呜呜呜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-30 08:09:00 | 显示全部楼层

别伤心哈!

本帖最后由 学习编程中的Ben 于 2022-12-30 08:10 编辑


早上7:30前我能和你聊天,现在聊就很不安全,被爸妈发现了就是锁喉一击
先不和你聊了,明天早上再聊吧,或今天11点以后聊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-30 08:23:40 From FishC Mobile | 显示全部楼层
学习编程中的Ben 发表于 2022-12-30 08:09
早上7:30前我能和你聊天,现在聊就很不安全,被爸妈发现了就是锁喉一击
先不和你聊了,明天早上再聊吧 ...

我也一样啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-30 08:57:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-30 10:19:12 | 显示全部楼层
对不起了各位支持我的鱼油,这段时间我白天恐怕是不能上线了,
但我会在早上11点以后进行统一回复,所以大家给我发消息想收到回复就等到第二天吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-30 12:42:48 | 显示全部楼层
大伙来帮忙顶一下呀!咋都没人了呢?求评分!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-30 13:41:29 | 显示全部楼层
听说评分的人会有好运!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-30 16:27:37 | 显示全部楼层
求点评
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-30 16:28:36 | 显示全部楼层
来顶一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-30 17:35:37 | 显示全部楼层
还有人能评点分吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-30 19:28:36 | 显示全部楼层
@不二如是 大佬评点分呗!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 01:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表