Java寫的第一個小遊戲(一)

實現思路

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);

第一天(完成)效果圖以下:在這裏插入圖片描述

次日(人物以及帽子移動方向)

點擊打開終篇

 

你們好,我是AIO生活,關注我,後續連載更多技術重難點,文章有不足之處,歡迎你們留言指正,謝謝你們啦!

順便提一下,幫你們整理了些JAVA電子書,掃碼回覆「1024」獲取電子書合集,也可簽到領現金紅包。

相關文章
相關標籤/搜索