特别声明:
本系列课程是我校的校本教程,主要针对有一定基础的创客兴趣小组同学。
本系列课程结合STEAM,在课程中融合了其他学科知识。
在上节课《电子沙漏》中,我们已经学习了掌控板OLED屏的各种显示方式,包括显示文字和图案。本节课在上节课的基础上利用掌控板的各种按键来制作一个完整的猜拳小游戏。并且在这个过程中学习如何优化程序。
教学目标:
知识目标:学会正确使用和理解掌控板按键有关知识
能力目标:利用所学知识,结合其他知识,制作一个完整的 猜拳游戏
情感态度价值观:注重细节,注意程序的优化,养成严谨的科学态度
重点:
1、学习掌控板的各种按键使用。
2、学习掌控板OLED显示图案
3、学会利用所学知识制作猜拳游戏。
难点: 理解并熟练掌握程序优化的过程。
步骤1
回顾上节课知识
上节课我们学习了利用掌控板的OLED屏显示文字和图案
我们在显示里面发现掌控板有自带图案,其中居然有石头、剪刀、布的图案
那我们是不是可以来设计一个石头、剪刀、布的猜拳游戏呢?
步骤2
设计游戏
那这个游戏该怎么设计呢?
(引导学生自己设计游戏内容,不要直接给学生任务,要慢慢引导学生将任务驱动转向项目驱动)
我们来看看掌控板上面有AB两个按键,下面还有PYTHON六个按键,我们就来利用这些按键设计这个游戏
经过讨论我们的初步设计如下:
1、一个玩家按A,然后显示一个随机图案
2、另一个玩家按B,显示一个随机图案
3、两个玩家都按过之后,判断谁输谁赢。
初步是这样的设计,我们先来完成这些内容,然后再慢慢完善
同学们自己动手来完成!
在做的过程中,我们的同学遇到了问题,怎么显示随机图案呢?
在显示的积木块中没有这一个积木块,我们该如何做呢?
对了,我们要引入变量,当按下按键的时候设计一个变量为1-3的随机数,根据随机数和规则来显示图案
具体如下:
同理按B按键如下
显示没有问题,接下来我们要思考的是两个问题:
1、什么时候开始判断?
2、如何判断?
首先解决什么时候开始判断,那按照日常经验,我们什么时候开始判断呢?
对了,当A也按过了,B也按过了,开始进行判断。
那进一步追问,如何知道AB都按过了呢?
对了,X是1-3的随机数,Y也是1-3的随机数。
这样我们可以在一开始设置x和y都是0,当X和Y都不为0的时候开始进行判断。
接着我们解决第二个问题,掌控板能直接根据图案判断谁输谁赢吗?
是的,不可以。
我们要把对图案的判断转变为对两个变量XY的判断,根据XY的取值,他们之间有9种关系
根据这九种关系,我们可以设计如下程序
程序可以运行,但是我们会发现一个问题
第一次运行是正常的,但是第二次再运行只要一按A,系统就开始判断,这是为什么呢?该如何解决呢?
对了,是因为这个时候XY都已经不为0了,因此我们在判断完之后要对XY进行赋值为0
在判断后面加入 将X设为0,将Y也设为0
这样虽然解决了问题,但是判断完之后,按A第一个图案是改变了,但是第二个图案还在那里
这样是很影响游戏体验的,因此我们加入一个一切重来的设置
我们引入P按钮,按P之后游戏重置,具体代码如下
这样整个程序是做好了,我们也能愉快的玩耍了,但是如果我们把这个东西给别的人玩耍
他会一脸茫然,黑麻麻的屏幕,这是什么呢?
因此我们要站在用户的角度,尽可能的优化我们的程序。
我们可以这么做
1、程序一开始启动,出现一个说明界面,说明这是一个什么游戏,该如何操作。
2、按P游戏开始启动,然后就是一个玩家按A和另一个玩家按B,进行游戏
这样整个游戏就算基本做好了,但是注意还只是基本
我们来看看我们的程序有没有什么问题,可不可以进行优化修改
我们会发现我们的程序有很多重复的地方,也有很多可以精简的地方
首先第一个,按A显示图案和按B显示图案,其实内容基本重复,我们说重复的内容就可以使用函数
我们来用函数简化这个程序,我们来看看,这里面有哪些内容是一样的,哪些内容是不一样的
一样的:都是1显示石头,2显示剪刀,3显示布
不一样的:显示的位置不一样,因此我们可以引入带参数的函数来进行解决
刷入运行,可以正常完美运行
可能我们的同学会有疑问,这样的程序并没有减少很多内容,反而更复杂了,那为什么要这么做呢?
这样做至少有几个好处
1、我们可以把函数进行折叠,整个程序看上去就很简洁
2、我们把函数折叠之后,就可以把主要精力放到主程序的整个流程和逻辑上,这样更容易理解程序设计的思路和流程。
3、锻炼我们归纳整理的能力
是不是很整洁
我们再来看另一个大部头,就是判断里面,也是很复杂,我们看看是不是可以进行简化
我们会发现,实际上XY之间只有三种关系,打平,X赢,Y赢
我们再进一步通过对XY进行分析会发现他们之间的关系可以进行简化
这样我们的代码可以进行如下简化
对比之前是不是优化很多
我们来看看最终的整个程序是什么样子
步骤3
后续
至此基本大功告成,那是不是一切就都完美了呢?
我们来了解一下软件的版本号基本知识
一般来说软件的版本号为X.X.X,比如3.4.7版,那这代表是什么意思呢? 一开始程序是1.0.0版本 当发现一个新问题,解决了之后版本就变成了1.0.1 当发现并解决了十个问题之后就变成了1.1.0 以此类推 当升级了一个大的功能或改变,版本就会升级为2.0.0,再不断发现新问题,解决新问题
如果最开始我们能运行的版本是1.0.0版本,那么我们这个最终版本可能就是1.0.4版本
当年iPhone刚发布的时候震惊了整个世界,但是如果它不更新不进步就会被赶超,因此它也在不断升级更新
我们的程序也是如此,要不断升级更新
我们来思考如何将我们的程序从1.X.X版本升级到2.0.0?
一般来说升级更新就是发现现有版本的问题,并根据用户的反馈意见进行完善
本节课的作业就是大家回去思考1.X.X版本有什么问题,可以如何解决,设计一个2.0.0的设计稿
我们下节课就来做2.0.0版本