如何在PlanePanel里面实现小型敌机的下落,好混乱啊

package start;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class StartFrame extends JFrame{
/**
*
*/
public int x;
public int y;
public static StartFrame startFrame;
private static final long serialVersionUID = 1L;

public StartFrame(){

//设置窗体大小
this.setSize(400, 654);
//设置窗口居中显示
//this.setLocationRelativeTo(null);
this.setLocation(150, 50);
//设置任务栏图标
this.setIconImage(new ImageIcon("image/icon.jpg").getImage());
//去掉窗体的自带边框
this.setUndecorated(true);  

StartPanel sp = new StartPanel();
this.add(sp);
this.setVisible(true);              //默认窗体可见  放在  this.add(sp);后面

//启动线程
Thread th = new Thread(sp);
th.start();

}
public static void main(String[] args) {

startFrame = new StartFrame();

}

}

package start;

import java.awt.Graphics;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

import enemy.Enemy;
import enemy.EnemyMoveThread;

public class StartPanel extends JPanel implements Runnable {
/**
* 通过鼠标来控制MouseMontionListener
* 重写mouseMovie() ——————测试语句
* 给面板添加监听器
* panel.addMouseMontionListener(面板);
* 点关闭图标关闭
* 点击缩小图标
* 实现MouseListener接口
* 重写
*/
private static final long serialVersionUID = 1L;
int x;
StartPanel sp;
Enemy e;

public void paint(Graphics g) {
    // TODO Auto-generated method stub
    super.paint(g);
    g.drawImage(new ImageIcon("image/startback.png").getImage(), 0, 0, this);
    g.drawImage(new ImageIcon("image/start_aircraft.png").getImage(), x,450, this);
}

public void run() {
    // TODO Auto-generated method stub
    while (true) {
        x++;
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (x > 400) {
            // 隐藏StartFrame的窗体
            StartFrame.startFrame.dispose();

            /*
             * 获得左上角的坐标 int x = StartFrame.startFrame.getLocation().x;int y
             * = StartFrame.startFrame.getLocation().y;
             */

            // 创建新的PlaneFrame窗口
            new PlaneFrame();
            break;
        }
        repaint();
    }
}

}

package start;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

import enemy.Enemy;
import enemy.EnemyMoveThread;
/**

  • 当StartFrame的小飞机飞到最右边时,Start窗口隐藏(this.disapose()),显示新的窗口PlaneFrame
  • 创建新的面板
    封装低级Enemy xy score image speed isLive panel;
    */
    public class PlaneFrame extends JFrame implements Runnable{
    /
    *

    • */ PlanePanel pp; Enemy e; public static PlaneFrame planeFrame; //定义全局变量:可以在所有位置使用 private static final long serialVersionUID = 1L;

    public PlaneFrame(){
    this.setSize(400, 654);
    //x y?

    this.setLocation(150,50);
    this.setIconImage(new ImageIcon("image/icon.jpd").getImage());
    this.setUndecorated(true);
    pp = new PlanePanel(this);
    this.add(pp);
    pp.addMouseMotionListener(pp); //第一个pp代表面,,第二个pp代表监听器对象
    //给面板添加监听器对象
    pp.addMouseListener(pp);
    EnemyMoveThread emt = new EnemyMoveThread(e);
    emt.start();
    this.setVisible(true);

    }
    public static void main(String[] args) {

    planeFrame = new PlaneFrame();
    }
    public void run() {

    //如果英雄机存活,创建敌机
    while(pp.hero_isLive){
    //x, y, speed, icon, panel
    /*
    * Random r = new Random();
    /
    ImageIcon icon = new ImageIcon("image/shoot0_0.png");
    //大类型的数据不能直接赋值给小类型的数据,需要强制性转换
    int x = (int) (Math.random()
    (pp.getWidth()-icon.getIconWidth()));
    int y = -icon.getIconHeight();
    int speed = 10;

    //创建敌机  添加集合之中
    Enemy e = new Enemy(x,y,speed,icon,pp);
    //将敌机添加到集合中
    pp.vs.add(e);
    //给敌机绑定运动的线程
    EnemyMoveThread th = new EnemyMoveThread(e);
    th.start();
    try {
        Thread.sleep(10);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    

    }
    }

    }

package start;

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

import enemy.Enemy;

public class PlanePanel extends JPanel implements MouseListener,
MouseMotionListener {

// 定义布尔类型isLive(存活)
private boolean isLive = true;
int x;
int hero_x = 200;
int hero_y = 500;
boolean hero_isLive = true;
PlaneFrame f;

ImageIcon icon = new ImageIcon("Image/hero.png");
ImageIcon min = new ImageIcon("image/min.png");

// 定义一个集合存放敌机
// Vector集合避免线程异步的问题 线程安全的一个线程
public Vector<Enemy> vs = new Vector<Enemy>();

// 通 过 构造方法 传值
public PlanePanel(PlaneFrame planeFrame) {
    this.f = planeFrame;
}

public void paint(Graphics g) {
    // TODO Auto-generated method stub
    super.paint(g);


    g.drawImage(new ImageIcon("image/backmain.png").getImage(), 0, 0, this);
    g.drawImage(new ImageIcon("image/min.png").getImage(), 325, 3, this);
    g.drawImage(new ImageIcon("image/close.png").getImage(), 360, 3, this);
    g.drawImage(new ImageIcon("image/hero.png").getImage(), hero_x, hero_y,
            this);
    for(int i = 0;i<vs.size();i++){
        Enemy e = vs.get(i);
        e.drawEnemy(g);
    }
}

public void mouseDragged(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub
    if (hero_isLive) {
        int x = e.getX(); // 得到鼠标的x坐标
        int y = e.getY(); // 得到鼠标的y坐标
        // 根据鼠标的坐标与英雄机的宽和高计算英雄机的坐标
        hero_x = x - icon.getIconWidth() / 2;
        hero_y = y - icon.getIconHeight() / 2;

        if (hero_x <= 400 - 55 && hero_y >= 31 && hero_y <= 650 - 90
                && hero_x >= -40) {
            this.repaint();
        }
    }
    //
}

public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
    int x = e.getX();
    int y = e.getY();
    if (x > 325 && x < 325 + min.getIconWidth() && y > 3
            && y < min.getIconHeight()) {
        // 缩小窗体
        f.setState(JFrame.ICONIFIED);
    } else if (x > 360 && x < 360 + 31 && y > 3 && y < 3 + 31) {
        System.exit(0); //
    }
}

public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

public void mousePressed1(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

}

package enemy;

import java.awt.Graphics;

import javax.swing.ImageIcon;

import start.PlanePanel;

public class Enemy {
int x;
int y;
int speed;
int score = 100;
ImageIcon icon;
boolean isLive = true;
PlanePanel panel;

 public Enemy(){

 }

public Enemy(int x, int y, int speed, ImageIcon icon, PlanePanel panel) {
    super();
    this.x = x;
    this.y = y;
    this.speed = speed;
    this.icon = icon;
    this.panel = panel;
}
//画敌机的方法
public void drawEnemy(Graphics g){
    if(isLive){
        g.drawImage(icon.getImage(),x,y,panel);
    }

}
public void move(){
    y += speed;
    //如果敌机飞出面板,删除该敌机,并且isLive设置成false
    if(y>panel.getHeight()){
        isLive = false;
        panel.vs.remove(this);
    }
    panel.repaint();
}

}

package enemy;

//封装敌机运动的线程类
public class EnemyMoveThread extends Thread {

// 创建成员变量e
Enemy e;

public EnemyMoveThread(Enemy e) {
    this.e = e;
}

@Override
public void run() {

    super.run();
    while (e.isLive) {
        //
        e.move();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e1) {

            e1.printStackTrace();

        }
    }
}

}

2个回答

小型DBMS(c实现)
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

BaelSnake
BaelSnake 是人还是机器人
接近 5 年之前 回复
BaelSnake
BaelSnake 我能知道我的代码哪里出问题了吗
接近 5 年之前 回复

上一个问题帮你回答了,你能先采纳了不。

BaelSnake
BaelSnake
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
雷电游戏,敌机和玩家子弹路径算法

最近想做一个类似于雷电安卓游戏,子弹只有直线飞行太单调,想知道绘制各种子弹路径的算法,求大神告知!!

在funcode平台,用c++编写微信打飞机,源代码

1. 按下空格键游戏开始。 2. 通过WSAD 键控制玩家飞机移动上下左右移动,但不能飞出边境。 3. 玩家飞机每隔一段时间自动发射一发炮弹。 4. 玩家飞机被敌机碰到后,生命值会减少,生命值变为0的时候,游戏结束。 5. 在游戏上方会一直出现电脑飞机(敌机),敌机分为大、中、小三种类型,越小的飞机出现的几率越大。 6. 敌机被玩家飞机击中后,生命值会减少,生命值变为0时,该敌机被摧毁,玩家得分。越大的飞机越难击毁,击毁后玩家得分也越多。 7. 敌机飞到界面下方时,删除敌机。 8. 在界面外用一个文本显示玩家游戏得分。

在funcode平台,用c++编写微信版打飞机,源代码

1. 按下空格键游戏开始。 2. 通过WSAD 键控制玩家飞机移动上下左右移动,但不能飞出边境。 3. 玩家飞机每隔一段时间自动发射一发炮弹。 4. 玩家飞机被敌机碰到后,生命值会减少,生命值变为0的时候,游戏结束。 5. 在游戏上方会一直出现电脑飞机(敌机),敌机分为大、中、小三种类型,越小的飞机出现的几率越大。 6. 敌机被玩家飞机击中后,生命值会减少,生命值变为0时,该敌机被摧毁,玩家得分。越大的飞机越难击毁,击毁后玩家得分也越多。 7. 敌机飞到界面下方时,删除敌机。 8. 在界面外用一个文本显示玩家游戏得分。

Java小白求救啊!!!

package com.shuai.plane; import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.lang.ref.PhantomReference; import java.util.ArrayList; import java.util.List; import javax.swing.JPanel; //JAVA中游戏面板:JPanel /* * 自定义游戏面板 * 1.写一个类继承JPanel * 2.创建构造方法,初始化游戏面板的属性 * * 画图的步骤 * 1.在类中定义图片,并取名 * 2.在构造方法中调用工具类(Photo)初始化图片 * 3.在画图方法paint中,画图片(paint是专门的画图方法) * */ public class GamePanel extends JPanel{ //创建一个集合,用来存放敌机(敌机的大本营) List<EnemyPlane> arrays = new ArrayList<>(); //创建一个集合,用来放英雄机的弹药 List<HeroFire> HFire = new ArrayList<>(); //创建一个集合,用来放敌机的弹药 List<EnemyFire> EnFire = new ArrayList<>(); //创建英雄机的对象 HeroPlane heroPlane = new HeroPlane(); //创建敌机的对象 EnemyPlane enemyPlane = new EnemyPlane(); //写一个线程,让程序跑起来 //写一个方法,启动线程 public void action() { new Thread() { public void run() { //定义一个变量控制敌机出现的数量 int a = 0; int b = 20; //写一个死循环,让程序一直运行 while(true) { //让敌机出现在面板上 if(a == b) { MakeEP(); a = 0; } //让敌机移动 epMove(); //让英雄机子弹出现在面板上 if(a == 0) { MakeHeroFire(); } //让英雄机的子弹动起来 HeroFireMove(); //让敌机的子弹出现在面板上 //MakeEnemyFire(); //让敌机的子弹动起来 //EnemyFireMove(); //重绘布局(刷新页面) repaint(); try { this.sleep(30); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } a++; } } }.start(); } //写一个方法,让敌机移动 public void epMove() { for(int i = 0; i < arrays.size(); i++) { EnemyPlane enemyPlane = arrays.get(i); enemyPlane.y += 10; if(enemyPlane.y > 800) { arrays.remove(enemyPlane); } //EnemyFire enemyFire = EnFire.get(i); //enemyFire.y += 15; } } //写一个方法,用来生产敌机,并把它放进集合中 void MakeEP() { //创建敌机 EnemyPlane enemyPlane = new EnemyPlane(); //创建敌机的子弹 //EnemyFire enemyFire = new EnemyFire(enemyPlane.x, enemyPlane.y); //把敌机加到大本营中(集合) arrays.add(enemyPlane); //EnFire.add(enemyFire); } //写一个方法,生产英雄机的弹药,并把它放进英雄机的弹药库 void MakeHeroFire() { for(int i = 0; i < arrays.size(); i++) { HeroFire heroFire = new HeroFire(heroPlane.x + 15, heroPlane.y, 0); HFire.add(heroFire); HeroFire heroFire2 = new HeroFire(heroPlane.x + 78, heroPlane.y, 2); HFire.add(heroFire2); HeroFire heroFire3 = new HeroFire(heroPlane.x + 48, heroPlane.y - 20, 1); HFire.add(heroFire3); } } //写一个方法让英雄机子弹移动 public void HeroFireMove() { for(int i = 0; i < HFire.size(); i++) { HeroFire heroFire = HFire.get(i); if(heroFire.dir == 0) { heroFire.x -= 1; } if(heroFire.dir == 2) { heroFire.x += 1; } heroFire.y -= 10; // if(heroFire.y < -heroFire.h) { // HFire.remove(heroFire); // } } } //写一个方法生产敌机的弹药,并放进敌机的弹药库 void MakeEnemyFire() { EnemyFire enemyFire = new EnemyFire(enemyPlane.x, enemyPlane.y); EnFire.add(enemyFire); } //让敌机的子弹动起来 void EnemyFireMove() { for(int i = 0; i < EnFire.size(); i++) { EnFire.get(i).y += 15; } } //定义背景图 BufferedImage bgp; //创建构造方法,初始化面板 public GamePanel(GameFrame gameFrame) { //设置面板的背景 //setBackground(Color.cyan); //通过工具类(Photo)获取图片 bgp = Photo.getImage("/Img/bg1.jpg"); /* * 使用鼠标监听器(固定格式) */ //1.创建鼠标适配器 //这是一个匿名内部类 MouseAdapter adapter = new MouseAdapter() { //2.确定需要的鼠标监听事件 /* * 鼠标监听事件: * 1.mouseMoved();监听鼠标移动事件 * 2.mouseCliked();监听鼠标单击事件(鼠标按下后松开才会被监听,按下不会被监听) * 3.mousePressed();监听鼠标按下去的事件(只要鼠标按下就会被监听) * 4.mouseEntered();监听鼠标移入游戏界面的事件 * 5.mouseExited();监听鼠标移出游戏界面的事件 * * MouseEvevt:鼠标的事件,记录鼠标做的事情 * */ @Override //当鼠标在游戏界面移动时,会触发此方法 public void mouseMoved(MouseEvent e) { //让英雄机跟着鼠标移动,就让英雄机的横纵坐标等于鼠标的横纵坐标 //获取鼠标的坐标(getX();获取鼠标的横坐标, getY();获取鼠标的纵坐标) int mx = e.getX(); int my = e.getY(); //让英雄机移动到鼠标的位置(英雄机移动到鼠标的位置,是英雄机的行为,可以在英雄机中定义方法) //此时英雄机依然不会移动,其实英雄机的坐标已经改变,但是没有把英雄机绘制到新的坐标,需要刷新页面 //heroPlane.move(mx, my); heroPlane.x = mx - heroPlane.w/2; heroPlane.y = my - heroPlane.h/2; //刷新页面,将英雄机绘制到新的页面 //重新调用paint方法(re 表示重新调用) repaint(); } @Override //当鼠标在游戏界面单击时,会触发此方法 public void mouseClicked(MouseEvent e) { System.out.println("~~~~~~~鼠标单击了"); } @Override //当鼠标在游戏界面按下时,会触发此方法 public void mousePressed(MouseEvent e) { System.out.println("!!!!!!!!鼠标被按下了"); } @Override //当鼠标移入游戏界面时,会触发此方法 public void mouseEntered(MouseEvent e) { System.out.println("**************鼠标被移出"); } @Override //当鼠标移出游戏界面时,会触发此方法 public void mouseExited(MouseEvent e) { System.out.println("**************鼠标被移入"); } }; //3.将适配器加入到监听器中(固定格式) addMouseListener(adapter); addMouseMotionListener(adapter); /* * 使用键盘适配器(固定模式) */ // 1.创建键盘适配器 KeyAdapter key = new KeyAdapter() { // 2.确定需要监听的键盘事件 @Override //当键盘按下时,会触发此方法 public void keyPressed(KeyEvent e) { //监听键盘的按键(每一个按键都对应有一个数字) //获取按键的数字 int a = e.getKeyCode(); //KeyEvent.VK_?;是表示指定的按键对应的数字 if(a == KeyEvent.VK_A || a == KeyEvent.VK_LEFT) { if((heroPlane.x -= 10) < -heroPlane.w/2) { heroPlane.x = 0 - heroPlane.w/2; } }else if(a == KeyEvent.VK_D || a == KeyEvent.VK_RIGHT) { if((heroPlane.x += 10) > 600 - heroPlane.w/2) { heroPlane.x = 600 - heroPlane.w/2; } }else if(a == KeyEvent.VK_W || a == KeyEvent.VK_UP) { if((heroPlane.y -= 10) < 0) { heroPlane.y = 0; } }else if(a == KeyEvent.VK_S || a == KeyEvent.VK_DOWN) { if((heroPlane.y += 10) > 800 - heroPlane.h) { heroPlane.y = 800 - heroPlane.h; } } //重绘,将英雄机画到新的位置上 repaint(); /* if(e.getKeyChar() == 'a') { if((heroPlane.x -= 10) < -heroPlane.w/2) { heroPlane.x = 0 - heroPlane.w/2; } } if(e.getKeyChar() == 'd') { if((heroPlane.x += 10) > 600 - heroPlane.w/2) { heroPlane.x = 600 - heroPlane.w/2; } } if(e.getKeyChar() == 'w') { if((heroPlane.y -= 10) < 0) { heroPlane.y = 0; } } if(e.getKeyChar() == 's') { if((heroPlane.y += 10) > 800 - heroPlane.h) { heroPlane.y = 800 - heroPlane.h; } } //重绘,将英雄机画到新的位置上 repaint(); */ } }; // 3.将适配器加入到窗体的监听器中(加到面板的键盘监听器中是没有用的) //可以在创建面板对象时,把窗体对象传过来,然后把键盘适配器添加到窗体的键盘监听器中 //需要面板的构造器添加参数,并指定类型 gameFrame.addKeyListener(key); } //专门画图的方法,重写于JComponent类(JPanel的父类) //画图的方法:(画图时一定要注意图片的尺寸) // 格式: g.drawImage(图片, 横坐标, 纵坐标, 宽度, 高度, 当转换了更多图片是要通知的对象) // 画图时如果不设定图片的大小,图片显示就是原图的大小 @Override public void paint(Graphics g) { //g.drawImage(img, x, y, observer); //横纵坐标是设置图片左上角的坐标,设置图片的大小 g.drawImage(bgp, 0, 0, 600, 800, null); //在paint中画图是有顺序的,先画的在下面一层,先画的会被后画的覆盖 //给敌机画图 //已经把敌机放入集合中了,使用遍历绘制敌机 for(int i = 0; i < arrays.size(); i++) { EnemyPlane enemyPlane = arrays.get(i); g.drawImage(enemyPlane.img, enemyPlane.x, enemyPlane.y, enemyPlane.w, enemyPlane.h, null); } //给英雄机画图 g.drawImage(heroPlane.img, heroPlane.x, heroPlane.y, heroPlane.w, heroPlane.h, null); //把英雄机的弹药画进面板 for(int i = 0; i < HFire.size(); i++) { HeroFire heroFire = HFire.get(i); g.drawImage(heroFire.img, heroFire.x, heroFire.y, heroFire.w, heroFire.h, null); } //把敌机的子弹画进面板中 // for(int i = 0; i < EnFire.size(); i++) { // EnemyFire enemyFire = EnFire.get(i); // g.drawImage(enemyFire.img, enemyFire.x, enemyFire.y, enemyFire.w, enemyFire.h, null); // } } } ![图片说明](https://img-ask.csdn.net/upload/202003/20/1584711414_269752.png)![图片说明](https://img-ask.csdn.net/upload/202003/20/1584711424_683016.png)![图片说明](https://img-ask.csdn.net/upload/202003/20/1584711438_860998.png)![图片说明](https://img-ask.csdn.net/upload/202003/20/1584711451_113820.jpg) ![图片说明](https://img-ask.csdn.net/upload/202003/20/1584711743_593343.png) 图一是运行时操作的画面,如果移动鼠标或者按着键盘不放(应该是飞机移动太快的时候),就会出现下面的画面,会一次出现多个子弹(我就的是鼠标移动时刷新的太快,但是线程里面是限制了时间的,难道是鼠标或者键盘和县线程里面重复刷新了???不会啊,求救啊!!!)。还有,截图代码中,如果把圈出来的判断代码放出来,游戏界面就会出现圈起来的样子(最左边的子弹向上走到一定高度就会变成两个,每次都是在那个高度,并且只有最左边的子弹会变化。)(我就的可能是集合删除后子弹的位置改变了,如果用LinkedList会不会好点?求救!!!)

飞机大战控制飞机的移动的代码看不懂,求分析!

``` // 按上键 if ( Input.GetKey( KeyCode.UpArrow ) ) { movev -= m_speed * Time.deltaTime; } // 按下键 if ( Input.GetKey( KeyCode.DownArrow ) ) { movev += m_speed * Time.deltaTime; } // 按左键 if ( Input.GetKey( KeyCode.LeftArrow ) ) { moveh += m_speed * Time.deltaTime; } // 按右键 if ( Input.GetKey( KeyCode.RightArrow ) ) { moveh -= m_speed * Time.deltaTime; } // 移动 this.m_transform.Translate( new Vector3( moveh, 0, movev ) ); ``` 这里的上键为什么对应movev的“-”操作符,下键对应movev的“+”操作符,左键对应moveh的“+”操作符,右键对应moveh的“-"操作符?

JAVA使用EPLICSE编译时提示出错,求解

源代码: package com.tarena.shoot; import java.util.Random; //Airplane----敌机既是飞行物, public class Airplane extends FlyingObject implements Enemy{ private int speed = 2;//敌机走步的步数 public Airplane(){ image = ShootGame.airplane; width = image.getWidth(); height = image.getHeight(); Random rand = new Random(); x = rand.nextInt(ShootGame.WIDTH - this.width); y = -this.height; //y:负的敌机的高 } //重写 getScore(); public int getScore(){ return 5; } public void step(){ y += speed; } public boolean outOfBounds(){ return this.y > ShootGame.HEIGHT; //敌机的y坐标大于窗口的高 } } 提示出错: FlyingObject 无法解析为类型 还有很多类似的出错,这是其中一个

在SurfaceView extends Surface中定义了class,在里面重载onkeyup,就是执行不了

代码如下: package com.rzy.plane; import java.util.Random; import java.util.Vector; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.SurfaceHolder.Callback; public class MainActivity extends Activity { MySurfaceView mysurfaceview = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mysurfaceview = new MySurfaceView(this); setContentView(mysurfaceview); } } class MySurfaceView extends SurfaceView implements Callback { private SurfaceHolder sfh; private Paint paint; //定义游戏状态变量 public static final int GAME_MENU = 0; public static final int GAMEING = 1; public static final int GAME_WIN = 2; public static final int GAME_LOST = 3; public static final int GAME_PAUSE = -1; //当前游戏状态(默认初始在游戏菜单界面) public static int gameState = GAME_MENU; public static int screenW; public static int screenH; //声明一个Resources实例便于加载图片 private Resources res = this.getResources(); private Bitmap bmpBackGround;//游戏背景 private Bitmap bmpBoom;//爆炸效果 private Bitmap bmpBoosBoom;//boss爆炸效果 private Bitmap bmpButton;//游戏开始按钮 private Bitmap bmpButtonPress;//游戏开始按钮点击 private Bitmap bmpEnemyduck;//怪物鸭子 private Bitmap bmpEnemyFiy;//怪物苍蝇 private Bitmap bmpEnemyBoss;//怪物boss private Bitmap bmpGameWin;//游戏胜利背景 private Bitmap bmpGameLost;//游戏失败背景 private Bitmap bmpPlayer;//游戏主角飞机 private Bitmap bmpPlayerHp;//游戏主角飞机血量 private Bitmap bmpMenu;//菜单背景 private Bitmap bmpBullet;//子弹 private Bitmap bmpEnmeyBullet;//敌机飞机 private Bitmap bmpBossBullet;//Boss子弹 //声明一个菜单对象 private GameMenu gameMenu; //声明一个滚动游戏背景对象 private GameBg backGround; //声明主角对象 private Player player; String tag = "MySurfaceView"; public MySurfaceView(Context context) { super(context); sfh = this.getHolder(); sfh.addCallback(this); paint = new Paint(); paint.setColor(Color.WHITE); } @Override public void surfaceCreated(SurfaceHolder holder) { screenW = this.getWidth(); screenH = this.getHeight(); initGame(); myDraw(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } public void myDraw() { Canvas canvas = sfh.lockCanvas(); switch (gameState) { case GAME_MENU: gameMenu.draw(canvas, paint); Log.i(tag, "00"); break; case GAMEING: //游戏 背景 backGround.draw(canvas, paint); //主角绘图函数 player.draw(canvas, paint); Log.i(tag, "0"); break; case GAME_WIN: break; case GAME_LOST: break; case GAME_PAUSE: break; } sfh.unlockCanvasAndPost(canvas); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (gameState) { case GAME_MENU: break; case GAMEING: //主角的按键按下事件 player.onKeyDown(keyCode, event); Log.i(tag, "1"); break; case GAME_WIN: break; case GAME_LOST: break; case GAME_PAUSE: break; } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (gameState) { case GAME_MENU: break; case GAMEING: //按键抬起事件 player.onKeyUp(keyCode, event); Log.i(tag, "2"); break; case GAME_WIN: break; case GAME_LOST: break; case GAME_PAUSE: break; } return super.onKeyUp(keyCode, event); } @Override public boolean onTouchEvent(MotionEvent event) { // Canvas canvas = sfh.lockCanvas(); switch (gameState) { case GAME_MENU: gameMenu.onTouchEvent(event); Log.i(tag, "1"); myDraw(); break; case GAMEING: break; case GAME_WIN: break; case GAME_LOST: break; case GAME_PAUSE: break; } // sfh.unlockCanvasAndPost(canvas); return true; } private void logic() { switch (gameState) { case GAME_MENU: break; case GAMEING: //背景逻辑 backGround.logic(); //主角逻辑 player.logic(); Log.i(tag, "3"); break; case GAME_WIN: break; case GAME_LOST: break; case GAME_PAUSE: break; } } private void initGame() { if (gameState == GAME_MENU) { bmpBackGround = BitmapFactory.decodeResource(res, R.drawable.background); bmpBoom = BitmapFactory.decodeResource(res, R.drawable.boom); bmpBoosBoom = BitmapFactory.decodeResource(res, R.drawable.boom); bmpButton = BitmapFactory.decodeResource(res, R.drawable.button); bmpButtonPress = BitmapFactory.decodeResource(res, R.drawable.button_press); bmpEnemyduck = BitmapFactory.decodeResource(res, R.drawable.boss_duck); bmpEnemyFiy = BitmapFactory.decodeResource(res, R.drawable.boss_fly); bmpEnemyBoss = BitmapFactory.decodeResource(res, R.drawable.boss_pig); bmpGameWin = BitmapFactory.decodeResource(res, R.drawable.win); bmpGameLost = BitmapFactory.decodeResource(res, R.drawable.lost); bmpPlayer = BitmapFactory.decodeResource(res, R.drawable.zhujue); bmpPlayerHp = BitmapFactory.decodeResource(res, R.drawable.hp); bmpMenu = BitmapFactory.decodeResource(res, R.drawable.menu); bmpBullet = BitmapFactory.decodeResource(res, R.drawable.bullte); bmpEnmeyBullet = BitmapFactory.decodeResource(res, R.drawable.enemy_bullye); bmpBossBullet = BitmapFactory.decodeResource(res, R.drawable.bossbullte); } gameMenu = new GameMenu(bmpMenu, bmpButton, bmpButtonPress); backGround = new GameBg(bmpBackGround); player = new Player(bmpPlayer, bmpPlayerHp); } public class GameMenu { //菜单背景 private Bitmap bmpMenu; //按钮图片资源(按下和未按下图) private Bitmap bmpButton, bmpButtonPress; //按钮坐标 private int btnX, btnY; //按钮标记 private Boolean isPress; //菜单初始化 public GameMenu(Bitmap bmpMenu, Bitmap bmpButton, Bitmap bmpButtonPress) { this.bmpMenu = bmpMenu; this.bmpButton = bmpButton; this.bmpButtonPress = bmpButtonPress; //X居中,Y紧接屏幕底部 btnX = MySurfaceView.screenW / 2 - bmpButton.getWidth() / 2; btnY = MySurfaceView.screenH / 2 - bmpButton.getHeight() / 2; isPress = false; } //菜单绘图函数 public void draw(Canvas canvas, Paint paint) { canvas.drawBitmap(bmpMenu, 0, 0, paint); //绘制未按下按钮图 if(isPress) { canvas.drawBitmap(bmpButtonPress, btnX, btnY, paint); } else { canvas.drawBitmap(bmpButton, btnX, btnY, paint); } } //菜单触屏事件函数,主要用于处理按钮事件 public void onTouchEvent(MotionEvent event) { int pointX = (int) event.getX(); int pointY = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) { if (pointX > btnX && pointX < btnX + bmpButton.getWidth()) { if (pointY > btnY && pointY < btnY + bmpButton.getHeight()) { isPress = true;Log.i(tag, "TRYE"); } else { isPress = false;Log.i(tag, "FALSE1"); } } else { isPress = false;Log.i(tag, "FALSE2"); } } else if (event.getAction() == MotionEvent.ACTION_UP) { if (pointX > btnX && pointX < btnX + bmpButton.getWidth()) { if (pointY > btnY && pointY < btnY + bmpButton.getHeight()) { isPress = false;Log.i(tag, "FALSE3"); MySurfaceView.gameState = MySurfaceView.GAMEING; } } } } } public class GameBg { //游戏背景的图片资源 //为了循环播放,这里定义两个位图对象 //其资源引用的是同一张图片 private Bitmap bmpBackGround1; private Bitmap bmpBackGround2; //游戏背景坐标 private int bg1x, bg1y, bg2x, bg2y; //背景滚动速度 private int speed = 3; //游戏背景构造函数 public GameBg(Bitmap bmpBackGround) { this.bmpBackGround1 = bmpBackGround; this.bmpBackGround2 = bmpBackGround; //首先让第一张背景底部正好填满整个屏幕 bg1y = -Math.abs(bmpBackGround1.getHeight() - MySurfaceView.screenH); //第二张背景图紧接在第一张背景的上方 //+101的原因:虽然两张背景图无缝隙连接但是因为图片资源头尾 //直接连接不和谐,为了让视觉看不出是两张图连接而修正的位置 bg2y = bg1y - bmpBackGround1.getHeight() + 101; } //游戏背景的绘图函数 public void draw(Canvas canvas, Paint paint) { //绘制两张背景 canvas.drawBitmap(bmpBackGround1, bg1x, bg1y, paint); canvas.drawBitmap(bmpBackGround2, bg2x, bg2y, paint); } //游戏背景的逻辑函数 public void logic() { bg1y += speed; bg2y += speed; //当第一张图片的Y坐标超出屏幕, //立即将其坐标设置到第二张图的上方 if (bg1y > MySurfaceView.screenH) { bg1y = bg2y - bmpBackGround1.getHeight() + 111; } if (bg2y > MySurfaceView.screenH) { bg2y = bg1y - bmpBackGround1.getHeight() + 111; } } } public class Player { //主角血量与血量位图 //默认3血 private int playerHp = 3; private Bitmap bmpPlayerHp; //主角的坐标以及位图 public int x, y; private Bitmap bmpPlayer; //主角移动速度 private int speed = 5; //主角移动白哦是 private boolean isUp, isDown, isLeft, isRight; //主角的构造函数 public Player(Bitmap bmpPlayer, Bitmap bmpPlayerHp) { this.bmpPlayer = bmpPlayer; this.bmpPlayerHp = bmpPlayerHp; x = MySurfaceView.screenW / 2 - bmpPlayer.getWidth() / 2; y = MySurfaceView.screenH - bmpPlayer.getHeight(); } //主角的绘图函数 public void draw(Canvas canvas, Paint paint) { //绘制主角 canvas.drawBitmap(bmpPlayer, x, y, paint); //绘制血量 for (int i = 0; i < playerHp; i++) { canvas.drawBitmap(bmpPlayerHp, i * bmpPlayerHp.getWidth(), MySurfaceView.screenH - bmpPlayerHp.getHeight(), paint); } } //试题按键 public void onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { isUp = true; } if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { isDown = true; } if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { isLeft = true; } if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) { isRight = true; } } //实体按键抬起 public void onKeyUp(int keyCode, KeyEvent event) { Log.i(tag, "player.keyup"); if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { isUp = false; } if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { isDown = false; } if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { isLeft = false; } if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) { isRight = false; } } //主角的逻辑 public void logic() { //处理主角移动 if(isLeft) { x -= speed; } if(isRight) { x += speed; } if(isUp) { y -= speed; } if(isDown) { y += speed; } //判断品目X边界 if (x + bmpPlayer.getWidth() >= MySurfaceView.screenW) { x = MySurfaceView.screenW - bmpPlayer.getWidth(); } else if (x <= 0) { x = 0; } //判断品目Y边界 if (y + bmpPlayer.getHeight() >= MySurfaceView.screenH) { y = MySurfaceView.screenH - bmpPlayer.getHeight(); } else if (y <= 0) { y = 0; } } //设置主角血量 public void setPlayerHp(int hp) { this.playerHp = hp; } //获取主角血量 public int getplayerHp() { return playerHp; } } }

java中静态类作为方法的参数可以么,或者有什么替代的方案

我是初学者,正在制作一个打飞机的小游戏- -!。现在遇到一点问题,还请各位大神赐教。 问题描述: 我的敌机类Enemy下有多个属性(如位置坐标x和y、血量hp、姿态degree、速度speed、贴图bmp等),在实例化时可以通过下面的这条语句来实例化并初始化。 ``` new Enemy(x,y,hp,degree,speed,bmp) ``` 由于敌机种类较多,我打算将这些数据静态化放在一个类Params中。Params下有多个子类,这些子类的属性列表完全相同且全为静态属性(也可直接是静态子类),仅数值不同。比如某两种型号的敌机e_plane01以及e_plane02: ``` public class Params { static class e_plane01{ public static int x=11; public static int y=12; public static int hp=13; } static class e_plane02{ public static int x=21; public static int y=22; public static int hp=23; } } ``` 那么问题就来了,我实例化时的代码就老长老长的: ``` enemy01= new Enemy(Params.e_plane01.x, Params.e_plane01.y, Params.e_plane01.hp,…); ``` 如果是在C里,那我完全可以把E_plane作为一个结构体模板(保证属性列表相同),并分别创建e_plane01、e_plane02等结构体节点(不同种类的敌机的同一属性不尽相同),再将结构体节点的指针作为参数传给别的函数去操作。但java中没有结构体,我有没有办法写出 enemy01=new Enemy(&Params.e_plane01);这样简练的句子呢?这样的话,我只需修改构造函数成这样就好了: ``` Enemy(struct E_plane *someStaticClass){ this->x=someStaticClass->x; this->y=someStaticClass->y; … } ``` 所以特此求教各位大神,有没有解决办法,或者是我数据结构存在问题,有没有什么其他方案?谢谢大家

JAVA代码编译出错:找不到符号,求解答

源代码: package com.tarena.shoot; import java.util.Random; //Airplane----敌机既是飞行物, public class Airplane extends FlyingObject implements Enemy{ private int speed = 2;//敌机走步的步数 public Airplane(){ image = ShootGame.airplane; width = image.getWidth(); height = image.getHeight(); Random rand = new Random(); x = rand.nextInt(ShootGame.WIDTH - this.width); y = -this.height; //y:负的敌机的高 } //重写 getScore(); public int getScore(){ return 5; } public void step(){ y += speed; } public boolean outOfBounds(){ return this.y > ShootGame.HEIGHT; //敌机的y坐标大于窗口的高 } } 出错: ---------- javac ---------- Airplane.java:4: 错误: 找不到符号 public class Airplane extends FlyingObject implements Enemy{ ^ 符号: 类 FlyingObject Airplane.java:4: 错误: 找不到符号 public class Airplane extends FlyingObject implements Enemy{ ^ 符号: 类 Enemy Airplane.java:7: 错误: 找不到符号 image = ShootGame.airplane; ^ 符号: 变量 image 位置: 类 Airplane Airplane.java:7: 错误: 找不到符号 image = ShootGame.airplane; ^ 符号: 变量 ShootGame 位置: 类 Airplane Airplane.java:8: 错误: 找不到符号 width = image.getWidth(); ^ 符号: 变量 width 位置: 类 Airplane Airplane.java:8: 错误: 找不到符号 width = image.getWidth(); ^ 符号: 变量 image 位置: 类 Airplane Airplane.java:9: 错误: 找不到符号 height = image.getHeight(); ^ 符号: 变量 height 位置: 类 Airplane Airplane.java:9: 错误: 找不到符号 height = image.getHeight(); ^ 符号: 变量 image 位置: 类 Airplane Airplane.java:11: 错误: 找不到符号 x = rand.nextInt(ShootGame.WIDTH - this.width); ^ 符号: 变量 x 位置: 类 Airplane Airplane.java:11: 错误: 找不到符号 x = rand.nextInt(ShootGame.WIDTH - this.width); ^ 符号: 变量 ShootGame 位置: 类 Airplane Airplane.java:11: 错误: 找不到符号 x = rand.nextInt(ShootGame.WIDTH - this.width); ^ 符号: 变量 width Airplane.java:12: 错误: 找不到符号 y = -this.height; //y:负的敌机的高 ^ 符号: 变量 y 位置: 类 Airplane Airplane.java:12: 错误: 找不到符号 y = -this.height; //y:负的敌机的高 ^ 符号: 变量 height Airplane.java:23: 错误: 找不到符号 y += speed; ^ 符号: 变量 y 位置: 类 Airplane Airplane.java:26: 错误: 找不到符号 return this.y > ShootGame.HEIGHT; //敌机的y坐标大于窗口的高 ^ 符号: 变量 y Airplane.java:26: 错误: 找不到符号 return this.y > ShootGame.HEIGHT; //敌机的y坐标大于窗口的高 ^ 符号: 变量 ShootGame 位置: 类 Airplane 16 个错误

VS写MFC飞机大战的子弹发射模式问题

我怎么实现追踪导弹呢?由我机发射打敌机,发射追踪导弹怎么去选择追踪哪个敌机呢?怎么发射以圆形辐射模式的子弹呢(放出一圈不断扩散的子弹)?求各路真神解答,感激不尽。

java如何在一个类中调用另一个类的paint()方法?

比如飞机大作战中,我把敌机做成一个类,但是敌机线程发动的时候要调用JPanel类带 的paint()方法才能看出效果,请问各位大神该怎么调用呢。在下初学者菜鸟。

求问为什么子弹没有移动,碰撞也没有实现?

function $(name) { return document.getElementById(name); } //获取某个标签得某个样式的值 function getStyle(elem,attr){ var result = window.getComputedStyle(elem,null)[attr]; result = parseFloat(result); return result; } var start=$("start"); var play=$("play"); var score=$("score"); var pause=$("pause"); var scores=0; var end=$("end"); var label=$("label"); /* 创建飞机类 */ function plane(hp,x,y,width,height,sudu,dietime,score,boomimage,imagesrc){ this.planeX=x; this.planeY=y; this.planeW=width; this.planeH=height; this.imagenode=null; this.planeDietime=dietime; this.planeBoomimage=boomimage; this.planesudu=sudu; this.planeisdie=false; this.planescore=score; this.planehp=hp; //移动 this.planemove=function(){ if(scores<=200){ this.imagenode.style.top=this.imagenode.offsetTop+this.planesudu+"px"; } else if(scores>200&&scores<=500){ this.imagenode.style.top=this.imagenode.offsetTop+this.planesudu+1+"px"; } else if(scores>500&&scores<=1000){ this.imagenode.style.top=this.imagenode.offsettop+this.planesudu+2+"px"; } else{ this.imagenode.style.top=this.imagenode.offsettop+this.planesudu+3+"px"; } } //初始化飞机 this.init=function(){ this.imagenode=document.createElement("img"); this.imagenode.style.left=this.planeX+"px"; this.imagenode.style.top=this.planeY+"px"; this.imagenode.src=imagesrc; play.appendChild(this.imagenode); } this.init(); } //*************************************************************************************** /* 创建本方飞机类 */ function ourplane(X,Y){ var imagesrc="image/wdfj.gif"; plane.call(this,1,X,Y,66,80,0,660,0,"image/bffjbx.gif",imagesrc); this.imagenode.setAttribute('id','ourplane'); } /* 创建本方飞机 */ var selfplane=new ourplane(120,485); var ourPlane=$('ourplane'); //移动 var ourplanemove=function(){ var oevent=window.event||arguments[0]; var returne=oevent.srcElement||oevent.target; var mouseX=oevent.clientX-500; var mouseY=oevent.clientY; ourPlane.style.left=mouseX-selfplane.planeW/2+"px"; ourPlane.style.top=mouseY-selfplane.planeH/2+"px"; // alert(ourPlane.planeW); } //暂停 var number=0; var zanting=function(){ if(number==0){ pause.style.display="block"; if(document.removeEventListener){ play.removeEventListener("mousemove",ourplanemove,true); body.removeEventListener("mousemove",chujie,true); } else if(document.detachEvent){ play.detachEventListener("onmousemove",ourplanemove); body.detachEventListener("onmousemove",chujie); } window.clearInterval(set); number=1; } else{ pause.style.display="none"; if(document.addEventListener){ play.addEventListener("mousemove",ourplanemove,true); body.addEventListener("mousemove",chujie,true); } else if(document.attachEvent){ play.attaEventListener("onmousemove",ourplanemove); body.attaEventListener("onmousemove",chujie); } set=setInterval(startgame,20); number=0; } } //本方飞机出界 var chujie=function(){ var e=window.event||arguments[0]; var mouseX=e.clientX; var mouseY=e.clientY; if(mouseX<505||mouseX>815||mouseY<0||mouseY>568){ if(document.removeEventListener){ play.removeEventListener("mousemove",ourplanemove,true); } else if(document.detachEvent){ play.detachEvent("onmousemove",ourplanemove); } } else{ if(document.addEventListener){ play.addEventListener("mousemove",ourplanemove,true); } else if(document.attachEvent){ play.attachEvent("onmousemove",ourplanemove); } } } //添加事件 var body=document.getElementsByTagName("body")[0]; if(document.addEventListener){ play.addEventListener("mousemove",ourplanemove,true); body.addEventListener("mousemove",chujie,true); selfplane.imagenode.addEventListener("click",zanting,true); pause.getElementsByTagName("button")[0].addEventListener("click",zanting,true); } else if(document.attachEvent){ play.attachEvent("onmousemove",ourplanemove); body.attachEvent("onmousemove",chujie); selfplane.imagenode.attachEvent("click",zanting); pause.getElementsByTagName("button")[0].attachEvent("onclick",zanting); } //*************************************************************************************** /* 创建子弹类 */ var bullet=function(x,y,width,height,bulletsrc){ this.bulletX=x; this.bulletY=y; this.bulletW=width; this.bulletH=height; this.bulletnode=null; this.bullethp=1; //子弹移动 this.bulletmove=function(){ this.bulletnode.style.top=this.bulletnode.offsetTop-20+"px"; } this.init=function(){ this.bulletnode=document.createElement("img"); this.bulletnode.style.left=this.bulletX+"px"; this.bulletnode.style.top=this.bulletY+"px"; this.bulletnode.src=bulletsrc; play.appendChild(this.bulletnode); } this.init(); } //*************************************************************************************** //创建敌方飞机类 function enemy(hp,x,y,width,height,sudu,dietime,score,boomimage,enemysrc){ plane.call(this,hp,random(),-100,width,height,sudu,dietime,score,boomimage,enemysrc); } //敌方飞机横坐标 function random(){ return Math.floor(Math.random()*280); } //创建敌方飞机 var enemys=[]; var mark=0; var mark1=0; var backgroundPositionY=0; //游戏开始 function startgame(){ play.style.backgroundPositionY=backgroundPositionY+"px"; backgroundPositionY+=0.5; if(backgroundPositionY==568){ backgroundPositionY=0; } mark++; if(mark==20){ mark1++; if(mark1%5==0){ enemys.push(new enemy(6,25,274,46,60,3,360,random(),"image/zfjbz.gif","image/enemy3_fly_1.png")); } if(mark1==20){ enemys.push(new enemy(12,57,210,110,164,2,540,random(),"image/dfjbz.gif","image/enemy2_fly_1.png")); mark1=0; } else{ enemys.push(new enemy(1,19,286,34,24,5,360,random(),"image/xfjbz.gif","image/enemy1_fly_1.png")); } mark=0; } //敌机移动 var enemyslen=enemys.length; for(var i=0;i<enemyslen;i++){ if(enemys[i].planeisdie!=true){ enemys[i].planemove(); } var h=568-enemys[i].planeH; if(enemys[i].imagenode.offsetTop>h){ play.removeChild(enemys[i].imagenode); enemys.splice(i,1); enemyslen--; } } //单行子弹类 var singlebullet=function(X,Y){ bullet.call(this,X,Y,6,14,"image/bullet1.png"); } var bullets=[]; /* var bleft=this.planeW/2-this.bulletW/2;//66/2-6/2=33-3=30 var btop=this.bulletH;//14 */ //创建子弹 if(mark%5==0){ bullets.push(new singlebullet( parseInt(selfplane.imagenode.style.left)+30, parseInt(selfplane.imagenode.style.top)-14 )); } //移动子弹 var bulletslen=bullets.length; for(var i=0;i<bulletslen;i++){ bullets[i].bulletmove(); if(bullets[i].bulletnode.offsetTop<0){ play.removeChild(bullets[i].bulletnode); bullets.splice(i,1); bulletslen--; } } //飞机碰撞 for(var b=0;b<bulletslen;b++){ for(var e=0;e<enemyslen;e++){ if(enemys[e].planeisdie==false){ //我方飞机与敌机相撞 if(enemys[e].imagenode.offsetLeft<=selfplane.imagenode.offsetLeft+selfplane.imagenode.planeW&&enemys[e].imagenode.offsetLeft+enemys[e].imagenode.planeW>=selfplane.imagenode.offsetLeft){ if(enemys[e].imagenode.offsetTop<=selfplane.imagenode.offsetTop+selfplane.imagenode.planeH&&enemys[e].imagenode.offsetTop+enemys[e].imagenode.planeH>=selfplane.imagenode.offsetTop){ selfplane.imagenode.src="image/bffjbx.gif"; end.style.display="block"; clearInterval(set); if(document.removeEventListener){ play.removeEventListener("mousemove",ourplanemove,true); play.removeEventListener("mousemove",chujie,true); } else if(document.detachEvent){ play.detachEvent("onmousemove",ourplanemove); play.detachEvent("onmousemove",chujie); } } } //敌机与子弹相撞 if(bullets[b].bulletnode.offsetLeft<=enemys[e].imagenode.offsetLeft+enemys[e].imagenode.planeW&&bullets[b].bulletnode.offsetLeft+bullets[b].bulletnode.bulletW>=enemys[e].imagenode.offsetLeft){ if(bullets[b].bulletnode.offsetTop<=enemys[e].imagenode.offsetTop+enemys[e].imagenode.planeH&&bullets[b].bulletnode.offsetTop+bullets[b].bulletnode.bulletH>=enemys[e].imagenode.offsetTop){ enemys[e].planehp=enemys[e].planehp-bullets[b].bullethp; if(enemys[e].planehp==0){ enemys[e].imagenode.src=enemys[e].planeBoomimage; scores=scores+enemys[e].planescore; label.innerHTML=scores; enemys[e].planeisdie=true; } play.removeChild(bullets[b].bulletnode); bullets.splice(b,1); bulletslen--; break; } } } } } } /* 开始游戏按钮点击事件 */ var set; function gameplay(){ start.style.display="none"; play.style.display="block"; selfplane.imagenode.style.display="block"; // scorediv.style.display="block"; /* 调用开始函数 */ set=setInterval(startgame,20); }

Unity3D游戏开发,游戏体碰撞问题,请教!

初学unity3d,遇到个问题,想请教一下大家! 买了一本unity3d游戏开发的书,实现一个小项目实例,太空射击游戏,现在我把敌机,主角和子弹都放在了场景上了,主角能发射子弹; 也按照书上给敌机、子弹、主角添加了相关组件,运行时碰撞没有效果。请指点!

新人使用pycharm运行飞机大战项目报如下错误:AttributeError: module 'pygame.image' has no attribute 'get_rect'

看着网上的教学视频一步一步下来,当建立敌机的精灵后,在程序中调用这个精灵时就会报错,单独运行精灵程序时不会报错,在网上也找了相关的资料,但类似的好像也不对; 主程序代码如下: ``` import pygame from plane_sprites import * pygame.init() #创建游戏窗口 480*700 screen = pygame.display.set_mode((480,700)) #绘制背景图像 bg = pygame.image.load("./images/background.png") screen.blit(bg,(0,0)) #绘制英雄的飞机 hero = pygame.image.load("./images/me1.png") screen.blit(hero,(150,400)) #可以在所有绘制工作结束后,统一调度update方法啊 pygame.display.update() #创建时钟对象 clock = pygame.time.Clock() #1.定义rect记录飞机的初始位置 hero_rect = pygame.Rect(150,400,102,126) #创建敌机的精灵 enemy = GameSprite("./images/enemy1.png") enemy1 = GameSprite("./images/enemy1.png",2) #创建敌机的精灵组 enemy_group = pygame.sprite.Group(enemy,enemy1) #游戏循环>意味着游戏正式开始 while True: #1.可以指定循环体内部的代码执行的频率 clock.tick(60) """ #捕获事件 event_list = pygame.event.get() if len(event_list) > 0: print(event_list) """ #事件监听 for event in pygame.event.get(): #判断用户是否点击了关闭按钮 if event.type == pygame.QUIT: print('退出游戏!') pygame.quit() #直接退出系统 exit() #2.修改飞机的位置 hero_rect.y -= 1 #判读飞机的位置 if hero_rect.y <= -126: hero_rect.y = 700 #3.调用blit方法绘制图像 screen.blit(bg,(0,0)) screen.blit(hero,hero_rect) #让精灵族调用两个方法 #update - 让组中的所有精灵都更新位置 enemy_group.update() #draw - 在screen上显示所有的精灵 enemy_group.draw(screen) #4.使用update方法更新显示 pygame.display.update() pygame.quit() ``` 调用的精灵程序如下: ``` import pygame class GameSprite(pygame.sprite.Sprite): """飞机大战精灵""" def __init__(self, image_name, speed=1): #调用父类的初始化方法 super().__init__() #定义对象的属性 self.image = pygame.image.load(image_name) self.rect = pygame.image.get_rect() self.speed = speed def update(self): #在屏幕的垂直方向移动 self.rect.y += self.speed ``` 运行后报如下的错误: AttributeError: module 'pygame.image' has no attribute 'get_rect' ![图片说明](https://img-ask.csdn.net/upload/202002/08/1581141436_82065.png) 还请各位大佬有时间能帮忙看下这个问题我出错在哪里了,谢谢哈

Java两个类之间传值问题(初学)

# 背景简介 我在试着做飞机大战,想用jlabel做一个得分显示。 整个界面用JFrame搭建,两个jpanel,一号Jpanel用paint()画游戏界面,二号Jpanel用来放置jlabel,即用来显示分数。【我方飞机】、【敌机】、【子弹】、【爆炸效果】、【开始】、【画布】共六个类,paint()就在【画布】中,前四个类只有属性器和方法,【画布】里创建我方飞机、敌机和子弹的对象和其移动方法。 # 这里是正题 1. 【爆炸效果】里存在让碰撞后的子弹和敌机消失的方法,在此中需要调用Score值,增加分数。 2. 【画布】里的paint()联合repaint()会重复画图,调用【爆炸效果】(每次都是new Bomb(4个参数))。 3. 【开始】包含main入口,继承jframe,构造方法里做好基本局部,jpanel和jlabel就是在这里加的。 4.我在【画布】里另创一类GetScore继承jlabel,初始化int Score=0,属性器getter和setter完全正常,打印输出显示分数累加正常。传值到【开始】的一个方法start(int a)中,该方法打印输出同样显示分数值正常。但实际效果却是jlabel一直显示得分: 0. # 求教 如何能让jlabel变动,详略均可,谢谢! ``` import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JPanel; public class Start extends JFrame{ //这是画布类 Interface in = new Interface(); JPanel jp = new JPanel(); //得分方法类的实例 GetScore jl = new GetScore(); public String getJl() { return jl.getText(); } public void setJl(String str) { jl.setText(str); } Start(){ setTitle("飞机大战"); setSize(700, 800); setBounds(0, 0, 600, 800); setResizable(false); setVisible(true); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new BorderLayout()); //将显示分数的jlabel添加到面板中 jp.add(jl); new Thread(in).start(); this.add(in,BorderLayout.CENTER); jp.setSize(100, 700); this.add(jp,BorderLayout.WEST); this.addKeyListener(in); } Start(int a){ setJl("得分: "+a); System.out.println("jl:"+jl.getText()); } public static void main(String[] args) { new Start(); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201607/04/1467644109_45110.png)

打飞机代码有一行无法显示,不知道错在哪

#include <stdio.h> #include <windows.h> #include <conio.h> int pos_x,pos_y; //飞机位置 int height,width; //画面长宽 int bullet_x,bullet_y;//子弹长宽 int enemy_x,enemy_y; //敌机位置 int score; int laser; // 函数外全局变量定义 void startup() { height=20; width=30; pos_x=height/2; pos_y=width/2; bullet_x=0; bullet_y=pos_y; enemy_x=0; enemy_y=pos_y; score=0; laser=0; } void gotoxy(int x,int y)//类似于清屏函数,光标移动到原点位置进行重画 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle,pos); } int show() { gotoxy(0,0); int i,j; int count; for(i=0;i<height;i++) { for(j=0;j<width;j++) { if(laser==1&&(j==pos_y)&&(i!=0)) { printf("|"); if(i==pos_x-1) { laser=0; count=1; } } else if((i==pos_x)&&(j==pos_y)) { printf("*"); //输出飞机 } else if((i==enemy_x)&&(j==enemy_y)) { printf("@"); //输出敌机 } else if((i==bullet_x)&&(j==bullet_y)) { printf("|"); //输出子弹 } else if(i==0||height==i+1) printf("-"); else if(j==0||width==j+1) printf("|"); else printf(" "); } if(i==8) printf("\t\t\t打飞机游戏:请勿连续敲打空格武器"); if(i==9) puts("\t\t\t wasd操纵飞机,空格飞弹,J激光弹"); printf("\n"); } printf("得分:%d",score); return count; } int updateWithoutInput(int count) { if(bullet_x>-1) bullet_x--; //控制子弹 if((enemy_x==pos_x)&&(enemy_y==pos_y)) //飞机撞到了 { printf("\n defeat!!!!!!"); score=0; Sleep(1000); system("cls"); enemy_x=-1; enemy_y=rand()%(width-1); if(enemy_y==0) enemy_y=1; pos_x=height/2; pos_y=width/2; } if((enemy_x==bullet_x)&&(enemy_y==bullet_y)) //击落敌机生成敌机 { score++; bullet_x=-2; enemy_x=-1; enemy_y=rand()%(width-1); if(enemy_y==0) enemy_y=1; } if((count==1)&&(pos_y==enemy_y)&&(enemy_x<pos_x)) { score++; enemy_x=-1; enemy_y=rand()%(width-1); if(enemy_y==0) enemy_y=1; } if (enemy_x>height) // 敌机跑出显示屏幕 { enemy_x = -1; // 产生新的飞机 enemy_y = rand()%(width-1); if(enemy_y==0) enemy_y=1; } static int speed = 0; //控制敌机移动速度 if (speed<10) speed++; if (speed == 10) { enemy_x++; speed = 0; } if(pos_x>(height-2)) pos_x=height-2; else if(pos_x<1) pos_x=1; if(pos_y>(width-2)) pos_y=1; else if(pos_y<1) pos_y=width-2; } void updateWithInput() { char input; if(kbhit()) { input=getch(); if(input=='w') pos_x--; else if(input=='s') pos_x++; else if(input=='a') pos_y--; else if(input=='d') pos_y++; else if(input==' ') { bullet_x=pos_x-1; bullet_y=pos_y; } else if(input=='j') laser=1; } } main() { int count; startup(); // 数据初始化 while(1) // 游戏循环执行 { count=show(); // 显示画面 updateWithoutInput(count); // 与用户输入无关的更新 updateWithInput(); // 与用户输入有关的更新 } }

关于cocos2dxv3.1中碰撞的问题

auto border = Sprite::create("img/border.png"); Size bordersize = border->getContentSize(); auto body = PhysicsBody::createBox(Size(bordersize)); body->getShape(0)->setRestitution(0); body->setDynamic(false); body->setCategoryBitmask(1); body->setCollisionBitmask(1); body->setContactTestBitmask(1); border->setPhysicsBody(body); border->setPosition(point); 这个是静止的刚体 auto body = PhysicsBody::createCircle(player->getContentSize().width*0.4f); //设置摩擦力 body->getShape(0)->setFriction(1.0f); //设置弹力 body->getShape(0)->setRestitution(0); body->setCategoryBitmask(1); body->setCollisionBitmask(1); body->setContactTestBitmask(1); this->setPhysicsBody(body); 这是个会动的刚体 这两个碰上的时候会动的那个刚体就会旋转起来 要怎样才能让它不旋转啊 还有就是有时候这两个碰上是没有反弹力的 但是有时候又有 这是怎么回事啊 求大神帮忙看下上面的代码

我用python搭建游戏为什么黑屏有一个解决方案吗?各位大佬

# 我创建的那个一张图片上下移动和敌机.但是屏幕一直黑.和别人的代码一样到底哪不行 ``` def __create_sprites(self): bg1 = BackGround() bg2 = BackGround(True) bg2.rect.y= -bg2.rect.height self.back_group = pygame.sprite.Group(bg1,bg2) self.enemy_group= pygame.sprite.Group def __event_handler(self):#监听 for event in pygame.event.get(): # 判断是否是点击了退出按钮 if event.type == pygame.QUIT: PlaneGame.__game_over() elif event.type==CREATE_ENEMY: print("敌机出场") evemy = Enemy() self.enemy_group.add(1) def __check_collied(self):#碰撞检测 pass def __update_sprites(self):#更新精灵 self.back_groud.update() self.back_groud.draw(self.screen) self.enemy_group.update() self.enemy_group.draw(self.screen) ``` ``` **游戏精灵模块** import random import pygame SCREEN_RECT = pygame.Rect(0,0,400,600) CREATE_ENEMY=pygame.USEREVENT class GameSprites(pygame.sprite.Sprite): """飞机大战游戏精灵""" def __init__(self,image_name,speed=1): super().__init__() #定义父类的初始化方法 self.image = pygame.image.load(image_name) self.rect = self.image.get_rect() #get_rect设置窗口大小和图片大小一样 self.speed = speed def update(self, *args): #在屏幕垂直方向上移动 self.rect.y += self.speed class BackGround(GameSprites): """游戏背景""" def __init__(self,is_out = False): pygame.display.set_caption("周彬大战菊花怪") if is_out: self.rect.y = -self.rect.y def update(self, *args): super().update() if self.rect.y >= SCREEN_RECT.height: self.rect.y = -self.rect.height ```

属性错误:模块“pygame”没有属性“diasplay”.

没有找到相关资料解决问题,已经重装过pycharm. 代码如下: ![图片说明](https://img-ask.csdn.net/upload/201908/16/1565962554_528367.png) 报错截图如下: ![图片说明](https://img-ask.csdn.net/upload/201908/16/1565962593_457524.png) 全部代码如下: import pygame from plan_sprites import * # 游戏的初始化 pygame.init() # 创建游戏的窗口 大小:480*700 screen = pygame.diasplay.set_mode((480, 700)) # 绘制背景图像 # 1.加载图像数据 bg = pygame.image.load(r"H:\py\飞机大作战\images\background") screen.blit(bg, (0, 0)) # 3. updata更新屏幕 # 绘制英雄的飞机 hero = pygame.image.load(r"H:\py\飞机大作战\images\me1.png") screen.blit(hero, (150, 300)) # 可以在所有绘制工作完成后,统一调用updata方法 pygame.display.update() # 创建时钟对象 clock = pygame.time.Clock() # 1.定义rect记录飞机的初始位置 hero_rect = pygame.Rect(150, 300, 102, 106) # 创建敌机的精灵 enemy = GameSprite(r"H:\py\飞机大作战\images\enemy1.png") enemy1 = GameSprite(r"H:\py\飞机大作战\images\enemy1.png") # 创建敌机的精灵组 enemy_group = pygame.sprite.Group(enemy,enemy1) # 游戏循环-->意味着游戏的正式开始! while True: # 可以指定游戏循环内部的代码执行的频率 clock.tick(60) # 监听事件 for event in pygame.event.get(): # 判断事件类型是否是退出事件 if event.type == pygame.QUIT: print("游戏结束!!") # quit 卸载所有的模块 pygame.quit() # exit()直接终止当前正在执行的程序 exit() # 2. 修改飞机的位置 hero_rect.y -= 1 # 判断飞机的位置 if hero_rect.y <= -126: hero_rect.y = 700 # 3. 调用blit方法绘制图像 screen.blit(bg, (0, 0)) screen.blit(hero, hero_rect) # 让精灵组调用两个方法 # updata 让组中的所有精灵更新位置 enemy_group.update() # drow 在screen 上绘制所有精灵 enemy_group.draw(screen) # 4. 调用updata方法更新显示 pygame.display.update() for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() pygame.quit() 望大神指点

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

为什么本科以上学历的人只占中国人口的5%,但感觉遍地都是大学生?

中国大学生占总人口不到5% 2017年,中国整体的本科率仅有5.9%;如果算上研究生,这一比例可以进一步上升到6.5% 为什么在国家统计局推出的这份年鉴中,学历的最高一阶就是到研究生,而没有进一步再统计博士生的数量的。 原因其实并不难理解,相比全国和各省整体人口体量,博士生的占比非常之低,属于绝对意义上的小概率样本。 这一点,我们从上表中的各省研究生占比情况也可以看出端倪。除北京、天津、上海三...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

6年开发经验女程序员,面试京东Java岗要求薪资28K

写在开头: 上周面试了一位女程序员,上午10::30来我们部门面试,2B哥接待了她.来看看她的简历: 个人简历 个人技能: ● 熟悉spring mvc 、spring、mybatis 等框架 ● 熟悉 redis 、rocketmq、dubbo、zookeeper、netty 、nginx、tomcat、mysql。 ● 阅读过juc 中的线程池、锁的源...

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

立即提问
相关内容推荐