本篇博客是跟随嵩老师的教学写下的,入门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之旅相关推荐

  1. Python壁球小游戏(操控型)与键盘的基本使用

    一,壁球小游戏(操控型)              被用户操控着且四处碰壁的小球  二,壁球小游戏(操控型)的关键要素 需求:通过键盘的上下左右控制壁球运动速度,规则如下∶ 三,壁球小游戏(操控型)的 ...

  2. python能制作游戏吗_如何用Python制作小游戏

    要想用Python制作小游戏,必须要安装一个插件Pygame 什么是Pygame Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需 ...

  3. Python 打字小游戏开发,来体验不一样的打字游戏乐趣(完结篇)

    Python 打字小游戏开发,来体验不一样的打字游戏乐趣(完结篇) 资源下载 完整代码 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) Python 打字小游戏开发,来体验不一样的 ...

  4. Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇)

    Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) 前言 游戏素材准备 游戏项目结构 项目里面的类说明 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇) Python ...

  5. python外星人入侵小游戏

    python外星人入侵小游戏 python外星人入侵小游戏 项目结构如图所示: (1)alien.py中的代码: (2)alien_invasion.py中的代码: (3)bullet.py中的代码: ...

  6. python经典小游戏五子棋,适合python编程的小游戏

    python入门可以做的小游戏 1.Python入门拼图小游戏简单介绍:将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状. 2.Python入门推箱子 ...

  7. python迷宫小游戏

    一款基于 Python + Pygame + AI算法 的 迷宫小游戏 (一)课题内容 实现走迷宫. 主要功能为界面显示.上下左右键的响应以及当前步数统计. 通过该课题全面熟悉数组.字符串等的使用,掌 ...

  8. Python五子棋小游戏源代码,支持人机对战和局域网对战两模式

    Python五子棋小游戏源代码,支持人机对战和局域网对战两模式,程序运行截图: 核心程序代码 WuZi.py ''' Function:五子棋小游戏-支持人机和局域网对战 Author:Charles ...

  9. python入门小游戏代码20行,python入门小游戏代码

    python入门可以做的小游戏 1.Python入门拼图小游戏简单介绍:将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状. 2.Python入门推箱子 ...

  10. 12岁的少年教你用Python做小游戏

    首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 -首页最新文章经典回顾开发- Web前端- Py ...

最新文章

  1. 杭电多校(六)2019.08.07--暑假集训
  2. VTK:图像方差用法实战
  3. java 排名相同_Java程序员十年面试经验,助你成为offer收割机
  4. HTML 文件在PC移动端完美自适应布局的技巧
  5. 基于Pyspark和Thunder的神经图像数据分析-实验运行结果
  6. ES5中新增的Array方法详细说明
  7. 如何在IE让用户自动下载ActiveX控件?
  8. [bash] printf使用范例
  9. 回调函数 线程_从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2...
  10. javascript base64加密解密
  11. http请求requestUtils
  12. MySQL 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。...
  13. 博客排名400-300的数据变化
  14. python导出excel 身份证_如何使用Python导出Excel文件?
  15. 如何卸载office201032位_win7卸载office2010的步骤_win7如何完美卸载office2010-win7之家...
  16. 10分钟看明白大M法和两阶段法
  17. Linux命令:md5sum
  18. 高等数学---平面束方程理解
  19. python网络爬虫-淘宝商品比价定向爬虫
  20. 蓝桥杯2021年第十二届真题第一场-双向排序

热门文章

  1. 【TWVRP】基于matlab蚁群算法求解带时间窗的车辆路径规划问题【含Matlab源码 921期】
  2. 【房价预测】基于matlab遗传算法优化BP神经网络房价预测【含Matlab源码 592期】
  3. 计算机科学与工程国际研讨会,2018年北京计算机科学与技术国际研讨会
  4. 坦克位置伺服系统分析与设计_伺服电机噪音及不稳定分析
  5. 机器学习--线性回归1_线性回归-进入迷人世界的第一步
  6. 人工智能ai算法_当AI算法脱轨时
  7. 妲己机器人功能_来自机器人影响者的5个功能强大的Instagram教训
  8. Python访问MySQL数据库速度慢解决方法
  9. 数论 欧几里德算法
  10. java如何保证redis设置过期时间的原子性_【07期】Redis中是如何实现分布式锁的?...