poniedziałek, 3 sierpnia 2015

Programowanie gry samolot ( Java - kod źródłowy do pobrania)

Programowanie w Javie wczoraj:

- programowanie poniższej gry: 2godz.20 min

Ta gra miała sprawdzić przydatność nauki programowania z youtuba (pisałem o tym->nauka programowania z youtuba ). Co prawda gra nie jest ukończona ale nie sprawiało mi najmniejszych problemów dojście do tego etapu. Oczywiście czeka mnie jeszcze sporo pracy by ta gra wyglądała jako tako ale wydaje się, że wszystko jest na dobrej drodze.
Najwięcej uwagi zwracałem na czytelność kodu i mam wrażenie, że to się udało. Zresztą poniżej sami możecie ocenić jak to wygląda.





Poniżej kod źródłowy:

Klasa Gra


import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.util.Random;


public class Gra extends Applet implements Runnable, KeyListener
{
    private Image img;
    private Graphics gg;
    private Samolot samolot;
    private Przeszkody []przeszkody=new Przeszkody[8];
    private Image tlo;
   

    @Override
    public void init() {
        setSize(500, 600);
        addKeyListener(this);
      
    }

    @Override
    public void start() {
       
        samolot=new Samolot(100,100);
        for(int i=0; i        {
            Random r= new Random();
           
            przeszkody[i]=new Przeszkody(r.nextInt(450),-(r.nextInt(600)));
        }
       
        Thread t= new Thread(this);
        t.start();
       
    }

    @Override
    public void update(Graphics g) {
        if(img==null)
        {
            img=createImage(this.getSize().width, this.getSize().height);
            gg=img.getGraphics();
        }
       
        gg.setColor(getBackground());
        gg.fillRect(0, 0, getSize().width, getSize().height);
        gg.setColor(getForeground());
        paint(gg);
       
        g.drawImage(img, 0, 0, this);
       
    }

    @Override
    public void paint(Graphics g) {
        samolot.paint(g);
         for(int i=0; i        {
        przeszkody[i].paint(g);
        }
       
       
        
      
    }

    @Override
    public void run() {
       
        while(true){
            samolot.update(this);
             for(int i=0; i        {
            przeszkody[i].update(this, samolot );
        }
           
           
           
            repaint();
            try {
                Thread.sleep(20);
            } catch (InterruptedException ex) {}
        }
    }
   
     @Override
    public void keyPressed(KeyEvent e) {
       
        switch(e.getKeyCode())
        {
            case KeyEvent.VK_LEFT:
                samolot.ruchLewo();
                break;
            case KeyEvent.VK_RIGHT:
                samolot.ruchPrawo();
                break;
            case KeyEvent.VK_UP:
                samolot.ruchGora();
               
                break;
            case KeyEvent.VK_DOWN:
                samolot.ruchDol();
                break;   
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

  

    @Override
    public void keyReleased(KeyEvent e) {
       
        samolot.pozWyjsciowa();
    }
   
   
   
}


Klasa Samolot


import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;


public class Samolot {
   
    int x;
    int y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getSrednica() {
        return srednica;
    }

    public void setSrednica(int srednica) {
        this.srednica = srednica;
    }
    int srednica=50;
    Image samolot1, samolot2, samolot3, samolot;

    public Samolot(int x, int y) {
      
            this.x=x;
            this.y=y;
         try {   
            samolot1=ImageIO.read(new File("samolot1.png"));
            samolot2=ImageIO.read(new File("samolot2.png"));
            samolot3=ImageIO.read(new File("samolot3.png")); 
            samolot=samolot1;
        } catch (IOException ex) {}
       
       
    }
   
   
   
    public void update(Gra gra)
    {
        if(x+srednica>=gra.getWidth())
        {
            x= gra.getWidth()-srednica;
        }
        else if(x<=0)
        {
            x=0;
        }
      
        if(y<0 br="">        {
            y=0;
        }
        else if(y+srednica>=gra.getHeight())
        {
            y=gra.getHeight()-srednica;
        }
        else
        {
            y++;
        }
       
    }
   
    public void paint(Graphics g )
    {
//        g.fillOval(x, y, srednica, srednica);
        g.drawImage(samolot, x, y, null);
       
    }

    void ruchLewo() {
        x-=8; 
        samolot=samolot2;
    }

    void ruchPrawo() {
        x+=8;
        samolot=samolot3;
    }

    void ruchGora() {
        y-=8;
        samolot=samolot1;
    }

    void ruchDol() {
        y+=8;
        samolot=samolot1;
    }

    void pozWyjsciowa() {
        samolot=samolot1;
    }
      
}


klasa Przeszkody:


import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;


public class Przeszkody {
   
    private int x, y;
    private int srednica=50;
    private Image ogien;
   
    public Przeszkody(int x, int y)
    {
        this.x=x;
        this.y=y-srednica;
       
        try {
            ogien= ImageIO.read(new File("ogien.png"));
        } catch (IOException ex) {}
    }
   
    public void update(Gra gr, Samolot samolot)
    {
        if(y>=gr.getHeight())
        {
            y= 0-srednica;
        }
        else
        {
            y++;
            y++;
           
        }
        sprKolizja(samolot);
    }
   
    public void sprKolizja(Samolot samolot)
    {
        int samolotX=samolot.getX();
        int samolotY=samolot.getY();
        int promienSamolot=samolot.getSrednica()/2;
       
        int a= samolotX-x;
        int b=samolotY-y;
        int sumaProm= promienSamolot+srednica/2;
       
        double c=Math.sqrt((double)(a*a)+(double)(b*b));
        if(c        {
            samolot.setX(300);
            samolot.setY(600);
        }
    }
   
    public void paint(Graphics g)
    {
//        g.fillOval(x, y, srednica, srednica);
        g.drawImage(ogien, x, y, null);
    }
   
}




 Gra samolot do pobrania:

kod źródłowy




1 komentarz:

  1. Niby gra jest bardzo prosta. Można wręcz powiedzieć, że banalna. Jednak na początku drogi z programowaniem takie kody nie są niczym łatwym. Warto nie przepisywać bezmyślnie kodów, lecz je dokładnie analizować i zastanawiać się dlaczego jest tak, a nie inaczej. Wtedy najwięcej wyciągniemy z nauki

    OdpowiedzUsuń