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

老师,操控键盘飞机不动,这个代码哪里有问题呢?



package cn.sxt.game;


import java.awt.*;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

/*

 * 飞机小游戏 

 */

public class MyGameFrame extends Frame {

 

Image  planeImg = GameUtil.getImage("images/plane.png");

Image bg=GameUtil.getImage("images/bg.jpg");

 

Plane p1=new Plane(planeImg,100,100,3); 

boolean left,right,up,down; //飞机的方向控制

   @Override

public void paint(Graphics g) { //自动被调用,g相当于一支画笔

  

g.drawImage(bg, 0, 0,500,500,null);

 

p1.drawMyself(g);

 

if(left) {

p1.x-=p1.speed;

}

if(right) {

p1.x+=p1.speed;

}

if(up) {

p1.y+=p1.speed;

}

if(down) {

p1.y-=p1.speed;

}

 

//初始化窗口

public void launchFrame() {

this.setTitle("小飞机大战");

this.setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);

this.setLocation(400,200);  

this.setVisible(true);

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

new PaintThread().start();//启动重画窗口的线程

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

}

/*

* 定义了一个重画窗口的线程类

* 定义成内部类是为了方便直接使用窗口类的相关方法

*/

class PaintThread extends Thread{

   @Override

public void run() {

while(true) {

repaint();//内部类可以直接使用外部类的成员

try {

Thread.sleep(50);  //1s=1000ms,1s画20次(20*50=1000)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

//内部类,实现键盘的监听处理

class KeyMonitor extends KeyAdapter{

public void keyPressesed(KeyEvent e) {

/*System.out.println("按下"+e.getKeyCode());

if(e.getKeyCode()==KeyEvent.VK_LEFT) {

left=true;

}

*/

switch(e.getKeyCode()) {

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 keyReleased(KeyEvent e) {

/*System.out.println("抬起"+e.getKeyCode());

if(e.getKeyCode()==KeyEvent.VK_LEFT) {

left=false;

}*/

switch(e.getKeyCode()) {

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;

}

}

}

private Image offScreenImage = null;


    public void update(Graphics g) {

        if(offScreenImage == null)

            offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//这是游戏窗口的长的和宽度


        Graphics gOff = offScreenImage.getGraphics();

        paint(gOff);

        g.drawImage(offScreenImage, 0, 0, null);

    }

public static void main(String[] args) {

MyGameFrame gameFrame=new MyGameFrame();

gameFrame.launchFrame();

}


}







package cn.sxt.game;


import java.awt.Graphics;

import java.awt.Image;


public class Plane extends GameObject{

public void drawMyself(Graphics g) {

super.drawMyself(g);

//飞机飞行的算法,可以自行设定

//x+=speed;

}


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

super(img,x,y,speed);

}

}


JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 11989楼
WEB前端全系列/第二阶段:JavaScript编程模块/浏览器模型(BOM) 11990楼
Python 全系列/第一阶段:Python入门/编程基本概念 11991楼

CondaHTTPError: HTTP 403 FORBIDDEN for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/python-3.10.10-h966fe2a_2.conda>

Elapsed: 00:00.143846


An HTTP error occurred when trying to retrieve this URL.

HTTP errors are often intermittent, and a simple retry will get you on your way.


CondaHTTPError: HTTP 403 FORBIDDEN for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/python-3.10.10-h966fe2a_2.conda>

Elapsed: 00:00.143846


An HTTP error occurred when trying to retrieve this URL.

HTTP errors are often intermittent, and a simple retry will get you on your way.


CondaHTTPError: HTTP 403 FORBIDDEN for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/sqlite-3.45.3-h2bbff1b_0.conda>

Elapsed: 00:00.045832


An HTTP error occurred when trying to retrieve this URL.

HTTP errors are often intermittent, and a simple retry will get you on your way.


CondaHTTPError: HTTP 403 FORBIDDEN for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/tk-8.6.14-h0416ee5_0.conda>

Elapsed: 00:00.426064


An HTTP error occurred when trying to retrieve this URL.

HTTP errors are often intermittent, and a simple retry will get you on your way.


CondaHTTPError: HTTP 403 FORBIDDEN for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/setuptools-75.8.0-py310haa95532_0.conda>

Elapsed: 00:00.539640


An HTTP error occurred when trying to retrieve this URL.

HTTP errors are often intermittent, and a simple retry will get you on your way.


CondaHTTPError: HTTP 403 FORBIDDEN for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/pip-25.0-py310haa95532_0.conda>

Elapsed: 00:01.662794


An HTTP error occurred when trying to retrieve this URL.

HTTP errors are often intermittent, and a simple retry will get you on your way.


CondaHTTPError: HTTP 403 FORBIDDEN for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/openssl-1.1.1w-h2bbff1b_0.conda>

Elapsed: 00:02.753177


An HTTP error occurred when trying to retrieve this URL.

HTTP errors are often intermittent, and a simple retry will get you on your way.

 创建虚拟环境报错,请问题是什么原因导致的,上网看说有可能是镜像源导致的,但是我看下面的视频也切换成清华镜像源的

channel URLs : https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64

                          https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch

                          https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/win-64

                          https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/noarch

                          https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/win-64

                          https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/noarch


Python 全系列/第一阶段:Python入门/Python开发环境搭建 11992楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库的使用 11993楼
Python 全系列/第一阶段:Python入门/编程基本概念 11995楼

老师,我自己定义了一个ArrayList类,但是输出的时候集合中没有元素对象的都索引位置上都会显示为空,能解释一下这是怎么回事吗

package cn.zl.practice;

import java.util.Arrays;

public class MyArrayList<E> {
    private int size = 0;//元素个数
    private final Object[] DEFAULT_INITIAL_EMPTY_CAPACITY ={};//默认空数组
    private final static int INITIAL_CAPACITY = 10;//初始容量
    private Object[] elementDate;//底层数组
    //无参构造方法
    public MyArrayList(){
        this.elementDate = DEFAULT_INITIAL_EMPTY_CAPACITY;
    }
    //有参构造方法
    public MyArrayList(int initial){
        if(initial > 0){
            this.elementDate = new Object[initial];
        }else if(initial == 0){
            this.elementDate = DEFAULT_INITIAL_EMPTY_CAPACITY;
        }else{
            System.out.println("请输入正确的容量!!!");
        }
    }
    //添加方法
    public boolean add(E e){
        Object[] nelementDate = elementDate;
        add(e,nelementDate,size);
        return true;
    }
    //通过数组与数组长度添加元素对象
    public void add(E e,Object[] obj,int s){
        if(s == size){
           obj = grow(size + 1);
        }
        obj[s] = e;
        size = s + 1 ;

    }
    //通过最小容量扩充数组容量
    public Object[] grow(int miniCapacity){
        return elementDate = Arrays.copyOf(elementDate,newCapacity(miniCapacity));
        }
    //计算扩充的容量
    private int newCapacity(int miniCapacity) {
        int oldCapacity = size;//elementDate.length就会有更多的null
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity <= miniCapacity) {
            if (elementDate == DEFAULT_INITIAL_EMPTY_CAPACITY) {
                return Math.max(INITIAL_CAPACITY, miniCapacity);
            }
            if(miniCapacity < 0){
                System.out.println("请输入正确的容量!!!");
            }
            return miniCapacity;
        }
        return newCapacity;
    }
    //将元素添加到指定位置
    private void add(E e,int index){
        checkIndex(index,size);
        Object[] element = elementDate;
        int length;
        if((length = size) == (element = this.elementDate).length){
            element = grow(size + 1);
        }
        System.arraycopy(element,index,element,index+1,length-index);
        element[index] = e;
        size = length + 1;
    }
    //检查索引
    private void checkIndex(int index,int size){
        if(index < 0 || index >= size)
         throw new IndexOutOfBoundsException();
    }
    //删除指定索引的元素
    private Object remove (int index){
        checkIndex(index,size);

        Object[] e = elementDate;
        Object oldelement = e[index];
        cremove(e,index);
        return oldelement;
    }
    //删除元素方法的内部方法
    private void cremove( Object[] es,int dex){
        final int s ;
        if((s = size - 1) > dex){
            System.arraycopy(es,dex + 1,es,dex,s-dex);
        }
        es[size = s] = null;
    }
    //删除指定的元素对象
    private Object remove(Object o){
        Object obj  = o;
        for (int i = 0; i < elementDate.length ; i++) {
            if(obj.equals(elementDate[i])){
                remove(i);
            }
        }
        return obj;
    }
    //根据索引获得对象
    private Object get(int index){
        checkIndex(index,size);
        return elementDate[index];
    }
    //重写toString方法
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        for (int i = 0; i < elementDate.length; i++) {
           sb.append(elementDate[i] + ",");
        }
        if(size > 0)
        sb.setCharAt(sb.length() - 1,'}');
        else
            System.out.println("}");
        return sb.toString();
    }
    //获得数组元素的个数
    private int size(){
        return elementDate.length;
    }
    public static void main(String[] args) {
        //创建集合对象
        MyArrayList<String> array = new MyArrayList<>();
        //添加元素
        array.add("关羽");
        System.out.println(array);
        array.add("吕布");
        array.add("王者荣耀");
        //添加元素到指定位置
        array.add("貂蝉",2);
        System.out.println(array);
        //删除指定位置的元素
        System.out.println(array.remove(1));
        //删除指定的元素对象
        array.remove("貂蝉");
        System.out.println(array);
        //获得指定索引的元素
        System.out.println(array.get(0));
        //获得集合的元素个数
        System.out.println(array.size());
    }
}

运行结果是这样的:

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 11997楼
Python 全系列/第二阶段:Python 深入与提高/异常机制 11998楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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