“嗨,阿米戈!”
“您好,松鼠船長,先生!”
“現在我們要學習如何編寫大項目。相應地,我們引入了一種新的任務類型:«大任務»。這是一個大任務,分解成許多小任務。在解決每個 «小任務時» 您將在現有代碼中添加新代碼,而不是從頭開始編寫代碼。聯邦的未來掌握在您的手中。”
“是的先生!”
“前五個 «大任務» 的目標是學習如何編寫大型複雜項目。最初, «小任務» 的描述相當詳細,有時甚至過於詳細。後來,描述將變得更加籠統, “任務會變得越來越大。起初,任務只是“你的”代碼的一小段。然後它們會變得更大。最終它們將成為整個框架(庫)。”
“我準備好了,長官!”
“我試圖讓任務描述盡可能明確。但如果有什麼不對:”
a) 考慮其他解釋條件的方法。也許它並不像我希望的那樣明確。
b) 嘗試用幾種不同的方法來解決它。
c) 尋求幫助或寫信給我們;這些是新任務,我們很樂意在需要的地方“完善”它們。
“這是你的第一個任務:”
“今天我們將編寫一個名為 «Hippodrome» 的小遊戲。
“當我說我們時,我指的是你。我將成為你的導師。”
“條件呢?”
“什麼條件,二等兵?你還在基礎訓練中嗎?這是一個秘密的軍事項目。啟動IntelliJ IDEA。你會在那裡找到這個任務的第一部分。後續的每個任務只有在你成功完成後才能使用上一個。滾出去!”
“是,長官!搬出去!”
“請記住,如果你的解決方案變得無可救藥地混淆,你可以重置大任務並重新開始。右鍵單擊任務列表插件中的大任務,你會看到一個包含各種選項的上下文菜單。”
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 1)
Today we'll write a small game called 'Hippodrome'.
And when I say we, I mean you. I will be your mentor.
To start, we'll need Hippodrome and Horse classes.
Create the Hippodrome and Horse classes.
And don't forget that every program starts with a main method.
Add one to the Hippodrome class.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 2)
Hey, we've got a hippodrome, and it should have some horses.
So our hippodrome should store a list of its horses.
Add a List horses field to the Hippodrome class.
And to ensure that the horses won't be stolen, make this field private.
Add a getter for this field.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 3)
Even though we've declared the horses variable, we haven't yet created the list itself (unless of course you've managed to get ahead of us).
Create a Hippodrome class constructor with one List parameter.
Save the passed list in the horses field (initialize the horses field).
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 4)
Now back to the horses. Every horse in a horse race must have a name and speed.
Our horses will simply run a certain amount of time (100 seconds or "steps").
The horse that runs the farthest is the winner.
Accordingly, we'll also need to store the distance the horse has already run.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 5)
Finish writing the Horse class.
Add a constructor with name, speed, and distance parameters.
Add getters and setters for all the fields in the Horse class.
Make all of the methods public unless indicated otherwise.
12
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 6)
Now let's move on to the Hippodrome class and the main method.
We need to create a Hippodrome object and add some horses to it.
To start, in the Hippodrome class:
Create a static Hippodrome game field.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 7)
But that's not all. We need to make the horses run.
Add run, move, and print methods to the Hippodrome class. Without parameters.
The move method will control the movement of all horses.
The print method will draw them on the screen.
And the run method manages it all.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 8)
Make a loop from 1 to 100 in the run method. This will be our race.
In the body of the loop, we'll call move first, then print.
To prevent the whole loop from finishing in a split second, add Thread.sleep(200); as well.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 9)
Now let's return to the move and print methods. Let's start with move.
In the Hippodrome class's move method, we call the move method on each horse in the loop.
Yes, you're right: the Horse class doesn't have it yet.
This means you need to add your own move method to the Horse class. :)
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 10)
We still need to write the Hippodrome class's print method.
Everything is simple here, too: In a loop, we call the print method on each horse.
Oh, and display 10 empty lines after the loop (using System.out.println()) to make it more beautiful.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 11)
We're almost done with the Hippodrome class.
Add a call to run() at the end of the main method.
Hint:
The run() method is not static, so you can only call it on an object.
But where do you get the object?
Hint 2:
game.run();
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 12)
There's just a little left to do: finish writing the Horse class.
The move method is called each time a horse takes a step.
When the move method is called on a horse, the horse must run a certain distance.
The distance depends on the horse's speed.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 13)
Now we'll return to the Horse class's print method.
Because we're working with the console, then all the racing horses will look something like this:
........Slevin
....Lucky
..........Homer
In other words, the print method should display a string consisting of dots and the horse's name.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 14)
Time to enjoy our creation.
A new snapshot of the racetrack is displayed every half second.
Use the mouse to decrease the size of the console so that only one "snapshot" is visible at a time and remains in the same place.
Then you can watch the race live and even commentate.
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 15)
Add code to announce the winner.
We'll make two methods in the Hippodrome class:
public Horse getWinner() and public void printWinner()
The getWinner method must return the horse that has run the farthest.
The printWinner method displays the winner's name as follows:
The winner is <name>!
6
任務
Java Multithreading, 等級 1, 課堂 16
Hippodrome (part 16)
Now we're done for sure.
Add a call to the printWinner method to the end of the main method.
Launch and enjoy your first computer game. :)