Java shooting final

markdown #說明 前一篇有些操作一些關於 shooting 專案的物件,以及砲彈的移動,這篇則是比較完整的呈現。 - 設定戰場大小 - 設定武器庫位置 - 設定砲台位置 - 設定砲彈速度 - 砲彈移動 - 判斷有沒有擊中武器庫 - if 擊中結束 else 沒有擊中就繼續移動直到超出戰場 - 遊戲結束 #CODE ``` package shooting; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Igloo {//武器庫 int x,y; //進行爆炸的動作 void exploding() { System.out.println("在 ( " +x + "," + y + ") 的武器庫被摧毀"); } } class Cannonball { //砲彈 int x,y ;//砲彈位置 int stepX, stepY; //砲彈移動速度及方向 void move() { //依據移動速度換到下一位置 x+= stepX; y+= stepY; System.out.println("砲彈移到(" + x + "," + y + ")"); } } class Flanker { //砲台 int x,y;//砲台位置 Cannonball fire(int stepX, int stepY ) { Cannonball c =new Cannonball() ; c.stepX= stepX; c.stepY =stepY; c.x =x; c.y =y; return c; } } class Battlefield {// 戰場 int width,height; //戰場大小 Igloo i ; //武器庫 Flanker f ; // 砲台 Cannonball c ; //砲彈 boolean hitIgloo(Cannonball c ) { // 是否擊中武器庫 if ((c.x==i.x ) && (c.y==i.y)) { //擊中 i.exploding(); //武器庫爆炸 i= null ; // 清除武器庫 return true; //傳回擊中了 } return false; // 傳回沒有擊中 } boolean outOfField(Cannonball c) { if (c.x <0 || c.y < 0 ) // 超過左邊界 或超過上邊界 return true ; if (c.x >=width || c.y >= height ) //超過右邊界或超過上邊界 return true ; return false; } } //程式邏輯 //程式開始 (main) > 設定戰場大小 >放置武器庫 //放置砲台 >發射砲彈 >移動砲彈 > //如果有擊中就結束遊戲 >沒有擊中就繼續發射直到擊中遊戲結束 public class shooting8 { public static void main (String [] argv ) throws IOException{ Battlefield b =new Battlefield(); //產生戰場 b.width =5 ; //設為 5*5 大小 b.height=5 ; // 用來讀取輸入資料 BufferedReader br = new BufferedReader (new InputStreamReader ( System.in)); // 產生武器庫 b.i=new Igloo(); // 取得使用者輸入的武器庫位置 System.out.println("please input Igloo location : "); System.out.print("x ->"); b.i.x =java.lang.Integer.parseInt(br.readLine()); System.out.print("y -> "); b.i.y =java.lang.Integer.parseInt(br.readLine()); // 取得使用者輸入的砲彈位置 b.f =new Flanker(); System.out.println("please input flanker location : "); System.out.println(" x->"); b.f.x=java.lang.Integer.parseInt(br.readLine()); System.out.print("y-> "); b.f.y=java.lang.Integer.parseInt(br.readLine()); //取得使用者輸入砲彈的移動速度 System.out.println("please input velocity of fire"); System.out.print("x-> "); int x =java.lang.Integer.parseInt(br.readLine()); System.out.print("y-> "); int y =java.lang.Integer.parseInt(br.readLine()); // 發射砲彈 b.c =b.f.fire(x, y); do { //移動砲彈 b.c.move(); if (b.outOfField(b.c) || b.hitIgloo(b.c)) b.c =null ; //清除砲彈 } while (b.c != null ); System.out.println(" game over! "); } ``` ##debug 一開始操作一直有 bug ``` java.lang.NoClassDefFoundError ``` 其實看不太懂這個的意思,蠻不清楚的error,問了 google 大神,有些解答是sdk install 的問題 但我這邊執行其他支 java code 是可以執行的,所以排除這個問題 後來去檢查 code 出現紅字的地方,發現是 沒有import package 在紅字處按下右鍵去選可以自動 import 需要的 package 解決這個package 問題就可以執行了 透過這個project 大致學習物件導向的簡單應用 ##Demo1: 沒有擊中武器庫
##Demo2 :擊中武器庫
- code : https://github.com/SYkkk55/java_shooting - refer :https://stackoverflow.com/questions/17973970/how-to-solve-java-lang-noclassdeffounderror - refer : https://stackoverflow.com/questions/1401111/noclassdeffounderror-could-not-initialize-class-error

留言