python壁球小游戏——pygame之旅
本篇博客是跟随嵩老师的教学写下的,入门pygame,强推,链接:嵩老师的Python游戏开发教程
嵩天教授的Python游戏开发教程(pygame)
一、最小开发框架
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 25 23:36:28 2021@author: YouthUpward
"""import pygame,syspygame.init()
screen = pygame.display.set_mode((600,400))
pygame.display.set_caption("pygame游戏之旅")while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()pygame.display.update()
二、部分代码分析过程
1、引入及初始化
#sys是python的标准库,提供朋友python运行环境变量的操纵
#sys.exit()
import pygame,sys #对pygame内部各功能模块进行初始化创建及变量设置,默认调用
pygame.init()size = width, height =600, 400
speed=[1,1]
BLACK=0,0,0#设置相关屏幕模式
#初始化显示窗口,第一个参数是size,一个二值元组,分别表示窗口的宽度和高度
screen = pygame.display.set_mode(size,pygame.RESIZABLE)#pygame.display控制pygame的屏幕,屏幕尺寸以像素为单位
#pygame中只有一个屏幕,如果要切换屏幕,只能在一个屏幕消失后,生成新的屏幕
pygame.display.set_caption("Pygame游戏之旅") #函数调用,设置窗体标题#在pygame中载入的任何一个图像,在内部都表示为surface对象
#其中.get_rect()方法返回一个外切的矩形Rect对象
#Rect对象中,top、bottom、left、right表示上下左右,width、height表示宽、高
ball = pygame.image.load("e.png") #将filename路径下的图像载入游戏
ballrect = ball.get_rect()icon = pygame.image.load("e.png")
pygame.display.set_icon(icon) #函数调用,设置窗口图标fps = 300 #Frames per Second 每秒帧率参数
#创建一个Clock对象,用于操作时间
fclock = pygame.time.Clock()
2、响应事件并刷新
pygame采用笛卡尔坐标系,如下图示
while True: #无限循环,直到python运行时退出结束
#pygame.event.get()从事件队列中取出事件,并从队列中删除该事件for event in pygame.event.get():if event.type == pygame.QUIT: #响应点击右上角'x'的事件sys.exit()elif event.type == pygame.KEYDOWN:#响应键盘事件if event.key == pygame.K_LEFT: #左键,则横向速度递减speed[0] = speed[0] if speed[0]==0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0]))elif event.key == pygame.K_RIGHT: #右键,则横向速度递增speed[0] = speed[0] +1 if speed[0]>0 else speed[0]-1elif event.key == pygame.K_UP: #上键,则纵向速度递增speed[1] = speed[1] +1 if speed[1]>0 else speed[1]-1elif event.key == pygame.K_DOWN: #下键,则横向速度递减speed[1] = speed[1] if speed[1]==0 else (abs(speed[1])-1)*int(speed[1]/abs(speed[1]))elif event.key == pygame.K_ESCAPE: #esc键,实现使用esc键达到退出游戏sys.exit()elif event.type == pygame.VIDEORESIZE:#响应窗体大小变化的事件size = width, height = event.size[0], event.size[1]screen = pygame.display.set_mode(size,pygame.RESIZABLE)
#矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,x、y为整数if pygame.display.get_active():#如果没有最小化,则矩形移动ballrect = ballrect.move(speed[0],speed[1])#壁球反弹运动:遇左右两侧,横向速度取反;遇上下两侧,纵向速度取反if ballrect.left < 0 or ballrect.right > width:#width为窗体的宽speed[0] = -speed[0]if ballrect.top < 0 or ballrect.bottom > height:#height为窗体的高speed[1] = -speed[1]#将一个图像绘制在另一个图像上,即将ball绘制到ballrect位置上。#通过Rect对象引导对壁球的绘制screen.blit(ball,ballrect)#函数调用,对显示窗口进行更新pygame.display.update() fclock.tick(fps)
三、完整代码
import pygame,sys#初始化
pygame.init()
icon = pygame.image.load("f.gif")
pygame.display.set_icon(icon)
vInfo = pygame.display.Info()size=width,height=600,400#设置窗体大小
speed=[1,1]#设置速度
BLACK=0,0,0#设置刷新颜色
screen=pygame.display.set_mode(size,pygame.RESIZABLE)
pygame.display.set_caption("Pygame壁球")#设置窗体标题
ball=pygame.image.load("e.png")#载入壁球图片
ballrect=ball.get_rect()#根据图片生成对应矩形
fps=300
fclock=pygame.time.Clock()
still=False#窗体背景颜色
bgcolor = pygame.Color("black")#这个函数接受一个参数,并返回0-255之间的一个整数
def RGBChannel(a):return 0 if a<0 else (255 if a>255 else int(a))#事件处理
while True:for event in pygame.event.get():if event.type == pygame.QUIT: #响应‘x’事件,退出sys.exit()elif event.type == pygame.KEYDOWN: #响应键盘事件if event.key == pygame.K_LEFT: #左键,则横向速度递减speed[0] = speed[0] if speed[0]==0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0]))elif event.key == pygame.K_RIGHT: #右键,则横向速度递增speed[0] = speed[0] +1 if speed[0]>0 else speed[0]-1elif event.key == pygame.K_UP: #上键,则纵向速度递增speed[1] = speed[1] +1 if speed[1]>0 else speed[1]-1elif event.key == pygame.K_DOWN: #下键,则横向速度递减speed[1] = speed[1] if speed[1]==0 else (abs(speed[1])-1)*int(speed[1]/abs(speed[1]))elif event.key == pygame.K_ESCAPE: #esc键sys.exit()elif event.type == pygame.VIDEORESIZE: #响应窗体大小变化事件size = width,height = event.size[0],event.size[1]screen=pygame.display.set_mode(size,pygame.RESIZABLE)elif event.type == pygame.MOUSEBUTTONDOWN:#响应鼠标悬空事件if event.button==1:still = Trueelif event.type == pygame.MOUSEBUTTONUP: #响应鼠标放下事件,实现矩形跟随鼠标still = Falseif event.button==1:ballrect = ballrect.move(event.pos[0]-ballrect.left,event.pos[1]-ballrect.top)elif event.type == pygame.MOUSEMOTION:if event.buttons[0] == 1:ballrect = ballrect.move(event.pos[0]-ballrect.left,event.pos[1]-ballrect.top)if pygame.display.get_active() and not still: #实现最小化后,运动暂停ballrect=ballrect.move(speed[0],speed[1]) #壁球移动if ballrect.left<0 or ballrect.right>width:speed[0]=-speed[0] #壁球反弹if ballrect.top<0 or ballrect.bottom>height:speed[1]=-speed[1]#归一化函数bgcolor.r = RGBChannel(ballrect.left*255/width) #红色通道值bgcolor.g = RGBChannel(ballrect.top*255/height) #绿色通道值bgcolor.b = RGBChannel(min(speed[0],speed[1])*255/max(speed[0],speed[1],1)) #蓝色通道值screen.fill(bgcolor)screen.blit(ball,ballrect)pygame.display.update()fclock.tick(fps)
四、效果演示
python壁球小游戏——pygame之旅相关推荐
- Python壁球小游戏(操控型)与键盘的基本使用
一,壁球小游戏(操控型) 被用户操控着且四处碰壁的小球 二,壁球小游戏(操控型)的关键要素 需求:通过键盘的上下左右控制壁球运动速度,规则如下∶ 三,壁球小游戏(操控型)的 ...
- python能制作游戏吗_如何用Python制作小游戏
要想用Python制作小游戏,必须要安装一个插件Pygame 什么是Pygame Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需 ...
- Python 打字小游戏开发,来体验不一样的打字游戏乐趣(完结篇)
Python 打字小游戏开发,来体验不一样的打字游戏乐趣(完结篇) 资源下载 完整代码 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) Python 打字小游戏开发,来体验不一样的 ...
- Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇)
Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) 前言 游戏素材准备 游戏项目结构 项目里面的类说明 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇) Python ...
- python外星人入侵小游戏
python外星人入侵小游戏 python外星人入侵小游戏 项目结构如图所示: (1)alien.py中的代码: (2)alien_invasion.py中的代码: (3)bullet.py中的代码: ...
- python经典小游戏五子棋,适合python编程的小游戏
python入门可以做的小游戏 1.Python入门拼图小游戏简单介绍:将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状. 2.Python入门推箱子 ...
- python迷宫小游戏
一款基于 Python + Pygame + AI算法 的 迷宫小游戏 (一)课题内容 实现走迷宫. 主要功能为界面显示.上下左右键的响应以及当前步数统计. 通过该课题全面熟悉数组.字符串等的使用,掌 ...
- Python五子棋小游戏源代码,支持人机对战和局域网对战两模式
Python五子棋小游戏源代码,支持人机对战和局域网对战两模式,程序运行截图: 核心程序代码 WuZi.py ''' Function:五子棋小游戏-支持人机和局域网对战 Author:Charles ...
- python入门小游戏代码20行,python入门小游戏代码
python入门可以做的小游戏 1.Python入门拼图小游戏简单介绍:将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状. 2.Python入门推箱子 ...
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 -首页最新文章经典回顾开发- Web前端- Py ...
最新文章
- 杭电多校(六)2019.08.07--暑假集训
- VTK:图像方差用法实战
- java 排名相同_Java程序员十年面试经验,助你成为offer收割机
- HTML 文件在PC移动端完美自适应布局的技巧
- 基于Pyspark和Thunder的神经图像数据分析-实验运行结果
- ES5中新增的Array方法详细说明
- 如何在IE让用户自动下载ActiveX控件?
- [bash] printf使用范例
- 回调函数 线程_从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2...
- javascript base64加密解密
- http请求requestUtils
- MySQL 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。...
- 博客排名400-300的数据变化
- python导出excel 身份证_如何使用Python导出Excel文件?
- 如何卸载office201032位_win7卸载office2010的步骤_win7如何完美卸载office2010-win7之家...
- 10分钟看明白大M法和两阶段法
- Linux命令:md5sum
- 高等数学---平面束方程理解
- python网络爬虫-淘宝商品比价定向爬虫
- 蓝桥杯2021年第十二届真题第一场-双向排序
热门文章
- 【TWVRP】基于matlab蚁群算法求解带时间窗的车辆路径规划问题【含Matlab源码 921期】
- 【房价预测】基于matlab遗传算法优化BP神经网络房价预测【含Matlab源码 592期】
- 计算机科学与工程国际研讨会,2018年北京计算机科学与技术国际研讨会
- 坦克位置伺服系统分析与设计_伺服电机噪音及不稳定分析
- 机器学习--线性回归1_线性回归-进入迷人世界的第一步
- 人工智能ai算法_当AI算法脱轨时
- 妲己机器人功能_来自机器人影响者的5个功能强大的Instagram教训
- Python访问MySQL数据库速度慢解决方法
- 数论 欧几里德算法
- java如何保证redis设置过期时间的原子性_【07期】Redis中是如何实现分布式锁的?...