實現思路
1.如何分析?
第一步:發現類(對象)
人物-小丑(敵方-友方) 子彈-帽子 牆體 爆炸物
第二步:發現屬性
小丑: 寬高 , 位置(x y), 移動速度 帽子: 寬高 , 位置(x y), 移動速度 牆體: 寬高 , 位置(x y) 爆炸物:寬高 , 位置(x y)
第三步:發現方法
小丑: 移動 , 攻擊 , 人物撞邊界 , 子彈: 移動 , 子彈撞牆 , 子彈撞邊界 , 牆體: 靜止不動 爆炸物: 爆炸物消失
2.難點在哪裏?
1 如何將圖片加載到窗體裏java
- 背景圖片加載
- 人物-小丑加載
- 發射物-帽子加載 Missile
- 牆體-加載 Wall
- 爆炸物-加載 Explode
2 如何建立窗體網絡
3 如何發射子彈(如何使用鍵盤觸發事件)ide
3.二期版本
- 接入網絡,多人做戰
第一天的實現
1.建立一個項目(ylm)
2.導入須要使用到的圖片文件到Java
3.在項目的src(源代碼)中建立遊戲包(com.ytzl.ylm)
4.在遊戲包(com.ytzl.ylm)下建立客戶端類GameClient並繼承Farme類
public class GameClient extends Frame {}
關於Farme類:
1.Farme類是Java自帶的一個系統類
2.Farme類的做用是能夠製做出帶有標題和邊框的頂層窗口工具
5.實現遊戲窗口的顯示
public void start(){ //啓動遊戲時在控制檯輸出顯示"遊戲開始" System.out.println("遊戲開始"); //窗口的標題設置 this.setTitle("原諒帽帶戰"); /* *窗體的大小以及位置設置——調用Frame類中的setBounds方法 * setBounds方法具體內容:setBounds(int橫座標,int縱座標,int長,int寬); * 參數中橫縱座標爲0,表示窗口從計算機屏幕左上角開始鋪開顯示(窗口中心點) */ this.setBounds(0,0,700,500); //讓窗體顯示出來 this.setVisible(true); //點擊窗口x關閉鍵響應關閉 this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent windowEvent) { //退出遊戲後在控制檯輸出顯示"遊戲結束" System.out.println("遊戲結束"); //調用System類中的exit方法以實現窗口關閉按鈕(X)的生效 System.exit(0); } }); } //遊戲入口 public static void main(String[] args) { // 建立本類對象 GameClient gameClient = new GameClient(); // 使用本類對象調用start方法,開始遊戲 gameClient.start(); }
6.給窗體添加背景圖片
6.1在com.ytzl.ylm包下建立工具包util而且建立工具類CommonUtilsthis
6.2在工具類(CommonUtils)中寫讀取圖片的方法spa
public class CommonUtils { //讀取圖片方法getImage public static Image getImage(String imgPath) { //參數爲圖片路徑地址 ImageIcon imageIcon = new ImageIcon(imgPath); return imageIcon.getImage(); } }
6.3在客戶端類中完成背景圖片的插入.net
// 將背景圖片的路徑賦值給常量BG_PATH public static final String BG_PATH = "images/bg.png"; // 定義一個圖片的靜態變量(用於插入不一樣圖片) private static Image image; // 背景圖靜態塊,調用背景圖片路徑,全部資源(背景圖片,音頻,視頻)只須要加載一次 static { image = CommonUtils.getImage(BG_PATH); } //重寫父類Frame類的paint方法以插入各類圖片 @Override public void paint(Graphics g){ //插入背景圖定義位置和寬 高 g.drawImage(image,0,0,700,500,this); }
插入人物-帽子-爆炸物-障礙物圖片在com.ytzl.ylm包下建立須要插入的圖片包entity
7.實現人物的顯示
7.1在圖片包(entity)下建立角色類Buffoon,定義角色屬性和方法3d
- 定義角色屬性
// 人物圖片路徑屬性 public static final Image buffoonImage = CommonUtils.getImage("images/body/s-left.png"); // 人物-橫座標 private int x; // 人物-縱座標 private int y; // 圖片-寬度 private int width; // 圖片-高度 private int height; // 人物-速度 private int speed; // 人物-方向 private String dir; //遊戲窗體屬性 由於小丑要在窗體中顯示 private GameClient gameClient;
- 定義無參帶參構造以給角色的屬性賦值
//無參構造 public Buffoon() { } //帶參構造 public Buffoon(int x, int y, GameClient gameClient) { this.x = x; this.y = y; this.width = 50; this.height = 50; this.speed = 3; this.dir = "STOP";// 人物剛建立時爲靜止狀態 this.gameClient = gameClient; }
- 定義角色方法
//插入角色圖方法 public void paint(Graphics g){ g.drawImage(buffoonImage,this.x,this.y,this.width,this.height,this.gameClient); } //生成get set 方法 public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } public String getDir() { return dir; } public void setDir(String dir) { this.dir = dir; } public GameClient getGameClient() { return gameClient; } public void setGameClient(GameClient gameClient) { this.gameClient = gameClient; }
7.2在客戶端中實現插入人物圖code
// 建立人物-小丑,在參數中定義位置 private Buffoon buffoon = new Buffoon(200,200,this); //重寫父類Frame類的paint方法以插入各類圖片 @Override public void paint(Graphics g){ //用角色-小丑調用paint方法以給圖片寬 高 速度 buffoon.paint(g); }
8.實現發射物的顯示
8.1在圖片包(entity)下建立發射物類Missile,定義發射物屬性和方法視頻
- 定義發射物-帽子的屬性
//發射物圖片路徑屬性 public static final Image missileImage = CommonUtils.getImage("images/missile.png"); // 帽子-高度 private int height; // 帽子-長度 private int width; // 帽子-速度 private int speed; // 帽子-橫座標 private int x; // 帽子-縱座標 private int y; //遊戲窗體屬性 由於帽子要在窗體中顯示 private GameClient gameClient;
- 定義無參帶參構造給帽子的屬性賦值
//無參構造 public Missile(){ } //帶參構造 public Missile(int x,int y,GameClient gameClient){ this.x=x; this.y=y; this.width=20; this.height=20; this.speed=10; this.gameClient=gameClient; }
- 定義帽子的方法
//插入帽子圖片的方法 public void paint(Graphics g){ g.drawImage(missileImage,this.x,this.y,this.width,this.height,this.gameClient); } //setget方法 public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public GameClient getGameClient() { return gameClient; } public void setGameClient(GameClient gameClient) { this.gameClient = gameClient; }
8.2在客戶端中實現插入帽子圖
// 建立發射物-帽子(missile),在參數中定義位置 private Missile missile = new Missile(300,300,this); //重寫父類Frame類的paint方法以插入各類圖片 @Override public void paint(Graphics g){ //用發射物-帽子調用paint方法以給圖片寬 高 速度 missile.paint(g); }
9.實現爆炸物的顯示
9.1在圖片包(entity)下建立爆炸物類(Explode),定義爆炸物屬性和方法
- 定義爆炸物屬性
//爆炸物圖片路徑屬性 public static final Image explodeImage = CommonUtils.getImage("images/explode.png"); //爆炸物-高度 private int height; //爆炸物-長度 private int width; //爆炸物-橫座標 private int x; //爆炸物-縱座標 private int y; //爆炸物窗體屬性 由於帽子要在窗體中顯示 private GameClient gameClient;
- 定義無參帶參構造給爆炸物的屬性賦值
//無參構造 public Explode(){ } //帶參構造 public Explode(int x,int y,GameClient gameClient){ this.x=x; this.y=y; this.width=30; this.height=70; this.gameClient=gameClient; }
- 定義帽子的方法
//插入角色圖方法 public void paint(Graphics g){ g.drawImage(explodeImage,x,y,this.width,this.height,this.gameClient); } //生成get set方法 public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public GameClient getGameClient() { return gameClient; } public void setGameClient(GameClient gameClient) { this.gameClient = gameClient; }
9.2在客戶端中實現插入爆炸物圖
// 建立發射物-爆炸物(explode),在參數中定義位置 private Explode explode = new Explode(300,100,this); //重寫父類Frame類的paint方法以插入各類圖片 @Override public void paint(Graphics g){ //用爆炸物調用paint方法以給圖片寬 高 explode.paint(g); }
10.實現牆體的顯示
10.1在圖片包(entity)下建立障礙物類(Wall),定義障礙物屬性和方法
- 定義障礙物屬性
//牆體圖片屬性 public static final Image wallImageZ = CommonUtils.getImage("images/wall-v.png"); //牆體-高度 private int height; //牆體-長度 private int width; //牆體-橫座標 private int x; //牆體-縱座標 private int y; //遊戲窗體屬性 由於牆要在窗體中顯示 private GameClient gameClient;
- 定義無參帶參構造給障礙物的屬性賦值
//無參構造 public Wall(){ } //帶參構造 public Wall(int x,int y,GameClient gameClient){ this.x=x; this.y=y; this.width=30; this.height=70; this.gameClient=gameClient; }
- 定義障礙物的方法
//插入牆體圖片的方法 public void paint(Graphics g){ g.drawImage(wallImageZ,this.x,this.y,this.width,this.height,this.gameClient); } //生成get set 方法 public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public GameClient getGameClient() { return gameClient; } public void setGameClient(GameClient gameClient) { this.gameClient = gameClient; }
10.2在客戶端中實現插入障礙物圖
// 建立牆體(wall),在參數中定義位置 private Wall wall=new Wall(500,200,this);
第一天(完成)效果圖以下:![在這裏插入圖片描述](http://static.javashuo.com/static/loading.gif)
次日(人物以及帽子移動方向)
你們好,我是AIO生活,關注我,後續連載更多技術重難點,文章有不足之處,歡迎你們留言指正,謝謝你們啦!
順便提一下,幫你們整理了些JAVA電子書,掃碼回覆「1024」獲取電子書合集,也可簽到領現金紅包。