java飞机大战心得体会

2024-07-06

java飞机大战心得体会(精选7篇)

篇1:java飞机大战心得体会

1.首先有玩家类,窗口类,主函数类和图片文件(.jpg)

2.然后是先行知识,创建窗口(JFrame),设置窗口属性;窗口上不能直接添加组件(键盘监听等),所以先在窗口上添加容器(Jpanel),将组件(KeyAdapter)添加到容器;

3.画出玩家:重写窗口类中的paintComponent方法,创建Graphics对象,调用drawImage方法可画图,调用drawString方法可标注其名字

4.移动:在窗口类中创建键盘监听抽象类KeyAdapter(实现了接口的部分方法但无具体操作),需要重写该类的Keypressed方法和KeyRleased方法,赋给按键变量真值,随后将该对象添加到窗口

5.随机生成初始坐标:在开始游戏后随机给定玩家的x、y坐标,创建Random对象,调用Random.nextInt(n)方法,n代表从[0,n)区间的随机值。

6.最后通过一个Timer.schedule(匿名内部类对象,指定延迟后开始,周期)方法来实现移动效果。匿名内部类【TimerTask的子类,重写了run方法,包括repaint方法(实则调用paintComponent)和yidong方法】来重画、监听键盘的指令并作出相应动作

下面是源代码(有注释):

容器类

package a;

import javax.swing._;

import java.awt._;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.util.Random;

import java.util.Timer;

import java.util.TimerTask;

import static a.Newgame.frame;

//新建面板

public class War extends JPanel {

private Timer timer;

private boolean sUp, sDown, sRight, sLeft;//右飞机按键变量

private boolean sW, sD, sS, sA;//左飞机按键变量

private Player1 player1 = new Player1();

private Player2 player2 = new Player2();

private ImageIcon img11 = player1.img1;

private ImageIcon img22 = player2.img2;

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);//此句调用父类方法进行界面重绘,恢复到某个界面,下面的步骤再画玩家;如果注释掉会有重影

//在面板上画出玩家

g.drawImage(img11.getImage(), player1.x, player1.y, 100, 100, this);

g.drawString(“P1”, player1.x, player1.y);

g.drawImage(img22.getImage(), player2.x, player2.y, 100, 100, this);

g.drawString(“P2”, player2.x, player2.y);

}

public void startGame() {

timer = new Timer();

timer.schedule(new TimerTask() {//匿名内部类(TimerTask的子类)

@Override

public void run() {//重写run()函数

repaint();//调用重写的paintComponent来画两飞机

yidong();//并每次判断按下哪个键,然后移动

}

}, 0, 50);//安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。50毫秒执行一次

}

public void yidong() {

//因为每打印一次可能用户按下一个飞机的几个键或者两个飞机的几个键,这些是都要检测到的,改成elseif后只能检测到一个键,无法实现两架飞机同时多方向移动

if (sW && player1.y >0) {

player1.y -= player1.speed;

}

if (sA && player1.x >0) {

player1.x -= player1.speed;

}

if (sS && player1.y < 700) {

player1.y += player1.speed;

}

if (sD && player1.x < 900) {

player1.x += player1.speed;

}

if (sUp && player2.y >0) {

player2.y -= player2.speed;

}

if (sDown && player2.y < 700) {

player2.y += player2.speed;

}

if (sLeft && player2.x >0) {

player2.x -= player2.speed;

}

if (sRight && player2.x < 900) {

player2.x += player2.speed;

}

}

public void act() {

//随机生成两飞机的初始坐标

Random rd = new Random();

player1.x = rd.nextInt(900);

player1.y = rd.nextInt(700);

player2.x = rd.nextInt(900);

player2.y = rd.nextInt(700);

//开始游戏后获得计时器开始监听并重画

startGame();

//KeyAdapter是KeyListener的实现类,重写了所有方法但没有具体操作

KeyAdapter keyAdapter = new KeyAdapter() {

@Override

public void keyPressed(KeyEvent e) {

super.keyPressed(e);

int key = e.getKeyCode();

switch (key) {

case KeyEvent.VK_W:

sW = true;

break;

case KeyEvent.VK_A:

sA = true;

break;

case KeyEvent.VK_D:

sD = true;

break;

case KeyEvent.VK_S:

sS = true;

break;

case KeyEvent.VK_RIGHT:

sRight = true;

break;

case KeyEvent.VK_LEFT:

sLeft = true;

break;

case KeyEvent.VK_DOWN:

sDown = true;

break;

case KeyEvent.VK_UP:

sUp = true;

break;

}

}

@Override

public void keyReleased(KeyEvent e) {

int key = e.getKeyCode();

switch (key) {

case KeyEvent.VK_W:

sW = false;

break;

case KeyEvent.VK_A:

sA = false;

break;

case KeyEvent.VK_D:

sD = false;

break;

case KeyEvent.VK_S:

sS = false;

break;

case KeyEvent.VK_RIGHT:

sRight = false;

break;

case KeyEvent.VK_LEFT:

sLeft = false;

break;

case KeyEvent.VK_DOWN:

sDown = false;

break;

case KeyEvent.VK_UP:

sUp = false;

break;

}

}

};

frame.addKeyListener(keyAdapter);

}

}

主函数类:

package a;

import javax.swing._;

public class Newgame {

public static JFrame frame;

public static void main(String[] args) {

frame = new JFrame(“逃出生天”);

frame.setSize(1000,800);

//绝对布局组件位置和形状不会随窗体改变,不设置布局管理器就可以使用setBounds()来控制位置

frame.setLayout(null);

//设置窗体关闭程序自动关闭

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

//窗体居中显示

frame.setLocationRelativeTo(null);

//添加主面板

War war = new War();

frame.add(war);

//设置面板大小

war.setBounds(0,0,1000,800);

//设置主面板可见

frame.add(war);

frame.setVisible(true);

war.act();

}

}

123456789101112131415161718192223242526

玩家类:

玩家1

package a;

import javax.swing._;

public class Player1 {

public int x;

public int y;

public int speed = 50;

public ImageIcon img1 = newImageIcon(“D:Program_FilesJetbrainsworkspace_ideasrcaplane.jpg”);

}

12345678910

玩家2

package a;

import javax.swing._;

public class Player2 {

public int x;

public int y;

public int speed = 50;

public ImageIcon img2 = newImageIcon(“D:Program_FilesJetbrainsworkspace_ideasrcaplane2.jpg”);

}

做成一个桌面小游戏:

点“+”号

选好主函数类后点ok

然后点Build中的Build Artificts

选择jar包点Build即可

然后jar包就在你的workspace生成了,找到它发送桌面快捷方式,更改图标名字即可

图片转换成图标的网站附上

 

篇2:java飞机大战心得体会

Java语言是一种跨平台、适合于分布式计算环境的面向对象编程语言,具有简单性、面向对象、分布式,多线程性等,其中面向对象有封装,继承,多态三大特性。

1)封装:数据和基于数据的操作封装

2) 继承:一个对象直接使用另一个对象的属性和方法,子类可以继承父类

3) 多态:一个程序中同名的多个不同方法,实现多态的常见方法 子类对父类的覆盖,利用重载在同一个类中定义多个同名的不同方法;

Java游戏制作中必须有 public static void main(String[]args)的主方法,main()方法是程序执行的入口。例如我的飞机大战main(),便是游戏开始执行的入口,写在GameFace类中。

游戏框架的制作,其大部分的代码都是固定形式,可以通用。使用setVisible(true)的方法,改变默认的不可见状态,setLayout(null)取消默认的管理布局,然后setLocation(),setSize(),setBound()等方法设置其大小。将按钮添加监听,实现监听。在对应方法中编写代码,,为监听者创建对象,完成注册,即在接口名字前添加“add”。

游戏版面要继承JPanel,其原因是JPanel带有双缓冲技术,可以解决闪烁的问题,需要加入到JFrame窗体中,JPanel默认的布局管理器是FlowLayout。调用画笔,将所要显示的图片画出来。然后再根据自己的思路,在游戏版面内添加敌机,实现矩形碰撞,生命值判定,游戏结束对话框。要熟练掌握调用其他的类,画出分数,画出生命值。制作容器,装子弹,飞机,炸弹。

制作游戏思路一定要清晰,对于共有属性,可以建立一个父类,例如在创建一个FlyingObject类,这样可以避免代码的反复编写。对于子类myplane、enemies可以直接继承父类,子类可以根据自己的需求再增加新的变量。在子类myplane中,画出我的飞机,控制飞机飞行的边界,调用子弹容器,画出容器中子弹,与敌机进行碰撞检测。飞机大战还应该实现键盘监听,例如Enter键实现暂停,上下左右键实现移动等。在敌机Enemies类中,定义敌机随机出现坐标,敌机图片的相对路径,敌机速度,敌机子弹与我的plane碰撞出现的结果以及敌机子弹生成的时间等。

游戏制作时需要注意的事项:1.JLabel的位置一定要放对,应当先添加背景JLabel,再添加其它控件。否则其它控件将被JLabel所遮挡。

2.对于多次重复编写的代码,尽可能的用for循环,简单方便。但是也要注意跳出语句的使用。

3.调用函数时要注意顺序

4.类名,方法名要遵循命名规范性,尽量做到见名知义,也要注意大小写。

篇3:浅谈JAVA教学心得

Java是1995年由Sun公司组织开发的一种编程语言, 由于它的简单易用、完全面向对象、具有平台无关性、安全可靠、主要面向Internet应用等特点, 使它受到史无前例的关注。几乎所有高校都竞相开设了《Java程序设计》等相关课程, 尤其是在高职高专的计算机软件专业, 《Java程序设计》更成了主打课程, 也成为学生高薪就业的一个亮点。如何教好这门课程, 自然也成为了计算机教学中探讨的一个热点问题。从事高职高专的计算机软件专业《Java程序设计》的教学已有几个学期, 也想浅谈一下在教学中的心得, 与各位同事共勉!

1 为人师范

谈到师范, 我本人就是师范大学毕业, 现在从事教学工作, 可以说学为所用。但就这几年的实践教学而言, 感触很深。计算机软件的教学要求教师不但要有扎实的基本功, 更要有良好的编程思想和更多的实践开发经验, 这样才能更好的成为学生的师范, 才能教好学生!这一点, 也是许多高校计算机教学中的共性问题。学校的老师多数没有实际开发经验, 而软件开发人员可能又不太适合教学工作。正因为这样, 对老师就提出了更高的要求, 教师应该积极参加各项实践培训活动, 参与实际项目的开发, 努力提高自己的实践能力, 弥补开发经验的不足, 真正做到“为人师范”!

2 调整教学顺序, 从第一节课开始就培养学生面向对象的思想

《Java程序设计》的所有教学用书的编排顺序几乎都是一样的, 第一阶段:讲授Java语言基础 (历史沿革、开发环境、基本语法、流程控制、数组操作) ;第二阶段:面向对象基础 (类、对象、封装、继承、多态、抽象、接口、包等) 。在实际的教学中对两部分内容做了调整, 开发环境的配置讲完之后, 就直接进入到面向对象的程序设计阶段, 用实际生活中的“类” (如人类、动物类等) 与“对象” (如“张三”, “鱼”) 做比喻, 就好像是先见森林, 后见树木。其优点是学会将人类的自然思维方法用于程序设计, 建立系统与全局的观念。把第一阶段的内容融入到第二阶段也是切实可行的, 因为学生在学习《Java程序设计》之前至少学习了两门程序设计语言, 对于流程控制、数组操作并不陌生。在第二阶段接触面向对象的教学内容也会用到这些知识, 只要告诉学生Java程序与其它程序语法格式有哪些不同以及新增加的功能即可。真正做到“从第一节课开始就培养学生面向对象的思想”。这种教学方式不但有助于培养学生掌握Java语言的编程思想, 也有助于学生的主动思考能力的提高。这种教学方式在实际的教学中也取得了不错的效果。

3 培养学生良好的编程习惯

虽然Java是一种自由格式的语言, 可以按自己的意愿任意编排, 只要每个词之前用空格、制表符等分隔符隔开就行, 但在实际教学中, 绝不能让学生这样随心所欲写程序。学生都是初学者, 要从开始就养成良好的编程风格。特别是要注意规范编写代码, 软件编码规范中说“可读性第一, 效率第二”就像我和学生常开的一句玩笑“刚学写字, 绝不能提笔就写草书”。另外, 还在课堂上反复督促学生给程序写注释, 如果说这样能提高程序的可读性和可维护性, 对于学生而言这顶“帽子”有点大, 实际就是让学生养成一个按规范编写代码的好习惯。

4 讲解时要善于把复杂的问题简单化、具体化、实例化、通俗化

要善于把复杂的问题简单化处理, 列举典型例子, 用浅显易懂的程序帮助学生理解, 尽量避免或少用专业术语, 而用学生容易理解的语言表述, 甚至用生动形象的比喻帮助学生快速理解。Java对象的多态性中“对象类型转换”是Java中不太容易理解的一个知识点, 在讲解这部分内容时, 给学生举了这样的一个例子, “女人”是“人”的子类, 要把一个“女人”对象当作“人”去用, 天经地义 (隐式自动类型转换) ;但要把一个“人”直接当作“女人”去用, 却说不过去 (强制类型转换) 。这样讲解通俗易懂, 学生自然容易记忆。再比如“Socket”, 你如果告诉学生它是一个“套接字”, 他马上就会问“什么是套接字”, 你又解释了一遍, 他还是糊涂, 你不如就告诉他“Socket”在网络通信中的作用就像日常生活通信中的“邮局”, 我们要在网络上要传送的信息也就相当于“信”。这样解释学生很快就能明白网络通信是怎么回事了, 自然也就明白了“Socket”。当然不是所有的知识都能适当找到它的喻体, 这还需要我们不断去挖掘发现!

5 加强实践教学, 提高应用能力

《Java程序设计》是一门集知识和技能于一体, 实践性很强的课程, 教学中应注重上机实践, 上机的过程既是对课程内容的实践, 也是应用编程的开始。

5.1 边讲边练

根据《Java程序设计》课程的特点, 应用演示+操作+讲解 (即边讲边练) 的授课方法进行讲授。

教学内容应该突出理论知识的应用和实践技能的培养, 以“必需、够用”为度。建议理论与实践教学时数的分配达到1:2, 每一个知识点配备多道上机实例, 强化学生阅读程序能力, 举一反三。使用“任务驱动”教学法让学生在“任务”的驱动下学习, 引导学生由简到繁、由易到难地完成一系列“任务”, 从而提高实践能力。

边讲边练的教学方式可以使学生同步看到程序的调试与运行过程, 真正实现了“用计算机教计算机”, 使教学更具直观性和互动性, 同时加大了授课的知识量。

5.2 鼓励学生多动手

学习Java编程语言要经常阅读一些优秀的源码, 对自我提高、开阔视野非常重要。但一定要多动手才能真正把别人的东西消化掉。

很多学生学Java就是看书、听课, 当时是明白了, 过后马上就忘记。如果不愿意敲键盘, 就不如不学。即便有时候对所输入的代码不太明白, 也可以先运行, 看看结果, 多增加感性认识, 然后上升到理性的认识。所以教学中一定要鼓励学生多动手写代码。

小结

Java教学一定要围绕提高学生实践应用能力展开, 注重对面向对象编程思想的培养, 注重学生自主学习和持续学习能力的培养, 教学过程中要引入项目驱动式教学方法及多媒体教学手段。以上探讨了Java教学的一些问题, 提出了改进措施, 并实际应用于Java教学, 取得了很好的效果。其实, 教学关键在于因材施教, 所以文中所提及措施, 也不一定适合所有Java教学活动。但希望能够起到抛砖引玉的作用, 愿各位老师教好Java, 愿各位学生学好Java。

篇4:全民飞机大战

本周排名:2

网易的两款西游系列手游已经霸榜App Store近3个月了,其他手游想要冲进畅销榜前3的位置在短期内是不可能实现的了,然而腾讯却说:“只要我想做第一,我就能做第一!”这不,《全民飞机大战》一周的时间都没用到就做到了。在发稿日的前一天《全民飞机大战》就已经坐上了App Store畅销榜冠军的位置,截止发稿日当天这款手游也仍在畅销榜第2名的位置,看来在很长一段时间里国内手游市场中能坐上第一和第二位置的也就只有网易和腾讯这两家旗下的手游了。

尽管网易的两款西游系列手游长期霸占榜单的一 二名,但毕竟还都算是年轻的手游,相比《全民飞机大战》这样元老级的手游,在用户存量上还是有一段距离。仅仅是因为《全民飞机大战》推出了一款新飞机,再来上一波促销活动,其收入流水就直线式的向上飙升,腾讯“量多”的玩笑话可还真不只是一句玩笑话而已。

不过《全民飞机大战》这爬得快,掉得也绝对不会慢,毕竟促销活动来得快去得也快,等到玩家们对于新飞机的新鲜感过去了,“飞机”还是会回到自己的“跑道”上去的。这次小小的爆发,也不过给榜单带来了些许的波澜而已。

大富豪2

上周排名:22

本周排名:71

刚刚全平台公测不久《大富豪2》,在一周的时间里就从App Store畅销榜第22名滑落到了第71名,这款手游的品质如何,从其掉榜的速度就可以看出一二来。本想来这款模拟经营类的手游或许只是游戏品质做的不够好,结果深究其掉榜的原因,却发现没有想象中那么简单。

早前曾有一款名为《大富豪》的手游,《大富豪2》表面上看是前者的续作,玩家也可以使用前者的游戏账号登录《大富豪2》,并获取游戏数据。但是其实《大富豪2》也就是《大富豪》改了个名字,美化了一些界面的复刻品。老玩家被骗进去发现什么都没变,就画面变了,新玩家进去发现游戏粗制滥造,毫无新意,这样的手游被玩家迅速的抛弃,也是在情理之中的。这样的投机倒把行为,在国内手游市场可还真是不少啊!

圣斗士星矢

上周排名:32

本周排名:128

我之所以注意到这款名为《圣斗士星矢》的手游,是因为编辑部里有位小编正在玩它,而仅仅过了一周,就差点在榜单上找不到这款手游了。这款花了大价钱买了原著漫画版权的正版手游,显然只是一款毫无诚意的套IP上架的卡牌手游而已。

篇5:飞机大战总结

个人实习总结

实习类型 教学实习_ 实习单位 智游教育 _ 实习题目 飞机大战 _ 指导教师 看看 _ 所在院系 信息工程系 _ 班 级 电子信息122班 _ 姓 名 看看 _ 学 号 12345678988 _

一、实习时间和地点

时间:2015.06.25-2014.07.05 地点:1栋1503

二、实习的内容

1、介绍

本次实习制作的飞机大战游戏是在VMware Workstation 10软件的虚拟机ios环境下制作的一款桌面游戏,界面简洁流畅、游戏方式简单。

2、流程图

3、功能概述

实现闪屏。游戏运行前先显示一张图片,图片显示一段时间然后消失,接着游戏开始启动。

实现游戏背景。游戏运行时背景不断下落。

实现敌机。敌机随机产生,数量不定,以随机的速度从主屏幕上方下落,当子弹击中敌机,敌机爆炸消失。

实现主机。主机只有一架,由鼠标控制移动,移动过程中鼠标击中点始终主机的中心点重合。

实现子弹。子弹由主机发出,数量不定,连续产生,若子弹飞出主屏幕则自动消失,若子弹击中敌机子弹消失。

4、变量声明

① 背景变量:bgImgv 和bgImgv1 UIImageView * bgImgv;UIImageView * bgImgv1;bgImgv 和bgImgv1是两张背景图片,利用两张图片的交替变化实现背景图片不断下落。

② 敌机变量:djArray、dj、count、vx、vy NSMutableArray * djArray;DjImageView * dj = [[DjImageView alloc] init];Static int count;Float vx;float vy;djArray是储存敌机的数组;dj是敌机这个对象;count是计数变量用来生成敌机;vx是敌机的横向速度,vy是敌机的纵向速度。③ 主机变量:fj FXQImageView * fj;fj是主机这个对象。

④ 子弹变量:zdArray、count、zd、NSMutableArray * zdArray;

Static int count;zdImageView * zd = [[zdImageView alloc] init];zdArray是储存子弹的数组;zd是子弹这个对象;count是计数变量用来生成子弹。

⑤ 闪屏变量:sunli UIImageView * sunli;Sunli是闪屏图片,用来实现闪屏功能。⑥ state Int state;State是开关变量,用来控制程序执行的顺序。

5、程序测试

1)初始化state=2,运行splash函数,加载闪屏图片,让图片逐渐变透明,三秒后完全消失,然后调用stop函数,stop函数将图片移除,使state=0。2)state=0执行调用加载游戏函数loadGame。

3)loadGame函数依次调用加载背景函数loadBg、加载敌机函数loadDj、加载飞机函数loadFj、加载子弹函数,加载完成后state=1。4)State=1执行调用运行游戏函数runGame。

5)runGame函数依次调用运行背景函数runBg、运行敌机函数runDj、运行飞机函数runFj、运行子弹函数runZd。

runBg:实现背景图片不断下落。

runDj:使敌机随机分布随机产生,让敌机以不一样的速度垂直下落。

runFj:利用两张飞机图片交替出现来实现飞机动态。

runZd:实现子弹连续的发射,若子弹飞出主屏幕子弹消失。

6)若子弹击中敌机运行hitDj函数,hitDj函数实现子弹击中敌机时,子弹和敌机消失,即将dj 和zd 从它们所在的数组中移除,敌机移除后立即调用beHit函数,biHit再调用run函数。run函数用敌机爆炸的一系列图片来制造出敌机爆炸后消失的动态效果。

6、游戏运行界面概述

程序运行后主界面如下,敌机随机分布,子弹由主机发射。

三、心得体会

篇6:飞机大战 我的周末作文500字

我赶紧试飞了一下,飞机却翻了个跟头,像喝醉了一样,直直地落在了地上。我连忙捡起飞机,跑去问妈妈:“为什么飞机飞不起来呢?”妈妈看了看说:“因为你的机翼没折好,两边不对称,所以飞不起来。”我一看,果然如此,原来机翼不平衡飞机就飞不起来呀!这次我留意了,折好了就迫不及待地又试了一次。“哇!小鸟,飞吧!”我正高兴得大喊着。忽然,飞机碰到天花板又掉了下来。这时,妈妈走过来说:“我也叠了一个飞机,咱们比赛吧!”我说:“好!不过咱们先给飞机起个名字。”妈妈同意了。我的叫“海神号”,妈妈的叫“美人鱼号”。

房间里空间太小,我们就来到楼下开战了。我说:“预备,飞!”我和妈妈一同放飞了飞机。我的“海神号”在空中划了一道美丽的弧线,慢慢滑翔了一段,终于安全着陆了。我长出了一口气,高兴得大叫:“太棒了!”再看看妈妈的“美人鱼号”却改变了路线直往墙上撞。最后,“吧嗒”一声“坠机”了。“‘海神号’赢了!”我高兴得一蹦三尺高。围观的小伙伴也欢呼起来。

篇7:java飞机大战心得体会

Scratch前置课第九讲:飞机大战

一、教学目标

1、掌握播放声音()等待播完、克隆【克隆(自己)、当作为克隆体启动时、删除此克隆体】、在()和()之间取随机数、重复执行直到()、广播【广播()、当接收到()】、变量【将()设为()、将()增加】的积木脚本使用。

2、学习积木的组合使用。

二、主要程序脚本

编号

详细内容

功能描述

【1】

“播放声音()等待播完”

播放指定的声音,声音播放结束再执行后面的脚本

(可选选项为角色中的声音名称)

【2】

“克隆(自己)”

以递归的方式克隆指定角色

(克隆选项为各个角色的名称)

【3】

“当作为克隆体启动时”

当角色作为克隆体被创建时执行该积木下方的程序脚本

【4】

“删除此克隆体”

删除相应的克隆体

(只能在“当作为克隆体启动时”积木下使用)

【5】

“重复执行直到()”

该积木内的脚本一直执行直到指定的条件为真

【6】

“在()和()之间取随机数”

返回从第一个指定数到第二个指定数之间,包含两个端点的伪随机数

(可填入整数或小数,前后数字均为整数时返回值为整数)

【7】

“广播()”

用于角色发送消息指令

【8】

“当接收到()”

用于角色接收指定的广播消息,接收后执行该积木下方的程序脚本

(接收内容为建立的广播消息)

【9】

“将()设为()”

用于给指定的变量设置为指定的字符串或数字

(变量选项为建立的变量名;设为数字时舞台区小数点后可显示六位)

【10】

“将()增加()”

按给定的值更改指定变量

三、课堂准备

编号

名称

内容

来源

备注

【1】

PPT课件

课堂全流程演示文稿

火星科学盒官网

【2】

课程资料

PPT课件、讲义、视频

火星科学盒官网

【3】

学生上课使用器材

笔记本电脑或者台式电脑

老师自备

电脑建议使用Windows系统,苹果电脑和Linux系统需要从官网上单独下载对应的软件

游戏手柄

火星人商城采购

飞机大战初始程序

网盘链接下载

【4】

编程软件下载

Scratch3.0

火星科学盒官网

火星科学盒官网在线编辑版

离线下载版

安装好后测试一下是否可以使用

四、上课流程

本节课包括7步具体流程:

(1)第1步为引入部分,可以通过一个小故事邀请学生帮助老师一起制作一个飞机大战的小游戏。时长控制在10分钟内。

(2)第2步为角色功能分析,通过展示效果视频分析角色的动作,对任务进行拆分。时长控制在5分钟内。

(3)第3-6步为项目制作,首先任务一为游戏添加背景音乐;之后复习克隆积木的组合使用,实现炮弹的持续发射。任务二中修改敌机脚本使用,实现敌机碰到下边缘时返回起始位置;修改起始位置为随机;使用重复执行直到()实现碰到闪电号时停止移动;最后使用广播和变量的相关积木实现游戏失败和胜利的效果。时长控制在65分钟内。

(3)第7步为总结与巩固,考察对本节课重点知识脚本和脚本逻辑的掌握。时长控制在5分钟内。

上课步骤

主要内容

备注

【第1步】引入

【对应PPT】“开始页”

【时长】10min

【引入】老师有一个好朋友XXX,他一直有一个梦想,就是开着战机在天空中翱翔,但是他年纪还太小了,和大家的年纪一样,他现在还不能实现这个梦想,所以他最近特别沮丧。那为了让XXX开心起来,我就想了一个办法,就是制作一个飞机大战的游戏,让XXX能在游戏中体验一下开着战机翱翔的感觉。那老师现在只做了一部分,剩下的一部分同学们帮助老师一起来完成怎么样?

故事尽量讲得生动有趣,课堂引入时多和学生互动。

【第2步】角色功能分析

【对应PPT】“项目拆解”

【时长】5min

【衔接话术】那下面我们就先来看一下最终要完成的效果,这样我们就能知道接下来要完成哪一部分了,同学们一定要认真看哦

【提问】在视频中敌机是如何移动的?敌机是从上方随机位置出现还是固定位置出现的?什么时候游戏会胜利,什么时候会失败?(学生回答)

【总结】敌机角色从舞台区上方随机位置出现并向下移动,碰到炮弹或舞台下边缘时会消失并重新从上方出现;游戏得分等于50时游戏胜利,敌机和闪电号碰到时游戏失败。

点名提问学生视频中的角色效果。

【第3步】播放背景音乐,炮弹持续发射

【对应PPT】任务一播放背景音乐,炮弹持续发射

【时长】20min

【衔接话术】刚刚我们已经分析了游戏效果,那下面我们就一步步地把游戏补充完整,首先咱们先让游戏能够播放一首好听又激昂的背景音乐。

【提问】可以放在重复执行中使用的播放声音的积木是什么?(学生回答)

【讲解】“播放声音()等待播完”积木可以放在“重复执行”中,因为我们要播放背景音乐,也就是让音乐一直播放,所以要使用到“重复执行”,那么选择用来播放声音的积木就是“播放声音()等待播完”。(等待学生拼接)(程序样例见“第五部分

程序1-1”)

【衔接话术】背景音乐已经可以播放了,那下面咱们来补充炮弹这个角色的积木。让闪电号能够不停地发射炮弹。

【讲解】在炮弹这个角色中已经有了这样一组积木,这组积木中角色作为克隆体启动时会显示出来,从闪电号出发,之后会一直向上移动,在碰到边缘和敌机时就会消失。

【提问】我们拼接了这样一组积木,为什么不能实现炮弹持续发射的效果呢?现在这组积木是让克隆体还是让原角色执行的?(学生回答)

【讲解】这组积木是让克隆体执行的,也就是说克隆出新的炮弹后,新的炮弹会从闪电号出发向上发射。但是在炮弹角色中并没有克隆自己的积木,也就是说没有克隆体能够执行这组积木,所以就没有炮弹持续发射的效果。

【提问】如果想让炮弹持续不断地发射,就需要让炮弹不停地克隆自己,使用什么积木能够让炮弹不停地克隆?(学生回答)

【讲解】使用“重复执行”积木让炮弹不停地克隆,为了让炮弹克隆的没有那么快,需要添加“等待()秒”积木,让炮弹每隔0.1秒克隆一次。因为原角色只能停留在原地克隆自己,所以为了不让它影响画面,需要添加“隐藏”积木把原角色隐藏。(等待学生拼接)(程序样例见“第五部分

程序1-2”)

1.本节课中用到的基本是学习过的积木,在制作时,主要使用提问的方式带领学生复习;

2.复习克隆相关积木时,重点说明一下克隆自己、当作为克隆体启动时与删除此克隆体积木时通常是组合使用的。

【第4步】任务一梳理

【对应PPT】任务一梳理

【时长】5min

【衔接话术】刚刚已经实现了炮弹持续发射的效果,那老师来考考同学们,看看同学们对积木掌握得怎么样

【提问】如何让多个同样的角色出现在舞台区?(学生回答)

【讲解】使用克隆可以让多个同样的角色出现在舞台区。

【提问】和克隆相关的积木有哪些?(学生回答)

【讲解】和克隆相关的积木有“克隆(自己)”、“当作为克隆体启动时”和“删除此克隆体”

【提问】这三个积木分别能够实现什么样的功能效果?(学生回答)

【讲解】“克隆自己”可以复制原角色,产生新的角色;“当作为克隆体启动时”是让克隆体执行命令;“删除此克隆体”实现删除当前克隆体的效果。

在提问过程中可以进行引导性提示。

【第5步】修改敌机脚本、制作胜利失败

【对应PPT】任务二砖块的随机出现

【时长】25min

【衔接话术】闪电号的炮弹可以不停地发射了,同学们是不是已经准备开着闪电号去大干一场啦?但是现在有一个问题,敌机从上向下飞行,在到达舞台下边缘后就卡住不再动了。它卡在了舞台下边缘,既打不中它,也没有新的敌机出现,这可怎么办呢。下面我们就想办法解决一下这个问题。

【提问】同学们有没有什么办法能够解决呢?(学生自由回答)

【话术】同学们的想法都很不错呀,老师这里也有一个想法,就是让敌机碰到舞台下边缘后就回到初始位置。但是这里有一个问题,没有直接侦测角色碰到舞台下边缘的积木怎么办呢?

【提问】同学们还记得在弹球打砖块那节课中是如何侦测小球碰到舞台下边缘的吗?(学生回答)

【讲解】可以侦测角色的y坐标,当角色的y坐标小于角色放置在舞台下边缘时的y坐标数值,角色就一定碰到了下边缘。可以先在舞台区拖动敌机角色,让敌机的头部贴近舞台下边缘,然后记录一下角色区y后的数值,填入“(y坐标)<()”中去。之后,是实现敌机碰到下边缘时移到初始位置。

【提问】让角色移动到一个固定坐标位置的积木是什么?(学生回答)

【讲解】“移到x()y()”积木让角色移动到一个固定的坐标位置,在这个积木中填入的数值和设置敌机初始位置的积木中的数字是相同的。(等待学生拼接)(程序样例见“第五部分

程序2-1”)

【衔接话术】运行作品之后可以看到,敌机碰到舞台下边缘之后能够返回初始位置了,但是,现在敌机只会从同一个位置出现,这样的话我们只要把闪电号移动到那个位置的下面就一定能够打中敌机。这样的游戏真没意思,XXX也肯定不会喜欢的。下面咱们就修改一下积木,让敌机能够从舞台区上方的随机位置出现。

【提问】敌机从一条横线的随机一个位置出现时,敌机的哪个坐标是不变的,哪个坐标是变化的?(学生回答)

【讲解】在一条横线上,角色的y坐标是固定不变的,x坐标是改变的。

【提问】能够让x坐标取到随机数的积木是什么?(学生回答)

【讲解】“在()和()之间取随机数”积木,可以将x坐标设为随机。在这个积木中填入的数字应该在-180~180之间,之后,取随机数的积木应该放在敌机角色的脚本中三个“移到x()y()”中x坐标的后面。因为这三个积木都是为了让敌机移到初始出发的位置。(等待学生拼接)(程序样例见“第五部分

程序2-2”)

【衔接话术】到这里,我们的游戏主体就完成了,现在可以控制闪电号去攻击敌机了。既然咱们制作的是一个游戏,那这个游戏肯定会有失败和胜利的情况。下面我们就先来完成游戏失败。

【提问】同学们还记得游戏什么时候会失败吗?(学生自由回答)

【讲解】在敌机和闪电号碰到的时候游戏会失败,游戏失败的时敌机会先停止移动,之后,失败角色显示并停止游戏。也就是说敌机会一直移动直到碰到闪电号,能够让敌机一直不停地向下移动使用的是“重复执行”,现在让敌机碰到闪电号时停下来,也就是给重复执行添加了一个停止条件。

【提问】给重复执行添加了一个停止条件的积木是什么呢?(学生回答)

【讲解】“重复执行直到()”在满足“直到”后填入的条件时,就会停止这个积木中的脚本,向下执行其他脚本。现在让敌机一直移动直到碰到闪电号,应该在“直到”后面填入的是“碰到(闪电号)”,然后把“重复执行”积木替换成刚刚拼好的“重复执行直到(碰到闪电号)”。(等待学生修改)(程序样例见“第五部分

程序2-3”)

【衔接话术】现在,敌机已经停下来了,下面就是让失败角色显示,并且停止游戏了。

【提问】敌机停止移动后,失败角色就要显示出来。失败角色如何能够知道敌机已经停止移动了呢?(学生回答)

【讲解】应该使用广播,让敌机在碰到闪电号后广播消息,失败在接收到消息之后,使用“显示”积木显示出来,之后使用“停止全部脚本”来停止游戏。

【提问】敌机在碰到闪电号之后才会广播失败消息,应该把“广播(失败)”放在敌机脚本积木的什么位置呢?(学生回答)

【讲解】应该放在“重复执行直到()”的下面,因为敌机碰到闪电号后就会执行“重复执行直到()”积木下的命令。(等待学生拼接)(程序样例见“第五部分

程序2-4和程序2-5”)

【衔接话术】到这里,失败效果就制作完成了,接下来就是添加游戏胜利的效果。游戏是在得分等于50的时候胜利,所以我们需要先添加得分,炮弹每击中一次敌机就得一分。

【提问】需要新建什么来记录游戏的得分?能够实现得分增加的积木是什么?为得分设置初始值的积木是什么?(学生回答)

【讲解】需要添加变量来记录得分,使用“将(得分)增加()”可以实现得分的增长,使用“将(得分)设为()”来设置得分的初始值。敌机碰到炮弹时得分才会增加,因此“将(得分)增加()”放在敌机角色脚本“如果碰到炮弹那么…”的里面。(等待学生拼接,拼接完成后给出答案检查)(程序样例见“第五部分

程序2-6”)

【衔接话术】得分已经添加完成了,接下来实现得分等于50时游戏胜利的效果。

【提问】游戏胜利时显示的效果有什么?(学生回答)

【讲解】游戏胜利时胜利角色会显示,之后游戏停止。让敌机角色一直判断得分是否等于50,在得分等于50时给胜利角色发送广播,胜利角色接收到广播胜利后,显示并停止游戏。也就是如果得分=50,那么广播胜利。(等待学生拼接,之后给出答案检查)(程序样例见“第五部分

程序2-7和程序2-8”)

1.在敌机从上方随机边缘出发这一步中,在()和()之间取随机数这个积木应该放在三个移到x()y()中;

2.在实现失败和胜利效果时,注意提醒学生需要拼接脚本的积木。

【第6步】任务二梳理

【对应PPT】任务二梳理

【时长】5min1、这组积木拼接在了哪个角色上;

2、实现了什么样的效果?

在提问过程中可以进行引导性提示。

【第7步】总结与巩固

【对应PPT】总结与巩固

【时长】5min

【衔接话术】同学们这节课表现得非常棒,和老师一起帮助XXX制作了一个飞机大战的游戏,XXX收到这个游戏后肯定会特别开心的。下面呢,还有一个练习题要考考大家。

【我问你答】

在提问练习题时,可以先给出:记录每一次游戏得分,所以得分应该从0开始增加。这样的提示。

Q.小呆想要用变量记录每一次游戏的得分,这样拼接脚本可以实现吗,为什么?

A.不可以,因为没有设置变量的初始值,得分不是从0开始增加的。

五、主要程序说明

程序样例编号

程序样例与说明

对应的角色

1-1

(任务一最终版程序的一部分)

【程序1-1描述】作品运行后,不停播放背景音乐。

【背景】

1-2

(任务一最终版程序的一部分)

【程序1-2描述】作品运行后,炮弹原角色隐藏,每隔0.1秒有一个新的炮弹出现在舞台区。

【炮弹】

2-1

【程序2-1描述】敌机从(-74,180)的位置出发向下移动,被炮弹击中时发出爆炸声音并回到初始位置,到达舞台下边缘后也回到初始位置。

【敌机】

2-2

【程序2-2描述】敌机从舞台区上边缘的随机位置出发向下移动,被炮弹击中时发出爆炸声音并回到初始位置,到达舞台下边缘后也回到初始位置。

2-3

【程序2-3描述】敌机从舞台区上边缘的随机位置出发向下移动,被炮弹击中时发出爆炸声音并回到初始位置,到达舞台下边缘后也回到初始位置,在碰到闪电号时,敌机会停止移动。

2-4

【程序2-4描述】敌机碰到闪电号时会停止移动,之后广播失败消息。

2-5

(任务二的最终版程序的一部分)

【程序2-5描述】失败角色在接收到敌机发送的失败消息后会显示出来,并停止游戏运行。

【失败】

2-6

【程序2-6描述】作品运行后,得分初始化为0,敌机从舞台区上边缘随机位置出发向下移动,被炮弹击中后得分加1,播放声音爆炸并回到初始位置,继续向下移动。碰到闪电号时停止移动。

【敌机】

2-7

(任务二的最终版程序的一部分)

【程序2-7描述】得分=50时,敌机广播胜利消息。

2-8

(任务二的最终版程序的一部分)

【程序2-8描述】胜利角色接收到胜利消息后显示出来,之后停止游戏

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【java飞机大战心得体会】相关文章:

百团大战观影体会06-23

组织观看《百团大战》心得体会06-05

飞机乘务员工作心得体会07-01

第三次世界大战之机械大战作文07-06

长平大战04-18

汉字大战07-08

作文大战08-01

粉笔大战08-04

涿鹿大战范文05-16

撕名牌大战04-15

上一篇:开展活动通讯稿标题下一篇:高校国学教育现状与学科属性研究