前言

魯夫誤食了紅髮傑克的『惡魔果實』之後,全身可以像橡皮一樣的無限伸縮,利用這樣的特異功能,魯夫橫跨七海,所向無敵,打敗了各方的妖魔鬼怪,最後達成了他成為『海賊王』的夢想。但長期地與人武力相向,也讓魯夫漸漸不自覺地累積了越來越的霸王特質。

某日,魯夫將船泊在日本東京都練馬區港口時,突然目光中閃入了了一個清純可人的背影,一個小女孩正騎著小摺自行車在路邊悠哉而行,這個女孩正是機器貓哆啦A夢的結拜兄弟大雄的青梅竹馬靜香。由於長年以海為家,當魯夫遇見了靜香時,頓時驚為天人,竟莫名地在他內心深處激起了海的野性,說時遲,那時快,魯夫迅速地就使起橡皮手的特技,把靜香連人帶車一攬而起,然後揚帆起航,以無船可及的航速急駛而去,目的地正是魯夫座落于百幕達三角洲的堅固堡壘『推進城』。

大雄得知靜香被擄走後,大家也知道哆啦A夢一定是他立刻求助的對象。幸好,哆啦A寶貝無數,從他的萬能百寶袋中取出了時光機,得知是魯夫擄走了靜香,然後再利用『體味追蹤魚』從水路追蹤了靜香的體味,獲知魯夫和靜香的去處。大雄要求哆啦A夢能借用『飛行蜻蜓』以便他能趕快到推進城營救靜香不過哆啦A夢深知大雄生性怕水,擔心大雄此去成功希望不大,顧及朋友間的義氣,哆啦A夢就乾脆一個人踏上了旅程,準備單槍匹馬前往


第一章:橡皮防護罩

魯夫從靜香口中得知她與哆啦A夢的關係,以前在七海闖蕩時就耳聞哆啦A夢的通天本領,為了防止哆啦A夢前來營救,他派遣了手下到東京帝國大學綁架了鈴木介一教授,鈴木是一個擁有資訊工程和生化工程雙博士學位的教授,魯夫強迫鈴木研發一種藥劑,魯夫喝了這種藥劑後,讓他的橡皮身體擁有受損後立刻自動修復的功能。於是,魯夫就用他的身體形成了一個超級矩形防護罩,這個防護罩共由75(寬度)x20(長度)個橡皮盾組成,每個橡皮盾的強度可以抵擋9巴斯克的衝擊壓。而且,由於魯夫的自動復原能力,當每個橡皮盾遭受攻擊到強度變成0巴斯克后,就會啟動修復程序,若是強度沒有變成0,則不會啟動修復程序,橡皮盾的修復模式如下:

NeweStrength[i-1,j-1]

NeweStrength [i-1,j]

NeweStrength [i-1,j+1]

NeweStrength [i,j-1]

NeweStrength [i,j]

NeweStrength [i,j+1]

NeweStrength [i+1,j-1]

NeweStrength [i+1,j]

NeweStrength [i+1,j+1]

OldStrength[i-1,j-1]

OldStrength [i-1,j]

OldStrength [i-1,j+1]

OldStrength [i,j-1]

OldStrength [i,j]

OldStrength [i,j+1]

OldStrength [i+1,j-1]

OldStrength [i+1,j]

OldStrength [i+1,j+1]

NewStrength[i,j] = \lfloor\frac{\sum_{u=i-1}^{i+1}\sum_{v=j-1}^{j+1}OldStrength[u][v]}{N}\rfloor

其中NOldStrength[I,j] 周遭八個橡皮盾中強度不為0的個數。例如:

OldStrength[i-1,j-1]=2

OldStrength [i-1,j]=3

OldStrength [i-1,j+1]=1

OldStrength [i,j-1]=3

OldStrength [i,j]=0

OldStrength [i,j+1]=0

OldStrength [i+1,j-1]=0

OldStrength [i+1,j]=0

OldStrength [i+1,j+1]=7

NewStrength[i,j]=\lfloor(2+3+1+3+7)/5\rfloor=\lfloor 3.2\rfloor=3。現在,請各位同學利用物件導向的技巧,定義並實作一個類別叫做RubberShield來模擬這個橡皮防護罩。請記得也要把自動復原的功能設計出來(函數名稱Recover())。


第二章銅鑼燒彈

哆啦A夢知道魯夫不是好對付的,因此出發前也準備了最厲害的攻擊武器銅鑼燒彈,這種銅鑼燒彈共有二代,第一代的銅鑼燒彈稱為銅鑼燒方塊彈,每一顆銅鑼燒方塊彈的強度視使用者注入多少能量而定,如果使用者注入能量為E卡邦(E介於115之間),則這顆彈的強度為S=rand()\%E+1巴斯克,其中rand()為亂數產生函數,這種炸彈可有多個彈頭,彈頭數目是隨機產生,其公式為彈頭數B= rand()\%8+1。彈頭數目確定後,每個彈頭就可以在橡皮防護罩上攻擊一個位置,此位置也是隨機決定,座標位置公式為(x=rand()\%75, y=rand()\%20)。這種銅鑼燒方塊彈的攻擊模式說明如下。當彈著點位置為(x,y)時,則橡皮防護罩上以位置(x,y)為中心的7x7方塊區域內的橡皮盾強度會因受攻擊而減弱,減弱的公式為
NewStrength[u][v]=\delta\(OldStrength[u][v]-(int)(0.8*S))
 \delta (x) = \left\{ {\begin{array}{*{20}c} {0,} & {x \le 0} \\ {x,} & {x > 0} \\ \end{array}} \right. , y-3\le u\le y+3, x-3\le v\le x+3,而 S為炸彈的強度。 例如:炸彈強度(S)= 5

OldS[x-3][y-3]-0.8*5

OldS[x-2][y-3]-0.8*5

OldS[x-1][y-3]-0.8*5

OldS[x][y-3]-0.8*5

OldS[x+1][y-3]-0.8*5

OldS[x+2][y-3]-0.8*5

OldS[x+3][y-3]-0.8*5

OldS[x-3][y-2]-0.8*5

OldS[x-2][y-2]-0.8*5

OldS[x-1][y-2]-0.8*5

OldS[x][y-2]-0.8*5

OldS[x+1][y-2]-0.8*5

OldS[x+2][y-2]-0.8*5

OldS[x+3][y-2]-0.8*5

OldS[x-3][y-1]-0.8*5

OldS[x-2][y-1]-0.8*5

OldS[x-1][y-1]-0.8*5

OldS[x][y-1]-0.8*5

OldS[x+1][y-1]-0.8*5

OldS[x+2][y-1]-0.8*5

OldS[x+3][y-1]-0.8*5

OldS[x-3][y]-0.8*5

OldS[x-2][y]-0.8*5

OldS[x-1][y]-0.8*5

OldS[x][y]-0.8*5

OldS[x+1][y]-0.8*5

OldS[x+2][y]-0.8*5

OldS[x+3][y]-0.8*5

OldS[x-3][y+1]-0.8*5

OldS[x-2][y+1]-0.8*5

OldS[x-1][y+1]-0.8*5

OldS[x][y+1]-0.8*5

OldS[x+1][y+1]-0.8*5

OldS[x+2][y+1]-0.8*5

OldS[x+3][y+1]-0.8*5

OldS[x-3][y+2]-0.8*5

OldS[x-2][y+2]-0.8*5

OldS[x-1][y+2]-0.8*5

OldS[x][y+2]-0.8*5

OldS[x+1][y+2]-0.8*5

OldS[x+2][y+2]-0.8*5

OldS[x+3][y+2]-0.8*5

OldS[x-3][y+3]-0.8*5

OldS[x-2][y+3]-0.8*5

OldS[x-1][y+3]-0.8*5

OldS[x][y+3]-0.8*5

OldS[x+1][y+3]-0.8*5

OldS[x+2][y+3]-0.8*5

OldS[x+3][y+3]-0.8*5

上面如果有任何格子算出來的值小於零,則取零(這就是取\delta(x)的用意)。

第二代銅鑼燒彈稱為『銅鑼燒放射彈』,這種炸彈是衍生自『銅鑼燒方塊彈』,所以它也有強度(S)和彈頭數(B)二種屬性,此二種屬性以及彈著點的決定公式與『銅鑼燒方塊彈』相同。不同的是它的攻擊模式。當一個彈頭彈著點為(x,y)時,則以(x,y)為圓心,周圍的橡皮盾強度會因受攻擊而減弱,減弱的公式為 NewStrength[u][v] = \delta \left( {OldStrength[u][v] - \left\lfloor {0.8\delta \left( {S - \lfloor\sqrt {(v - x)^2 + (u - y)^2 }\rfloor } \right)} \right\rfloor } \right) ,其中  \delta (x) = \left\{ {\begin{array}{*{20}c} {0,} & {x \le 0} \\ {x,} & {x > 0} \\ \end{array}} \right. y-8\le u\le y+8, x-8\le v\le x+8S為炸彈的強度。例如:炸彈強度為S=12,彈擊點位置(x,y)為(3,5),則NewStrength[6][6] = \delta \left( {OldStrength[6][6] - \left\lfloor {0.8\delta \left( {12 - \lfloor\sqrt {(6 - 3)^2 + (6 - 5)^2 }\rfloor } \right)} \right\rfloor } \right) =NewStrength[6][6] = \delta \left( {OldStrength[6][6] - \left\lfloor {0.8\delta \left( {12 - 2 } \right)} \right\rfloor } \right) = NewStrength[6][6] = \delta \left( {OldStrength[6][6] -8 \right)。請各位同學利用物件導向和類別繼承的技巧來設計這二種銅鑼燒彈類別,請以『銅鑼燒放射彈』類別(CircleDorayaki)來繼承銅鑼燒方塊彈』,也別忘了把二種炸彈的攻擊模式實作出來。

第三章攻防開始

哆啦A夢抵達後,魯夫立刻出城迎戰,二人約好決戰規則。規則就是由哆啦A夢最多發動七波攻擊,每波攻擊由哆啦A夢自行選擇使用一顆銅鑼燒方塊彈』或『銅鑼燒放射彈』,每顆彈的注入能量也是由哆啦A夢自行決定,一旦注入能量決定之後,炸彈強度、炸彈彈頭數以及彈著點位置均由前述公式決定。在哆啦A夢進行每波攻擊後,即刻由魯夫啟動橡皮防護罩的自行修復程序。最後一波攻擊之後,計算出魯夫防護罩被攻破(強度=0)的橡皮盾數目(TN)與哆啦A夢注入的總能量(TE),求其比值(TN/TE),若是此比值大於1.5,則魯夫認輸,靜香由哆啦A夢帶回,否則,哆啦A夢即承認救援失敗,放棄行動。請各位同學利用前面所定義的防護罩類別物件以及銅鑼燒彈類別寫出程式來模擬這次攻防行動,看看最後靜香能否被救出?


Available from: Friday, 27 March 2009, 02:45 PM
Due date: Sunday, 12 April 2009, 12:00 PM