10. marts 2003 - 19:07Der er
2 kommentarer og 1 løsning
primitiv spil
Hej alle! Jeg kom til at klikke på svar da jeg skrev min kommentar!! Jeg er nybegynder i java, og har fået en opgave at programere et simlpelt spil, f.eks. et skib(eller et objekt) der skal kunne bevære sig, eller lign. Er der nogen der kan hjælpe mig med at finde en sourse kode et eller andet sted på nettet. tak PS: det er ikke en opgave som jeg får karakter for, men er hænger sammen med en læringsproces i Java. det er ikke mening at jeg kopire fra et andet spil, men at se hvordan man strukturerer et sådan program. Tak til dem der har tidligere skrevet kommentar til. Max
Her er en prototype på et spil jeg engang lavede til min 3 årige søn, så han kunne lære at bruge musen. Det færdige spil fylder for meget, så du kan få prototypen for dobbeltklik-versionen (den fylder nu altså også en del).
Struktureringen af programmet er ikke et udtryk for hvordan "man gør". Det er udelukkende et forsøg for at se hvad jeg kunne lave med Java inden jeg gik igang med det endelige program.
Spillet går ud på at fange en figur med musen ved at dobbeltklikke på den(meget simpelt). Hastigheden på figuren kan ændres, og ligeledes kan dobbeltklikket ændres i hastighed, men de kan i dette program kun ændres i selve koden.
Koden kan compiles og benyttes direkte som den er vist her, men da jeg afprøvede den lige inden afsendelse hertil var valideringen på hvornår figuren ryger ud over spilledpladen ikke helt stabil, men det kan du jo prøve at rette op på selv.
Bevægelses-algoritmen er ikke supergod, for figuren bevæger sig i små lige linier, men det færdige program med lydeffekter, farver, og fyrværkeri har gjort min søn til en haj med musen, så algoritmen har ikke være en betydende faktor til mit brug. I det færdige program er der mulighed for at vælge at køre uden klik, med enkelt klik eller dobbeltklik, og det har være rigtig god træning for ham.
Håber du kan bruge det til noget, for jeg tror der er mange programmerings-finesser til en nybegynder i denne kode.
public class PrimitivtSpil extends JFrame implements ActionListener { private Random r = new Random(); private JButton startButton; private Spilleplade spilleplade;
public PrimitivtSpil() { setSize(800,600); setTitle("Fang teksten");
public void actionPerformed(ActionEvent event) { //her sættes hastigheden stort tal = langsom spilleplade.startFiguren(20); }
//inner class public class Spilleplade extends JPanel { private JLabel figurLabel;//figuren der vises private int antalFanget;//hvor mange er der fanget ialt (max 5) private int hastighed;//hvor hurtigt skal figuren hoppe rundt private Traad figurTraad;//tråden der starter figuren private int x;//figurens placering på x-aksen private int y;//figurens placering på y-aksen
//til dobbeltklik-administration private boolean andetKlik = false; private long tid = 0; private long dobbeltKlikTid = 600;//her kan tiden for dobbeltklik ændres private long nytid = 0;
public void startFiguren(int hastighed) { //nulstil variabler til dobbeltklik andetKlik = false; tid = 0; nytid = 0;
//tråden vil ikke dø ved ét kald til interrupt if(figurTraad != null) { while(figurTraad.isAlive()) figurTraad.interrupt(); }
antalFanget = 0;//nulstil antal fangede figurer placeringAfFangedeFigurer = 10;//nulstil placering af figurer removeAll();//rense vinduet når der startes en ny figur //aktivFigur = figurnavn;
//hastigheden der er valgt under indstillinger this.hastighed = hastighed;
//initialisering af figuren der skal vises figurLabel = new JLabel("Fang mig"); figurLabel.setBounds(getWidth()/2,getHeight()/2, 60, 20); figurLabel.addMouseListener(new MuseLytter()); add(figurLabel); update(getGraphics());
figurTraad = new Traad(); figurTraad.start(); }//startFiguren
//bruges inde i tråden public Graphics getThisGraphics() { return this.getGraphics(); }
private class Traad extends Thread { public void run() { Rectangle r = figurLabel.getBounds();
x = (int)r.getX(); y = (int)r.getY();
int xVandring = 0; int yVandring = 0;
boolean xFortegn = false;//true = læg til false = træk fra boolean yFortegn = false;//true = læg til false = træk fra
try { while(antalFanget < 5) { //hvor langt skal der gåes i hver retning if(xVandring == 0) { //gå dette antal i x-retning xVandring = randomNumber(0, 100); //sørg for at den ikke forsvinder ud til venstre if(xVandring > x ) xFortegn = true; else //sørg for at den ikke forsvinder ud til højre if(xVandring + x > 600) xFortegn = false; else xFortegn = getRandomBoolean(); } if(yVandring == 0) { //gå dette antal i y-retning yVandring = randomNumber(0, 100); //sørg for at den ikke forsvinder oven ud if(yVandring > y ) yFortegn = true; else //sørg for at den ikke forsvinder under ud if(yVandring + y > 450) yFortegn = false; else yFortegn = getRandomBoolean(); }
//kør til højre if(xFortegn) x++; //kør til venstre else x--; //kør ned if(yFortegn) y++; //kør op else y--;
figurLabel.setBounds(x,y,60,20); sleep(hastighed + 1);//kan ikke være nul
//tæl ned til 0 og skift retning xVandring--; yVandring--; }//while } catch(InterruptedException e) { System.out.println("InterruptedException in thread"); } }//run }//class Traad
public class TidsTraad extends Thread { public void run() { try { sleep(dobbeltKlikTid); andetKlik = false; nytid = 0; tid = 0; } catch(InterruptedException e) { System.out.println("InterruptedException in thread"); } } }
//Til musen public class MuseLytter extends MouseAdapter { public void mouseReleased(MouseEvent e) { if(andetKlik) { //stop når der er fanget 5 figurer if(antalFanget == 4) stopFigur();
//lav en figur og sæt den op i hjørnet JLabel fangetFigurLabel = new JLabel("Øv"); tilfoejLabel(fangetFigurLabel);
antalFanget++;
//start figuren et tilfældigt sted når den er fanget if(figurLabel != null) { x = randomNumber(0, 650); y = randomNumber(0, 450); }//if }//if andet klik }//mouseReleased
public void mousePressed(MouseEvent e) {
if(tid == 0) { Date date = new Date(); tid = date.getTime(); andetKlik = false; TidsTraad tt = new TidsTraad(); tt.start(); return; }
mange tak, jeg prøver at komme videre, både ved at læse fra web siderne, og at studere ng-kms koder som jeg mener vil der være et meget godt start og giver et godt overblik over opbygning af sådan et spil.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.