Results 1 to 3 of 3
- 11-29-2009, 06:31 PM #1
Member
- Join Date
- Nov 2009
- Posts
- 1
- Rep Power
- 0
need help with a simple game im making
I am making a game that is similar to a game called ''tiger kycklingstuds'' from the site extrude.se, But more simple.
My problem is that it works fine when I only use one ball in the air, but i can't figure out how to put in several balls like in the game that i mentioned.
I appreciate if you could help me.
This is the code that I have written so far , it's in swedish but I hope that you will understand anyway. If not I will try to translate.
Java Code:// Klassen TennisBana import java.awt.*; import java.awt.event.*; import javax.swing.*; class TennisBana extends JPanel implements ActionListener{ // Actionperformed kommer att anropas var 40 ms. Vi skriver this för // att metoden finns i den egna klassen. private Timer klocka=new Timer(40,this); private JLabel visaPoäng; // för att visa poäng private JLabel visaPoängliv; private int poäng; // aktuella poäng private int poängliv; private int xMax; // högsta tillåtna x-koordinat private int yMax; // högsta tillåtna y-koordinat private int radie; // bollen radie private int x; // x-koordinat, bollens mittpunkt private int y; // y-koordinat, bollens mittpunkt private int vx; // bollens fart i x-led private int vy; // bollens fart i y-led private int xSteg; // bollens steglängd i x-led private int ySteg; // bollens steglängd i y-led private int racket; // racketens vänstra kant private int längdR; // racketens längd private int stegR; // racketens steglängd // Konstruktorn sätter storlek och bakgrundsfärg public TennisBana(){ setPreferredSize(new Dimension(500,400)); setBackground(Color.white); } // Metoden start anropas när vi väljer ett nytt spel public void start(JLabel p,JLabel pl){ visaPoäng=p; visaPoängliv=pl; // Tar reda på panelens storlek xMax=getSize().width; yMax=getSize().height; // Egenskaper hos boll och racket bestäms radie=15; längdR=80; stegR=15; nollställ(); // Lyssnar på tangentbordet. Math.max och Math.min används för att // se till att racketens värde inte blir för stort eller för litet. // Metoden max väljer det största av de två värdena och min det minsta. addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if(e.getKeyCode()==KeyEvent.VK_LEFT){ // Kontroll att vi befinner oss inom spelplan racket=Math.max(0, racket-stegR); } else if(e.getKeyCode()==KeyEvent.VK_RIGHT){ // Kontroll att vi befinner oss inom spelplan racket=Math.min(xMax-längdR, racket+stegR); } } }); // Lyssnar på storleksändringar. Om fönstrets storlek har ändrats, // hämtar vi den nya storleken och tilldelar xMax och yMax nya // värden. Därefter ser vi till att fönstret ritas om med repaint. addComponentListener(new ComponentAdapter(){ public void componentResized(ComponentEvent e){ xMax=e.getComponent().getSize().width; yMax=e.getComponent().getSize().height; e.getComponent().requestFocus(); repaint(); } }); } // Här nollställs poängen, starthastighet och läge hos bollen bestäms // och läget för utplacering av racket ges. private void nollställ(){ xSteg=vx=2; ySteg=vy=5; x=xMax/8; y=radie+120; } private void nytt(){ poäng=0; visaPoäng.setText(" 0"); poängliv=0; visaPoängliv.setText(" 0"); xSteg=vx=2; ySteg=vy=5; x=xMax/8; y=radie+120; racket=xMax/2-längdR/2; } public void startaSpel(){ { klocka.start(); } } public void stoppaSpel(){ klocka.stop(); } public void nyttSpel(){ stoppaSpel(); nytt(); startaSpel(); } // anropas av timern var 40:e ms public void actionPerformed(ActionEvent e){ // Här undersöks bollens läge i y-led. Först testar vi om den nått // den nedre kanten if(y+radie>=yMax-10){ // Här testas om bollen missar racketen if(x<racket || x>racket+längdR){ Toolkit.getDefaultToolkit().beep(); visaPoäng.setText(" " + String.valueOf(++poäng)); nollställ(); if(poäng>=3){ JOptionPane.showMessageDialog(null, "Du förlorade"); stoppaSpel(); } } // Bollen byter rörelseriktning oavsett om det är träff // eller inte. ySteg=-vy; } // Här byter bollen riktning om den når den övre kanten av spelplanen else if(y-80<=0){ ySteg=vy; } // Här byter bollen riktning i x-led om den träffar någon lodrät vägg if(x-60<=0 || x+radie>=xMax){ xSteg=-xSteg; } // Här ges bollen nya x- och y-koordinater x+=xSteg-1; y+=ySteg; // En justering om delar av bollen har råkat komma utanför spelplanen sker if(y<radie){ y=radie; } if (x>400 && y>150) { visaPoängliv.setText(" " + String.valueOf(++poängliv)); nollställ(); } else if(y>yMax-radie){ y=yMax-radie; } if(x<radie){ x=radie; } else if(x>xMax-radie){ x=xMax-radie; } // Panelen ritas om repaint(); } // Ritar bakgrundsfärg samt boll och racket public void paintComponent(Graphics g){ super.paintComponent(g); g.fillRect(0,150,60,250); g.fillRect(420,150,100,250); g.setColor(Color.yellow); g.fillOval(x-radie,y-radie,2*radie,2*radie); g.setColor(Color.yellow); g.fillRect(racket,yMax-10,längdR,yMax); } }Java Code:import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Tennis extends JFrame{ // Ett nytt objekt av typen Tennisbana skapas, vilket innebär att dess // konstruktor anropas private TennisBana bana=new TennisBana(); private JLabel poäng; private JLabel poängliv; private JPanel p; private JButton[] knapp=new JButton[4]; private String[] knappText={"Nytt spel","Paus","Fortsätt","Avsluta"}; public Tennis(){ super("Tennis"); poäng=new JLabel(" 0",JLabel.CENTER); poängliv=new JLabel(" 0",JLabel.CENTER); poäng.setFont(new Font("Arial", Font.BOLD, 30)); poängliv.setFont(new Font("Arial", Font.BOLD, 30)); p=new JPanel(); Lyssnare minLyssnare=new Lyssnare(); // Här skapar vi de fyra knappobjekten, placerar våra strängar // i dessa, kopplar en lyssnare till varje samt placerar ut // dem i en panel for(int i=0; i<knapp.length; i++){ knapp[i]=new JButton(); knapp[i].setText(knappText[i]); knapp[i].addActionListener(minLyssnare); p.add(knapp[i]); } // Komponenter och paneler placeras i fönstret Container c=getContentPane(); c.add(poäng,"West"); c.add(poängliv, "East"); c.add(bana,"Center"); c.add(p,"South"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); pack(); bana.start(poäng,poängliv); } class Lyssnare implements ActionListener{ public void actionPerformed(ActionEvent ae){ // requestFocus används för att flytta fokus till vår tennisbana. // Vi måste kunna påverka vad som händer där då spelet har börjat. // Beroende på vilken knapp vi har använt, anropas olika metoder. bana.requestFocus(); if(ae.getSource()==knapp[0]){ bana.nyttSpel(); } else if(ae.getSource()==knapp[1]){ bana.stoppaSpel(); } else if(ae.getSource()==knapp[2]){ bana.startaSpel(); } else{ System.exit(0); } } } }Java Code:// Tangentbordstennis public class TennisStart{ public static void main(String[] arg){ Tennis tennisStart=new Tennis(); tennisStart.setVisible(true); } }
-
You have a single x and a single y to represent the location of the single ball. To have multiple balls, you'll need an arraylist of java.awt.Point in place of the x and y, and you'll have to iterate through this list in your program logic and in your paintComponent.
- 11-30-2009, 10:36 AM #3
Member
- Join Date
- Nov 2009
- Posts
- 7
- Rep Power
- 0
I dont understand Swedish but Ill have a swip at it...
Id be inclined to have ball as a seperate object that you just call ball.position to return its coorinates. Hold the balls in an array, last i looked object serialisation/deserialisation in an arraylist is a slower than a native array.
I would create all balls you are required to use during the game up front and just set the extra's to invisible. That way you not going to slow the game down mid-flight to create new objects (balls).
Put each ball in its own thread the sync the threads (I think this will need to be done).
Its been a while since Ive done this stuff but thats my 2 cents....
Similar Threads
-
Simple Game example
By mayuresh34 in forum CLDC and MIDPReplies: 1Last Post: 10-08-2009, 01:21 PM -
Simple Dodging Game
By Tb0h in forum New To JavaReplies: 1Last Post: 07-18-2009, 02:30 AM -
making simple java environment
By daanlaan in forum New To JavaReplies: 0Last Post: 07-07-2009, 12:22 AM -
Making simple hiscore over internet
By jurka in forum NetworkingReplies: 3Last Post: 01-21-2009, 03:23 PM -
Simple Question Making a Variable Accessable throught the code
By 2o2 in forum New To JavaReplies: 1Last Post: 10-02-2008, 03:06 AM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks