ho urgentemente bisogno di una mano! ho fatto questo programma/gioco in java ora però dovrei far muovere i quadratini verso la barra. come faccio a farl muovere?
ecco il codice
codice:import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Vector; import javax.imageio.ImageIO; import javax.swing.*; public class PerEsame extends JPanel implements ActionListener,MouseListener ,MouseMotionListener,KeyListener{ static Shape barra; static int y = 400; static int x=0; static JTextField punti; static Vector proiettiliX; static Vector proiettiliY; static final int raggioProiettile = 5; static int punteggio = 0; static Vector brick; //static Vector navi; static int tempoMax = 3000; public static void main(String [] a){ JFrame finestra = new JFrame(); finestra.setSize(800,800); finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel principale = new JPanel(); JPanel comandi = new JPanel(); punti = new JTextField(); punti.setText(punteggio+""); punti.setPreferredSize(new Dimension(100,20)); proiettiliX = new Vector(); proiettiliY = new Vector(); brick = new Vector(); comandi.add(punti); PerEsame pe=new PerEsame(); pe.setFocusable(true); pe.addMouseMotionListener(pe); pe.addMouseListener(pe); pe.addKeyListener(pe); pe.setBackground(Color.WHITE); principale.setLayout(new BorderLayout()); principale.add(pe,BorderLayout.CENTER); principale.add(comandi,BorderLayout.SOUTH); finestra.getContentPane().add(principale); finestra.setVisible(true); riempiBrick(pe); Timer t = new Timer(5,pe); t.start(); } public void paint(Graphics g){ super.paint(g); Graphics2D g2 = (Graphics2D)g; try{ barra= new Rectangle2D.Double(this.getWidth()-20,y,10,50); g2.setColor(Color.BLACK); g2.fill(barra); }catch(Exception e){ } for (int i=0;i<proiettiliX.size();i++){ int x1 = ((Integer) proiettiliX.elementAt(i)).intValue(); int y1 = ((Integer) proiettiliY.elementAt(i)).intValue(); Shape circle = new Ellipse2D.Double(x1,y1,raggioProiettile,raggioProiettile); boolean preso = false; //crea proiettili e intersezione con asteroidi for (int j=0;j<brick.size();j++){ Shape rect = (Rectangle2D) brick.elementAt(j); if (circle.intersects((Rectangle2D) rect)){ preso = true; brick.remove(j); proiettiliX.remove(i); proiettiliY.remove(i); punteggio++; } } if (!preso){ g2.fill(circle); } } //crea asteroidi for (int j=0;j<brick.size();j++){ g2.setColor(Color.RED); Shape rect = (Rectangle2D) brick.elementAt(j); g2.fill(rect); } } public static void riempiBrick(JPanel p){ //crea asteroidi for (int i=0;i<50;i++){ int y = (int) (Math.random() * p.getWidth()); int x = (i*3); Shape b = new Rectangle2D.Double(x,y,10,10); brick.add(b); } } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_UP){ y=y-10; }if (e.getKeyCode() == KeyEvent.VK_DOWN){ y=y+10; } if (e.getKeyCode()== KeyEvent.VK_SPACE){ proiettiliX.add(new Integer(this.getWidth()-20)); proiettiliY.add(new Integer(y+25-(raggioProiettile/2))); } this.repaint(); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } public void actionPerformed(ActionEvent arg0) { for (int i=0;i<proiettiliX.size();i++){ int x1 = ((Integer) proiettiliX.elementAt(i)).intValue(); x1--; if (x1>0){ proiettiliX.setElementAt(new Integer(x1), i); } else { proiettiliY.remove(i); proiettiliX.remove(i); } } /* for(int j=0;j<brick.size();j++){ int x2=((Integer) brick.elementAt(j)).intValue(); x2++; if (x2<0){ brick.setElementAt(new Integer(x2), j); } else { brick.remove(j); //proiettiliX.remove(i); } }*/ punti.setText(punteggio + ""); tempoMax--; if (tempoMax==0){ JOptionPane.showMessageDialog(null, "Tempo massimo scaduto: punteggio ottenuto "+punteggio+" punti"); System.exit(0); } this.repaint(); } }

Rispondi quotando

