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

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

x

本帖最后由 xenli 于 2019-12-25 11:22 编辑

创建一个游戏窗口,然后在窗口内创建一个小球。以一定的速度移动小球,当小球碰到游戏窗口的边缘时,小球弹回,继续移动。按照如下步骤实现该功能:

# _*_ coding:utf-8 _*_

import pygame                                                         #导入Pygame模块

import sys                                                                #导入sys模块

pygame.init()        #初始化Pygame

screen =  pygame.display.set_mode((640,480)) # 设置窗口复制代码

上述代码中,首先导入Pygame,然后调用init()方法初始化Pygame模块。接下来,设置窗口的宽和高,最有使用display模块显示窗体,display常用方法如下:

微信截图_20191225104630.png (32.98 KB, 下载次数: 0)

2019-12-25 10:46 上传

(2)运行上述代码,会出现一个一闪而过的黑色窗口,这是因为程序执行完成后,会自动关闭。如果让窗口一直显示,需要使用while True让程序一 直执行,此外,还需要设置关闭按钮。具体代码如下:

import pygame

import sys

pygame.init()        #初始化Pygame

screen =  pygame.display.set_mode((640,480)) # 设置窗口

#执行死循环,确保窗口一直显示

while True:

#添加检测事件

for event in pygame.event.get():    #遍历所有事件

if event.type == pygame.QUIT:   #如果点击关闭窗口,则退出

sys.exit()

pygame.quit()复制代码

上述代码中,添加了轮巡事件监测。pygame.event.get()能够获取事件队列,使用for...in 遍历事件,根据type属性判断事件类型。这里的事件处理与GUI类似,如event.type等于pygame.QUIT表示监测到关闭pygame窗口事件,pygame.keydown表示键盘按下事件,pyga.MOUSEBUTTONDOWN表示鼠标按下事件等。。。

(3)在窗口中添加小球。我们先准备好一张ball.png图片,然后加载该图片,最后将图片显示在窗口中,具体代码如下:

import pygame

import sys

pygame.init()        #初始化Pygame

screen =  pygame.display.set_mode((640,480)) # 设置窗口

color = (0,0,0)                                                        #设置颜色

ball = pygame.image.load("ball.png")        #加载图片

ballrect = ball.get_rect()                                #获取矩形区域

#执行死循环,确保窗口一直显示

while True:

#添加检测事件

for event in pygame.event.get():    #遍历所有事件

if event.type == pygame.QUIT:   #如果点击关闭窗口,则退出

sys.exit()

screen.fill(color)                                        #填充颜色

screen.blit(ball,ballrect)                        #将图片画到窗口上

pygame.display.flip()                                #更新全部显示

pygame.quit()复制代码

上述代码中使用image模块的load()方法加载图片,返回值ball是一个Surface对象。Surface 是用来代表图片的pygame对象,可以对一个Surface对象进行涂画、变形、复制等各种操作。事实上,屏幕也只是一个个surface, pygame display.set_ mode 就返回了一个屏幕Surface对象。如果将ball这个Surface对象画到screen Surface对象,需要使用blit()方法,最后使用display模块的flip() 方法更新整个待显示的Surface对象到屏幕上。Surface 对象的常用方法如下表所示。

微信截图_20191225104905.png (22.21 KB, 下载次数: 0)

2019-12-25 10:49 上传

运行上述代码,结果如下图所示

微信截图_20191225105203.png (16.9 KB, 下载次数: 0)

2019-12-25 10:52 上传

(4)下面该让小球动起来了。ball.get_rect() 方法返回值ballrect是一个Rect对象,该对象有一个move()方法可以用于移动矩形。move(x,y) 函数有两个参数,第 一个 参数是X轴移动的距离,第二个参数是Y轴移动的距离。窗体左上角坐标为(0,0),如果设置move(100,50),小球移动后的坐标位置如图所

示。

微信截图_20191225105553.png (37.34 KB, 下载次数: 0)

2019-12-25 10:57 上传

为了实现小球不停地移动,将move()函数添加到while循环内,具体代码如下:

import pygame

import sys

pygame.init()        #初始化Pygame

screen =  pygame.display.set_mode((640,480)) # 设置窗口

color = (0,0,0)                                                        #设置颜色

ball = pygame.image.load("ball.png")        #加载图片

ballrect = ball.get_rect()                                #获取矩形区域

speed = [5,5]                                                        #设置移动的X轴和Y轴距离

#执行死循环,确保窗口一直显示

while True:

#添加检测事件

for event in pygame.event.get():    #遍历所有事件

if event.type == pygame.QUIT:   #如果点击关闭窗口,则退出

sys.exit()

ballrect = ballrect.move(speed)                #移动小球

screen.fill(color)                                        #填充颜色

screen.blit(ball,ballrect)                        #将图片画到窗口上

pygame.display.flip()                                #更新全部显示

pygame.quit()复制代码

(5)运行上述代码,发现小球在屏幕中一闪而过,此时,小球并没有真正消失,而是移动到窗体之外,此时需要添加碰撞检测的功能。当小球与窗体任一边缘发生碰撞,则更改小球的移动方向。代码如下:

# _*_ coding:utf-8 _*_

import pygame                                                         #导入Pygame模块

import sys                                                                #导入sys模块

pygame.init()        #初始化Pygame

screen =  pygame.display.set_mode((640,480)) # 设置窗口

color = (0,0,0)                                                        #设置颜色

ball = pygame.image.load("ball.png")        #加载图片

ballrect = ball.get_rect()                                #获取矩形区域

speed = [5,5]                                                        #设置移动的X轴和Y轴距离

#执行死循环,确保窗口一直显示

while True:

#添加检测事件

for event in pygame.event.get():    #遍历所有事件

if event.type == pygame.QUIT:   #如果点击关闭窗口,则退出

sys.exit()

ballrect = ballrect.move(speed)                #移动小球

#碰到左右边缘

if ballrect.left < 0 or ballrect.right > 640:

speed[0] = -speed[0]

#碰到上下边缘

if ballrect.top < 0 or ballrect.bottom > 480:

speed[1] = -speed[1]

screen.fill(color)                                        #填充颜色

screen.blit(ball,ballrect)                        #将图片画到窗口上

pygame.display.flip()                                #更新全部显示

pygame.quit()                                                        #退出Pygame复制代码

上述代码中,添加了碰撞检测功能。如果碰到左右边缘,更改X轴为负数,如果碰到上下边缘,更改Y轴数据为负数。运行结果如下图:

微信截图_20191225111141.png (15.58 KB, 下载次数: 0)

2019-12-25 11:12 上传

(6)运行上述代码发现好像有多个小球在飞快移动,这是因为运行上述代码的时间非常短,导致肉眼观察出现错觉,因此需要添加一个“时钟”来控制程序运行时间。这是就需要使用Pygame的time模块。使用Pygame时钟之前,必须先创建Clock对象的一个实例,然后在while循环中设置多长时间运行一,代码如下:

# _*_ coding:utf-8 _*_

import pygame                                                         #导入Pygame模块

import sys                                                                #导入sys模块

pygame.init()        #初始化Pygame

size = width, height = 640, 480                  # 设置窗口

screen = pygame.display.set_mode(size)  # 显示窗口

color = (0,0,0)                                                        #设置颜色

ball = pygame.image.load("ball.png")        #加载图片

ballrect = ball.get_rect()                                #获取矩形区域

speed = [5,5]                                                        #设置移动的X轴和Y轴距离

clock = pygame.time.Clock()                                #设置时钟

#执行死循环,确保窗口一直显示

while True:

clock.tick(60)                                                #每秒执行60次

#添加检测事件

for event in pygame.event.get():    #遍历所有事件

if event.type == pygame.QUIT:   #如果点击关闭窗口,则退出

sys.exit()

ballrect = ballrect.move(speed)                #移动小球

#碰到左右边缘

if ballrect.left < 0 or ballrect.right > width:

speed[0] = -speed[0]

#碰到上下边缘

if ballrect.top < 0 or ballrect.bottom > height:

speed[1] = -speed[1]

screen.fill(color)                                        #填充颜色

screen.blit(ball,ballrect)                        #将图片画到窗口上

pygame.display.flip()                                #更新全部显示

pygame.quit()                                                        #退出Pygame复制代码

至此,我们完成了小球跳跃游戏的开发。

附件为所用资源图片

ball.png (5.42 KB, 下载次数: 1)

2019-12-25 11:19 上传

用python实现弹跳球游戏_使用Pygame模块制作一个跳跃的小球游戏相关推荐

  1. python界面制作和unity的有区别吗_由1~4人利用Sratch、Python、Unity或其它游戏开发工具设计与制作一个的教育类游戏。...

    [简答题]1.计划的概念和内容主要是什么? 2.计划的层次主要有哪些方面? [单选题]面向数据结构的设计方法的最终目标是( ) [简答题]名片设计没有问题以后可以上传到这边作为最终定稿. [其它]填充 ...

  2. html5制作端午节游戏,意派Epub360怎么制作一个端午节H5小游戏页面?

    六月已经过了三分之一,"粽子节"也马上要到了,每当这时候,又到新媒体运营人和设计师头秃的时刻,在传统的节日里,如何把传统的节日使用互联网元素表现,让更多的年轻人能够参与进来,H5这 ...

  3. Python游戏开发,pygame模块,Python实现打砖块小游戏

    前言: 本期我们将利用python制作一个打砖块小游戏,废话不多说,让我们愉快地开始吧~ 效果展示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdjcY4gn-16 ...

  4. Python——利用pygame模块制作RPG游戏(一)

    利用pygame模块制作RPG游戏(一) 需要用到的第三方库:pygame 一.构造游戏的基本框架 1.首先准备好相应的游戏素材:背景,人物动作图片,音乐,音效等. 图片均用png格式,音乐音效均用o ...

  5. python turtle 画老鼠,python用turtle制作一个猫捉老鼠游戏

    CSDN网友写的猫捉老鼠游戏代码 看着不错 大家借鉴一下 import turtle import time import random def up(): jerry.setheading(90) ...

  6. Python游戏开发,pygame模块,Python实现滑雪小游戏

    前言: 本期我们将制作一个简单的滑雪游戏. 废话不多说,让我们愉快地开始吧~ 结果 老规矩还是我们先看看效果图 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

  7. 【Python游戏】pygame模块制作飞机大战、贪吃蛇(多模式)含源码

    pygame模块制作飞机大战.贪吃蛇(多版本) 本章意在学习pygame模块以及巩固python语法. 若有需请转去个人github:https://github.com/onlyhyl/pyGame

  8. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)...

    2019独角兽企业重金招聘Python工程师标准>>> 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜欢这样与哲哲共勉 多少个夜晚 一张长 ...

  9. ​Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机

    ​Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机 Unity中制作一个望远镜 本节制作的望远镜,在鼠标左键按下时,看到的视图会变大:当不再按下的时候,会慢慢缩小成原来的视图.游戏中时常出现 ...

  10. 如何制作一个基于Tile的游戏 2 Cocos2d-x 2 0 4

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在第一篇 ...

最新文章

  1. 远程手机测试机房的建立
  2. php跨平台总结 常用预定义常量
  3. 203. 移除链表元素(C语言)
  4. (转)js实现继承的5种方式
  5. 数据结构之链表创建一元多项式,求一元多项式之和
  6. mysql8.0日期类型_Mysql学习-数据类型(日期时间类型)
  7. 5G小科普(漫画版,So easy!)
  8. .NET Core应用类型(Portable apps amp; Self-contained apps)
  9. [测试题]幸运序列(lucky)
  10. vuex , 简单入(liao)门(jie)
  11. 【转载】Win10强制删除文件夹
  12. 用opencv压缩图片
  13. 机械类和计算机类哪个累哪个难,这几个大学专业累死人还难学,但是毕业却很好就业...
  14. java中statistic_Java Statistic類代碼示例
  15. 多变量微积分笔记(2)——多元函数及其微分
  16. 往事如烟 - 老柏1
  17. 在国企的 Java 程序员是一种什么样的体验?让我来告诉你吧!
  18. php时间函数不准确,PHP中DATE函数与实际时间相差8小时的解决办法
  19. 微信公众号基于 baidu API接口的图像识别
  20. VNPY策略加密教程

热门文章

  1. 解决电脑右键菜单反应慢问题
  2. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position 198: illegal multibyte sequence
  3. python订餐系统_用python编写的公司订餐系统的审核脚本
  4. npm/package.json/package-lock.json文件
  5. HPU 1725: 感恩节KK专场——特殊的比赛日期【水】
  6. roaringbitmap java,BitMap与RoaringBitmap、JavaEWAH
  7. 例题 9-2 巴比伦塔(The Tower of Babylon, UVa 437)
  8. 13. 查询表orders——统计销售总量大于50的各类商品的ID和销售总量
  9. 什么电子邮箱最安全,什么邮箱更具私密性?
  10. JSON学习之XOM的认识