本篇文章给大家谈谈python游戏编程代码大全,以及python编写的游戏有哪些,希望对各位有所帮助,不要忘了收藏本站喔。
火车头采集ai伪原创插件截图:
为了能在开学后更好地融入实验室,本人计划用一个月的时间进行python3语言入门,该系列笔记适合已经有一门编程语言基础的朋友参考使用,欢迎同道者前来交流~
使用教材:
1.《python从入门到精通》清华大学出版社;(自带教学视频【二维码形式】)
2.《机器学习》周志华(西瓜书) 清华大学出版社;
3.《python机器学习手册》 [美]Xhris Albon;
4. BiliBili 《和美女老师一起学python》视频。
………………………………
pygame是跨平台python模块,专为电子游戏设计,包含图像和声音。
pygame的网址是www.pygame.org,在网址中有pygame的相关文档。
在cmd中输入下面这行,就安装上pygame了。
pip install pygame
pygame做游戏的优点在于不需要考虑过多和底层相关的内容,可以更多地把工作重心放在游戏逻辑里。
pygame有很多和底层相关的模块,如下表所示:
———— pygame 底层工作模块 ————
模块名 | 说明 |
---|---|
pygame.cdrom | 访问光驱 |
pygame.cursors | 加载光标 |
pygame.display | 访问显示设备 |
pygame.draw | 绘制形状、线、点 |
pygame.event | 管理事件 |
pygame.font | 使用字体 |
pygame.image | 加载和存储图片 |
pygame.joystick | 使用游戏手柄或者类似的东西 |
pygame.key | 读取键盘按键 |
pygame.mixer | 声音 |
pygame.mouse | 鼠标 |
pygame.movie | 播放视频 |
pygame.music | 播放音频 |
pygame.overplay | 访问高级视频叠加 |
pygame.rect | 管理矩形区域 |
pygame.sndarray | 操作声音数据 |
pygame.sprite | 操作移动图像 |
pygame.surface | 管理图像和屏幕 |
pygame.time | 管理时间和帧信息 |
pygame.transform | 缩放和移动图像 |
下面使用 Pygame 的 display 模块 和 event模块 创建一个 pygame窗口,代码如下:
# -*- coding:utf-8 -*-
import sys #导入sys模块
import pygame #导入pygame 模块
pygame.init() #初始化 pygame
size= width,height =320,240 #初始化窗口
screen = pygame.display.set_mode(size) #显示窗口
pygame.quit() #退出pygame
………………………………
下面将引入一个“跳跃的小球”的游戏实例,在实例中总结pygame的基本使用方法。
【实例要求说明】
创建一个游戏窗口,并在窗口内创建一个小球。以一定的速度移动小球,当小球碰到游戏窗口的边缘时,小球弹回,继续移动。
【分步骤实现细解】
①创建一个游戏窗口,宽和高设置为 640 * 480。
# -*- coding:utf-8 -*-
import sys #导入sys模块
import pygame #导入pygame 模块
pygame.init() #初始化 pygame
size= width,height =640,480 #初始化窗口
screen = pygame.display.set_mode(size) #显示窗口
display模块用于显示窗口,它的常用方法如下:
———— display模块常用方法 ————
方法名 | 功能 |
---|---|
pygame.display.init | 初始化display模块 |
pygame.display.quit | 结束display模块 |
pygame.display.get_init | 如果display模块已经被初始化,则返回true |
pygame.display.set_mode | 初始化一个准备显示的界面 |
pygame.display.get_surface | 获取当前的Surface对象 |
pygame.display.flip | 更新整个待显示的Surface对象到屏幕上 |
pygame.display.update | 更新部分内容显示到屏幕上,如果没有参数则与flip功能相同 |
………………………………
②如果执行上述代码,则窗口会一闪而过,因为程序执行后会自动关闭。如果要让窗口一直显示,就要使用一个死循环。
# -*- coding:utf-8 -*-
import sys #导入sys模块
import pygame #导入pygame 模块
pygame.init() #初始化 pygame
size= width,height =640,480 #初始化窗口
screen = pygame.display.set_mode(size) #显示窗口
#执行死循环,让窗口一直显示
'''while True:
#检查事件
for event in pygame.event.get():
if event.type == pygame.QUIT: #如果单击关闭窗口,则退出
sys.exit()'''
pygame.quit() #退出pygame
③在窗口中添加小球(事件)。我们要实现准备好一张小球的图片 ball.png ,然后加载该图片,最后将图片显示在窗口中。
具体代码如下:
# -*- coding:utf-8 -*-
import sys #导入sys模块
import pygame #导入pygame 模块
pygame.init() #初始化 pygame
size= width,height =640,480 #初始化窗口
screen = pygame.display.set_mode(size) #显示窗口
color = (0,0,0)#设置颜色
ball = pygame.image.load("E:\\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() #退出pygame
效果展示: (在这里我用的是一张黑色背景的拉布拉多图片)
………………………………
④让狗子动起来。
1) ball.get_rect方法犯规之ballrect是一个rect对象,该对象有一个move方法可以用于移动矩形。
move(x,y)函数有两个参数,第一个是x轴移动的距离,第二个是y轴移动的距离。窗体左上角的坐标为(0,0)
2) 为了实现让狗子不停移动,将move()函数添加到while循环中。
# -*- coding:utf-8 -*-
import sys #导入sys模块
import pygame #导入pygame 模块
pygame.init() #初始化 pygame
size= width,height =640,480 #初始化窗口
screen = pygame.display.set_mode(size) #显示窗口
color = (0,0,0)#设置颜色
ball = pygame.image.load("E:\\ball.png") #加载图片
ballrect = ball.get_rect() #获得矩形区域
speed = [5,5]
#执行死循环,让窗口一直显示
# '''
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() #退出pygame
这个代码运行后,狗子会从左上角向右下角飞掠而过。
………………………………
⑤添加碰撞检测功能,让狗子来回飞
【当小球与窗体任意一边的边缘发生碰撞时,更改小球的移动方向。】
# -*- coding:utf-8 -*-
import sys #导入sys模块
import pygame #导入pygame 模块
pygame.init() #初始化 pygame
size= width,height =800,800 #初始化窗口
screen = pygame.display.set_mode(size) #显示窗口
color = (0,0,0)#设置颜色
ball = pygame.image.load("E:\\ball.png") #加载图片
ballrect = ball.get_rect() #获得矩形区域
speed = [5,5]
#执行死循环,让窗口一直显示
# '''
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 >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
这个时候就已经实现狗子在屏幕中四处乱晃的样子了(太傻了我笑了hhhhhhh):
【效果展示】
………………………………
⑤如果需要一个“时钟”来控制时间
这个时候就要用到pygame的time模块,使用pygame之前,必须先创建Clock对象的一个实例,然后在while循环中设置多长时间运行一次。
代码如下:
# -*- coding:utf-8 -*-
import sys #导入sys模块
import pygame #导入pygame 模块
pygame.init() #初始化 pygame
size= width,height =800,800 #初始化窗口
screen = pygame.display.set_mode(size) #显示窗口
color = (0,0,0)#设置颜色
ball = pygame.image.load("E:\\ball.png") #加载图片
ballrect = ball.get_rect() #获得矩形区域
speed = [5,5]
clock = pygame.time.Clock() #设置时钟
#执行死循环,让窗口一直显示
# '''
while True:
clock.tick(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
效果展示:
【狗子乱飞】实例到这里就演示完毕啦!
………………………………
【要学习开发完整游戏惹!激动!】
游戏规则简介:
Flappy 是一款鸟类飞行游戏(障碍躲避类),玩家单击屏幕,小鸟就向上飞;否则小鸟下降,以此来躲避障碍(管道),每通过一组管道就得一分。
游戏分析:
———— 用到的类名及方法名————
名称 | 使用说明 |
---|---|
Bird | 【类】小鸟类 |
Pineline | 【类】管道类 |
birdUpdate() | 【小鸟类方法】控制小鸟向上飞行 |
updatePineline() | 【管道类方法】控制管道不断向左 |
createMap() | 方法——用于绘制地图 |
checkDead() | 方法——用户判断小鸟的生命状态 |
getResult() | 方法——用于获取最终分数 |
………………………………
先创建两个类,具体实现方法可以用pass语句替代,然后创建一个绘制地图的函数createMap() ;最后,在侏罗纪中绘制背景图片。
关键代码如下:
import pygame
import sys
import random
class Bird(object):
'''小鸟类'''
def __init__(self):
'''定义初始化方法'''
pass
def birdUpdate(self):
pass
class Pipeline(object):
'''定义一个管道类'''
def __init__(self):
'''定义初始化方法'''
pass
def updatePipeline(self):
'''水平移动'''
pass
def createMap():
'''定义创建地图的方法'''
screen.fill((255,255,255)) #填充颜色
screen.blit(background,(0,0)) # 填入到背景
pygame.display.update() #更新显示
if __name__ == '__main__':
'''主程序'''
pygame.init() #初始化pygame
size = width, height = 500,493 #设置窗口
screen = pygame.display.set_mode(size) #显示窗口
clock = pygame.time.Clock() #设置时钟
Pipeline = Pipeline() #实例化管道类
Bird = Bird() #实例化小鸟类
while True:
clock.tick(60) #每秒执行六十次
#轮询事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
background = pygame.image.load("E:\\background.png") #加载背景图片
createMap() #绘制地图
pygame.quit() #退出
效果演示(是我自己用画图做的丑图hhhh):
对小鸟类的编辑中应该完成以下几个任务:
关键代码如下:
import pygame
import sys
import random
class Bird(object):
'''小鸟类'''
def __init__(self):
'''定义初始化方法'''
self.birdRect = pygame.Rect(65,50,50,50) #鸟的矩形
#定义鸟的三种状态列表
self.birdStatus = [pygame.image.load("E://bao1.png"),
pygame.image.load("E://bao2.png"),
pygame.image.load("E://bao3.png")]
self.status = 0 #默认飞行状态
self.birdX = 120 #鸟所在X轴坐标
self.birdY = 350 #鸟所在Y轴坐标,即上下飞行高度
self.jump = False #默认情况小鸟自动降落
self.jumpSpeed = 100 #跳跃高度
self.gravity = 2 #重力
self.dead = False #默认小鸟状态为活着
def birdUpdate(self):
if self.jump:
#小鸟跳跃
self.jumpSpeed -=1 #速度递减,上升越来越慢
self.birdY -= self.jumpSpeed #鸟Y轴坐标减小,小鸟上升
else:
#小鸟坠落
self.gravity += 0.0 #重力递增,下降越来越快
self.birdY += self.gravity #鸟Y轴坐标增加,小鸟下降
self.birdRect[1] = self.birdY #更改Y轴位置
class Pipeline(object):
'''定义一个管道类'''
def __init__(self):
'''定义初始化方法'''
pass
def updatePipeline(self):
'''水平移动'''
pass
def createMap():
'''定义创建地图的方法'''
screen.fill((255,255,255)) #填充颜色
screen.blit(background,(0,0)) # 填入到背景
#显示小鸟
if Bird.dead:
Bird.status = 2 #撞到管道的状态
elif Bird.jump:
Bird.status = 1 #起飞状态
screen.blit(Bird.birdStatus[Bird.status],(Bird.birdX,Bird.birdY)) #设置小鸟的坐标
Bird.birdUpdate() #鸟移动
pygame.display.update() #更新显示
if __name__ == '__main__':
'''主程序'''
pygame.init() #初始化pygame
size = width, height = 400,720 #设置窗口
screen = pygame.display.set_mode(size) #显示窗口
clock = pygame.time.Clock() #设置时钟
Pipeline = Pipeline() #实例化管道类
Bird = Bird() #实例化小鸟类
while True:
clock.tick(60) #每秒执行六十次
#轮询事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if (event.type == pygame.KEYDOWN)and not Bird.dead:
Bird.jump = True #跳跃
Bird.gravity = 5
Bird.jumpSpeed = 10
background = pygame.image.load("E:\\background.png") #加载背景图片
createMap() #绘制地图
pygame.quit() #退出
对管道类的编辑中应该完成以下几个任务:
关键代码如下:
import pygame
import sys
import random
class Bird(object):
'''小鸟类'''
def __init__(self):
'''定义初始化方法'''
self.birdRect = pygame.Rect(65,50,50,50) #鸟的矩形
#定义鸟的三种状态列表
self.birdStatus = [pygame.image.load("E://bao1.png"),
pygame.image.load("E://bao2.png"),
pygame.image.load("E://bao3.png")]
self.status = 0 #默认飞行状态
self.birdX = 120 #鸟所在X轴坐标
self.birdY = 350 #鸟所在Y轴坐标,即上下飞行高度
self.jump = False #默认情况小鸟自动降落
self.jumpSpeed = 100 #跳跃高度
self.gravity = 2 #重力
self.dead = False #默认小鸟状态为活着
def birdUpdate(self):
if self.jump:
#小鸟跳跃
self.jumpSpeed -=1 #速度递减,上升越来越慢
self.birdY -= self.jumpSpeed #鸟Y轴坐标减小,小鸟上升
else:
#小鸟坠落
self.gravity += 0.0 #重力递增,下降越来越快
self.birdY += self.gravity #鸟Y轴坐标增加,小鸟下降
self.birdRect[1] = self.birdY #更改Y轴位置
class Pipeline(object):
'''定义一个管道类'''
def __init__(self):
'''定义初始化方法'''
self.wallx = 400 #管道所在的X坐标
self.pineUp = pygame.image.load("E://pinedown.png") #加载上管道图片
self.pineDown = pygame.image.load("E://pine.png") #加载下管道图片
def updatePipeline(self):
'''水平移动'''
self.wallx -=5 #管道X轴坐标递减,即管道向左移动
if self.wallx < -80: #管道运行到一定位置,小鸟飞跃管道,分数加一
self.wallx = 400
def createMap():
'''定义创建地图的方法'''
screen.fill((255,255,255)) #填充颜色
screen.blit(background,(0,0)) # 填入到背景
#显示管道
screen.blit(Pipeline.pineUp,(Pipeline.wallx,0)) #上管道坐标位置
screen.blit(Pipeline.pineDown,(Pipeline.wallx,350)) #下管道坐标位置
Pipeline.updatePipeline() #管道移动
#显示小鸟
if Bird.dead:
Bird.status = 2 #撞到管道的状态
elif Bird.jump:
Bird.status = 1 #起飞状态
screen.blit(Bird.birdStatus[Bird.status],(Bird.birdX,Bird.birdY)) #设置小鸟的坐标
Bird.birdUpdate() #鸟移动
pygame.display.update() #更新显示
if __name__ == '__main__':
'''主程序'''
pygame.init() #初始化pygame
size = width, height = 900,550 #设置窗口
screen = pygame.display.set_mode(size) #显示窗口
clock = pygame.time.Clock() #设置时钟
Pipeline = Pipeline() #实例化管道类
Bird = Bird() #实例化小鸟类
while True:
clock.tick(60) #每秒执行六十次
#轮询事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if (event.type == pygame.KEYDOWN)and not Bird.dead:
Bird.jump = True #跳跃
Bird.gravity = 5
Bird.jumpSpeed = 10
background = pygame.image.load("E:\\background.png") #加载背景图片
createMap() #绘制地图
pygame.quit() #退出
展现效果演示:(中间的是我家狗子,管道依然是我自己在画图里画的【注意尺寸】)
拟解决问题:
①两个管道用不同速度出现;
②同一界面多管道;
③管道长度随机。
在这一部分需要满足的功能有以下几点:
关键代码:
import pygame
import sys
import random
class Bird(object):
'''小鸟类'''
def __init__(self):
'''定义初始化方法'''
self.birdRect = pygame.Rect(65,50,50,50) #鸟的矩形
#定义鸟的三种状态列表
self.birdStatus = [pygame.image.load("E://bao1.png"),
pygame.image.load("E://bao2.png"),
pygame.image.load("E://bao3.png")]
self.status = 0 #默认飞行状态
self.birdX = 120 #鸟所在X轴坐标
self.birdY = 350 #鸟所在Y轴坐标,即上下飞行高度
self.jump = False #默认情况小鸟自动降落
self.jumpSpeed = 100 #跳跃高度
self.gravity = 2 #重力
self.dead = False #默认小鸟状态为活着
def birdUpdate(self):
if self.jump:
#小鸟跳跃
self.jumpSpeed -=1 #速度递减,上升越来越慢
self.birdY -= self.jumpSpeed #鸟Y轴坐标减小,小鸟上升
else:
#小鸟坠落
self.gravity += 0.0 #重力递增,下降越来越快
self.birdY += self.gravity #鸟Y轴坐标增加,小鸟下降
self.birdRect[1] = self.birdY #更改Y轴位置
class Pipeline(object):
'''定义一个管道类'''
def __init__(self):
'''定义初始化方法'''
self.wallx = 400 #管道所在的X坐标
self.pineUp = pygame.image.load("E://pinedown.png") #加载上管道图片
self.pineDown = pygame.image.load("E://pine.png") #加载下管道图片
def updatePipeline(self):
'''水平移动'''
self.wallx -=5 #管道X轴坐标递减,即管道向左移动
if self.wallx < -80: #管道运行到一定位置,小鸟飞跃管道,分数加一
global score
score += 1
self.wallx = 400
def createMap():
'''定义创建地图的方法'''
screen.fill((255,255,255)) #填充颜色
screen.blit(background,(0,0)) # 填入到背景
#显示管道
screen.blit(Pipeline.pineUp,(Pipeline.wallx,0)) #上管道坐标位置
screen.blit(Pipeline.pineDown,(Pipeline.wallx,350)) #下管道坐标位置
Pipeline.updatePipeline() #管道移动
#显示小鸟
if Bird.dead:
Bird.status = 2 #撞到管道的状态
elif Bird.jump:
Bird.status = 1 #起飞状态
screen.blit(Bird.birdStatus[Bird.status],(Bird.birdX,Bird.birdY)) #设置小鸟的坐标
Bird.birdUpdate() #鸟移动
#显示分数
screen.blit(font.render(str(score),3,(255,255,255)),(200,50)) #设置颜色及位置坐标
pygame.display.update() #更新显示
def checkDead():
#上方管子的矩形位置
upRect = pygame.Rect(Pipeline.wallx,500,Pipeline.pineDown.get_width()-10,Pipeline.pineDown.get_height())
#检测小鸟是否与上下方管子碰撞
if upRect.colliderect(Bird.birdRect):
Bird.dead = True
#检测小鸟是否飞出上下边界
if not 0 < Bird.birdRect[1] < height:
Bird.dead = True
return True
else:
return False
def getResult():
final_text1 = "Game Over"
final_text2 = "Your final score is: " + str(score)
ft1_font = pygame.font.SysFont("Arial",70)
ft1_surf = font.render(final_text1,1,(242,3,36))
ft2_font = pygame.font.SysFont("Arial",50)
ft2_surf = font.render(final_text2,1,(253,177,6))
#设置第一行文字显示位置
screen.blit(ft1_surf,[screen.get_width()/2 - ft1_surf.get_width()/2,100])
#设置第二行文字显示位置
screen.blit(ft2_surf,[screen.get_width()/2 - ft2_surf.get_width()/2,200])
pygame.display.flip()
if __name__ == '__main__':
'''主程序'''
pygame.init() #初始化pygame
pygame.font.init() #初始化字体
font = pygame.font.SysFont(None,50) #设置默认字体和大小
size = width, height = 900,550 #设置窗口
screen = pygame.display.set_mode(size) #显示窗口
clock = pygame.time.Clock() #设置时钟
Pipeline = Pipeline() #实例化管道类
Bird = Bird() #实例化小鸟类
score = 0
while True:
clock.tick(60) #每秒执行六十次
#轮询事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if (event.type == pygame.KEYDOWN)and not Bird.dead:
Bird.jump = True #跳跃
Bird.gravity = 5
Bird.jumpSpeed = 10
background = pygame.image.load("E:\\background.png") #加载背景图片
if checkDead():
getResult()
else:
createMap() #绘制地图
pygame.quit() #退出
———— pygame游戏编程部分入门完成!————