pygame游戏实例入门

  • 开发环境
    • 第三方库安装
  • 任务介绍
  • 大概实现思路
  • 具体实现流程
    • 游戏背景界面
    • 猴子类
      • 猴子类编写
      • 猴子类运行
    • 香蕉类
      • 香蕉类编写
      • 香蕉类运行
    • 综合编写及碰撞检测
  • 总结

开发环境

pycharm+anconda3;
第三方库: pygame;(从标题看这句略显多余)

第三方库安装

方法一:直接在pycharm里面安装。
files->seting->project->python Interpreter
在左侧界面的最左侧边栏上面有个加号,点击后在弹出页面搜索需要的第三方库,然后直接安装。
方法二:pip安装。
因为用的是anconda所以需要在终端里面将目录切换至anconda3/Scripts后再安装。
命令:pip installs pygame

该图为在pycharm中打开终端切换至相应目录

任务介绍

本任务是开发一个猴子接香蕉的小游戏,通过键盘控制猴子运动,接住随机掉落的香蕉。读者需要自行准备背景图片,猴子图片,香蕉图片三张,当然,如果不喜欢猴子或香蕉也可以选择其它物品的图片作为素材。

运行图

大概实现思路

我们需要编写两个类:猴子类,和香蕉类
两个类都需要有图片路径,运动速度,初始位置等属性。还需要有让他们运动的方法。其中,香蕉只需要编写从上至下运动,猴子类需要让猴子可以在上下左右不同方向运动。
主函数里面需要用键盘来控制猴子运动,随机生成香蕉从上到下运动,并且检测猴子是否碰到香蕉

具体实现流程

游戏背景界面

首先是做一个游戏的背景界面,这里面需要引入背景图片,并且实现手动开关游戏界面。

主函数:

import pygame
import sysdef main():pygame.init()#初始化pygamesize = width, height = 450, 560#界面尺寸screen = pygame.display.set_mode(size)#设置界面尺寸bg = pygame.image.load('background.jpg')#加载背景图片pygame.display.set_caption("游戏")#设置标题while True:#检测事件发生for event in pygame.event.get():if event.type == pygame.QUIT:#发生的事件类型为关闭时sys.exit()                #退出screen.blit(bg, bg.get_rect())  #显示图片pygame.display.update()         #更新pygame.time.Clock().tick(60) #设置游戏频率为60if __name__ == '__main__':main()

猴子类

猴子类编写

界面的坐标是左上角为(0,0),猴子的起始位置为右下角,所以坐标是(界面宽度-猴子宽度,界面高度-猴子高度)

class Monkey(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)position = 400, 510self.speed = [0, 0]self.img = pygame.image.load('monkey.png')self.rect = self.img.get_rect()self.rect.center = positionself.image = self.imgdef move_left(self):self.speed = [-5, 0]if self.rect.left < 0:self.rect.left = 0else:self.rect = self.rect.move(self.speed)def move_right(self):self.speed = [5, 0]if self.rect.right > 450:self.rect.right = 450else:self.rect = self.rect.move(self.speed)def move_up(self):self.speed = [0, -5]if self.rect.top < 0:self.rect.top = 0else:self.rect = self.rect.move(self.speed)def move_down(self):self.speed = [0, 5]if self.rect.bottom > 560:self.rect.bottom = 560else:self.rect = self.rect.move(self.speed)

猴子类运行

猴子类运行时需要根据键盘所按下的键来判断猴子运动状态,需要在前面加一句 from pygame.locals import

import pygame
import sys
from pygame.locals import *def main():pygame.init()#初始化pygamesize = width, height = 450, 560#界面尺寸screen = pygame.display.set_mode(size)#设置界面尺寸bg = pygame.image.load('background.jpg')#加载背景图片pygame.display.set_caption("游戏")#设置标题mk = Monkey() #实例化猴子类while True:#检测事件发生for event in pygame.event.get():if event.type == pygame.QUIT:#发生的事件类型为关闭时sys.exit()             #退出#实例化按键类型 key = pygame.key.get_pressed()# 根据 按键类型判断运动方向if key[K_LEFT]:mk.move_left()if key[K_RIGHT]:mk.move_right()if key[K_UP]:mk.move_up()if key[K_DOWN]:mk.move_down()screen.blit(bg, bg.get_rect())  #显示图片screen.blit(mk.image, mk.rect)#显示猴子,必须放在背景图片之后pygame.display.update()           #更新pygame.time.Clock().tick(60) #设置游戏频率为60if __name__ == '__main__':main()

香蕉类

香蕉类编写

class Banana(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)x = randint(20, 430)position = [x, 20]speed = [0, 3]self.img = pygame.image.load('banana.png')self.rect = self.img.get_rect()self.rect.center = positionself.image = self.imgself.speed = speeddef move(self):self.rect = self.rect.move(self.speed)

香蕉类运行

香蕉类要求随机生成香蕉在屏幕中自上而下运动,因此需要实例化精灵组,将实例化的香蕉类放入精灵组中,在达到一定条件时控制精灵组中的香蕉运动并显示在屏幕中。

import pygame
import sys
from pygame.locals import *def main():pygame.init()size = width, height = 450, 560screen = pygame.display.set_mode(size)bg = pygame.image.load('background.jpg')pygame.display.set_caption("游戏")group = pygame.sprite.Group() #实例化精灵组i = 0 #作为条件判断的变量while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.blit(bg, bg.get_rect())i = i + 1if i % 30 == 0: #条件成立时ba = Banana() #实例化类group.add(ba) #添加到精灵组for b in group.sprites(): #从精灵组中循环b.move()screen.blit(b.img, b.rect)pygame.display.update()pygame.time.Clock().tick(60)if __name__ == '__main__':main()

综合编写及碰撞检测

下面把上述内容放在一起运行,并进行碰撞检测,让猴子撞到香蕉时在终端里面显示出来。
使用pygame.sprite.collide_mask()函数检测碰撞,当两个传入的参数碰撞时,返回true.

def main():pygame.init()size = width, height = 450, 560screen = pygame.display.set_mode(size)bg = pygame.image.load('background.jpg')pygame.display.set_caption("游戏")mk = Monkey()group = pygame.sprite.Group()i = 0while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()if event.type == pygame.KEYUP:if event.key == pygame.K_ESCAPE:sys.exit()key = pygame.key.get_pressed()if key[K_LEFT]:mk.move_left()if key[K_RIGHT]:mk.move_right()if key[K_UP]:mk.move_up()if key[K_DOWN]:mk.move_down()screen.blit(bg, bg.get_rect())screen.blit(mk.image, mk.rect)i = i + 1if i % 30 == 0:ba = Banana()group.add(ba)for b in group.sprites():b.move()screen.blit(b.img, b.rect)if pygame.sprite.collide_mask(mk, b):#碰撞检测print("撞到")pygame.display.update()pygame.time.Clock().tick(60)if __name__ == '__main__':main()

总结

初学者经验笔记,多有纰漏,内容繁琐,即便作者写完后也懒得再看一遍,如果有不幸读完全文者,在程序运行过程中有任何问题,感谢指正(尽管我不一定搭理)。

pygame游戏实例入门相关推荐

  1. 《Pygame游戏编程入门》学习——第4章 用户输入:Bomb Catcher游戏

    <Pygame游戏编程入门>学习--第4章 用户输入:Bomb Catcher游戏 第4章 挑战[^1] 问题1. Bomb Catching游戏太小了,玩起来不是很过瘾.毕竟,它只是一个 ...

  2. 《Pygame游戏编程入门》学习——第3章 I/O、数据和字体:Trivia游戏

    <Pygame游戏编程入门>学习--第3章 I/O.数据和字体:Trivia游戏 第3章 挑战[^1] 问题1. 修改Trivia游戏,使用已有的代码来扩展你的背景,加入自己的用户输入和问 ...

  3. Pygame游戏编程入门笔记

    目录 1. Python游戏编程入门 2. 建立开发环境 3. 简单示例 4. 绘制不同形状 5. 事件监听举例 6. 用pygame打印文本 7. 键盘事件 8. 鼠标事件 9. 轮询键盘 10. ...

  4. python画图的模块_用python和pygame游戏编程入门-画图模块

    在设计一个游戏时,有些时候你可以不加载任何图片,只是绘制一些图形来制作一个游戏. pygame.draw这个模块的作用是在屏幕上绘制各种图形. 函数 作用 rect 绘制矩形 polygon 绘制多边 ...

  5. python弹球游戏绑定鼠标事件_用python和pygame游戏编程入门-弹球[鼠标控制]

    本节我们再将鼠标的事件引入到这个动画中,要做什么呢?就是在动画中,如果按下鼠标左键,小球会停止移动,如果松开左键,小球会移动到鼠标的位置,然后继续刚才的运动:如果按下鼠标左键不放,移动鼠标,小球就会跟 ...

  6. python方向键控制角色_用python和pygame游戏编程入门-控制角色移动

    在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节何上一节的内容,做一个用键盘控制角色移动的功能,代码如下: #!/usr/bin/env python #指定图像文件名称 b ...

  7. python怎么窗口显示文字_用python和pygame游戏编程入门-显示文字

    上一节我们通过键盘可以控制角色移动,如果要让角色说话,那就要用到文字显示.Pygame可以直接调用系统字体,或者也可以使用TTF字体,TTF就是字体文件,可以从网上下载.为了使用字体,你得先创建一个F ...

  8. pygame游戏开发入门例子

    # *_* coding:utf-8 *_* # 开发团队:中国软件开发团队# 开发人员:Administrator# 开发时间:2019/3/23 11:16# 文件名称:pygame_demo# ...

  9. pygame 学习笔记(4)推荐一本python入门游戏书籍《PYTHON游戏编程入门》

    简介 <PYTHON游戏编程入门>(More Python Programming for the Absolute Beginner)是 S.Harbour写的一本入门书籍,基于pyga ...

最新文章

  1. 《数学之美》第21章 拼音输入法的数学原理
  2. 使用SAP Analytics Cloud显示新冠肺炎病毒感染人数的实时信息
  3. [react-router] React-Router的实现原理是什么?
  4. java 获取http地址_java如何获取当前时间,java如何获取ip地址
  5. TensorFlow2.0:高阶操作
  6. ES6学习(八)—Promise对象 超鸡重要
  7. 【免费毕设】ASP.NET 城市酒店入住信息管理系统 (源代码+lunwen)
  8. java excel 导入导出_java中excel文件的导入和导出
  9. vuejs切换导航条高亮路由高亮做法
  10. 使用SDE的一点体会
  11. 亚马逊全站点、全类目产品爬取,支持批量品牌注册查询,独家技术防屏蔽节省大量选品分析时间,全自动无人值守运行
  12. inteli211网卡linux驱动,Intel英特尔I210/I340/I350/82575/82580系列网卡驱动5.5.2版For Linux(2021年2月1日发布)...
  13. Matlab中批读取DCM文件
  14. 做word计算机海报图片,使用word制作宣传海报.doc
  15. 轻松实现在微信中直接下载APK的方式
  16. Python之天天向上的力量
  17. docker之user_remap
  18. 用matlab解决多重共线性问题,多重共线性和非线性回归的问题
  19. 关于Git 和Github的学习
  20. java基于word模板动态生成word及转pdf实践

热门文章

  1. unreal-教程-第一章:初见Unreal
  2. 省选专练(这个真的有省选难度?)期望入门铃仙
  3. 京东集团副总裁李大学:像CEO一样思考
  4. 一段有点bug的游戏
  5. 详解使用NetBeans IDE 8.2进行可视化图形界面设计——高仿QQ登录界面
  6. 主机 HA 高可用知识梳理和经验分享
  7. 各高校CS院系夏令营都有哪些要求?
  8. 2019年Android中高级工程师部分面试题
  9. k8s dashboard token 过期时间修改
  10. PagerAdapter中的NotifyDataSetChanged