View Single Post
  #2 (permalink)  
Old 04-24-2008, 06:32 PM
hardwired hardwired is offline
Senior Member
 
Join Date: Jul 2007
Posts: 1,124
hardwired is on a distinguished road
Code:
import java.awt.*; import java.awt.event.*; import java.util.*; import java.util.List; import javax.swing.*; import javax.swing.Timer; class Funster extends JFrame { BollPanel bollPanel; public Funster(){ setTitle("Studdis"); bollPanel = new BollPanel(); bollPanel.setBackground(Color.white);n bollPanel.setPreferredSize(new Dimension(350,250)); bollPanel.addBoll(new Boll(200, 10, Color.red)); bollPanel.addBoll(new Boll(100, 20, Color.blue)); add(bollPanel, BorderLayout.CENTER); pack(); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String[] args) { new Funster(); } } class Boll { private int xMax, yMax; //Storlek på boll (Ball size) private int r, x0, y0; //Bollens radie, och mittpunkt // (Ball radius and midpoint) private int xSteg, ySteg; //Bollens steglängd (Ball step-length) private int v, v0= 5; //Bollens hastighet (Ball velocity) Color color; public Boll(int storlek, int hastighet, Color color){ // (arg: size and velocity) this.color = color; r= storlek/10; //Bollens radie xSteg= ySteg= v= v0= hastighet; //Utgångshastighet (Start velocity) x0= r; //Placera bollen (Place the ball) y0= yMax; // --||-- } public void step(int width, int height) { xMax= width-1; //bollstorlek x-led yMax= height-1; //bollstorlek y-led //Hit kommer man var 100:e millisekund, anropas av timern if (x0-r <= 0){ //Är bollen i vänsterkanten? (Left border?) v++; //Öka hastigheten xSteg= v; //Flytta åt höger nästa gång (Move right next time) } else if (x0+r >= xMax){ //Är bollen i högerkant? (Right border?) v++; //Öka hastigheten xSteg= -v; //Flytta åt vänster nästa gång } if (y0-r <= 0 || y0+r >= yMax) //I över- eller underkant? ySteg= -ySteg; //Byt vertikal riktning x0+= xSteg; //Flyttar bollen horisontellt y0+= ySteg; //Flyttar bollen vertikalt if (x0 < r) //Om bollen hamna för långt å vänster x0= r; else if (x0 > xMax-r) //Hamnade bollen för långt åt höger? x0= xMax-r+1; if (y0 < r) //Hamnade bollen för långt upp? y0= r; else if (y0 > yMax-r) //Hamnade bollen för lånt ner? y0= yMax-r+1; } public void draw(Graphics g) { g.setColor(//Color.getHSBColor(60, 4, 100)); color); g.fillOval(x0-r, y0-r, 2*r, 2*r); //Rita bollen } } class BollPanel extends JPanel implements ActionListener{ List<Boll> bolls = new ArrayList<Boll>(); private Timer timer = new Timer(100, this); public BollPanel() { // addComponentListener(xyPlan); // //Ändringar av spelplanens storlek (If changing the frame-size) timer.start(); } public void actionPerformed(ActionEvent e){ int w = getWidth(); int h = getHeight(); for(Boll boll : bolls) { boll.step(w, h); } repaint(); } @Override public void paintComponent(Graphics g){ super.paintComponent(g); for(Boll boll : bolls) { boll.draw(g); } } public void addBoll(Boll boll) { bolls.add(boll); } /* ComponentListener xyPlan= new ComponentAdapter() { //Om spelplanens storlek ändras @Override public void componentResized(ComponentEvent e){ //In i metoden.. xMax= e.getComponent().getSize().width-1; //Ändra storleken yMax= e.getComponent().getSize().height-1; e.getComponent().requestFocus(); repaint(); //Måla upp det nya fönstret } }; */ }
Reply With Quote