[Greenfoot中文教程] 02 - 歡迎來到代碼世界


CH 2    歡迎來到代碼世界

1.殊途同歸,開辟代碼之路

在上一章的demo中,我們已經創建了自己的世界,並在其中添加了一個角色。然而,這個工作並不是我們通過編寫程序實現了,而是借助了Greenfoot作為一個簡易游戲框架的一些現成的功能。

雖然是一個不錯的開頭,但我們卻不能停步不前。

在這一章,我們首先要做的就是——破舊立新,用編寫代碼的方式實現上一章的實現的內容。創建一個黑色的世界,並使其自動在世界的中心添加一個白色行者,從此和手動擺放說拜拜。

(1).代碼編寫的BlackWorld

首先讓我們對着類列表中的BlackWorld右鍵,再次使用“Set image”的方法設置圖片為“None”,清空我們之前的設定。

然后,我們將通過代碼,來實現這個簡單而深邃的純黑世界。

雙擊BlackWorld類,Greenfoot會為我們打開一個代碼編輯界面。

QQ截圖20130126124204

這就是我們今后主要干活的地方了。我們先來看一下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按鈕,提交我們剛剛修改的代碼。

QQ截圖20130126125609

一個純黑的舞台就展示在我們的眼前了。

QQ截圖20130126125642

可以看到編譯過后,類列表中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的代碼編輯窗口。我們可以看到

QQ截圖20130129210252

里面只有一個叫做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的代碼是最后一行。你寫對了嗎?其實任務提示中已經寫得很詳細了哦。

QQ截圖20130130000626

 

 

 

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按鈕。

QQ截圖20130130000627

可以看到我們的WhiteWalker就向右動起來啦!

QQ截圖20130130000627

動手任務:

參考上面的右移代碼,想一想右移的代碼是怎么實現的,究竟在那一行我們給WhiteWalker添加了代碼之力呢?怎么實現左移?上下移動呢?45°斜角的四個方向呢?

任務提示:

這次不給提示,相信自己,學寫代碼其實很簡單!

至此我們初步學習了怎么在Greenfoot中以編寫代碼的形式來達成我們的目標。對於一些格式或者Greenfoot中的一些函數不熟悉我們不必在意。在下一章中,我們將為大家慢慢解釋今天最后給出的部分代碼。同時為大家介紹一些Java作為一門OO編程語言的基本知識。(Object Oriented,縮寫OO,面向對象的)如果你現在對於自己寫的代碼或者我給出的部分代碼只是一知半解,不用擔心,就看我“下回分析”吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM