pygame库实现移动底座弹球小游戏


Posted in Python onApril 14, 2020

本文实例为大家分享了pygame实现移动底座弹球的具体代码,供大家参考,具体内容如下

输出结果:

pygame库实现移动底座弹球小游戏

实现代码:

# -*- coding: utf-8 -*-
 
#Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏
 
import pygame as pg
from pygame.locals import * #将pygame所有常量导入,如后面的QUIT
from time import sleep
import sys
 
#设置基本屏幕参数
pg.init()       #初始化,如果没有的话字体会报错等等
scr=pg.display.set_mode((600,550)) #设置屏幕大小
pg.display.set_caption(("移动底座弹球的小游戏")) #设置屏幕标题
pp=255, 255, 0   #red是一个元组,表示乒乓球橙色
green=0,255,0
white=255,255,255
dizuo=120, 63, 4  #底座颜色灰土色
pink=255, 0, 255
cs=225,121,21   #乒乓球颜色,橙色
 
#设计一下乒乓球的运动方式,乒乓球在屏幕内运动
x=120 #乒乓球的坐标设置为(x,y)
y=120
vx=3 #设置初速度vx,vy,当乒乓球到达屏幕边缘的时候速度取反,也就是乒乓球到达左右两边缘的时候vx取反,上下边缘的时候vy取反。
vy=3
a=200 #a代表乒乓板的x坐标值,因为乒乓板y坐标值是固定的
 
My_font=pg.font.Font(None,40) #40是字的大小,设置字体,None表示没有,代指pygame默认的字体,但是这样的字体缺点是不能打印出中文。
zt1=pg.font.SysFont('华文楷体',24) #楷体,a=pg.font.get_fonts() #获得系统自带的字体
zt2=pg.font.SysFont('华文楷体',20)
zt21=pg.font.SysFont('幼圆',29)
 
def printtext(font,text,x,y,color): #设计一个函数,在游戏屏幕上打印文本,代码表示先把文本转换成一个位图然后打印在屏幕上,打印文本需要打印的具体坐标和文本颜色,字体等参数。
 img=font.render(text,True,color) #转换为位图
 scr.blit(img,(x,y))
 
#设置得分,基础记分量,为什么设置基础记分量?我想的是经过一段时间后乒乓球会加速,从而逐渐增加游戏难度,当然,基础记分量也要翻倍。
c=0 #c是加速器,如果接了10次,那么加速
fs=0 #fs是分数,接到一次乒乓球就加分
k=1 #基础加分量
 
#游戏的主要代码了,pygame采用帧和轮询的方式,帧是指会不断刷新,也就是while True循环,轮询是不断的询问用户的输入。
#在下面代码中,会不断获取鼠标具体坐标和QUIT事件是否发生。Scr.fill会用RGB值为(199,21,133)的颜色刷新屏幕,
#以后画圆写字都在这基础上,下一次循环后又刷新。因此在屏幕中乒乓球和乒乓板就会动态呈现出来。
while True:
 scr.fill((199,21,133)) #游戏背景色
 background = pg.image.load('F:/File_Python/Resources/00102.jpg').convert()
 scr.blit(background, (0, 0)) 
 for eve in pg.event.get():
  if eve.type == QUIT: #点击左上角的×
   sys.exit()   #如果无效,可以试试exit()函数
 mx,my=pg.mouse.get_pos()  #获得鼠标的x,y坐标
 a=mx #鼠标x坐标就是乒乓板的坐标,因此移动鼠标乒乓板也移动
 #画乒乓球和画乒乓板了,我们可以简化为圆形和矩形
 pg.draw.circle(scr,pp,(x,y),40,0)
 pg.draw.rect(scr,dizuo,(a,530,100,20),0)
 #考虑乒乓球的运动,如果乒乓球碰到左右屏幕边缘,vx取反,碰到上边缘或者碰到乒乓板的时候,vy取反,其余情况表示乒乓板没有接触到乒乓球,跳出循环,游戏结束。
 x=x+vx
 y=y+vy
 if x>550 or x<40:
  vx=-vx
 if y<40:
  vy=-vy
 if y>510 and abs(a-x+50)<50:
  if vy>0:
   vy=-vy
  else:pass
  c=c+1  #每接到3次后乒乓球加速
  fs=fs+k #加分
  if c>=3:
   c=0
   k=k+k #乒乓球加速后记分量双倍
   if vx>0: #加速
    vx=vx+1
   else:
    vx=vx-1
  else:pass
 elif y>510 and abs(a-x+50)>50:
  break
 #在while循环最后,我写一下得分,规则,还有刷新,刷新很重要!
 sleep(0.005) #休眠一定时间,不然乒乓球速度依然很快
 printtext(zt21,"移动鼠标控制底座左右移动",120,20,pink)
 printtext(zt2,"得分",550,12,green)
 printtext(zt2,str(fs),560,32,green)
 pg.display.update()
#在循环结束后就是前面乒乓板没有接触到乒乓球后发生的情况,最后是游戏结束的代码,毕竟这游戏靠看得分看成败
scr.fill((28, 69, 135)) #游戏结束后全屏改变颜色
zt3=pg.font.SysFont('华文楷体',60)
zt4=pg.font.SysFont('华文楷体',40)
printtext(zt3,"你好,游戏结束",60,120,white)
printtext(zt4,'总得分: '+str(fs),120,400,white)
pg.display.update()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python下的subprocess模块的入门指引
Apr 16 Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
PyQt5每天必学之切换按钮
Aug 20 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
python3 mmh3安装及使用方法
Oct 09 Python
如何通过Django使用本地css/js文件
Jan 20 Python
Python处理PDF与CDF实例
Feb 26 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
python科学计算之numpy——ufunc函数用法
Nov 25 #Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
Nov 25 #Python
Python解析json代码实例解析
Nov 25 #Python
python实现差分隐私Laplace机制详解
Nov 25 #Python
python3实现弹弹球小游戏
Nov 25 #Python
python数据化运营的重要意义
Nov 25 #Python
python实现拉普拉斯特征图降维示例
Nov 25 #Python
You might like
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
python求质数的3种方法
2018/09/28 Python
Python3中的bytes和str类型详解
2019/05/02 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
linux比较文件内容的命令是什么
2015/09/23 面试题
初中地理教学反思
2014/01/11 职场文书
文字自荐书范文
2014/02/10 职场文书
《胡杨》教学反思
2014/02/16 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
清明节寄语2015
2015/03/23 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技
Springboot中如何自动转JSON输出
2022/06/16 Java/Android