【Python】趣味游戏编程练习记录

news2024/12/25 22:49:45


最近在阅读童晶写的《Python游戏趣味编程》,边学边记录吧,蛮有意思。

一、学习要点

1.安装游戏开发库pgzero

pip install pgzero  

 2.导入游戏开发库及基础绘图操作

import pgzrun #导入游戏开发库
def draw(): #定义绘图函数
    screen.fill('white')#屏幕填充白色背景
    screen.draw.filled_circle((300,250),50,'black')#屏幕绘制圆心坐标为(300,250),半径为50的圆,填充黑色
    screen.draw.circle((340, 250), 90, 'black')#屏幕绘制圆心坐标为(340,250),半径为90的圆,线条颜色为黑色
pgzrun.go()#运行程序

 默认屏幕横坐标为0~800,纵坐标为0~600,左上角坐标为(0,0)。

颜色填充同样可以用三原色,即(r,g,b),如:

screen.fill((0,0,0))#黑色背景

3.在函数内修改函数全局变量时,需用global声明。

a=2
b=1

def new():
    global a,b#声明修改的是全局变量a和b
    a = 3
    b = 7

4.range()是范围的意思,它其中可以有1~3个参数。

for i in range(10):#从0到9遍历
    print(i,end=' ')
print()
for j in range(5,10):#从5到9遍历
    print(j,end=' ')
print()
for k in range(0,10,2):#从0到9,步长为2进行遍历
    print(k,end=' ')
print()
for l in range(10,-7,-3):#从9到-6,步长为-3进行遍历
    print(l,end=' ')

运行效果如下: 

0 1 2 3 4 5 6 7 8 9
5 6 7 8 9
0 2 4 6 8
10 7 4 1 -2 -5

二、练习展示

1. 练习2-3

利用绘制空心圆、填充圆的函数以及坐标的定义,尝试编写代码,绘制出简易人脸效果。

import pgzrun
def draw():
    screen.fill('white')#白色背景
    screen.draw.filled_circle((300,250),50,'black')#左眼珠
    screen.draw.filled_circle((500, 250), 50, 'black')#右眼珠
    screen.draw.circle((340, 250), 90, 'black')#左眼眶
    screen.draw.circle((540, 250), 90, 'black')#右眼眶
    screen.draw.circle((440, 350), 20, 'black')#小鼻子
    screen.draw.circle((440, 470), 70, 'black')#嘴巴
    screen.draw.circle((440, 350), 240, 'black')#脸
pgzrun.go()

 

2. 练习3-8

尝试利用for语句,画出一圈黑、一圈白,共10个圆圈的效果。

import pgzrun
color = 0 
def draw():
    global color
    screen.fill('white')
    for i in range(101,1,-10): #绘图重叠的部分,新图会覆盖旧图,所以越画越小才有环的效果
        if color==0: #color为0填充黑色圆
            screen.draw.filled_circle((400, 300), i, 'black')
            color = 1
        else: #color不为0填充白色圆
            screen.draw.filled_circle((400, 300), i, 'white')
            color = 0

pgzrun.go()

3. 练习3-11

import pgzrun # 导入游戏库
import random # 导入随机库
WIDTH = 1200 # 设置窗口的宽度
HEIGHT = 800 # 设置窗口的高度
R = 100        # 大圆圈的半径

def draw():    # 绘制模块,每帧重复执行
    screen.fill('white') # 白色背景
    for x in range(0, WIDTH+2*R, 2*R): # x坐标平铺遍历
        for y in range(0, HEIGHT+2*R, 2*R): # y坐标平铺遍历
             for r in range(1, R, 10): # 同心圆半径从小到大遍历
                # 绘制一个填充圆,坐标为(x,y),半径为R-r,颜色随机
                screen.draw.filled_circle((x, y), R-r, \
                 (random.randint(0, 255), random.randint(0, 255),\
                 random.randint(0, 255)))

def on_mouse_down(): # 当按下鼠标键时
    draw() # 调用绘制函数

pgzrun.go() # 开始执行游戏

 4. 练习3-12

import pgzrun # 导入游戏库
import random # 导入随机库
WIDTH = 1200 # 设置窗口的宽度
HEIGHT = 800 # 设置窗口的高度
R = 50        # 大圆圈的半径

def draw():    # 绘制模块,每帧重复执行
    screen.fill('white') # 白色背景
    for x in range(0, WIDTH+2*R, R): # x坐标平铺遍历
        for y in range(0, HEIGHT+2*R, R): # y坐标平铺遍历
            # 绘制一个圆,坐标为(x,y),半径为R,颜色随机
            screen.draw.circle((x, y), R, \
                               (random.randint(0, 255), random.randint(0, 255), \
                                random.randint(0, 255)))

def on_mouse_down(): # 当按下鼠标键时
    draw() # 调用绘制函数

pgzrun.go() # 开始执行游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966228.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day14 Java基础——三元运算符(条件运算符)及小结

day14 Java基础——三元运算符(条件运算符)及小结 1.条件运算符(偷懒) package operator;public class Demo10 {public static void main(String[] args) {//x ? y : z//如果xtrue,则结果为y,否则结果为zint score …

vscode中使用 cmake 配置MSVC 编译C++代码, output输出日志存在中文乱码问题,排查

更改控制面板的时钟区域设置会导致2022版本的msvc编译不过出现bug-(无法解决问题) 通过打开setting解密搜索cmake,更改Cmake:Output Log Encoding(已解决) 乱码输出 解决乱码

15.4 zookeeper java client之Curator使用(❤❤❤❤❤)

Curator使用 1. 为什么使用Curator对比Zookeeper原生2. 集成Curator2.1 依赖引入curator-frameworkcurator-recipes2.2 `yml`配置连接信息2.3 CuratorConfig配置类2.4 业务:可重入锁和不可重入锁2.4.1 可重入锁和不可重入锁2.4.2 InterProcessMutex 可重入锁的使用2.4.3 InterP…

React——配置环境、ES6语法补充、Components

文章目录 架构设计前置知识DOM树 配置环境安装 create-react-app安装两个插件创建安装 nodejs仍然无法创建 下次需要创建新项目就使用这三行命令安装 bootstrap使用 bootstrap 包画图追求写 jsx短路原则绑定函数快捷键修改变量名箭头函数简写删除无用的文件写组件调用组件使用 …

办公必备!一键把PDF转换为PPT文件,只需这3款神器!

在当今数字化办公环境中,文件格式的转换已成为提高工作效率的关键因素之一。其中,PDF(便携式文档格式)和PPT(PowerPoint演示文稿)是两种广泛使用的文件格式。然而,有时我们需要将PDF文件转换为PPT格式,以便进行编辑或演示。 为方…

DaoCloud配置不同环境的流水线(Q)

在DaoCloud自动化部署时,不知道如何分别构建生产,测试环境镜像。 Dockfile文件里有 ARG BUILD_ENV"uat" RUN npm run build:${BUILD_ENV} 这样两行代码来区分环境打包的,ARG是用于指定传递给构建运行时的变量,可是…

windows 环境 Visual Studio 2022 新建 cmake 工程测试 cuda 代码编译

1. 参考博客: 1. 【CUDA】CUDA编译:https://blog.csdn.net/u011285477/article/details/104408296 2. 项目文件夹结构: c_cuda/cuda/CMakeLists.txtfoo.cufoo.cuhCMakeLists.txtmain.cpp3. 完整代码: 1. c_cuda/CMakeLis…

只有IP地址怎么部署HTTPS证书

只有IP地址可以申请部署SSL证书。SSL证书不仅能够通过域名进行申请,还可以通过IP地址进行申请和部署。在两种情况下,SSL证书的主要作用是确保网站或服务器与客户端之间的数据传输安全。以下是对SSL证书的相关介绍: 一、选择证书服务商并注册…

初普,stop,射频美容仪拆机图

初普,stop,射频美容仪拆机图

新手教程——HyperMesh静力学分析步骤

仿真技术的飞速发展,为产品在产前进行风险技术性评估,保证设计质量、提高产品设计水平提供了广阔的舞台。而有限元分析已经成为机械类产品仿真分析的关键手段。通过应用有限元分析,在生产制造前的设计阶段,运用现代技术充分反映设…

vue给数组对象赋值改变对象里面的数据,数据没有更新this.$set

替换数组startTime的值: 原数据 this.serviceTimeList.push({serviceTimeName: 服务时间段,startTime: this.startTime,endTime: this.endTime,currentDateStart: this.currentDate,currentDateEnd: this.currentDate}) this.$set(this.array, index, newValue); …

springboot 基于mybatis plus 整合clickHouse以及mysql (多数据源)

一.服务安装 docker安装clickhouse数据库_docker 安装clickhouse-CSDN博客 使用idea链接clickHouse 执行创建数据库 create database student; -- auto-generated definition create table web_visits (date Date default toDate(datetime),datetime DateTime def…

【Dash】Dash链接 csv/excel 文件

一、Dash如何连接csv数据? There area many ways to add data to an app: APIs, external databases, local .txt files, JSON files, and more. In this example, we will highlight one of the most common ways of incorporating data from a CSV sheet. # Imp…

使用 useState 管理响应式状态

title: 使用 useState 管理响应式状态 date: 2024/8/1 updated: 2024/8/1 author: cmdragon excerpt: 摘要:本文详细介绍了在Nuxt3框架中使用useState进行响应式状态管理的方法,包括其基本概念、优势、使用方法、共享状态实现以及性能优化技巧。useSt…

职业教育大数据实验实训室建设应用案例

大数据作为一种重要的信息技术,对各行各业产生了深远的影响。职业教育作为培养应用型人才的摇篮,建设大数据实验实训室,对于提高学生的数据分析能力和解决实际问题的能力具有重要意义。唯众作为一家专注于教育技术领域的企业,凭借…

职场成功全攻略:从简历到薪资谈判的秘诀分享

进入职场是一场漫长而精彩的旅程,它不仅仅是一份工作,更是个人成长、技能提升和实现价值的过程。本篇博客旨在为正在求职或期望在职场更进一步的您提供全面指导,内容涵盖简历制作、面试准备、薪资谈判、职场规划、技能评估到求职策略等多个方…

非递归的快速排序

其实,我们快速排序还有一种更加快的方法就是不采用递归的方法,那就是非递归,所以这一篇文章我们就研究这个非递归到底怎么实现。 首先,我们先思考一个问题:递归的时候,我们存到栈里面的到底是什么&#xf…

密码模块学习笔记(GMT0028)

GMT 0028-2014《密码模块安全技术要求》 GM/T 0028 四个安全等级 11个安全域:密码模块规格;密码模块接口;角色、服务和鉴别;软件/固件安全;运行环境;物理安全;非入侵式安全;敏感安…

学习3dMax需要多久才能从入门到高级3D建模师

学习3dMax需要多久才能从入门到高级3D建模师 学习3dMax从入门到成为高级3D建模师的时间因个体差异而不同,没有一个固定的时间框架。这取决于多种因素,包括你的学习能力、先前是否有相关软件或艺术的经验、投入的时间和精力、以及你学习的深度和广度。不过…

七夕送礼物首选:浪漫实用又出圈,有谁能拒绝?

七夕不知道送什么的看过来,那今天给大家安利一个女生收到都会疯狂爱上的节日礼物——华为FreeBuds Lipstick 2 口红耳机。既浪漫、时尚又实用高级,节日和生日、纪念日送都很合适。 外观包装:精致如她,一见倾心 为什么首选推荐这…