Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //LabApplet.java//
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Image;
- import java.awt.MediaTracker;
- import java.awt.RenderingHints;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.awt.image.BufferedImage;
- import javax.swing.JApplet;
- import java.net.URL;
- import java.util.Random;
- public class LabApplet extends JApplet implements KeyListener {
- private static final long serialVersionUID = -8465410739280348595L;
- private URL url; //do pobrania obrazka
- private Komorka mapa[][] = new Komorka[32][32]; // tablica labiryntu
- Image obrazek, bufor, labirynt;
- Graj graj;
- int rozmiarx = 34*16, rozmiary = 34*16, wspx, wspy, s = 16, losowania = 0, wx, wy; // s-wielkosc tilesa, wsp - do generatora, wx, wy- do chodzenia
- BufferedImage bufferedImage = new BufferedImage(rozmiarx, rozmiary, BufferedImage.TYPE_INT_RGB);
- Random generator = new Random();
- RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- Graphics2D g2 = bufferedImage.createGraphics();
- Graphics bg, labg;
- public void init() {
- pobranieObrazka(); //pobiera potrzebna grafike
- bufor = createImage(rozmiarx,rozmiary); //obrazek buforu
- labirynt = createImage(rozmiarx,rozmiary); //obrazek labiryntu
- bg = bufor.getGraphics();
- labg = labirynt.getGraphics();
- generator(); //generuje mape labiryntu i rysuje jÄ… do obrazka
- addKeyListener(this);
- setVisible(true);
- setFocusable(true);
- this.requestFocus(); //potrzebny focus
- rysowanieDoBuforu(); //rysowanie
- repaint();
- graj();
- }
- public void start() {
- this.requestFocus();
- }
- private void graj() {
- graj = new Graj(31, 31, this);
- }
- private void pobranieObrazka() {
- MediaTracker mt;
- mt = new MediaTracker(this);
- url = getClass().getResource("labir.png");
- obrazek = getToolkit().getImage(url);
- mt.addImage(obrazek,1);
- try{
- mt.waitForAll();
- }
- catch (InterruptedException e) {}
- }
- protected void gratulacje() {
- g2.setPaint(new Color(255,255,255));
- g2.fillRect(0,0,rozmiarx,rozmiary);
- g2.setPaint(new Color(0,0,0));
- g2.drawString("Gratulacje!", 300, 300);
- g2.drawString("copyright: szymonhab@gmail.com", 10*16, 33*16);
- bg.drawImage(bufferedImage,0,0,this);
- repaint();
- }
- public void stop() {}
- public void destroy() {}
- private void generator() {
- for(int i=0; i<32; i++){
- for(int j=0; j<32; j++){
- mapa[i][j]=new Komorka();
- }
- }
- generujSciezke(31, 31, generator.nextInt(20), false);
- boolean allvisited = false;
- int tmp2 = 0;
- while(!allvisited){
- allvisited=true;
- tmp2++;
- for(int g=0; g<32; g++) {
- for(int h=0; h<32; h++) {
- if(mapa[g][h].visited==1) { generujSciezke(g, h, generator.nextInt(20), false);}
- if(mapa[g][h].visited==0) { if(tmp2>4) {generujSciezke(g, h, generator.nextInt(20), true); } allvisited=false; }
- }
- }
- }
- rysujDoObrazka();
- System.out.println(losowania);
- }
- private void generujSciezke(int wx, int wy, int dlugosc, boolean przebicie) {
- int kierunek=0; //0-gora, 1-dol, 2-lewo, 3-prawo
- int b = 0;
- mapa[31][31].visited=1;
- int nastSciezka = generator.nextInt(dlugosc+1);
- while((wx!=0 || wy!=0) && b<dlugosc+1) {
- b++;
- kierunek = wazenieLosowej(wx, wy, kierunek, przebicie);
- if(kierunek==4) {b=1000; break;}
- switch(kierunek) {
- case 0: mapa[wx][wy].up = 1; wy--; mapa[wx][wy].down = 1; mapa[wx][wy].visited=1;break;
- case 1: mapa[wx][wy].down = 1; wy++; mapa[wx][wy].up = 1; mapa[wx][wy].visited=1;break;
- case 2: mapa[wx][wy].left = 1; wx--; mapa[wx][wy].right = 1; mapa[wx][wy].visited=1;break;
- case 3: mapa[wx][wy].right = 1; wx++; mapa[wx][wy].left = 1; mapa[wx][wy].visited=1;break;
- }
- if(b==nastSciezka && przebicie==false) { generujSciezke(wx, wy, generator.nextInt(20), false); }
- if(b==generator.nextInt(dlugosc+2) && przebicie==false) { generujSciezke(wx, wy, generator.nextInt(20), false); }
- }
- }
- private int wazenieLosowej(int wx, int wy, int kierunek, boolean przebicie) {
- losowania++;
- int szansa0=0, szansa1=0, szansa2=0, szansa3=0; //szanse
- if(kierunek!=1 && wy!=0 && mapa[wx][wy-1].visited!=1) szansa0=35;
- if(kierunek!=0 && wy!=31 && mapa[wx][wy+1].visited!=1) szansa1 = 35;
- if(kierunek!=3 && wx!=0 && mapa[wx-1][wy].visited!=1) szansa2 = 35;
- if(kierunek!=2 && wx!=31 && mapa[wx+1][wy].visited!=1) szansa3 = 35;
- if(szansa0+szansa1+szansa2+szansa3 == 0 && (generator.nextInt(100)==15 || przebicie == true)) { //szanse na przeskok
- if(kierunek!=1 && wy!=0) szansa0=35;
- if(kierunek!=0 && wy!=31) szansa1 = 35;
- if(kierunek!=3 && wx!=0) szansa2 = 35;
- if(kierunek!=2 && wx!=31) szansa3 = 35;
- }
- else if(szansa0+szansa1+szansa2+szansa3 == 0) return 4;
- //losowanie//
- int losowa = generator.nextInt(szansa0+szansa1+szansa2+szansa3);
- if(losowa<szansa0) return 0;
- if(szansa0<=losowa && losowa<szansa1+szansa0) return 1;
- if(szansa0+szansa1<=losowa && losowa<szansa2+szansa1+szansa0) return 2;
- else return 3;
- }
- private void rysujDoObrazka() {
- int x;
- for(int i=0; i<32; i++){
- for(int j=0; j<32; j++){
- x = kratka(mapa[i][j]);
- labg.drawImage(obrazek,i*s,j*s,i*s+s,j*s+s,x*s,0,x*s+s,s,this);
- }
- }
- }
- private void rysowanieDoBuforu() {
- g2.setRenderingHints(rh);
- g2.setPaint(new Color(255,255,255));
- g2.fillRect(0,0,rozmiarx,rozmiary);
- g2.setPaint(new Color(0,0,0));
- g2.drawImage(labirynt,1,1,rozmiarx,rozmiary,this);
- g2.drawRect(0, 0, 32*16+1, 32*16+1);
- g2.drawImage(obrazek,1,1,1+s,1+s,18*s,0,18*s+s,s,this);
- g2.drawImage(obrazek,1+31*s,1+31*s,1+31*s+s,1+31*s+s,18*s,0,18*s+s,s,this);
- g2.drawImage(obrazek,1,1,1+s,1+s,16*s,0,16*s+s,s,this);
- g2.drawString("copyright: szymonhab@gmail.com", 10*16, 33*16);
- g2.drawImage(obrazek,1+wx*s,1+wy*s,1+wx*s+s,1+wy*s+s,17*s,0,17*s+s,s,this); //rysowanie ludzika
- bg.drawImage(bufferedImage,0,0,this);
- }
- protected void przerysuj(int wx, int wy) {
- this.requestFocus();
- this.wx=wx;
- this.wy=wy;
- rysowanieDoBuforu();
- repaint();
- }
- public void update(Graphics g) {
- bg.clearRect(0, 0, rozmiarx, rozmiary);
- paint(bg);
- g.drawImage(bufor,0,0,this);
- }
- public void paint(Graphics g) {
- g.drawImage(bufor,0,0,this);
- }
- private int kratka(Komorka k) { //Przypisanie obrazka do zmiennych w Komorce
- if(k.down!=0)
- if(k.up!=0)
- if(k.left!=0)
- if(k.right!=0) return 10;
- else return 6;
- else
- if(k.right!=0) return 8;
- else return 0;
- else
- if(k.left!=0)
- if(k.right!=0) return 9;
- else return 3;
- else
- if(k.right!=0) return 2;
- else return 15;
- else
- if(k.up!=0)
- if(k.left!=0)
- if(k.right!=0) return 7;
- else return 4;
- else
- if(k.right!=0) return 5;
- else return 13;
- else
- if(k.left!=0)
- if(k.right!=0) return 1;
- else return 12;
- else
- if(k.right!=0) return 14;
- else return 11;
- }
- @Override
- public void keyPressed(KeyEvent e) {
- int evt = e.getKeyCode();
- switch(evt) {
- case KeyEvent.VK_UP: System.out.println("up"); if(mapa[wx][wy].up==1) graj.y--;break;
- case KeyEvent.VK_DOWN: System.out.println("down"); if(mapa[wx][wy].down==1) graj.y++;break;
- case KeyEvent.VK_LEFT: System.out.println("left"); if(mapa[wx][wy].left==1) graj.x--;break;
- case KeyEvent.VK_RIGHT: System.out.println("right"); if(mapa[wx][wy].right==1) graj.x++;break;
- }
- }
- @Override
- public void keyReleased(KeyEvent e) {
- }
- @Override
- public void keyTyped(KeyEvent e) {
- }
- }
- //Komorka.java//
- public class Komorka {
- int up, down, left, right, visited=0;
- Komorka() {
- up = 0;
- down = 0;
- left = 0;
- right = 0;
- }
- Komorka(int up, int down, int left, int right) {
- this.up=up;
- this.down=down;
- this.left=left;
- this.right=right;
- }
- }
- //Graj.java//
- public class Graj implements Runnable {
- int x, y;
- LabApplet lab;
- Thread thread;
- long czas, poprzedni_czas, czas_do_fps, czasDoTimeStep = (long) 0;
- final long timeStep = (long) 30;
- Graj(int x, int y, LabApplet lab) {
- this.x=x;
- this.y=y;
- this.lab=lab;
- poprzedni_czas = System.currentTimeMillis();
- thread = new Thread(this);
- thread.start();
- }
- @Override
- public void run() {
- boolean exit = false;
- while(!exit) {
- sprawdzCzas();
- czasDoTimeStep=czasDoTimeStep+czas;
- while(czasDoTimeStep>timeStep) {
- exit = sprawdzWarunekZakonczenia(x, y);
- przerysuj(x, y);
- czasDoTimeStep=czasDoTimeStep-timeStep;
- }
- try { Thread.sleep(timeStep); }
- catch (InterruptedException e) { }
- }
- if(exit) lab.gratulacje();
- }
- private boolean sprawdzWarunekZakonczenia(int wx, int wy) {
- if(wx==0 && wy==0) return true;
- else return false;
- }
- private void przerysuj(int wx, int wy) {
- lab.przerysuj(wx, wy);
- }
- void sprawdzCzas() {
- czas = System.currentTimeMillis() - poprzedni_czas;
- poprzedni_czas = System.currentTimeMillis();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement