python中的pygame实现接球小游戏
作者:??牧子川???? 发布时间:2021-10-21 13:33:50
标签:python,pygame,实现,接球,游戏
一、介绍模块
最小开发框架:
基于python 的Pygame最小开发框架
1、Pygame和sys模块
import pygame #制作游戏时要使用的模块
import sys #python的标准库,对内部各功能模块进行初始化创建,系统模块
2、random模块
需要在屏幕上随机生成小球
from random import randint
详情请看此文章:python中的随机数 Random介绍
二、相关功能
1、窗口尺寸改变
可以调节游戏屏幕的大小
# 改变窗口尺寸
elif event.type == pygame.VIDEORESIZE:
size = w,h = event.w,event.h
screen = pygame.display.set_mode(size,pygame.RESIZABLE)
pygame.VIDEORESIZE 这是窗口大小改变事件,事件发生后,返回event.size元组,包含新窗口的宽度和高度。 .size[0] 高度,也可以用event.w表示 .size[1] 宽度,也可以用event.h表示 返回参数仅在事件发生时有用
2、键盘控制挡板
# 键盘控制挡板
elif event.type == pygame.KEYDOWN: #键盘按下事件检测
if event.key == pygame.K_LEFT: # 判断挡板是否左移
if board_rect.left > 0 and board_rect.left <= w - 186:
board_rect.left -= board_x
elif board_rect.left <= 0: # 判断挡板左边的坐标是否小于0
board_rect.left = 0
board_rect.top -= board_y
elif event.key == pygame.K_RIGHT: # 判断挡板是否右移
if board_rect.right >= 186 and board_rect.right < w:
board_rect.right += board_x
elif board_rect.right >= w: # 判断挡板右边的坐标是否大于屏幕的宽度 board_rect.right = w
board_rect.bottom += board_y
3、鼠标控制
#鼠标控制挡板
elif event.type == pygame.MOUSEMOTION:
# 鼠标左键按下并跟随鼠标移动
if event.buttons[0] == 1:
if event.pos[0] >= 0 and event.pos[0] < w - 186:#判断鼠标的位置
board_rect.left = event.pos[0] #将鼠标的x坐标给Rect对象的左边
elif event.pos[0] >= w - 186 and event.pos[0] <= w:
board_rect.left = w - 186
# board_rect.top = h - 17 #档板位置在底部
elif event.type == pygame.MOUSEBUTTONDOWN: #鼠标按键按下
# 将鼠标当前位置给挡板
if event.button == 1:
if event.pos[0] >= 0 and event.pos[0] < w - 186:#判断鼠标的位置
board_rect.left = event.pos[0] #将鼠标的x坐标给Rect对象的左边
if event.pos[0] >= w - 186 and event.pos[0] <= w:
board_rect.left = w - 186
# board_rect.top = h - 17
4、挡板接住小球并得分
# 下方挡板接到小球
if ball_y >= h - 37 and (ball_x >= board_rect.left - 20 and ball_x <= board_rect.left + 206):
move_y = - move_y # y方向速度反向
score += points #得分
count += 1 #次数增加1次
if count == 5: # 每满五次,难度和单次接球得分增加
count = 0 # 接球得分的次数清零
points += points
# x方向速度增加
if move_x > 0:
move_x += 1
else:
move_x -= 1
move_y -= 1
5、小球未接住小球
# 下方挡板未接到小球
if ball_y > h - 27 and (ball_x < board_rect.left - 20 or ball_x > board_rect.left + 206):
# 游戏结束
ball_y = 200 #小球所在的位置
break
6、小球移动
# 移动小球
ball_x += move_x
ball_y += move_y
if ball_x <= 20 or ball_x >= w - 20: # 碰到左右两侧墙壁
move_x = - move_x # x方向速度反向
if ball_y <= 20: # 碰到上方墙壁
move_y = - move_y # y方向速度反向
7、显示分数
my_score = font.render(str(score), False, (255, 255, 0)) # 创建文字对象(文字,是否平滑,文字颜色)
screen.blit(my_score, (w - 100, 30)) # 将文字添加到窗口上
三、完整代码
import sys
from random import randint
import pygame
pygame.init() # 初始化
size = w, h = (600,500) # 屏幕显示的区域,高度和宽度
screen = pygame.display.set_mode(size,pygame.RESIZABLE)
pygame.display.set_caption("接球游戏") # 屏幕的标题
fpsClock = pygame.time.Clock() # 帧速率 窗口刷新速度 越大运行越快
board = pygame.image.load(r"D:\pycharm\WorkTime(大二上)\挡板.jpg")
board_rect = board.get_rect() #对图片进行加框 利用surface生成rect
color = pygame.Color(255,255,255) # 屏幕(窗口)的颜色:白色
Green = pygame.Color('green') # 小球的颜色:绿色
# 随机生成小球的x、y坐标(整数,包括两端)
ball_x = randint(20,580)
ball_y = randint(20,200)
# 小球x、y坐标变化量
move_x = 1
move_y = 1
# 挡板x、y坐标变化量
board_x = 46
board_y = 0
score=0#得分
font=pygame.font.Font(r'D:\字库\书法和新增字库\微软雅黑.ttf',60) #设置字体(前者是字体路径)和字体大小
points=1 #一次接球的加分
count=0#接球得分的次数
# size1 = board.get_size() #获取图片大小
# print(size1)
while True:
board_rect.top = h - 17
for event in pygame.event.get(): # pygame.event.get() 从事件队列中取出事件,并从队列中删除该事件
if event.type == pygame.QUIT:
sys.exit()
# 改变窗口尺寸
elif event.type == pygame.VIDEORESIZE:
size = w,h = event.w,event.h
screen = pygame.display.set_mode(size,pygame.RESIZABLE)
# 键盘控制挡板
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT: # 挡板左移
if board_rect.left > 0 and board_rect.left <= w - 186:
board_rect.left -= board_x
elif board_rect.left <= 0: # 判断挡板左边的坐标是否小于0
board_rect.left = 0
board_rect.top -= board_y
elif event.key == pygame.K_RIGHT: # 挡板右移
if board_rect.right >= 186 and board_rect.right < w:
board_rect.right += board_x
elif board_rect.right >= w: # 判断挡板右边的坐标是否大于屏幕的宽度 board_rect.right = w
board_rect.bottom += board_y
#鼠标控制挡板
elif event.type == pygame.MOUSEMOTION:
# 鼠标左键按下并跟随鼠标移动
if event.buttons[0] == 1:
if event.pos[0] >= 0 and event.pos[0] < w - 186:#判断鼠标的位置
board_rect.left = event.pos[0] #将鼠标的x坐标给Rect对象的左边
elif event.pos[0] >= w - 186 and event.pos[0] <= w:
board_rect.left = w - 186
# board_rect.top = h - 17 #档板位置在底部
elif event.type == pygame.MOUSEBUTTONDOWN: #鼠标按键按下
# 将鼠标当前位置给挡板
if event.button == 1:
if event.pos[0] >= 0 and event.pos[0] < w - 186:#判断鼠标的位置
board_rect.left = event.pos[0] #将鼠标的x坐标给Rect对象的左边
if event.pos[0] >= w - 186 and event.pos[0] <= w:
board_rect.left = w - 186
# board_rect.top = h - 17
# 下方挡板接到小球
if ball_y >= h - 37 and (ball_x >= board_rect.left - 20 and ball_x <= board_rect.left + 206):
move_y = - move_y # y方向速度反向
score += points
count += 1
if count == 5: # 每满五次,难度和单次接球得分增加
count = 0 # 接球得分的次数清零
points += points
# x方向速度增加
if move_x > 0:
move_x += 1
else:
move_x -= 1
move_y -= 1
# 下方挡板未接到小球
if ball_y > h - 27 and (ball_x < board_rect.left - 20 or ball_x > board_rect.left + 206):
# 游戏结束
ball_y = 200
break
# 移动小球
ball_x += move_x
ball_y += move_y
if ball_x <= 20 or ball_x >= w - 20: # 碰到左右两侧墙壁
move_x = - move_x # x方向速度反向
if ball_y <= 20: # 碰到上方墙壁
move_y = - move_y # y方向速度反向
fpsClock.tick(200)
screen.fill(color)
# 显示分数
my_score = font.render(str(score), False, (255, 255, 0)) # 创建文字对象(文字,是否平滑,文字颜色)
screen.blit(my_score, (w - 100, 30)) # 将文字添加到窗口上
screen.blit(board,board_rect) #将一个图像绘制在另一个图像上 把surface对象覆盖到移动后的rect对象
pygame.draw.circle(screen, Green, (ball_x, ball_y), 20) # 绘制小球
pygame.display.update() # 对显示窗口进行更新,默认窗口全部重绘
来源:https://juejin.cn/post/7083024810321641509
0
投稿
猜你喜欢
- 本文实例为大家分享了Django文件上传与下载的具体代码,供大家参考,具体内容如下文件上传1.新建django项目,创建应用stu: pyt
- 问题描述有些小伙伴在使用python做GUI界面的时候可能想添加这么一个小功能,就是在界面的某个角落动态的显示当前的时间,本文将介绍具体方法
- 不论是做WEB设计还是做交互模型,最快确立创意与设计效果的最好办法就是用笔在纸上绘制出来。不过从事IT行业的人很少一部分是来自美术学院。当然
- 本文详细讲述了DRF认证组件的原理以及用法.源码剖析讲解DRF版本的时候我们都知道了,在dispatch方法里执行了initial方法来初始
- 本文实例讲述了Python实现PS滤镜特效之扇形变换效果。分享给大家供大家参考,具体如下:这里用 Python 实现 PS 滤镜中的一种几何
- 第五个页面name="changenick.php" <? include &q
- 使用现有的txt文本和图片,就可以用wordcloud包生成词云图。大致步骤是:1、读取txt文本并简单处理;2、读取图片,以用作背景;3、
- 目录1.一般的模型构造、训练、测试流程2.自定义损失和指标3.使用tf.data构造数据4.样本权重和类权重5.多输入多输出模型6.使用回
- 导语又到了裹紧被子,穿起秋裤的季节!这些天,我们这边开始下雨了,温度瞬间降了10几度。遭受了秋天第一场寒潮的“侵袭”,我是真的冷,一大早穿上
- 非原创:英文版混乱的标记语言XHTML2/HTML5源文地址:漫画英文版源文地址感谢我的同事Kevin Jaw的翻译。他的博客地址是:Kev
- 本文实例为大家分享了python pygame实现五子棋双人联机的具体代码,供大家参考,具体内容如下同一局域网内,服务端开启时,另一机器将I
- 一、函数解释在torch/_C/_VariableFunctions.py的有该定义,意义就是实现一下公式:换句话说,就是需要传入5个参数,
- Sql Server 中一个非常强大的日期格式化函数: 获得当前系统时间,GETDATE(): 2008年01月08日 星期二 14:59
- 如下所示:import numpy as npimport pandas as pdfrom pandas import Series,Da
- 交互式命令行是一种方便用户进行交互的工具,能够使用户与计算机进行快速的交互操作,提高工作效率。Python pyreadline模块可以帮助
- 当我们想给服务器发送一些请求时,可以选择requests库来实现。相较于其它库而言,这种库的使用还是非常适合新手使用的。本篇要讲的是requ
- python简单的学生信息管理系统-文件版,供大家参考,具体内容如下功能如下主函数部分增加学生信息修改学生信息删除学生信息查询学生显示所有学
- 写在前面我的 CUDA 版本是什么? 这个问题本身就是有问题的,因为没有搞清楚cuda的分类这里的 CUDA 说的是 Driver CUDA
- 维护脚本一例,写得有点乱,只是作为一个实例,演示如何快速利用工具快速达到目的:应用到:shell与python数据交互、数据抓取,编码转换#
- 介绍psutil能够轻松实现获取系统运行的进程和系统利用率。导入模块import psutils获取系统性能信息CPU信息使用cpu_tim