小学生python游戏编程4----拼图游戏

这篇具有很好参考价值的文章主要介绍了小学生python游戏编程4----拼图游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要设计

主要内容是设计开发一个趣味拼图游戏,其功能是对加载的图片进行分割(如分割5×5矩阵或其他类型矩阵),上篇文章讲了,具体可看小学生python游戏编程3----拼图游戏-准备(https://blog.csdn.net/fqfq123456/article/details/127173684),把分隔的图片加载到游戏界面,随机打乱顺序,用户使用鼠标点击图片框中的图片,两次点击的图片进行位置互换进行拼图,系统能够自动判别拼图是否成功并进行提示。

应用知识点

1、python知识点

1.1 函数定义与使用

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
定义一个函数,你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

现在学习以下函数,实现两个小拼图块位置的交换
def jiaohuanFk(a, b):
# i,j为要交换的两个小拼图块的序号
# 以下利用tempPos中间变量,实现两个小拼图块位置的交换
tempPos = grid[a].pos
grid[a].pos = grid[b].pos
grid[b].pos = tempPos
在随机打乱图片时多次调用,重复随机交换多次小拼图的位置
import random
for k in range(xy-1):
i = random.randint(0, x
y-1) # 第一个小拼图块的序号
j = random.randint(0, x*y-1) # 第二个小拼图块的序号
jiaohuanFk(i, j) # 调用函数交换两个小拼图块的位置

1.2 random

在Python中可以用于随机数生成的有两种主要途径,一是random模块,另一个是numpy库中random函数。在我们日常使用中,如果是为了得到随机的单个数,多考虑random模块;
random模块中约7个函数都是可以用来生成随机数的:
1、random.random():随机生成一个 [0,1) 的浮点数
2、random.uniform(a,b):随机生成一个 [a,b) 的浮点数
3、random.randint(a,b):随机生成一个 [a,b] 的整数,本练习中主要用此函数
4、random.choice(sequence):从列表,元组,字符串(可用于for循环的数据类型)中随机选择一个元素
5、random.randrange(a,b,step):在生成的<以a为始,每step递增,以b为终>这样的一个整数序列中随机选择一个数
6、random.shuffle(a):打乱一个列表的元素顺序
7、random.sample(self, population, k):从序列population中随机取出k个数;population的类型可以是列表、元组、集合、字符串

2、pygamezero知识点

2.1 基本框架,取上节中讲到的分隔的一个小方块

通过此基本框架,开启我们拼图游戏的第一步
效果:

小学生python游戏编程4----拼图游戏

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注

fangkuai_SIZE_w = 124  # 小图块的宽
fangkuai_SIZE_h = 87  # 小图块的高
WIDTH = 5*fangkuai_SIZE_w  # 设置窗口的宽度
HEIGHT = 5*fangkuai_SIZE_h  # 设置窗口的高度

fangkuai = Actor('fenge\\df-10')  # 导入拼图方块图片
fangkuai.x = WIDTH/2   # 拼图方块图片的x坐标
fangkuai.y = HEIGHT/2  # 拼图方块图片的y坐标


def draw():  # 绘制模块,每帧重复执行
    screen.clear()  # 每帧清除屏幕,便于重新绘制
    fangkuai.draw()  # 绘制小拼图块

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

2.1 拼满游戏界面

效果:
小学生python游戏编程4----拼图游戏

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注

TILE_SIZE_w = 124  # 小图块的宽
TILE_SIZE_h = 87  # 小图块的高
x = 5  # 横向方块数
y = 5  # 纵向方块数
WIDTH = x*TILE_SIZE_w  # 设置窗口的宽度
HEIGHT = y*TILE_SIZE_h  # 设置窗口的高度


**grid = [] # 列表,用来存放最终所有拼图信息
for i in range(x): # 对行循环
    for j in range(y): # 对列循环
        fangkuai = Actor('fenge\\df-10')  # 导入拼图方块图片
        fangkuai.left = j * TILE_SIZE_w # 拼图方块图片最左边的x坐标
        fangkuai.top = i * TILE_SIZE_h  # 拼图方块图片最顶部的y坐标
        grid.append(fangkuai) # 将当前拼图加入到列表中**

def draw():  # 绘制模块,每帧重复执行
    screen.clear()  # 每帧清除屏幕,便于重新绘制
    for fk in grid:
        fk.draw()  # 绘制小拼图块

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

2.3 拼正确,把小图利用代码贴完整

效果:
小学生python游戏编程4----拼图游戏

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注

TILE_SIZE_w = 124  # 根据小图块的宽设置
TILE_SIZE_h = 87  #  根据小图块的高设置
x = 5  # 横向方块数
y = 5  # 纵向方块数
WIDTH = x*TILE_SIZE_w  # 设置窗口的宽度
HEIGHT = y*TILE_SIZE_h  # 设置窗口的高度
TITLE = '拼图小游戏'

**fk_list =[]
for i in range(1,x*y+1):
    fk_list.append(Actor('fenge\\df-'+str(i)))**

grid = [] # 列表,用来存放最终所有拼图信息
for i in range(x): # 对行循环
    for j in range(y): # 对列循环
        print(i*x+j)
        fangkuai = fk_list[i*x+j] # 导入拼图方块图片
        fangkuai.left = j * TILE_SIZE_w # 拼图方块图片最左边的x坐标
        fangkuai.top = i * TILE_SIZE_h  # 拼图方块图片最顶部的y坐标
        grid.append(fangkuai) # 将当前拼图加入到列表中

def draw():  # 绘制模块,每帧重复执行
    screen.clear()  # 每帧清除屏幕,便于重新绘制
    for fk in grid:
        fk.draw()  # 绘制小拼图块

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

2.4 两小方块互换位置

效果:你可以先想想如何实现,看看效果后结合上一节自己先试着改改,多改也是一种好的学习践方法
小学生python游戏编程4----拼图游戏

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注

TILE_SIZE_w = 124  # 根据小图块的宽设置
TILE_SIZE_h = 87  #  根据小图块的高设置
x = 5  # 横向方块数
y = 5  # 纵向方块数
WIDTH = x*TILE_SIZE_w  # 设置窗口的宽度
HEIGHT = y*TILE_SIZE_h  # 设置窗口的高度
TITLE = '拼图小游戏'

fk_list =[]
for i in range(1,x*y+1):
    fk_list.append(Actor('fenge\\df-'+str(i)))

grid = [] # 列表,用来存放最终所有拼图信息
for i in range(x): # 对行循环
    for j in range(y): # 对列循环
        print(i*x+j)
        fangkuai = fk_list[i*x+j] # 导入拼图方块图片
        fangkuai.left = j * TILE_SIZE_w # 拼图方块图片最左边的x坐标
        fangkuai.top = i * TILE_SIZE_h  # 拼图方块图片最顶部的y坐标
        grid.append(fangkuai) # 将当前拼图加入到列表中

# 以下实现两个小拼图块位置的交换
a = 0   # 第一个小拼图块的序号
b = 12   # 第二个小拼图块的序号
# 以下利用tempPos中间变量,实现两个小拼图块位置的交换
tempPos = grid[a].pos
grid[a].pos = grid[b].pos
grid[b].pos = tempPos


def draw():  # 绘制模块,每帧重复执行
    screen.clear()  # 每帧清除屏幕,便于重新绘制
    for fk in grid:
        fk.draw()  # 绘制小拼图块

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

2.5 把互换方块的代码转成函数
# 以下实现两个小拼图块位置的交换
a = 0   # 第一个小拼图块的序号
b = 12   # 第二个小拼图块的序号
# 以下利用tempPos中间变量,实现两个小拼图块位置的交换
tempPos = grid[a].pos
grid[a].pos = grid[b].pos
grid[b].pos = tempPos

上面的代码换成下面的代码,为以后的随机打乱做好准备,此处想想为什么要定义个交换方块的函数?
运行效果如2.4没变

# 以下函数实现两个小拼图块位置的交换
def jiaohuanFk(a, b):
    # i,j为要交换的两个小拼图块的序号
    # 以下利用tempPos中间变量,实现两个小拼图块位置的交换
    tempPos = grid[a].pos
    grid[a].pos = grid[b].pos
    grid[b].pos = tempPos

jiaohuanFk(0,12)
2.6 随机多次打乱,成我们常见拼图状

效果:
小学生python游戏编程4----拼图游戏

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注

TILE_SIZE_w = 124  # 根据小图块的宽设置
TILE_SIZE_h = 87  #  根据小图块的高设置
x = 5  # 横向方块数
y = 5  # 纵向方块数
WIDTH = x*TILE_SIZE_w  # 设置窗口的宽度
HEIGHT = y*TILE_SIZE_h  # 设置窗口的高度
TITLE = '拼图小游戏'

fk_list =[]
for i in range(1,x*y+1):
    fk_list.append(Actor('fenge\\df-'+str(i)))

grid = [] # 列表,用来存放最终所有拼图信息
for i in range(x): # 对行循环
    for j in range(y): # 对列循环
        # print(i*x+j)
        fangkuai = fk_list[i*x+j] # 导入拼图方块图片
        fangkuai.left = j * TILE_SIZE_w # 拼图方块图片最左边的x坐标
        fangkuai.top = i * TILE_SIZE_h  # 拼图方块图片最顶部的y坐标
        grid.append(fangkuai) # 将当前拼图加入到列表中

# 以下函数实现两个小拼图块位置的交换
def jiaohuanFk(a, b):
    # i,j为要交换的两个小拼图块的序号
    # 以下利用tempPos中间变量,实现两个小拼图块位置的交换
    tempPos = grid[a].pos
    grid[a].pos = grid[b].pos
    grid[b].pos = tempPos

import random
# 重复随机交换多次小拼图的位置
for k in range(x*y-1):
    i = random.randint(0, x*y-1)  # 第一个小拼图块的序号
    j = random.randint(0, x*y-1)  # 第二个小拼图块的序号
    jiaohuanFk(i, j) # 调用函数交换两个小拼图块的位置

def draw():  # 绘制模块,每帧重复执行
    screen.clear()  # 每帧清除屏幕,便于重新绘制
    for fk in grid:
        fk.draw()  # 绘制小拼图块

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

未完,下次接着分析,输赢及得分问题

总结

通过此次的《拼图小游戏》游戏实现,让我对pgzero处理图片的相关知识有了进一步的了解,对函数比以前更深刻的认识。

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 4 /50次。
可以关注我,点赞我、评论我、收藏我啦。文章来源地址https://www.toymoban.com/news/detail-409138.html

到了这里,关于小学生python游戏编程4----拼图游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习——python训练CNN模型实战(傻瓜式教学,小学生都可以学会)代码开源

    ​ 第一章 python训练线性模型实战 第二章 python训练决策树模型实战 第三章 python训练神经网络模型实战 第四章 python训练支持向量机模型实战 第五章 python训练贝叶斯分类器模型实战 第六章 python训练集成学习模型实战 第七章 python训练聚类模型实战 第八章 python训练KNN模

    2024年02月04日
    浏览(43)
  • 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程

    2024年02月09日
    浏览(36)
  • c++小学生入门教程(三)

    1、辗转相除法 两个正整数m,n的最大公约数  因为m与n和r都相关,所以求m和n的最大公约数等价于n和r的最大公约数      辗转相除法:欧几里得      ①求 m除以n的余数r r=m%n     ②当r!=0时,执行第③步,当r=0时,n就是最大公约数     ③让m=n,n=r,再求m除以n的余数r (新的m

    2024年02月06日
    浏览(32)
  • 小学生四则运算考试系统Java

    作为大一的新生,突然出现一个实训课程,让原本平静的生活变得很充实,学校要求写一个小学生四则运算考试系统的项目,包括自动出题、自动判断对错并给出得分、自动给出正确答案,同时还有倒计时,在经过几天的努力之后,我也是马马虎虎的完成了一个较为简单的考试系统 一

    2024年02月04日
    浏览(45)
  • C++ 小学生计算机辅助教学系统

    我们都知道计算机在教育中起的作用越来越大。 下面编写一个程序,帮助小学生学习乘法。利用rand函数产生两个一位的正整数。接着应该显示诸如6乘7等于多少的问题?学生然后输入答案。 程序会检查学生的答案。 计算机助教学环境中出现的一个问题是学生容易疲劳。这是可

    2024年02月05日
    浏览(69)
  • 小学生开“卷”AIGC,绝不能输在起跑线上

    图片来源:由无界AI生成 OpenAI的研究报告称,未来,大量工作岗位将受到AI冲击,首当其冲的岗位是作家、数学家、网页设计师、记者、律师…… 自从ChatGPT问世以来,人类会被AI替代的讨论甚嚣尘上,焦虑情绪无处不在。但更多人认为, AI替代的不是人类,而是没有掌握AI的

    2024年02月13日
    浏览(32)
  • java+springboot+vue开发的小学生(家长)考勤请假打卡小程序

    演示视频 小程序 https://www.bilibili.com/video/BV1RN4y167Xu/?share_source=copy_webvd_source=11344bb73ef9b33550b8202d07ae139b 管理员 https://www.bilibili.com/video/BV18H4y1z7xH/?share_source=copy_webvd_source=11344bb73ef9b33550b8202d07ae139b 主要功能:家长代替小学生注册登录,可向班主任请假销假考勤打卡,查看班主任信

    2024年02月06日
    浏览(38)
  • 三分钟搞懂git patch 补丁的使用,小学生也能看懂

    Git中的Patch(补丁)功能允许用户将不同分支或提交之间的更改保存为一种可重用的文件格式。通过使用Patch,您可以将您的更改发送给其他人进行审核或协作,以及在不同的Git仓库或版本控制系统之间导出或导入更改。 在Git中,使用以下命令来创建和应用Patch: 1、创建Pat

    2024年02月14日
    浏览(30)
  • python小游戏 拼图小游戏设计与实现

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 拼图小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 游戏规则: 将图像

    2024年02月08日
    浏览(38)
  • 学生学python编程---实现贪吃蛇小游戏+源码

    前言 这几年人工智能技术大发展,Python因此几乎成了第一位的语言。实际上,多年来,它不仅在软件工程师中得到广泛使用,也是各行业通用的专家语言,就是说,不管孩子以后做什么,都可能用得着。准备针对我自己上小学的孩子,每周抽出些时间,通过学习他们感兴趣的

    2023年04月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包