Scratch互动游戏教程.docx
《Scratch互动游戏教程.docx》由会员分享,可在线阅读,更多相关《Scratch互动游戏教程.docx(38页珍藏版)》请在冰豆网上搜索。
![Scratch互动游戏教程.docx](https://file1.bdocx.com/fileroot1/2023-2/1/51cadfb2-3550-44d6-a555-fb8f4d0cf9bb/51cadfb2-3550-44d6-a555-fb8f4d0cf9bb1.gif)
Scratch互动游戏教程
运用互动游戏制作来教程序设计
壹、背景与动机
任教高中信息课程十多年,如何教授程序设计课程一直是笔者经常思考的问题。
传统的程序设计课程,大多是以逻辑概念配合程序语法的说明,然而,程序语法导向教学的解說太多,学生就会觉得枯燥,因为有些语法很难理解,即使懂了也不知道要用在何处;再者,课本上的例子大多以数学计算为主,学生对这些范例大多不太感兴趣。
因此,如何突破传统程序设计课程的困境,增进学生学习程序设计的动机,提升学生学习程序设计的成就,都是值得探讨的问题。
现在的学生使用计算机的目的不再单纯只是为了做计算,而是沟通与娱乐的互动,所以,我们的程序设计教材不能再只是以传统计算导向的数学或商业问题来吸引学生,应该以更有趣的教材来让学生理解程序设计的价值。
学生们从小就玩过各式各样的游戏,但是他们只有玩游戏,不知道游戏是如何被开发的,这种现象,就好像学生只能阅读,而不能写作。
因此,笔者试着以游戏创作为主题来进行程序设计课程。
随着时代的演进,程序设计从早期的科学计算,转变为问题解决的逻辑设计与动力机械控制。
近代为程序初学者量身订制的程序语言教学工具,也引入了多媒体运用与互动性控制等功能,其中,Scratch的推出让学生能够有效地克服英文与语法的障碍,进行程序设计思维的训练,特别适合8~16岁的儿童及青少年使用,而Greenfoot的推出,让学生能够轻松学习Java对象导向程序设计的重要概念,特别适合14岁以上的青少年使用。
基于以下理由,笔者将Scratch和Greenfoot导入高一信息课程。
一、易于学习程序设计,引发学生兴趣
Scratch提供图形化的接口,使用者不太需要使用键盘来输入各项指令,而是用鼠标拖曳程序区块到脚本区,以组合积木的方式来撰写程序代码,因此,特别适合程序设计初学者使用。
Greenfoot采用对象概念优先的方法來进行学习,经由预先开发好的范例项目入手,让初学者先探索对象与類别的观念,透过呼叫对象的方法來与微世界中的对象实体互动,然后才开始引入程序代码概念,程序代码是用來控制对象在微世界中的狀态的指令,初学者能够很快地熟悉它的操作接口,并进一步地学习到Java语言。
二、易于创作互动游戏,延伸创意思维
哪个孩子不爱游戏?
玩游戏是天生的本能,且对信息世代下成长的学生而言,计算机游戏是生活中不可或缺的一部分,若能将计算机游戏创作和程序设计课程的学习结合,让学生能在学习的同时,发挥创意游戏设计,必定能增加学习时的乐趣及热忱,相信一定能有不同于传统教学的效果。
Scratch将互动游戏创作变得很容易,只要使用简易的鼠标拖拉方式,将指令从程序指令区移进程序脚本区即可进行程序代码的撰写。
而利用逻辑判断、变量值与侦测改变等来互相配合,即可创作出具有互动性的游戏。
Greenfoot使用标准的Java语言,也支持其所有的套件。
它的功能不会输给业界常使用的程序设计开发工具,你可以使用Greenfoot來开发各式各样具有声光效果的游戏,也能够用它來开发各种仿真程序,只要是2D的动画表现都可以使用Greenfoot來开发。
三、易于取得自由软件,创造无国界学习
Scratch和Greenfoot可在网络上免费下载。
学生不仅在课堂上可以使用,也可以免费安装在家里的计算机,以供课后练习使用。
Scratch和Greenfoot官网亦提供来自全世界爱好者的创意,让学生身处在一个无国界的学习环境。
貮、使用Scratch训练程序逻辑
在Scratch教学的部份,从游戏案例研究开始带领同学进入程序设计学习领域,先讲解程序逻辑观念,然后提供互动游戏让学生试玩,接着提供游戏解题操作步骤,让学生能够实作出简单的游戏案例。
在实作过程中,除了教师讲解说明之外,亦透过配对程序设计的模式,让同学可以互相讨论,合作学习。
在经历游戏案例研究后,我们设计了游戏创作挑战题目,教师可以藉由挑战题目,澄清程序逻辑观念,学生可藉由试玩互动游戏成品,与配对程序设计的讨论,思考游戏解题的逻辑,完成创作挑战。
学生对于使用Scratch进行计算机游戏设计觉得很有趣并具有成就感,他们在学习如何创造自己的游戏抱持着高度动机,对于程序设计的基本概念(流程控制、变量)也觉得很实用,认为程序设计是一件很好玩的事情,也乐于创作游戏给家人或朋友分享。
藉由计算机游戏设计,学生有很明确要达成的目标,也很明确知道游戏可以改进的功能。
在完成作品的过程中,学生必须运用程序逻辑思考的能力,来组合出可以玩的游戏,而Scratch使用拖曳程序积木的方式来撰写程序代码,有效地克服了语法的障碍,让学生可以将专注力集中在程序的逻辑与解题的思维上。
玩计算机游戏很简单,但是设计计算机游戏并不是一件简单的事。
计算机游戏是一种复杂的设计,学生必须思考如何使用现有的积木来组合出游戏的各项功能,考虑游戏如何与玩家产生互动,这些都必须用到程序逻辑的思维。
参、使用Greenfoot训练程序语法与实作
在Greenfoot教学部份,也是从游戏案例开始。
传统Java课程会先从语法着手,采线性方式介绍各种语法,例如:
介绍运算子时,就把所有的运算子列举出来。
但是Greenfoot教学先从对象导向观念着手,采螺旋式方式介绍各种语法,依游戏案例的安排,逐渐认识各种语法的应用,例如:
介绍选择结构时,就先只介绍单向选择结构,然后做不同情况下的练习,而不是一次就把所有的选择结构讲完。
首先,从「袋熊吃树叶」游戏案例,了解对象概念与基本环境操作,接着,从「沙滩螃蟹」游戏案例来阐述继承、单向选择结构、计次式重复结构、变量等观念,最后,最后以「钢琴模拟」游戏案例来认识建构子与数组。
传统的Java教学是以语言的结构为顺序,太着重知识中心,不符合学生的生活经验与认知结构,因此,不容易记住其关系。
此外,使用的例子多为计算导向,过于抽象,学生无法观察数据处理的过程,也会觉得无趣。
在Greenfoot教学中:
学生会记得游戏案例的名称,然后记得完成这个案例所需要的动作。
因为游戏案例把许多的知识串成让人记忆深刻的故事,学生会做动作(knowhow),但不一定会记住动作的名称(knowwhat)。
学生们从Greenfoot中,学会程序编译的概念,在这个阶段,他们进一步学习如何撰写程序代码,并完成可以实际操作的游戏作品,最重要的是,学生学会的语法是标准的Java,换句话说,学生学到的知识并不会被限制在Greenfoot中,他们可以轻松地将学到的知识迁移到Java程序设计,学生学到的不只是游戏制作,更重要的是问题解决的工具。
肆、结論
一、计算机游戏设计能引起高中生学习程序设计的兴趣
学生对于使用Scratch和Greenfoot进行计算机游戏设计觉得很有趣并具有成就感,他们对于学习如何创造自己的游戏抱持着高度动机,对于程序设计的基本概念(对象、流程控制、变數)也觉得很实用,认为程序设计是一件很好玩的事情,也樂于创作游戏给家人或朋友玩。
能够对于以前所玩过的计算机游戏有更进一步的认識,知道它是如何被开发出來的,从教学实验的问卷得知学生们收获良多,是一种以往所没有经歷过的体验。
二、计算机游戏设计对于程序设计的训練很有帮助
由笔者的程序设计教学经验,学生经常困扰于程序语法的细节,而无法进入解题的境界。
藉由计算机游戏设计,学生有很明确要达成的目标,也很明确知道游戏可以改进的功能。
在完成作品的过程中,学生必须运用程序邏辑思考的能力,來组合出可以玩的游戏,而Scratch使用拖曳程序积木的方式來撰写程序代码,有效地克服了语法的障碍,让学生可以将专注力集中在程序的邏辑与解题的思维上。
Greenfoot则是将原本高深的对象导向概念变得浅显易懂。
玩计算机游戏很简单,但是设计计算机游戏并不是一件简单的事。
计算机游戏是一种复杂的设计,学生必须思考如何使用现有的积木和语法來组合出游戏的各项功能,考量游戏如何与玩家产生互动,这些必须用到程序邏辑的思维。
从问卷调查得知学生藉由设计游戏学习到一种新的思维方式,对于增进人生的智慧有帮助。
伍、参考数据
KollingM.(2010).TheGreenfootprogrammingenvironment.ACMtransactionsonComputingEducation,10(4).Article14,1-21.
KollingM.(2010).IntroductiontoProgrammingwithGreenfoot.UpperSaddleRiver,NewJersey:
Pearson.
高慧君(2013)。
程序设计逻辑训练─使用Scratch。
台北:
松岗。
廖佑梓(2012)。
游戏导向教材对高中生程序设计学习之影响。
国立台湾师范大学信息教育研究所硕士论文。
附录1、Scratch教案
教学活动
时间
说明
基本操作
50分钟
我们将以一个歌手表演唱歌的例子,来介绍Scratch四大区域的综合应用。
我们要做为事情大致上有:
1.搭建一个表演的舞台。
2.设定歌手造型及其演唱的歌曲。
3.让舞台呈现的动态效果。
4.让歌手演唱歌曲并跳舞。
步骤1搭建一个表演的舞台。
Scratch预设的舞台背景是白色,在脚本区中点选背景面板,点选「汇入」按钮,选择「Indoors→spotlight-stage」。
汇入后,将原先的白色背景删除。
步骤2设定歌手造型及其演唱的歌曲。
删除预设的小黄猫后,我们要来新增歌手的造型,首先,在角色区的上方新增角色的三个按钮中,选取中间的开启角色档案,选取「people→breakdancer-1」。
接着,在脚本区上方中将角色名称修改为「歌手」。
切换到造型面板,为歌手新增不同的造型「people→breakdancer-2」、「people→breakdancer-3」、「people→breakdancer-4」,并为每一个造型取一个有意义的名称。
切换到声音面板,汇入歌手要演唱的歌曲「MusicLoops→HumanBeatbox2」
步骤3让舞台呈现的动态效果。
在角色区中点选舞台后,在脚本区中选取程序面板。
拖曳指令区中的程序积木到脚本区中,积木如下:
步骤4让歌手演唱歌曲并跳舞。
我们可以透过程序代码的撰写,来让歌手唱歌并且跳舞。
在角色区中点选歌手后,在脚本区中选取程序面板。
积木如下:
第一个动画故事
50分钟
脚本设计
小猫和狗狗相遇在学校门口,开启一段对话。
小猫:
嗨!
你现在想做什么?
狗狗:
我饿啦,我想去吃点东西。
小猫:
要不要去一家意大利餐厅吃?
狗狗:
好!
我喜欢吃意大利面。
小猫:
我不喜欢吃面,但是我喜欢吃比萨。
舞台设置
新增一个学校门口(内建图库Outdoors→School1)的背景。
角色安排
猫咪走路动画
猫咪的对话
狗狗的对话
重复结构
100分钟
案例1:
马儿跑步(观念:
计次式循环)
游戏方法:
画面上有三只马儿,用鼠标按一下马儿,它会往前跑步。
程序安排
案例2:
猫狗赛跑(观念:
条件式循环)
游戏方法:
按下绿旗,猫和狗开始赛跑,先跑到终点号线的会说「我最快」
猫咪程序
狗狗程序
案例3:
鱼儿水中游(观念:
无穷循环)
游戏方法:
按下绿旗,让鱼儿在水中不断地游动。
程序代码:
选择结构
100分钟
案例4:
电流急急棒(观念:
单向选择结构)
游戏方法:
按下绿旗开始执行程序,当你在黄色圆点上按一下鼠标左键时,它就会跟着你的鼠标移动,不能让它跑出去轨道(碰到白色),当黄色圆点移动到终点(碰到红色)时,就过关完成任务了。
程序代码:
案例5:
打地鼠(观念:
双向选择结构)
游戏方法:
按下绿旗开始执行程序,棒子会跟着你的鼠标移动。
当你按下鼠标左键,棒子会切换到打下的状态,打到地鼠时,会播放声音。
地鼠程序代码:
棒子程序码:
全域变数
200分钟
案例6:
猴子吃香蕉
游戏方法:
按下绿旗开始执行程序,猴子会跟着你的鼠标左右移动。
香蕉从画面上方不断地掉下来,游戏会记录猴子吃到了几串香蕉,当猴子吃到10串香蕉时,会说我吃饱了,然后游戏停止。
猴子程序码:
香蕉程序代码
案例7:
打老鼠
游戏方法:
有五只老鼠会随机地从洞口跑出来,看到老鼠就要用鼠标点它一下,老鼠就会缩回洞里,看看你能够打到几只老鼠。
舞台程序代码:
老鼠程序代码:
角色变数
200分钟
案例8:
射蝙蝠
游戏方法:
按下绿旗开始执行程序,枪枝的准心会跟着你的鼠标移动。
蝙蝠会不断地到处飞翔,当蝙蝠被射中累计三次时,就会从画面上消失不见。
试着把所有的蝙蝠都射下来。
准心程序代码:
蝙蝠程序代码:
案例9:
开心水族箱
游戏方法:
按下绿旗开始执行程序,在舞台上按一下鼠标左键,会有一个饲料由上往下掉,饲料一出现,鱼群就会往饲料的方向移动。
当饲料被吃掉时,鱼群就会往各自的方向移动。
当鱼儿吃到饲料时,它会长大一点,每只鱼儿吃三次饲料就饱了,就不会往饲料的方向游动。
当三只鱼儿都吃饱了,则显示过关。
饲料程序代码:
小鱼程序代码:
舞台程序代码:
挑战题
100分钟
演练题目:
圣诞老公公送礼物
【玩法】
按下鼠标左键,圣诞老公公会从天上丢下礼物,若是礼物丢在烟囱,则会加1分,丢中三个礼物,则过关。
【素材】
圣诞老公公:
santa.gif
背景图:
background.gif
房屋:
house.gif
礼物:
present.gif
过关:
pass.png
【提示】
1.设置背景图为星空(background.gif)。
2.设置房屋(house.gif)在画面下方。
3.设置圣诞老公公(santa.gif)在画面上方。
4.设定圣诞老公公只允许左右翻转。
5.让圣诞老公公不断地左右移动。
6.设置礼物(present.gif)在画面上方,按下绿旗开始时,隐藏。
7.设定礼物不允许旋转。
8.设定礼物面对180度的方向。
9.按下鼠标左键,礼物会从圣诞老公公的位置往下掉,直到碰到房屋(黑色)或烟囟(灰色)为止。
10.新增变量「分数」,设定其起始值为0。
11.判断礼物是否碰到烟囟,如果有,则「分数」加1分。
12.将礼物隐藏起来。
13.设置过关文字,当绿旗按下时,隐藏。
当接受到「过关」广播时,显示。
14.判断「分数」是否到达3分,如果是,则显示过关文字,游戏终止。
附录2、Greenfoot教案
教学活动
时间
说明
Greenfoot简介
1.操作环境介绍
2.对象与类别
3.对象基本概念
4.呼叫对象的方法
5.程序的执行
100分钟
案例:
袋熊吃树叶
开启范例程序Wombat。
根据Wombat类别来产生袋熊对象:
(1)指向Wombat并按下鼠标右键。
(2)从快捷菜单中选取「newWombat()」,此时屏幕上会出现一只袋熊。
(3)可将袋熊拖曳至场景中的任何位置。
程序的执行
由「执行控制列」也可以呼叫对象中的方法。
(1)按「单步执行」按钮,会呼叫每一个对象的act方法一次。
(2)按「执行」按钮,会重复呼叫每一个对象的act方法。
如果把整个Greenfoot的场景视为一个微世界(microworld),那么微世界中的每一个对象就像是演员,我们程序要操弄的也就是这些演员间的互动方式。
放到微世界中的对象(演员)都有Act方法。
不同类别对象的Act方法都各自定义自己的程序功能,所以执行不同类别对象的Act方法将产生不同的结果。
以袋熊的Act方法为例,其程序功能如下:
(1)若袋熊刚好坐在树叶上,那就吃了树叶。
(2)若袋熊没遇到边界,那就往前走;
(3)若遇到边界就左转。
建立几只袋熊和树叶,然后按「单步执行」按钮,观察这些袋熊的行为。
按下「执行」按钮,观察产生了什么结果?
练习:
开启范例档案asteroids1并探索之。
游戏实作
1.继承关系
2.编辑程序代码
3.查看类别中所定义的方法
4.单向选择结构
100分钟
案例:
沙滩螃蟹
(一)
沙滩上有一只螃蟹,它会吃虫,但是要躲开龙虾,不然就会被龙虾吃掉。
Animal的说明文件
螃蟹(Crab)和龙虾(Lobster)继承了Animal类别,所以有move,turn,atWorldEdge,canSee,eat这些方法可以使用。
螃蟹的程序代码:
importgreenfoot.*;
publicclassCrabextendsAnimal
{
publicvoidact()
{
move();
if(atWorldEdge()){
turn(10);
}
if(Greenfoot.isKeyDown("right")){
turn(10);
}
if(Greenfoot.isKeyDown("left")){
turn(-10);
}
if(canSee(Worm.class)){
eat(Worm.class);
Greenfoot.playSound("slurp.wav");
}
}
}
让学生仿螃蟹的程序代码来写龙虾的程序代码:
importgreenfoot.*;
/**
*WriteadescriptionofclassLobsterhere.
*
*@author(yourname)
*@version(aversionnumberoradate)
*/
publicclassLobsterextendsAnimal
{
publicvoidact()
{
move();
if(atWorldEdge()){
turn(10);
}
if(canSee(Crab.class)){
eat(Crab.class);
Greenfoot.playSound("au.wav");
Greenfoot.stop();
}
}
}
游戏实作
1.新建物件
2.计次式循环
3.随机数
4.自订方法
100分钟
本节课复习上周案例,并引入新的观念。
在CrabWorld撰写程序代码
importgreenfoot.*;//(Actor、World、Greenfoot、GreenfootImage)
publicclassCrabWorldextendsWorld
{
/**
*建立螃蟹的场景(即沙滩)。
*场景大小为560×560格,
*每个1个像素。
*/
publicCrabWorld()
{
super(560,560,1);
addObject(newCrab(),150,100);
for(inti=1;i<=10;i++){
intx=Greenfoot.getRandomNumber(560);
inty=Greenfoot.getRandomNumber(560);
addObject(newWorm(),x,y);
}
for(inti=1;i<=3;i++){
intx=Greenfoot.getRandomNumber(560);
inty=Greenfoot.getRandomNumber(560);
addObject(newLobster(),x,y);
}
}
}
螃蟹的程序代码:
importgreenfoot.*;
/**
*本类别定义螃蟹。
螃蟹生活在沙滩上。
*/
publicclassCrabextendsAnimal
{
publicvoidact()
{
checkKey();
checkEdge();
checkWorm();
}
publicvoidcheckKey(){
if(Greenfoot.isKeyDown("up")){
move();
}
if(Greenfoot.isKeyDown("right")){
turn(10);
}
if(Greenfoot.isKeyDown("left")){
turn(-10);
}
}
publicvoidcheckEdge(){
if(atWorldEdge()){
turn(10);
}
}
publicvoidcheckWorm(){
if(canSee(Worm.class)){
eat(Worm.class);
Greenfoot.playSound("slurp.wav");
}
}
}
让学生仿螃蟹的程序代码来写龙虾的程序代码:
importgreenfoot.*;
publicclassLobsterextendsAnimal
{
publicvoidact()
{
move();
checkEdge();
checkCrab();
}
publicvoidcheckEdge(){
if(atWorldEdge()){
turn(10);
}
}
publicvoidcheckCrab(){
if(canSee(Crab.class)){
eat(Crab.class);
Greenfoot.playSound("au.wav");
}
}
}
挑战题:
小精灵
100分钟
游戏要求:
(1)用方向键控制小精灵的位置
(2)小精灵遇到鬼就把它吃掉
(3)鬼会随机乱走
Mover的说明文件:
小精灵继承Mover,其程序代码如下:
importgreenfoot.*;//(World、Actor、GreenfootImage、GreenfootSound、Greenfoot及MouseInfo)
/**
*Pac-Man小精灵。
*
*@author(填上自己的名字)
*@version(填上日期)
*/
publicclassPacManextendsMover{
/**
*每回合要执行的动作。
*
*/
publicvoidact(){
checkKey();
checkGhost();
}
publicvoidcheckKey(){
if(Greenfoot.isKeyDown("up")){
setImage("pacman-up.png");
setDirection(0);
move();
}
if(Greenfoot.isKeyDown("right")){
setImage("pacman-right.png");
setDirection
(1);
move();
}
if(Greenfoot.isKeyDown("down")){
setImage("pacman-down.png");
setDirection
(2);
move