CH 2    欢迎来到代码世界

1.殊途同归,开辟代码之路

在上一章的demo中,我们已经创建了自己的世界,并在其中添加了一个角色。然而,这个工作并不是我们通过编写程序实现了,而是借助了Greenfoot作为一个简易游戏框架的一些现成的功能。

虽然是一个不错的开头,但我们却不能停步不前。

在这一章,我们首先要做的就是——破旧立新,用编写代码的方式实现上一章的实现的内容。创建一个黑色的世界,并使其自动在世界的中心添加一个白色行者,从此和手动摆放说拜拜。

(1).代码编写的BlackWorld

首先让我们对着类列表中的BlackWorld右键,再次使用“Set image”的方法设置图片为“None”,清空我们之前的设定。

然后,我们将通过代码,来实现这个简单而深邃的纯黑世界。

双击BlackWorld类,Greenfoot会为我们打开一个代码编辑界面。

这就是我们今后主要干活的地方了。我们先来看一下Greenfoot自动生成的这个BlackWorld类的代码。

在这里我们先来简单的写几行代码,来将这个场景填充为黑色,先来看代码,具体含义后面慢慢解释。

代码清单:

 1 /**
 2  * Write a description of class BlackWorld here.
 3  *
 4  * This is a world which is filled with black.
 5  * 这是一个纯黑的世界类
 6  *
 7  * @author upupzealot
 8  * @version 0.1
 9  */
10 public class BlackWorld extends World
11 {
12
13     /**
14      * Constructor for objects of class BlackWorld.
15      * BlackWorld类的构造器
16      */
17     public BlackWorld()
18     {
19         // Create a new world with 400x200 cells with a cell size of 1x1 pixels.
20         super(400, 200, 1);
21         setBackground("Background.png");
22     }
23 }

写完之后点击代码编辑器左上角的compile(编译)按钮,或者主界面上的compile按钮,提交我们刚刚修改的代码。

一个纯黑的舞台就展示在我们的眼前了。

可以看到编译过后,类列表中BlackWorld上原有的灰色斜线们也不见了。一个类上有灰色斜线表示它是未编译的。编译过后,灰色斜线们会消失。

PS:默认代码中世界的尺寸是600 * 400的,我这里为了缩小窗口方便截图,就改为400 * 200了,详见代码。

(2).BlackWorld类代码解释

第3~11行是对这个类的大体描述。9、10行是作者信息和版本信息。这个部分完全可以空着不写,不影响功能的。反正我自己是从来不写的,不过嘛习惯还是养好的好。

12到25行是正式的代码部分。可以看到整个BlackWorld类目前只有一个被称为构造器的方法(method)。(这里的构造器(Constructor)是我的直译,通常称之为构造方法)

15到18行是对这个方法的解释(同上,可不写)。

而19到24行是这个方法的主体。

我们注意到其中21行位于一对斜杠之后,整行呈灰色。那是因为在Java语言中,双斜杠(//)开头表示之后的整行为注释。注释是写给人看的,它可以是你自己写的标记,同时也可以让可能出现的看你代码的人看起来更加方便。成为注释的行在编译过程中会被编译器自动忽略,也就是说机器看不见注释行,它只是写给人看的。

22,、23行是真正有意义的代码行。

其中22行规定了BlackWorld是一个宽400格,高200格,每格大小为1*1像素的一个世界。

23行则表示将一张名为“Background.png”的图片设为这个世界的背景图。

PS:项目中用到的每一张图片都必须放在项目目录的image文件夹下,然后就可以在改项目的任何位置在代码中使用了。

(3).以同样的方法来处理白色行者

看完上面的介绍,你能不能用相似的方法来处理白色行者呢?双击打开WhiteWalker的代码编辑窗口。我们可以看到

里面只有一个叫做act的方法。并没有提供现成的构造方法,所以这里我们需要自己写。请读者自己动手,参考BlackWorld的中的构造函数的格式,来自己编写WhiteWalker的构造方法,这里暂时不给出参考代码。

动手任务:

参考BlackWorld的参考代码,为WhiteWalker编写一个构造方法。在这个构造方法中,将我们预置在项目images文件夹中名为WhiteWalker.png的图片设置为WhiteWalker的显示图片。

任务提示:

Actor类(及其子类)设置显示图片的方法和World略有不同。它的名称是SetImage,不过在括号中传递的参数形式和World类中的setBackground相同。(都是String(字符串)类型)

(4).在我们的纯黑世界中加入白色行者

我们在BlackWorld和WhiteWalker类的构造函数中已经完成了初步的初始化工作——设定显示图片。

这是一个振奋人心的良好开始,让我们再接再励,学习一下怎么使用代码,在我们的BlackWorld中央添加一个WhiteWalker。我们不妨把这部分代码放在BlackWorld设置完图片之后。

动手任务:

在BlackWorld的构造函数中,用代码实现在其中央(也就是(200, 100)位置)添加一个WhiteWalker。根据下面的提示,尝试组合出一行代码。

任务提示:

1.这里会用到一个Greenfoot中World及其子类添加一个Actor或其子类到(x,y)位置的方法。

addObject(Actor actor, int x, int y);//(这里的Actor和int表示参数类型,Actor表示Greenfoot中的Actor及其子类,int表示整数)

2.而在添加WhiteWalker时,必须生成一个WhiteWalker对象传递进addObject的参数列表中。

我们可以通过new WhiteWalker()来调用我们之前写好的WhiteWalker构造函数,来生成一个WhiteWalker,把它放在代码中合适的位置用它代表一个新生的WhiteWalker吧。

好了,接下来来看代码。(希望在看参考代码之前你已经真的自己尝试过了,只有多动手才能学好编程)

代码清单:

1 public BlackWorld()
2 {
3     // Create a new world with 400x200 cells with a cell size of 1x1 pixels.
4     super(400, 200, 1);
5     setBackground("Background.png");
6
7   addObject(new WhiteWalker(), 200, 100);
8 }

这里添加WhiteWalker的代码是最后一行。你写对了吗?其实任务提示中已经写得很详细了哦。

2.代码之力

(1).让WhiteWalker成为真正的Walker——给WhiteWalker添加移动代码

细心的同学一定察觉到了,在我们生成WhiteWalker时,自动生成的代码中有且只有一个名叫act的方法。

act这个方法是Greenfoot中Actor及其子类的核心方法。具体的先不说,直接给出代码吧。

代码清单:

 1 import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
 2
 3 /**
 4  * Write a description of class BlackWorld here.
 5  *
 6  * this is an actor which is a white brick and it could walk
 7  *
 8  * @author upupzealot
 9  * @version 0.1
10  */
11 public class WhiteWalker extends Actor
12 {
13     public WhiteWalker()
14     {
15         setImage("WhiteWalker.png");
16     }
17
18
19     public void act()
20     {
21         int x = getX();
22         int y = getY();
23         x++;
24         setLocation(x, y);
25     }
26 }

按照上述代码完成WhiteWalker类,编译后回到主界面,按下Run按钮。

可以看到我们的WhiteWalker就向右动起来啦!

动手任务:

参考上面的右移代码,想一想右移的代码是怎么实现的,究竟在那一行我们给WhiteWalker添加了代码之力呢?怎么实现左移?上下移动呢?45°斜角的四个方向呢?

任务提示:

这次不给提示,相信自己,学写代码其实很简单!

至此我们初步学习了怎么在Greenfoot中以编写代码的形式来达成我们的目标。对于一些格式或者Greenfoot中的一些函数不熟悉我们不必在意。在下一章中,我们将为大家慢慢解释今天最后给出的部分代码。同时为大家介绍一些Java作为一门OO编程语言的基本知识。(Object Oriented,缩写OO,面向对象的)如果你现在对于自己写的代码或者我给出的部分代码只是一知半解,不用担心,就看我“下回分析”吧。

转载于:https://www.cnblogs.com/upupzealot/archive/2013/01/30/2882289.html

[Greenfoot中文教程] 02 - 欢迎来到代码世界相关推荐

  1. [Greenfoot中文教程] 自序 – Greenfoot WWWWW

    自序 – Greenfoot WWWW 1.What--什么是Greenfoot Greenfoot是一款小巧的Java 2D游戏开发引擎(或者说框架更合适),同时也是一款简单以游戏开发为特色的较为标 ...

  2. [Greenfoot中文教程] 00 - 安装配置Greenfoot

    CH0    安装配置Greenfoot 1.获取Greenfoot Greenfoot作为一款免费开源的共享软件,可以从其官网下载.(官网地址:http://www.greenfoot.org) 进 ...

  3. 【PyCharm中文教程 02】PyCharm 社区版下载与安装

    1. 下载链接 PyCharm for Windows :https://www.jetbrains.com/pycharm/download/#section=windows PyCharm for ...

  4. [Greenfoot中文教程] 01 - Greenfoot初体验

    CH 1  Greenfoot初体验 1.认识Greenfoot界面 OK,打开我们之前建立好的Greenfoot空白工程,我们首先将看到这样一个界面. 首先我们就来认识一下Greenfoot的这个主 ...

  5. pythonista检测内容自动点击_Pythonista中文教程:100行代码实现一款远程键盘

    前言 最近在逛AppStore的时候看到了一个挺有意思的app叫"远程输入法",意在使用电脑上使用键盘给iOS设备进行远程输入.出于好奇就买下来玩了玩,功能确实不错,但是总觉得少了 ...

  6. 基于海康威视IP摄像头和虹软的MFC人脸识别系统开发教程——02使用示例代码构建MFC工程(海康威视IP摄像头部分)

    目录 第一步 新建MFC工程 第二步 项目文件配置(正式写代码之前的操作) 第三步 添加Picture 控件 第四步 初始化SDK 第五步 注册设备并登录 第六步 启动预览 代码及效果 第一步 新建M ...

  7. 【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码

    [Unity学习笔记][Unity中文课堂教程] C#中级编程代码 最近想补一补C#基础,Unity官方的C#中级编程教程质量很高,于是开个帖子把跟着敲+记录了部分价讲解和我自己的理解的代码存在这 原 ...

  8. 【巨人的肩膀上制造世界】——1——Unity3D实用插件之地形插件Gaia,高质高效搭建你的地形,全中文教程!

    Unity3D快速搭建你的高质量地形,最好用的Unity3D地形制作插件Gaia,全中文教程 目录 1.博文介绍 2.Gaia3分钟制作地形效果展示 3.Gaia导入 4.Gaia编辑栏中文详解 (1 ...

  9. 【巨人的肩膀上制造世界】——2——Unity3D实用插件之QHierarchy,更方便的管理你的层级面板,全中文教程!

    [巨人的肩膀上制造世界]--2--Unity3D实用插件之QHierarchy,更方便的管理你的层级面板,全中文教程! 目录 1.博客介绍 2.QHierarchy介绍 3.QHierarchy操作详 ...

最新文章

  1. NVIDIA GPU卷积网络的自动调谐
  2. 【iOS_Development】文件操作
  3. 工程师必读 微软如何部署Exchange2010
  4. 【怎样写代码】工厂三兄弟之工厂方法模式(五):工厂方法模式扩展
  5. PAT甲级1122 Hamiltonian Cycle:[C++题解] 图论、模拟
  6. fork() || fork()和fork() fork()笔试题
  7. [云炬创业管理笔记]第九章为创业成败而准备测试1
  8. 深拷贝拯救指针重复释放(浅拷贝)造成的内存泄漏
  9. How is application controller loaded by UI5 framework
  10. 30亿参数,华为云发布全球最大预训练模型,开启工业化AI开发新模式
  11. js正则匹配闭合标签_正则表达式匹配封闭html标签
  12. 马士兵oracle视频教程笔记
  13. 华中师范大学计算机考研论坛,2020年华中师范大学计算机考研经验分享
  14. 一文告诉你16条微信小程序推广渠道大全
  15. XCTF-Cat+Bug
  16. Hello Juejin
  17. ESP32开发环境的搭建和 ESP-IDF支持以下调试方法
  18. 89c52单片机控制两个步进电机正反转加减速(程序+仿真)
  19. java微信token验证_JAVA折腾微信公众平台(Token验证)[转]
  20. 换脸新潮流:BIGO风靡全球的人脸风格迁移技术

热门文章

  1. Serverless介绍
  2. Pagehelper使用教程
  3. 网页设计者值得一去的地方
  4. mac合上盖子不锁屏_Mac如何设置锁屏不待机
  5. 弹性盒模型响应式布局
  6. 逆透视变换IPM:将摄像机拍摄的图片转换为鸟瞰图
  7. 在电脑充电时耳机有电流声?教你一招立马解决!
  8. crosswalk源码 的编译过程
  9. 实现车牌识别之二--使用Yolov3进行车牌定位
  10. 【软件测试】三角形测试用例自动生成工具