会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133535个问题

Plane类

package com.bjsxt;

import java.awt.*;
import java.awt.event.KeyEvent;

public class Plane extends GameObject{
    boolean left,up,right,down;
    boolean live=true;

    @Override
    public void drawMySelf(Graphics g) {
        super.drawMySelf(g);
        if (left) {
            x -=speed;
        }
        if (right) {
            x +=speed;
        }
        if (up) {
            y -=speed;
        }
        if (down) {
            y +=speed;
        }

    }

    public void addDirection(KeyEvent e){
        switch (e.getKeyChar()){
            case KeyEvent.VK_LEFT:
                left=true;
                break;
            case KeyEvent.VK_RIGHT:
                right=true;
                break;
            case KeyEvent.VK_UP:
                up=true;
                break;
            case KeyEvent.VK_DOWN:
                down=true;
                break;
        }
    }
    public void minusDirection(KeyEvent e){
        switch (e.getKeyChar()){
            case KeyEvent.VK_LEFT:
                left=false;
                break;
            case KeyEvent.VK_RIGHT:
                right=false;
                break;
            case KeyEvent.VK_UP:
                up=false;
                break;
            case KeyEvent.VK_DOWN:
                down=false;
                break;
        }
    }

    public Plane(Image img, int x, int y, int speed) {

        super(img, x, y, speed);
    }
}

GameObject类

package com.bjsxt;

import java.awt.*;

//游戏物体的根类
public class GameObject {
    Image img;  //对应的图片
    int x,y;    //坐标
    int speed;   //物体的移动速度
    int width,height;    //物体的宽度和高度

    //画自己
    public void drawMySelf(Graphics g){
        g.drawImage(img,x,y,width,height,null);
    }

    //返回该物体对应的矩形
    public Rectangle getRec(){
        return new Rectangle(x,y,width,height);
    }



    public GameObject(Image img, int x, int y, int speed, int width, int height) {
        this.img = img;
        this.x = x;
        this.y = y;
        this.speed = speed;
        this.width = width;
        this.height = height;
    }

    public GameObject(Image img, int x, int y, int speed) {
        this(img,x,y);
        this.speed = speed;

    }

    public GameObject(Image img, int x, int y) {
       this(img);
        this.x = x;
        this.y = y;
    }

    public GameObject(Image img) {
        this.img = img;
        if(this.img!=null){
            this.width=img.getWidth(null);
            this.height=img.getHeight(null);
        }
    }

    public GameObject(){}
}

MyGameFrame类

package com.bjsxt;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import static com.bjsxt.GameUtil.*;

public class MyGameFrame extends Frame{
    Image bgImg= GameUtil.getImage("images/bg.jpg");
    Image planeImg = GameUtil.getImage("images/plane.png");

    Plane plane=new Plane(planeImg,200,200,7);


     int x=200,y=200;
    //初始化窗口
    public void launchFrame(){
        this.setTitle("飞机大战--北京尚学堂");
        this.setVisible(true);//
        this.setSize(FRAME_WIDTH,FRAME_HIGHT);
        this.setLocation(300,300);
        //增加关闭窗口动作
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        //启动窗口绘制线程
        new PaintThread().start();

        //启动键盘监听
        this.addKeyListener(new KeyMonitor());

        }


    @Override
    public void paint(Graphics g){
        g.drawImage(bgImg,0,0,FRAME_HIGHT,FRAME_HIGHT,null);
        plane.drawMySelf(g);


    }

    //键盘监听内部类
    class KeyMonitor extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            plane.addDirection(e);
        }

        @Override
        public void keyReleased(KeyEvent e) {
            plane.minusDirection(e);
        }
    }



    //重画线程
    class PaintThread extends Thread{
        @Override
        public void run(){
            while ((true)){
                repaint();
                try {
                    Thread.sleep(40);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        MyGameFrame frame = new MyGameFrame();
        frame.launchFrame();
    }
    private Image offScreenImage=null;
    public void update(Graphics g){
        if(offScreenImage==null)
            offScreenImage=this.createImage(FRAME_WIDTH, FRAME_HIGHT);

        Graphics gOff=offScreenImage.getGraphics();
        paint(gOff);
        g.drawImage(offScreenImage,0,0,null);
    }
}

程序能正常运行,但是按键后飞机动不起来,想问问老师是什么原因,检查了几遍还是没发现问题

JAVA 全系列/第一阶段:AI驱动的JAVA编程/飞机大战小项目训练 4816楼
Python 全系列/第一阶段:Python入门/序列 4817楼
JAVA 全系列/第四阶段:数据库与AI协同技术实战/JDBC技术(旧) 4818楼
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 4821楼
Python 全系列/第一阶段:Python入门/Python入门(动画版) 4822楼

package com.nuc.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Test {
 public static void main(String[] args) throws IOException {
        System.out.println("----------------------服务器已启动-----------------------------"); 
  //(1)创建ServerSocket对象
  ServerSocket server = new ServerSocket(9999);
  //(2)监听有客户端来请求连接
  Socket client = server.accept();
  //(3)获取输入流
  InputStream is =  client.getInputStream();
  System.out.println((char)is.read());
  //(4)获取输出流
  //"收到了"
  OutputStream os=(OutputStream) client.getOutputStream();
  os.write("收到了!".getBytes());
  //(5)关闭流,关闭Socket
  if(os!=null) {
   os.close();
  }
  if(is!=null) {
   is.close();
  }
        if(client!=null) {
         client.close();
        }
 }
}
package com.nuc.client;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Test {
    public static void main(String[] args) throws IOException {
  System.out.println("---------------------------客户端-----------------------------");
     //(1)创建一个Socket对象
     Socket client = new Socket("localhost",9999);
     //(2)获取输出流
     OutputStream os=client.getOutputStream();
     os.write('a');
     
     //(3)获取输入流
     InputStream is=client.getInputStream();
     byte [] buf=new byte[1024]; //中转站
     int len=0; //读到的字节的个数
     while((len=is.read(buf))!=-1) {
      System.out.println(new String(buf,0,len));
     }
     
     
     //(4)关闭流
     if(is!=null) {
      is.close();
     }
     if(os!=null) {
      os.close();
     }
     if(client!=null) {
      client.close();
     }
     
 }
}

O]1JYCRZQDN%V_ORQDE)31D.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 4823楼
Python 全系列/第八阶段:Web全栈开发基础与前端/JavaScript语言 4824楼
Python 全系列/第二十二阶段:Python数据分析项目/旅游景点票价预测 4826楼
Python 全系列/第二十一阶段:数据分析-统计分析/描述统计 4827楼
Python 全系列/第六阶段:数据库与AI协同技术实战/mysql的使用 4828楼
JAVA 全系列/(旧的隐藏)第二十一阶段:百战商城项目(Spring Cloud最新架构)/百战商城项目 4829楼
Python 全系列/第七阶段:网页编程基础/html5 4830楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637