• Pygame之滑稽球壁碰


    安装pygame:

    打开cmd,输入

    pip install pygame

    首先,我们需要一个小球图片,可以自行寻找,我是通过觅元素(免费下载)找到了免抠素材

    滑稽设计元素_滑稽免抠素材_觅元素51yuansu.comicon-default.png?t=M666https://www.51yuansu.com/index.php?m=Index&a=fenlei&k=huaji随意下载后,需要对小球的大小进行修改,我用的是PS,大家有其他方法,用就可以了,

     

     要是嫌麻烦,直接从我这里拿就好了,我最懂大家了。

     首先,我们先来看看全屏版本:

    1. import pygame,sys
    2. pygame.init()
    3. vInfo=pygame.display.Info()
    4. size=width,height=vInfo.current_w,vInfo.current_h
    5. speed=[1,1]
    6. BLACK=0,0,0
    7. screen=pygame.display.set_mode(size,pygame.FULLSCREEN) #全屏
    8. pygame.display.set_caption("pygame壁球")
    9. ball = pygame.image.load("E:\pycharm\picture\滑稽.gif")
    10. ballrect=ball.get_rect()
    11. fps=300
    12. fclock = pygame.time.Clock() #创建一个clock对象,用于操作时间
    13. while True:
    14. for event in pygame.event.get():
    15. if event.type ==pygame.QUIT:
    16. sys.exit()
    17. elif event.type==pygame.KEYDOWN:
    18. if event.key==pygame.K_LEFT:
    19. speed[0]=speed[0] if speed[0]==0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0])) #else后面的代码解决负号问题
    20. elif event.key == pygame.K_RIGHT:
    21. speed[0]=speed[0]+1 if speed[0]>0 else speed[0]-1
    22. elif event.key == pygame.K_UP:
    23. speed[1]=speed[1]+1 if speed[1]>0 else speed[1]-1
    24. elif event.key == pygame.K_DOWN:
    25. speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1) * int(speed[1] / abs(speed[1]))
    26. elif event.key == pygame.K_ESCAPE:
    27. sys.exit()
    28. ballrect=ballrect.move(speed[0],speed[1])
    29. if ballrect.left<0 or ballrect.right>width:
    30. speed[0]=-speed[0]
    31. if ballrect.top<0 or ballrect.bottom>height:
    32. speed[1]=-speed[1]
    33. screen.fill(BLACK)
    34. screen.blit(ball,ballrect) #将一个图像绘制在另一个图像上,即将src绘制到dest位置上。通过Rect对象引导对壁球的绘制
    35. pygame.display.update()
    36. fclock.tick(fps) #控制帧速率,即窗口刷新率,其表示每秒钟300次帧刷新

    全屏的无框版本,没有右上角的"X",不用急,点击ESC键即可退出,如果用的时候没写入

    1. elif event.key == pygame.K_ESCAPE:
    2. sys.exit()

    点击 Windows 键,将窗口关掉就行,不需要再重启电脑。

    其次,我们来看看窗口可调版本:

    1. import pygame,sys
    2. pygame.init()
    3. icon = pygame.image.load("E:\pycharm\picture\滑稽图标.gif") #设置图标
    4. pygame.display.set_icon(icon)
    5. size=width,height=600,400
    6. speed=[1,1]
    7. BLACK=0,0,0
    8. screen=pygame.display.set_mode(size,pygame.RESIZABLE) #窗口大小可调
    9. pygame.display.set_caption("pygame壁球")
    10. ball = pygame.image.load("E:\pycharm\picture\滑稽.gif")
    11. ballrect=ball.get_rect()
    12. fps=300
    13. fclock = pygame.time.Clock() #创建一个clock对象,用于操作时间
    14. while True:
    15. for event in pygame.event.get():
    16. if event.type ==pygame.QUIT:
    17. sys.exit()
    18. elif event.type==pygame.KEYDOWN:
    19. if event.key==pygame.K_LEFT:
    20. speed[0]=speed[0] if speed[0]==0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0])) #else后面的代码解决负号问题
    21. elif event.key == pygame.K_RIGHT:
    22. speed[0]=speed[0]+1 if speed[0]>0 else speed[0]-1
    23. elif event.key == pygame.K_UP:
    24. speed[1]=speed[1]+1 if speed[1]>0 else speed[1]-1
    25. elif event.key == pygame.K_DOWN:
    26. speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1) * int(speed[1] / abs(speed[1]))
    27. elif event.key == pygame.K_ESCAPE:
    28. sys.exit()
    29. elif event.type == pygame.VIDEORESIZE: #窗口大小可调信息
    30. size=width,height=event.size[0],event.size[1]
    31. screen = pygame.display.set_mode(size,pygame.RESIZABLE)
    32. ballrect=ballrect.move(speed[0],speed[1])
    33. if pygame.display.get_active(): #窗口感知
    34. ballrect = ballrect.move(speed[0],speed[1])
    35. if ballrect.left<0 or ballrect.right>width:
    36. speed[0]=-speed[0]
    37. if ballrect.top<0 or ballrect.bottom>height:
    38. speed[1]=-speed[1]
    39. screen.fill(BLACK)
    40. screen.blit(ball,ballrect) #将一个图像绘制在另一个图像上,即将src绘制到dest位置上。通过Rect对象引导对壁球的绘制
    41. pygame.display.update()
    42. fclock.tick(fps) #控制帧速率,即窗口刷新率,其表示每秒钟300次帧刷新

    然后,我们来看看背景色彩版本:

    1. import pygame,sys
    2. pygame.init()
    3. icon = pygame.image.load("E:\pycharm\picture\滑稽图标.gif") #设置图标
    4. pygame.display.set_icon(icon)
    5. size=width,height=600,400
    6. speed=[1,1]
    7. BLACK=0,0,0
    8. screen=pygame.display.set_mode(size,pygame.RESIZABLE) #窗口大小可调
    9. pygame.display.set_caption("pygame壁球")
    10. ball = pygame.image.load("E:\pycharm\picture\滑稽.gif")
    11. ballrect=ball.get_rect()
    12. fps=300
    13. fclock = pygame.time.Clock() #创建一个clock对象,用于操作时间
    14. still=False
    15. bgcolor=pygame.Color("black")
    16. def RGBChannel(a):
    17. return 0 if a <0 else (255 if a>255 else int(a))
    18. while True:
    19. for event in pygame.event.get():
    20. if event.type ==pygame.QUIT:
    21. sys.exit()
    22. elif event.type==pygame.KEYDOWN:
    23. if event.key==pygame.K_LEFT:
    24. speed[0]=speed[0] if speed[0]==0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0])) #else后面的代码解决负号问题
    25. elif event.key == pygame.K_RIGHT:
    26. speed[0]=speed[0]+1 if speed[0]>0 else speed[0]-1
    27. elif event.key == pygame.K_UP:
    28. speed[1]=speed[1]+1 if speed[1]>0 else speed[1]-1
    29. elif event.key == pygame.K_DOWN:
    30. speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1) * int(speed[1] / abs(speed[1]))
    31. elif event.key == pygame.K_ESCAPE:
    32. sys.exit()
    33. elif event.type == pygame.VIDEORESIZE: #窗口大小可调信息
    34. size=width,height=event.size[0],event.size[1]
    35. screen = pygame.display.set_mode(size,pygame.RESIZABLE)
    36. ballrect=ballrect.move(speed[0],speed[1])
    37. if pygame.display.get_active(): #窗口感知
    38. ballrect = ballrect.move(speed[0],speed[1])
    39. if ballrect.left<0 or ballrect.right>width:
    40. speed[0]=-speed[0]
    41. if ballrect.top<0 or ballrect.bottom>height:
    42. speed[1]=-speed[1]
    43. bgcolor.r = RGBChannel(ballrect.left*255/width)
    44. bgcolor.g = RGBChannel(ballrect.top*255/height)
    45. bgcolor.b = RGBChannel(min(speed[0],speed[1])*255/max(speed[0],speed[1],1))
    46. screen.fill(bgcolor)
    47. screen.blit(ball,ballrect) #将一个图像绘制在另一个图像上,即将src绘制到dest位置上。通过Rect对象引导对壁球的绘制
    48. pygame.display.update()
    49. fclock.tick(fps) #控制帧速率,即窗口刷新率,其表示每秒钟300次帧刷新

    背景板的颜色会随位置的移动发生变化。

    之后,我们来看看鼠标型版本:

    1. import pygame,sys
    2. pygame.init()
    3. icon = pygame.image.load("E:\pycharm\picture\滑稽图标.gif") #设置图标
    4. pygame.display.set_icon(icon)
    5. size=width,height=600,400
    6. speed=[1,1]
    7. BLACK=0,0,0
    8. # screen=pygame.display.set_mode(size)
    9. screen=pygame.display.set_mode(size,pygame.RESIZABLE) #窗口大小可调
    10. pygame.display.set_caption("pygame壁球")
    11. ball = pygame.image.load("E:\pycharm\picture\滑稽.gif")
    12. ballrect=ball.get_rect()
    13. fps=300
    14. fclock = pygame.time.Clock() #创建一个clock对象,用于操作时间
    15. still = False
    16. while True:
    17. for event in pygame.event.get():
    18. if event.type ==pygame.QUIT:
    19. sys.exit()
    20. elif event.type==pygame.KEYDOWN:
    21. if event.key==pygame.K_LEFT:
    22. speed[0]=speed[0] if speed[0]==0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0])) #else后面的代码解决负号问题
    23. elif event.key == pygame.K_RIGHT:
    24. speed[0]=speed[0]+1 if speed[0]>0 else speed[0]-1
    25. elif event.key == pygame.K_UP:
    26. speed[1]=speed[1]+1 if speed[1]>0 else speed[1]-1
    27. elif event.key == pygame.K_DOWN:
    28. speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1) * int(speed[1] / abs(speed[1]))
    29. elif event.key == pygame.K_ESCAPE:
    30. sys.exit()
    31. elif event.type == pygame.VIDEORESIZE: #窗口大小可调信息
    32. size=width,height=event.size[0],event.size[1]
    33. screen = pygame.display.set_mode(size,pygame.RESIZABLE)
    34. elif event.type == pygame.MOUSEBUTTONDOWN: # 鼠标左键按下的响应
    35. if event.button == 1:
    36. still = True
    37. elif event.type == pygame.MOUSEBUTTONUP: # 鼠标释放的响应
    38. still = False
    39. if event.button == 1:
    40. ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top) # 相对位置
    41. elif event.type == pygame.MOUSEMOTION:
    42. if event.buttons[0] == 1:
    43. ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top) # 鼠标移动时,也跟着移动
    44. if pygame.display.get_active() and not still: #窗口感知
    45. ballrect = ballrect.move(speed[0],speed[1])
    46. if ballrect.left<0 or ballrect.right>width:
    47. speed[0]=-speed[0]
    48. if ballrect.right>width and ballrect.right+speed[0]>ballrect.right:
    49. speed[0]=-speed[0]
    50. if ballrect.top<0 or ballrect.bottom>height:
    51. speed[1]=-speed[1]
    52. if ballrect.bottom>height and ballrect.bottom+speed[1]>ballrect.bottom:
    53. speed[1]=-speed[1]
    54. screen.fill(BLACK)
    55. screen.blit(ball,ballrect) #将一个图像绘制在另一个图像上,即将src绘制到dest位置上。通过Rect对象引导对壁球的绘制
    56. pygame.display.update()
    57. fclock.tick(fps) #控制帧速率,即窗口刷新率,其表示每秒钟300次帧刷新

    点击鼠标左键,滑稽球停止移动,按住移动鼠标,滑稽球跟着移动,松开左键,滑稽球继续移动。

    最后,在来看看文字版本的实现:

    1. import pygame, sys
    2. import pygame.freetype
    3. pygame.init()
    4. icon = pygame.image.load("E:\pycharm\picture\滑稽图标.gif") # 设置图标
    5. pygame.display.set_icon(icon)
    6. size = width, height = 600, 400
    7. speed = [1, 1]
    8. BLACK = 0, 0, 0
    9. GOLD = 255, 251, 0
    10. pos = [230, 160]
    11. screen = pygame.display.set_mode(size)
    12. pygame.display.set_caption("pygame文字绘制")
    13. f1 = pygame.freetype.Font("C:/Windows/Fonts/msyh.ttc", 36)
    14. # f1rect=f1.render_to(screen,pos,"滑稽果",fgcolor=GOLD,size=25)
    15. f1surf, f1rect = f1.render("滑稽果", fgcolor=GOLD, size=25)
    16. fps = 300
    17. fclock = pygame.time.Clock() # 创建一个clock对象,用于操作时间
    18. while True:
    19. for event in pygame.event.get():
    20. if event.type == pygame.QUIT:
    21. sys.exit()
    22. if pos[0] < 0 or pos[0] + f1rect.width > width:
    23. speed[0] = -speed[0]
    24. if pos[1] < 0 or pos[1] + f1rect.height > height:
    25. speed[1] = -speed[1]
    26. pos[0] = pos[0] + speed[0]
    27. pos[1] = pos[1] + speed[1]
    28. screen.fill(BLACK)
    29. # f1rect=f1.render_to(screen,pos,"世界和平",fgcolor=GOLD,size=50)
    30. f1surf, f1rect = f1.render("滑稽果", fgcolor=GOLD, size=25)
    31. screen.blit(f1surf, (pos[0], pos[1]))
    32. pygame.display.update()
    33. fclock.tick(fps) # 控制帧速率,即窗口刷新率,其表示每秒钟300次帧刷新

     如下图所示:

     

    附加:滑稽图标

    icon = pygame.image.load("E:\pycharm\picture\滑稽图标.gif")  # 设置图标
    pygame.display.set_icon(icon)

  • 相关阅读:
    数字孪生能源系统,打造低碳时代“透视”眼
    vue.js父组件访问子组件
    golang channel 学习笔记
    5G NR:RACH流程 -- Msg1之选择正确的PRACH时频资源
    Win11 Excel文件变成白板图标怎么解决?
    Spring MVC文件上传
    新品上市的软文怎么写?品宣软文写作要注意以下几点
    蓝桥杯实战应用【算法代码篇】-递归经典问题:汉诺塔游戏(附Java、Python、R语言和C语言代码)
    【MATLAB教程案例32】基于matlab的交通标志检测分割算法的仿真——形态学处理,膨胀,腐蚀,形状检测,颜色模型,小波滤波等知识的综合应用
    【Python】使用 pyecharts 模块绘制动态时间线柱状图 ① ( 列表排序 | 使用 sorted 函数对容器进行排序 | 使用 list.sort 函数对列表进行排序 | 设置排序函数 )
  • 原文地址:https://blog.csdn.net/m0_62919535/article/details/126311661