Gå til innhold

Et lite javaspill med kildekode


Anbefalte innlegg

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:

 

post-9129-1191010869_thumb.png

 

 

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 av Ueland
Lenke til kommentar
Videoannonse
Annonse

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... :thumbup:

 

Fikk til gravitasjonen... Oppdaterte .zipfil.

SpaceMission.zip

Endret av LostOblivion
Lenke til kommentar

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å)

post-13752-1191229372_thumb.jpg

post-13752-1191229378_thumb.jpg

post-13752-1191229384_thumb.jpg

Lenke til kommentar
  • 2 uker senere...

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. :p

Endret av TwiiK
Lenke til kommentar

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. :p 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

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

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
  • 1 måned senere...

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...