Reklama
Pokazuje wyniki od 1 do 3 z 3

Temat: [java] rysowanie JPanel/JFrame - żółwik!

  1. #1

    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    662
    Siła reputacji
    18

    Domyślny [java] rysowanie JPanel/JFrame - żółwik!

    Cześć
    Mam do zrobienia coś co przypomina język LOGO
    (jak ktoś nie wie:
    http://pl.wikipedia.org/wiki/Logo_(j...programowania)
    )

    no więc hm, przyciskowe toto, ma rysować linie za pomocą klikania w przyciski.
    opowiednio:
    left - odwraca zolwia o 90 stopni w lewo
    right - odwraca zolwia o 90 stopni w prawo
    forward - przesuwa zolwia do przodu o 10 pikseli. Ruch odbywa sie, w ustalonym za pomoca wczesniejszych przyciskow, kierunku.
    pen up - unosi pioro - zolw zmienia polozenia, ale nie zostawia po sobie sladu
    pen down - opuszcza pioro - zmiana polozenia zolwia pozostawia slad

    no i w sumie mam problem, bo okay, do góry to sobie klikam i mi rysuje, ale np już w lewo jakoś nie mam pomysłu jak te współrzędne dobrać, żeby ładnie kreskę pod kątem 90stopni narysowało do już istniejącej.
    wszelkie pomysły mile widziane ;D

    Kod PHP:
    class PanelRysunkowy extends JPanel {
    	public void paintComponent(Graphics g) {
    		super.paintComponents(g);
    	}
    }
    (a tu gdzieś w klasie z buttonami, wyglądami i innymi pierdołami ;])
    ah, poniższa klasa implementuje ActionListener

    Kod PHP:
    
    PanelRysunkowy okienkoR; //okienko do rysowania 
    private boolean rysowanie = true;
    private boolean lewo = true;
    private boolean prawo = true;
    
    int x1=240;
    int y1=200;
    int x2=240;
    int y2=190;
    
    
    
    public void actionPerformed(ActionEvent akcja){
    
    Graphics rysik= okienkoR.getGraphics();
    
    if(akcja.getSource()==wDol){
    	if(rysowanie == true){
    	rysowanie=false;
    
    					}
    else return;					
    			}
    				
    else if(akcja.getSource()==wGore){
    if(rysowanie==false) {
    rysowanie = true;
     
    		}
     
    	}
    	
    else if(akcja.getSource()==wLewo){
    lewo=false;
    
    }
    
    
    else if(akcja.getSource()==wPrawo){
    prawo=false;
    
    			}
    
    
    else if(akcja.getSource()==Naprzod){
    if(lewo==true&& prawo == true){
    if(rysowanie == false){
    
    rysik.drawLine(x2,y2,x1,y1 );
    		y1-=10;
    		y2-=10;
    		}
    		else{
    rysik.setColor(Color.WHITE);
    rysik.drawLine(x2,y2,x1,y1 );
    
    		y1-=10;
    		y2-=10;
    			} }
    else if(lewo == false && rysowanie == false){
     //lewo = true;
    rysik.drawLine(x1,y1,0,y2); //a tu co? :D
    x1+=10;
    	}
    
    		}
    		
    
    else if(akcja.getSource()==Clean){
    x1=240;
    y1=200;
    x2=240;
    y2=190;
    prawo = true;
    lewo = true;
    rysik.clearRect(0,0,500,500);//tu czysci okienko
    }
    else if(akcja.getSource()==Zamknij){
     System.exit(0);
    	}
    
    }
    Ostatnio zmieniony przez Chrill : 29-12-2013, 13:17

  2. #2
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    32
    Posty
    1,909
    Siła reputacji
    19

    Domyślny

    Hmm zeby zrobic ladnie kierunki, to bys mogl zrobic typ wyliczeniowy. Nie czytalem calego kodu, ale na prostą zasade wydaje mi sie spoko takie rozwiazanie:

    Kod PHP:
    kierunek('W_GORE','W_PRAWO','W_DOL', 'W_LEWO'); // typ wyliczeniowy, koniecznie zgodnie z ruchem wskazowek zegara. 
    
    funkcja obrot_w_lewo(){
     kierunek--; // zamiana z W_PRAWO na W_GORE. Potrzebny if do przejscia z W_GORE na W_LEWO
    }
    
    funkcja obrot_w_prawo(){
     kierunek++; // Zamiana z W_PRAWO na W_DOL. potrzebny if do przejscia z W_LEWO na W_GORE
    }
    
    funkcja idz_do_przodu(odleglosc?) {
        moj_x = pobierz_aktualny_x();
        moj_y = pobierz_aktualny_y();
        
        switch (kierunek) {
           case W_GORE: nowy_y = moj_y - odleglosc; nowy_x = moj_x; // przejscie w gore,
           case W_DOL: nowy_y = moj_y + odleglosc; nowy_x = moj_x;
           case W_LEWO: nowy_x = moj_x - odleglosc; nowy_y = moj_y; // przejscie w lewo
           case W_PRAWO: nowy_x = moj_x + odleglosc;  nowy_y = moj_y;
        }
        
        rysuj_linie(moj_x,moj_y,nowy_x,nowy_y); // funkcja przesuwajaca obrazek zolwia, i rysujaca pod nim w zaleznosci od pen_up i pen_down linie. Tutaj robisz wszelkie ify przy krawedziach panelu chodzenia
     
    }

    Orientacyjny przyklad, powinienes sobie dalej poradzic :) JAVY nie znam wiec nie wiem jak sie robi typ wyliczeniowy i switcha :P
    Ostatnio zmieniony przez Bazan : 29-12-2013, 13:47
    Dreaming by drumming. ˆˆ™

  3. #3

    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    662
    Siła reputacji
    18

    Domyślny

    hm, no więc z enumem to nie taki zły pomysł, ale trochę mnie przerasta, bo z enuma urodziła się klasa wewnętrzna, z którą nie bardzo wiem jak sobie poradzić ;]
    chyba że jakoś inaczej się to da ugryźć? ;]

    <gdzieś wewnątrz klasy >
    Kod PHP:
    enum kierunek  {w_gore("forward",10) , w_prawo("right",10), w_dol("down",10) ,w_lewo("left",10), start("pozycja startowa",0),;
    public static kierunek polozenie = start;
    String info;
    int droga;
    
    
    kierunek(String info, int droga){
    this.info=info;
    this.droga=droga;
    		}
    
     
     void lewa(){
    if(polozenie == start){
    polozenie = w_lewo;
    return;
    	}
    else if(polozenie == w_lewo){
    polozenie = w_dol;
    return;
    	}
    else if(polozenie == w_dol){
    polozenie = w_prawo;
    return;
    	}
    
    else if(polozenie == w_prawo){
    polozenie = w_gore;
    return;
    	}
    else if(polozenie == w_gore){
    polozenie=w_lewo;
    return;
    	}
    		}		
    		
    		
    public void prawa(){
    
    if(polozenie == start){
    polozenie = w_prawo;
    return;
    	}
    else if(polozenie == w_prawo){
    polozenie = w_dol;
    return;
    	}
    else if(polozenie == w_dol){
    polozenie = w_lewo;
    return;
    	}
    
    else if(polozenie == w_lewo){
    polozenie = w_gore;
    return;
    	}
    else if(polozenie == w_gore){
    polozenie=w_prawo;
    return;
    		}
    		
    			}	
    
    
     public void naprzod(){
    if(polozenie == start){
    polozenie = w_gore;
    return;
    	}
    else if(polozenie == w_lewo){
    polozenie = w_lewo;
    return;
    	}
    else if(polozenie == w_prawo){
    polozenie = w_prawo;
    return;
    	}
    else if(polozenie == w_dol){
    polozenie = w_dol;
    return;
    	}
    
    				}
    			
    
    public void rysuj(int droga ){
    
    
    int moj_x=0;//jeszcze nie wiem jak pobrać ;D
    int moj_y=0;
    
    switch(polozenie){
    case start:
    	naprzod();
    	break;
    case w_lewo:
    		lewa();
    		break;
    case w_prawo:
    		prawa();
    		//naprzod();
    		break;
    case w_dol:
    	if(polozenie == w_lewo)
    		lewa();
    		//naprzod();
    	else prawa();
    	break;
    case w_gore:
    	naprzod();
    	break;
    
    	}
    
    		}
    	
    	}

  4. Reklama
Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Rysowanie flagi w javie - pomocy.
    Przez FoX-x w dziale Szkoła i nauka
    Odpowiedzi: 0
    Ostatni post: 07-05-2012, 10:05
  2. Skrypt Java
    Przez Deathless w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 3
    Ostatni post: 25-01-2012, 10:55
  3. Rysowanie mangi i takie tam
    Przez ~qki~ w dziale Kącik animefaga
    Odpowiedzi: 4
    Ostatni post: 26-10-2011, 22:00
  4. TibiaME Java!
    Przez Pox w dziale Niusy
    Odpowiedzi: 29
    Ostatni post: 28-09-2006, 22:56
  5. TibiaME Java Beta Test
    Przez Halius w dziale Niusy
    Odpowiedzi: 18
    Ostatni post: 01-09-2006, 10:39

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •