Ueland Skrevet 28. september 2007 Del Skrevet 28. september 2007 (endret) Hepp, Dette er kun kode for leking/læringsøyemed og ikke noe jeg akter å gjøre "perfekt" Har suslet noen timer med et kjapt og enkelt lite spill, jeg gjør det enkelt og legger ut hele koden her i tilfelle noen ønsker å leke litt med koden og eventuelt lære noe nytt i samme slengen Ting som bør gjørs bedre: -Paint metoden gjør for mye som ikke har med grafikk å gjøre -Java avslutter ikke når man "X"er seg ut, enkel fiks det. -Enkelte ganger "henger" spillet seg og man kommer ikke videre på neste nivå Koden ligger både i zip og skjult her. Klikk for å se/fjerne innholdet nedenfor /* * Bilder hentet fra: * http://www.iconarchive.com/category/game/arcade-saturdays-icons-by-mad-science.html */ import java.awt.*; import javax.swing.*; import java.awt.event.*; /* * Hovedklassen, bruker keyListener for å "overvåke" tastaturbevegeler */ public class test extends JComponent implements KeyListener { private boolean started; private int playerLocationX = 0; private int playerLocationY = 0; private int maxX; private int maxY; private int level = 0; private int robots = 4; private int[] robotsX; private int[] robotsY; private int robotsLeft; /* * Programstarter */ public static void main(String[] args) { new test(); } /* * Hovedklasse */ public test() { //start med å sjekke/sette div verdier checkStatus(); //Opprett ramme JFrame frame = new JFrame("Uelands robotjakt v 0.1"); frame.addKeyListener(this); //lag en komponent med custom "painter" frame.getContentPane().add(this); frame.getContentPane().setBackground(Color.black); //Vis GUI int frameWidth = 800; int frameHeight = 600; frame.setSize(frameWidth, frameHeight); frame.setVisible(true); repaint(); } /* * "Resetter spillet" om nok roboter er fjernet */ public void checkStatus() { if(this.robotsLeft < 2) { this.level++; this.started = false; this.robots = (4 * this.level); this.robotsX = new int[this.robots]; this.robotsY = new int[this.robots]; this.robotsLeft = robots; } } /* * Nedjuster "level" om man feiler på nivået man er på */ public void levelFailed() { this.robotsLeft = 0; if(this.level < 0) { this.level = this.level - 2; } else { this.level = 0; } this.started = false; this.checkStatus(); } /* * Disse 3 metodene kalles ved tastaturhendelser, * bruker kun "når tast trykkes" for å få ting * til å bevege seg. */ public void keyPressed(KeyEvent e) { if(e.getKeyCode() >36 && e.getKeyCode() < 41) { this.moveEverything(e.getKeyCode()); } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void moveEverything(int direction) { switch(direction) { case 38: //Gå opp movePlayerUp(); break; case 40: //gå ned movePlayerDown(); break; case 37: //Venstre movePlayerLeft(); break; case 39: //Høyre movePlayerRight(); break; default: // } this.checkStatus(); repaint(); } /* * Flyttemetoder, flytter brukeren 20 pixler i ønsket retning * Merk at det gjøres sjekker for å unngå at brukeren går utenfor * skjermen. */ public void movePlayerRight() { if(this.playerLocationX >= (this.maxX - 20)) { this.playerLocationX = (this.maxX - 20); } else { this.playerLocationX += 10; } } public void movePlayerDown() { if(this.playerLocationY >= (this.maxY - 20)) { this.playerLocationY = (this.maxY - 20); } else { this.playerLocationY += 10; } } public void movePlayerUp() { if(this.playerLocationY < 10) { this.playerLocationY = 0; } else { this.playerLocationY -= 10; } } public void movePlayerLeft() { if(this.playerLocationX < 10) { this.playerLocationX = 0; } else { this.playerLocationX -= 10; } } /* * paint metoden kalles for hver gang skjermen * må "tegne" bildet på nytt. */ public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; //Sett skriftstørrelse, type & farge Font font = new Font("Serif", Font.PLAIN, 24); g2d.setFont(font); g2d.setColor(Color.green); //Tegn opp roboter om spillet ikke har startet if(this.started == false) { this.maxX = getWidth(); this.maxY = getHeight(); this.started = true; int i = 0; this.playerLocationX = (int)(getWidth()/2); this.playerLocationY = (int)(getHeight()/2); g2d.drawString("VELKOMMEN! (level "+this.level+")", (this.playerLocationX -50), this.playerLocationY); //Lag roboter på tilfeldige steder while(i < this.robots) { this.robotsX[i] = (int)(Math.random()*getWidth()); this.robotsY[i] = (int)(Math.random()*getHeight()); g2d.drawImage(new ImageIcon("enemy.gif").getImage(), this.robotsX[i], this.robotsY[i], Color.black, null); i++; } } else { //Spillet er i gang, beveg roboter int i = 0; while(i < this.robots) { //Rekalkuler ny robotplassering int thisX = this.robotsX[i]; int thisY = this.robotsY[i]; if(thisX > 0 && thisY > 0) { if(thisX < this.playerLocationX) { thisX = thisX + 5; } else { thisX = thisX - 5; } if(thisY < this.playerLocationY) { thisY = thisY + 5; } else { thisY = thisY - 5; } for(int j=0; j<this.robots; j++) { if(this.robotsX[j] > -1 && this.robotsY[j] > -1 && i != j) { //Sjekk for robotkollisoner if(this.checkCloseness(this.robotsX[j], thisX) && this.checkCloseness(this.robotsY[j],thisY)) { thisX = -1; thisY = -1; this.robotsLeft--; break; } //Klarer roboten å angripe spiller? if( this.checkCloseness(thisX, this.playerLocationX) && this.checkCloseness(thisY, this.playerLocationY) ) { this.levelFailed(); break; } } } this.robotsX[i] = thisX; this.robotsY[i] = thisY; //tegn robot if(thisY > 0 && thisX > 0) { g2d.drawImage(new ImageIcon("enemy.gif").getImage(), this.robotsX[i], this.robotsY[i], Color.black, null); //g2d.drawString(""+i, this.robotsX[i], this.robotsY[i]); } } i++; } } g2d.drawString("Roboter igjen: "+this.robotsLeft, 20,20); //Oppdater spiller g2d.drawImage(new ImageIcon("me.gif").getImage(), this.playerLocationX, this.playerLocationY, Color.black, null); } /* * Sjekker 2 lokasjoner og ser om de er i nærheten av hverandre * tar imot 2 koordinater som skal sjekkes opp og returnerer true for * i nærheten, og false for ikke i nærheten */ public boolean checkCloseness(int one, int second) { if(one == -1 || second == -1) { return true; } if(one == second) { return true; } int tmp; tmp = (one - second); if(tmp < 0) { tmp = (second - one); } if(tmp < 26) { return true; } return false; } } Skjermdump: Hvordan spille Enkelt. Unnslipp "robotene", beveg karakteren "din" med piltastene og robotene følger etter mot deg, de ødelegges ved at de kolliderer i hverandre. Når det bare er en igjen går du videre til nytt nivå med flere roboter. test.zip Endret 28. september 2007 av Ueland Lenke til kommentar
LostOblivion Skrevet 30. september 2007 Del Skrevet 30. september 2007 (endret) Har en jeg og. Driver å styrer med denne for tiden. Er vel kanskje langt fra ferdig. Jeg kunne tenkt meg å lære meg hvordan man får romskipet til å kollidere med andre objekter på en mer realistisk måte, og få landingsunderstellet til å oppføre seg realistisk, men fjæring etc. Legger ved .zipfil. Med Windows linjeskift. Oja, også var det hvordan man styrer da. WASD flytter "kamera", XZ zoomer "kamera", piltaster kontrollerer mainthrust og rotasjonsthrustere, ctrl+piltaster kontrollerer translationthrustere. G for understell. Jada, det går an å lande, bare ta det forsiktig... Tror jeg har gjort noe galt med graviteringsutregningen da, virker som noe ikke funker helt som det skal...selv om man øker gravCoeff... Fikk til gravitasjonen... Oppdaterte .zipfil. SpaceMission.zip Endret 30. september 2007 av LostOblivion Lenke til kommentar
Mr.Garibaldi Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 Morsomt.. Fant noen feil ved spilling som kan være noe å se på. Første, se Bug1.jpg, er at antall roboter ikke ble oppdatert når jeg fikk "drept" 2 på en gang. Andre, bug2-1.jpg, oppstod etter bug1, hvor jeg ikke ble drept av den siste roboten selv om jeg stod oppå den. Feilmeldingen som ble spyttet ut i kommandolinjen følger med. (Har dessverre ikke tid til å titte på koden nå) Lenke til kommentar
TwiiK Skrevet 9. oktober 2007 Del Skrevet 9. oktober 2007 (endret) Knall. Har programmering grunnkurs på NTNU nå og neste år vil jeg få Objektorientert Programmering hvor vi skal lage spill. Laster ned og ser på spillene deres for kanskje å få litt ekstra interesse for java. Nå gjør jeg liksom bare det helt nødvendige for å stå. Edit: Ueland, ditt spill var godt kommentert og på et nivå jeg kan forstå. Kommer til å se litt på dette og kanskje bruke det som sandkasse for et spill jeg lager selv. LostOblivion, ditt spill er nok en smule (alt for) avansert for meg for øyeblikket, men selve spillet var veldig tøft. Endret 9. oktober 2007 av TwiiK Lenke til kommentar
LostOblivion Skrevet 10. oktober 2007 Del Skrevet 10. oktober 2007 Takk! Tror jeg... :!: Har bare drevet på med Java et år, så med litt innsats og god viljestyrke, vil du nok kunne lage sånne du og. Begynte selv på informatikk på UiO i år, og lønte seg å kunne litt Java fra før av. Nesten bare slack. Lykke til! Lenke til kommentar
TwiiK Skrevet 13. oktober 2007 Del Skrevet 13. oktober 2007 Sliter masse med å lage spill i java. Har dere noen sider, communities, forum eller lignende med tutorials og hjelp angående det å lage spill i java? Klarer jo bare såvidt å få til en slik key listener greie og vet aldri hva jeg skal importere av pakker og tull. Dessuten synes jeg koden min blir 100 ganger lengre og så sykt mye mer rotete enn det jeg er vant til fra Blitz Basic som jeg brukte litt for mange år siden. Lenke til kommentar
Mr.Garibaldi Skrevet 13. oktober 2007 Del Skrevet 13. oktober 2007 Google is your friend...... Men det hjelper lite hvis du sliter med det grunnleggende i java. Ta en titt på søket over, det var en del forskjellige tutorials der, men hvor grunnleggende de er vet jeg ikke... Du kan jo se hvordan det går og heller lage en ny tråd her når du setter deg fast... (Husk å bruke [_code_]<din kode her>[_code_] (uten '_') så det blir letter for oss å lese!) Lenke til kommentar
TwiiK Skrevet 13. oktober 2007 Del Skrevet 13. oktober 2007 Du kom faktisk med Google is your friend, at du turte. Jeg har googlet meg blå, bare så det er sagt. Letet litt rundt på fagsidene til OO-programmering på NTNU og fant en del ting. Kommet meg i gang nå. Jeg mener egentlig jeg har kontroll på det grunnlegende i java, men er basicen når det gjelder spill som f.eks grafikk, kontroll og lyd jeg slet med. Tror jeg har sånn halvveis taket på det nå. Her er det jeg fant dersom noen andre er interessert: Enkel spilldemo, hvordan starte, vise grafikk, tasturstyring og animasjon. Start her! Lenke til kommentar
LostOblivion Skrevet 13. oktober 2007 Del Skrevet 13. oktober 2007 (endret) Du burde sjekke ut BufferedImage klassen. Jeg pleier bare å tegne til et BufferedImage instans og slenge den til en JPanel som ikon. Så drar du bare på med repaint funksjonen til JPanel hver gang du skal oppdatere ikonet. Funker fett. Endret 13. oktober 2007 av LostOblivion Lenke til kommentar
2bb1 Skrevet 3. desember 2007 Del Skrevet 3. desember 2007 Hvordan får jeg spilt disse spillene dere legger ut? Lenke til kommentar
LostOblivion Skrevet 3. desember 2007 Del Skrevet 3. desember 2007 Du kompilerer dem. Installer sun-java-jdk1.6-pakken, eller last ned til Windows fra http://www.sun.com. Kompiler og kjør spillene med javac og java henholdvis. Lykke til! 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å