willbend Skrevet 26. februar 2005 Del Skrevet 26. februar 2005 Kan noen vær så snill å skrive om koden slik at ballen spretter tilbake når det treffer det hvite rektangelet? import java.applet.*; import java.awt.*; public class dag extends Applet implements Runnable { Thread ball; Graphics bufferGraphics; Image offscreen; String status=""; int x=150; int y=150; int x_speed=3; int y_speed=3; int bar=200; public void start() { ball=new Thread(this); ball.start(); setBackground(Color.black); offscreen=createImage(700,400); bufferGraphics=offscreen.getGraphics(); } public void paint(Graphics g) { bufferGraphics.clearRect(0,0,700,400); bufferGraphics.setColor(Color.white); bufferGraphics.fillRect(1,bar,10,50); bufferGraphics.drawString(" "+status+" ",200,200); bufferGraphics.fillOval(x,y,50,50); bufferGraphics.setColor(Color.yellow); bufferGraphics.fillRect(1,1,700,10); bufferGraphics.fillRect(1,390,700,10); g.drawImage(offscreen,0,0,this); } public void update(Graphics g) { paint(g); } public boolean keyDown(Event e,int key) { if(key==Event.DOWN) { bar=bar+30; } else if(key==Event.UP) { bar=bar-30; } else { } return true; } public void dag() { status="Game Over"; repaint(); ball.stop(); } public void run() { while(true) { try{ Thread.sleep(5); x=x+x_speed; y=y+y_speed; if(x+50>700) { x_speed=-3; } if(x<0) { dag(); } if(y>350-10) { y_speed=-3; } if(y<0+10) { y_speed=+3; } repaint(); } catch(InterruptedException e){} } } } Lenke til kommentar
buskmann Skrevet 26. februar 2005 Del Skrevet 26. februar 2005 Hvis det er viktig for deg, så programmerer jeg for 200 kroner timen (svart). Ta kontakt, så får du kontonummer. Lenke til kommentar
Mr.Garibaldi Skrevet 26. februar 2005 Del Skrevet 26. februar 2005 Kan noen vær så snill å skrive om koden slik at ballen spretter tilbake når det treffer det hvite rektangelet? Du liker å lage spill... Hvis du ser hvordan du stoppet den ene firkanten i forrige spill, så skulle du forholdsvis enkelt kode om den slik at du kan bruke den her. Men i stedet for å stoppe, så snur du bare retningen... Lenke til kommentar
Lurifaxx1 Skrevet 26. februar 2005 Del Skrevet 26. februar 2005 Tror neppe han betaler deg 200 for det... Lenke til kommentar
buskmann Skrevet 26. februar 2005 Del Skrevet 26. februar 2005 Tror neppe jeg hadde brukt en time på det. Poenget mitt var at det er større sjanse for å få hjelp hvis man prøver først selv. Lenke til kommentar
zulo Skrevet 28. februar 2005 Del Skrevet 28. februar 2005 kall på denne metoden i din run metode under de andre testene..det finnes bedre måter å gjøre det på men det blir mer avansert. Du kunne jo f.eks lage noen klasser som representerer firkantobjektene i spillet ditt. private void sjekkhvitfirkantkrasj() { Rectangle ball = new Rectangle(x,y,50,50); Rectangle hvitfirkant = new Rectangle(1,bar,10,50); if( ball.intersects(hvitfirkant) ){ //snu x-retning x_speed *= -1; } } Lenke til kommentar
willbend Skrevet 6. mars 2005 Forfatter Del Skrevet 6. mars 2005 Her er appleten. Men det er et problem jeg ikke greier å løse. Når jeg trykker på "new game" så flytter ikke ballen på seg. Noen som skjønner hvorfor? Koden: import java.applet.*; import java.awt.*; import java.awt.event.*; public class dag extends Applet implements Runnable,ActionListener { Thread game; Graphics m1; Image offscreen; int x_pos=199; int y_pos=180; int x_speed=1; int y_speed=-1; int playerbar=-100; int score=0; String status=""; String player_name=""; Panel panel; Button newgame; Button startknapp; TextField felt; Label skriv_navn; public void paint(Graphics g) { m1.clearRect(0,0,400,350); m1.setColor(Color.yellow); // ramme m1.fillRect(10,10,380,2); m1.fillRect(10,340,382,2); m1.fillRect(200,10,2,330); m1.fillRect(10,10,2,330); m1.fillRect(390,10,2,330); // ballen m1.setColor(Color.white); m1.fillRect(x_pos,y_pos,5,5); // playerbar m1.fillRect(370,playerbar,2,50); // status m1.drawString(" "+status+" ",70,70); // playername & score m1.setColor(Color.yellow); m1.drawString(" "+felt.getText()+" | score: "+score+" ",215,25); repaint(); g.drawImage(offscreen,0,0,this); } public void update(Graphics g) { paint(g); } public boolean mouseMove(Event e,int x,int y) { playerbar=y; return true; } public void actionPerformed(ActionEvent e) { if(e.getSource()==startknapp) { panel.setVisible(false); game.start(); } if(e.getSource()==newgame) { newgame.hide(); status=""; x_pos=200; y_pos=200; x_speed=1; y_speed=-1; game.start(); } } public void init() { setLayout(null); game=new Thread(this); setBackground(Color.black); offscreen=createImage(400,350); m1=offscreen.getGraphics(); // GUI panel=new Panel(); panel.setLayout(new FlowLayout()); panel.setBounds(100,80,200,70); panel.setBackground(Color.white); newgame=new Button("New game"); newgame.setBounds(70,90,80,25); newgame.hide(); newgame.addActionListener(this); add(newgame); felt=new TextField(10); startknapp=new Button("Start game"); startknapp.addActionListener(this); skriv_navn=new Label("Enter your name:"); panel.add(skriv_navn); panel.add(felt); panel.add(startknapp); panel.setVisible(true); add(panel); } public void run() { while(true) { try { Thread.sleep(1); flyttball(); krasj(); } catch(InterruptedException e){} } } private void flyttball() { if(x_pos>384) { newgame.show(); status="GAME OVER"; game.stop(); repaint(); } if(y_pos==10) { y_speed=y_speed+1; } if(x_pos==13) { x_speed=x_speed+1; } if(y_pos>333) { y_speed=y_speed-1; } x_pos=x_pos+x_speed; y_pos=y_pos+y_speed; repaint(); } private void krasj() { Rectangle ball=new Rectangle(x_pos,y_pos,5,5); Rectangle player_bar=new Rectangle(370,playerbar,2,50); if(ball.intersects(player_bar)) { x_speed=x_speed*-1; score++; } } } Lenke til kommentar
zulo Skrevet 8. mars 2005 Del Skrevet 8. mars 2005 Fordi du bruker game.stop() også game.start() igjen for å starte tråden..dette er usikkert og du får en exception når du prøver å starte tråden igjen. Istedenfor å stoppe og starte tråden som et middel for å stoppe spillet bør du opprette en boolean variabel f.eks boolean spill og lar denne variabelen bestemme om tråden skal gjøre spill-relaterte oppgaver eller ikke...(kalle på krasj() og flyttball() metodene. Tråden vil da sjekke om spill variabelen er true og hvis den er true så skal den kalle på krasj() og flyttball(), altså spillet er igang, men hvis spill variabelen er false hopper den bare over..altså skjer ingenting. Så du må sette spill = true; når start knappen og new game knappen blir trykket inn..og spill = false; istedenfor game.stop() public void run() { while(true) { try { Thread.sleep(1); //spillet er igang så gjør beregningene.. if(spill){ flyttball(); krasj(); } } catch(InterruptedException e){} } } Slik kan du bruke samme tråden hele tiden, men du lar tråden sjekke hvilke variabler som gjelder, og da kan du gjøre forskjellige ting ettersom hvilken "mode" spillet er i..du kan f.eks lage en intro mode eller meny mode eller pause mode ved å bare sjekke hvilke variabler som er satt. Hvis du har en INTRO variabel som er true f.eks kan du tegne opp ting som ikke blir tegnet opp i selve spillet..osv osv.. Lenke til kommentar
MailMan13 Skrevet 8. mars 2005 Del Skrevet 8. mars 2005 Å stoppe en tråd med stop() er regnet for å være farlig siden tråden kan ha vert midt i en metode og forlatt et objekt i ulovlig tilstand, hvis man f.eks dreper tråden midt i en tegneoperasjon kan man sette et eller annet objekt i Java2D rammeverket i en ulovlig tilstand og krasje hele JVM'et. Bruk, som zulo sier, variabler til å bestemme tilstander og la tråden kjøre ferdig i stedet for å drepe den når du vil stoppe. stop(), suspend() og resume() er ikke trygge. Lenke til kommentar
willbend Skrevet 10. mars 2005 Forfatter Del Skrevet 10. mars 2005 Funker nå, takk for hjelpa Lenke til kommentar
willbend Skrevet 15. mars 2005 Forfatter Del Skrevet 15. mars 2005 Jo takk, hadde tenkt å send inn spillet til det her Men fant ut at fristen var 28. februar Lenke til kommentar
CMOTDibbler Skrevet 19. mars 2005 Del Skrevet 19. mars 2005 (endret) Åj, jeg har også et pingpong spill liggende hyperPong Det ligger også på siden min hvor jeg legger ut andre spill. http://dyblah.zoomcities.com Endret 22. mars 2005 av CMOTDibbler Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå