鱼C论坛

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

[作品展示] python弹小球

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

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

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

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

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


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

代码:
  1. import pygame
  2. import sys
  3. from pygame.sprite import Group
  4. from pygame.sprite import Sprite
  5. import random

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

  13. black = (0, 0, 0)
  14. blue = (0, 0, 255)

  15. windows_width = 1200
  16. windows_height = 600
  17. r = 10


  18. # 小球类
  19. class Bound(Sprite):
  20.     def __init__(self, direction, color, circle_x, circle_y):
  21.         super(Bound, self).__init__()
  22.         self.circle_x = circle_x
  23.         self.circle_y = circle_y
  24.         self.color = color
  25.         self.start_direction = direction

  26.     # 检查边界,并设置反弹
  27.     def check_border(self):
  28.         if self.circle_y <= 0:
  29.             # 左上
  30.             if self.start_direction == up_left:
  31.                 self.start_direction = down_left
  32.             # 右上
  33.             elif self.start_direction == up_right:
  34.                 self.start_direction = down_right
  35.         elif self.circle_y >= windows_height:
  36.             # 右下
  37.             if self.start_direction == down_right:
  38.                 self.start_direction = up_right
  39.             # 左下
  40.             elif self.start_direction == down_left:
  41.                 self.start_direction = up_left
  42.         elif self.circle_x <= 0:
  43.             # 左上
  44.             if self.start_direction == up_left:
  45.                 self.start_direction = up_right
  46.             # 左下
  47.             elif self.start_direction == down_left:
  48.                 self.start_direction = down_right
  49.         elif self.circle_x >= windows_width:
  50.             # 右上
  51.             if self.start_direction == up_right:
  52.                 self.start_direction = up_left
  53.             # 右下
  54.             elif self.start_direction == down_right:
  55.                 self.start_direction = down_left

  56.     # 判断走的方向,并更新数据
  57.     def type_judge(self):
  58.         if self.start_direction == up_right:
  59.             self.circle_y -= move_speed
  60.             self.circle_x += move_speed
  61.         elif self.start_direction == up_left:
  62.             self.circle_y -= move_speed
  63.             self.circle_x -= move_speed
  64.         elif self.start_direction == down_left:
  65.             self.circle_y += move_speed
  66.             self.circle_x -= move_speed
  67.         elif self.start_direction == down_right:
  68.             self.circle_y += move_speed
  69.             self.circle_x += move_speed

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


  72. class Sq(Sprite):
  73.     def __init__(self, direction, start_x, start_y, color):
  74.         super(Sq, self).__init__()
  75.         self.color = color
  76.         self.start_direction = direction
  77.         self.rect = pygame.Rect(start_x, start_y, 20, 20)

  78.     # 检查边界,并设置反弹
  79.     def check_border(self):
  80.         if self.rect.top <= 0:
  81.             # 左上
  82.             if self.start_direction == up_left:
  83.                 self.start_direction = down_left
  84.             # 右上
  85.             elif self.start_direction == up_right:
  86.                 self.start_direction = down_right
  87.         elif self.rect.bottom >= windows_height:
  88.             # 右下
  89.             if self.start_direction == down_right:
  90.                 self.start_direction = up_right
  91.             # 左下
  92.             elif self.start_direction == down_left:
  93.                 self.start_direction = up_left
  94.         elif self.rect.left <= 0:
  95.             # 左上
  96.             if self.start_direction == up_left:
  97.                 self.start_direction = up_right
  98.             # 左下
  99.             elif self.start_direction == down_left:
  100.                 self.start_direction = down_right
  101.         elif self.rect.right >= windows_width:
  102.             # 右上
  103.             if self.start_direction == up_right:
  104.                 self.start_direction = up_left
  105.             # 右下
  106.             elif self.start_direction == down_right:
  107.                 self.start_direction = down_left

  108.     # 判断走的方向,并更新数据
  109.     def type_judge(self):
  110.         if self.start_direction == up_right:
  111.             self.rect.top -= move_speed
  112.             self.rect.right += move_speed
  113.         elif self.start_direction == up_left:
  114.             self.rect.top -= move_speed
  115.             self.rect.left -= move_speed
  116.         elif self.start_direction == down_left:
  117.             self.rect.bottom += move_speed
  118.             self.rect.left -= move_speed
  119.         elif self.start_direction == down_right:
  120.             self.rect.bottom += move_speed
  121.             self.rect.right += move_speed

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


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

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

  133.         color1 = random.randint(0, 255)
  134.         color2 = random.randint(0, 255)
  135.         color3 = random.randint(0, 255)
  136.         color = [color1, color2, color3]

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

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

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

  143.         color1 = random.randint(0, 255)
  144.         color2 = random.randint(0, 255)
  145.         color3 = random.randint(0, 255)
  146.         color = [color1, color2, color3]

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

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

  151.     while True:
  152.         for event in pygame.event.get():
  153.             if event.type == pygame.QUIT:
  154.                 pygame.quit()
  155.                 sys.exit()
  156.         for buf in bufs:
  157.             buf.check_border()
  158.             buf.type_judge()
  159.             buf.draw_buf(windows)

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

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


  166. if __name__ == '__main__':
  167.     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-5-22 07:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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