楼主: 奇点ML
2152 0

[程序分享] [Pygam实例分享,Python 游戏入门] [推广有奖]

  • 0关注
  • 0粉丝

小学生

42%

还不是VIP/贵宾

-

威望
0
论坛币
25 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
243 点
帖子
4
精华
0
在线时间
3 小时
注册时间
2017-7-17
最后登录
2017-7-24

楼主
奇点ML 发表于 2017-7-21 14:26:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
初次接触 Python 游戏编程,pygame 是必不可少的,下面分享一段代码,可以更直观的了解 pygame:

  1. #!/usr/bin/env python
  2. import sys
  3. import pygame
  4. pygame.init()

  5. size = width, height = 320, 240
  6. speed = [2, 2]
  7. black = 0, 0, 0

  8. screen = pygame.display.set_mode(size)

  9. ball = pygame.image.load('ball.gif')
  10. ballrect = ball.get_rect()

  11. while True:
  12.     for event in pygame.event.get():
  13.         if event.type == pygame.QUIT:
  14.             sys.exit()

  15.     ballrect = ballrect.move(speed)
  16.     if ballrect.left <</span> 0 or ballrect.right > width:
  17.         speed[0] = -speed[0]
  18.     if ballrect.top <</span> 0 or ballrect.bottom > height:
  19.         speed[1] = -speed[1]

  20.     screen.fill(black)
  21.     screen.blit(ball, ballrect)
  22.     pygame.display.flip()
复制代码

首先,我们使用“import pygame”导入了Pygame的所有模块,然后调用“pygame.init()”对这些模块进行初始化。

第10行,我们通过“pygame.display.set_mode()”创建了一个图形窗口。Pygame使用Surface对象来表示图像,“display.set_mode()”函数创建了一个新的Surface对象来表示实际显示出的图形(graphics)。在这个Surface上绘制的任何东西,都会在显示器上看到。

第12行,我们加载了球的图片。Pygame支持很多图片格式,包括 JPG、PNG、TGA、GIF。“pygame.image.load()”函数,返回一个包含ball.gif数据的Surface对象(它不会改变原图中的色彩值和透明度)。然后创建了一个Rect类型,名为ballrect的变量。

到了第15行,我们的程序已经初始化完成,准备好运行了。在这个无限循环中,我们检查了用户输入,对球进行移动,然后再把球画出来。GUI程序开发,都是采用事件驱动模型,Pygame也不例外。如果接收到了QUIT事件,就直接调用“sys.exit()”退出,Pygame会确保程序正常关闭(不必担心空指针、内存泄漏之类的问题)。

第20-24行,通过更改ballrect的值来更新球的位置。如果球到了上/下边界,就让它的速度反向。

第26行,我们通过填充黑色(black),对整个屏幕进行了擦除。至于为什么这么做,可以去了解一下动画原理。

第27行,我们画出了球的图像。图像的绘制是由“Surface.blit()”方法处理的。blit的基本含义是,把像素点的颜色值从一个图像拷贝到另一个图像上。我们向这个方法传递了一个用于拷贝的Surface源(ball),以及这些像素点出现在目标图像上的位置(ballrect)。

最后一步是更新程序的显示界面(display)。Pygame用了两个缓冲区(buffer)来管理显示界面。当我们的绘制工作完成之后,调用“pygame.display.flip()”,使得我们在screen这个Surface对象上绘制的内容可见。缓存机制可以确保我们只能看见绘制完成之后的帧,如果没有它的话,在screen的创建过程中,用户会看见绘制到一半的屏幕。

以上完成了对Pygame使用方法的一个简单介绍。Pygame还有很多模块可以做一些有趣的事,比如:

  • 处理键盘、鼠标、操纵杆等输入方式。
  • 混合音频,对音乐文件解码。
  • 通过Surface绘制简单的图形、图片,并对它们进行旋转、缩放操作。甚至通过Python数组,实时操作图片的像素点。
  • 支持MPEG视频播放,音频CD播放。
  • 作为PyOpenGL的跨平台展示层。(这一点,也许Pyglet做得更好?)

大部分Pygame的模块都是用C写的,极少数用Python实现。Pygame的程序包里带有一些示例程序,如monkey punching和UFO shooting。




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python pygame

已有 1 人评分经验 论坛币 收起 理由
残阳_等待 + 60 + 10 精彩帖子

总评分: 经验 + 60  论坛币 + 10   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 22:03