Forum » Programiranje » Želvica Logo [Java]
Želvica Logo [Java]
B & O ::
LP. Sem še precejšen začetnik v svetu programiranja in temu primerne imam probleme. Torej imam pa za sprogramirat "želvico logo" v javi. Pač okno in samo želvico (pravokotni trikotnik). Ta želvica se mora v svojem prostoru (oknu) gibat (glede na ukaze userja) levo/desno/gor/dol, se zasukat za poljuben kot, risati črto za seboj, ""dvigniti pisalo" in s tem ne risat sledi za sabo.
Najdu sem na netu neke "okvire" kode, ki bi mi bla kar v precejšnjo pomoč, ne razumem pa v njej parih stvari. LINK do kode
Zanima me kaj v tej kodi pomeni "Canvas" (recimo canvas.height vem da nastavi širino oz. višino) ampak je potem še več metod vezanih na ta "cavas" npr. canvas.addkeyHandler (this),.....(tudi deklarirana je na ravni razreda private "TGCanvas canvas;") Pa še to me zanima kaj pravzaprov pomeni ozirom na kaj se navezuje (this), ker sem videl da je večkrat podan kot argument. Hvala za odgovore!
Najdu sem na netu neke "okvire" kode, ki bi mi bla kar v precejšnjo pomoč, ne razumem pa v njej parih stvari. LINK do kode
Zanima me kaj v tej kodi pomeni "Canvas" (recimo canvas.height vem da nastavi širino oz. višino) ampak je potem še več metod vezanih na ta "cavas" npr. canvas.addkeyHandler (this),.....(tudi deklarirana je na ravni razreda private "TGCanvas canvas;") Pa še to me zanima kaj pravzaprov pomeni ozirom na kaj se navezuje (this), ker sem videl da je večkrat podan kot argument. Hvala za odgovore!
- spremenil: B & O ()
morbo ::
'canvas' je ime spremenljivki razreda TGCanvas, katerega kode v tvojem linku ni (je tukaj). Tam je le razred, ki uporablja njegove metode. (canvas se ponavadi uporablja kot ime razreda, ki je sposoben delat z grafiko - riše se na platno, ne :)
'this' je rezervirana beseda, ki predstavlja sklic na izvod razreda - kaže na 'samega sebe'. Torej če hočeš nek izvod razreda poslati kot argument znotraj njegove kode, uporabiš this. Metode nekega razreda lahko znotraj negovega telesa kličeš neposredno ali preko this.nekaMetoda()
'this' je rezervirana beseda, ki predstavlja sklic na izvod razreda - kaže na 'samega sebe'. Torej če hočeš nek izvod razreda poslati kot argument znotraj njegove kode, uporabiš this. Metode nekega razreda lahko znotraj negovega telesa kličeš neposredno ali preko this.nekaMetoda()
B & O ::
Mogoče nekolk n00b vprašanje, ampak ali tista koda ki sem jo linkal deluje? Mislim če dela taka kot je trenutno, al morm jst še kodo iz tvojga linka dodajat da mi bo ta canvas delal?
morbo ::
Ne, ne dela. Vsi sourci, ki jih potrebuješ za želvo so tukaj. Poberi in prevedi (compajlaj).
Ti pa priporočam da preden začneš brat source, predelaj tutoriale na tistih straneh.
Ti pa priporočam da preden začneš brat source, predelaj tutoriale na tistih straneh.
Zgodovina sprememb…
- spremenil: morbo ()
B & O ::
Aha najlepša ti hvala, si bom prebral, pa bom pol importal kar bom rabil. Če bo še kaka nejasnost se pa oglasm =)
morbo ::
...sicer tam piše da naj bi uporabnik razširil razred 'TurtleGraphicsWindow', tako da ne vem če bo zgolj kompajlanje dovolj za delovanje. Probaj, pa boš videl če je to kar rabiš, oz. če si boš lahko s tem pomagal...
Zgodovina sprememb…
- spremenil: morbo ()
B & O ::
Evo me nazaj. Torej imam za narest: pač glavno okno, samo želvico => tok je pač grafičnega dela in pa metode da bo lahko se premaknila za xx po polju, spremenila kot gibanja za yy, pen up in pen down (se pravi riši sled, ne riši sledi) in pa nastavljanje barve sledi ki jo pušča za sabo.
Zdej počasi sem se stvari lotu in naredil tole (v glavnem iz une kode + preštudiral sem kaj kej nardi):
public class TurtleGraphicsWindow extends Frame
implements TGKeyHandler, TGMouseHandler, WindowListener
{
private final static int CANVAS_VISINA = 400;
private final static int CANVAS_SIRINA = 600; // konstante
private int mouseX, mouseY; // zadnja pozicija miske na polju
private Turtle turtle;
public TurtleGraphicsWindow() // konstruktor okna 600x400 pikslov
{
addWindowListener( this );
setLayout( new BorderLayout() );
canvas = new TGCanvas( CANVAS_SIRINA, CANVAS_VISINA );
canvas.setBackground( Color.white );
canvas.addKeyHandler( this );
canvas.addMouseHandler( this );
add( "Center", canvas );
turtle = new Turtle ( canvas);
pack();
show();
return;
}
public void keyPressed( int keyNum ) // pogrunta katero tipko smo pritisnili
{ keypressed(keyNum); }
public void mouseClick() // pogrunta ali smo kliknli z miško
{ mouseclick(); }
// zgornji metodi izkorišča razred canvas, ker sta tudi deklarirani v konstruktorju
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we) { System.exit(0); }
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
// zgornjih 7 metod operira z samim oknom, se pravi TurtleGraphicsWindow
}
S tem se mi zdi da sem ustvaril osnovno okno in določil njegove lastnosti, poleg pa dodal metode ki "prisluškujejo" miški in tipkovnici + osnovna manipulacija z oknom (pomanjšaj, zapri,...). Morbo, ti k se bolj spoznaš, bi te prosu da mal pogledaš če je to okvirno prov in če sm si jst z dodanimi komentarji to prav razlagal?! Hvala ti! Ne vem pa kaj in zakaj je tole tukej in na kaj se navezuje?
add( "Center", canvas );
turtle = new Turtle ( canvas);
pack();
show();
return;
Ne vem pa kako zdej naprej. Kako naj nardim želvico (trikotnik), kje in kako naj spišem metode???? HELP
Zdej počasi sem se stvari lotu in naredil tole (v glavnem iz une kode + preštudiral sem kaj kej nardi):
public class TurtleGraphicsWindow extends Frame
implements TGKeyHandler, TGMouseHandler, WindowListener
{
private final static int CANVAS_VISINA = 400;
private final static int CANVAS_SIRINA = 600; // konstante
private int mouseX, mouseY; // zadnja pozicija miske na polju
private Turtle turtle;
public TurtleGraphicsWindow() // konstruktor okna 600x400 pikslov
{
addWindowListener( this );
setLayout( new BorderLayout() );
canvas = new TGCanvas( CANVAS_SIRINA, CANVAS_VISINA );
canvas.setBackground( Color.white );
canvas.addKeyHandler( this );
canvas.addMouseHandler( this );
add( "Center", canvas );
turtle = new Turtle ( canvas);
pack();
show();
return;
}
public void keyPressed( int keyNum ) // pogrunta katero tipko smo pritisnili
{ keypressed(keyNum); }
public void mouseClick() // pogrunta ali smo kliknli z miško
{ mouseclick(); }
// zgornji metodi izkorišča razred canvas, ker sta tudi deklarirani v konstruktorju
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we) { System.exit(0); }
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
// zgornjih 7 metod operira z samim oknom, se pravi TurtleGraphicsWindow
}
S tem se mi zdi da sem ustvaril osnovno okno in določil njegove lastnosti, poleg pa dodal metode ki "prisluškujejo" miški in tipkovnici + osnovna manipulacija z oknom (pomanjšaj, zapri,...). Morbo, ti k se bolj spoznaš, bi te prosu da mal pogledaš če je to okvirno prov in če sm si jst z dodanimi komentarji to prav razlagal?! Hvala ti! Ne vem pa kaj in zakaj je tole tukej in na kaj se navezuje?
add( "Center", canvas );
turtle = new Turtle ( canvas);
pack();
show();
return;
Ne vem pa kako zdej naprej. Kako naj nardim želvico (trikotnik), kje in kako naj spišem metode???? HELP
morbo ::
add() doda neko komponento v okno (Frame) v tvojem primeru komponento tipa TGCanvas.
turtle = new Turtle ( canvas); - ustvari nov predmet Turtle, kateremu poda canvas in ga shrani v spremenljivko turtle. Kaj Turtle sploh ponuja, pa si moraš pogledat v izvorni kodi
pack() in show() sta metodi razreda Frame (tj. razreda ki ga razširja razred TurtleGraphicsWindow), ki služita prikazu okna.
z return ukazom vračaš neko vrednost iz metode - konstruktor ne vrača vrednosti, zato je tam return nepotreben.
Če boš hotel pogruntat kako deluje zadeva boš moral temeljito pregledat vse fajle izvorne kode. Predlagam pa da si za začetek pogledaš kakšen enostavnejši primer risanja (oz. delo z gradniki / dogodki). Poguglaj za 'java awt' in 'java event handling'.
turtle = new Turtle ( canvas); - ustvari nov predmet Turtle, kateremu poda canvas in ga shrani v spremenljivko turtle. Kaj Turtle sploh ponuja, pa si moraš pogledat v izvorni kodi
pack() in show() sta metodi razreda Frame (tj. razreda ki ga razširja razred TurtleGraphicsWindow), ki služita prikazu okna.
z return ukazom vračaš neko vrednost iz metode - konstruktor ne vrača vrednosti, zato je tam return nepotreben.
Če boš hotel pogruntat kako deluje zadeva boš moral temeljito pregledat vse fajle izvorne kode. Predlagam pa da si za začetek pogledaš kakšen enostavnejši primer risanja (oz. delo z gradniki / dogodki). Poguglaj za 'java awt' in 'java event handling'.
charlotte ::
Mam isto nalogo (P2).Ej se ti sanja, al pa komor koli drugmu (mislim itk da se ti/vam, sm men se ne ), kaj bi pomenilo teh 7 errorjev KLIK ? Prosim čim hitreje , mi voda že hudo zateka v grlo!
Zgodovina sprememb…
- spremenilo: charlotte ()
morbo ::
Razred TurtleGraphicsWindow mora bit v datoteki z imenom TurtleGraphicsWindow.java
Ostalo so manjkajoče datoteke z razredi ali manjkajoči importi, kaj pa vem...
Če vam izdajatelj 'naloge' ni povedal kako se iz kupčka mrhovine sešije svoj izdelek, potem ste najbrž ubrali narobe pristop reševanja...
Ostalo so manjkajoče datoteke z razredi ali manjkajoči importi, kaj pa vem...
Če vam izdajatelj 'naloge' ni povedal kako se iz kupčka mrhovine sešije svoj izdelek, potem ste najbrž ubrali narobe pristop reševanja...
Zgodovina sprememb…
- spremenil: morbo ()
mihec87 ::
Bom kar v isti temi vprašal kako v javi narediti da ti izpisuje pravokotni trikotnik s tem da so kateti a in b poljubni..?
mihec87 ::
Hm sem premalo povedal trikotnik iz zvezdic namreč..So zadeve še kar bol na začetku, tako da je tole z graphic drawline kar mal preveč..
medobear ::
Hmm, pravzaprav je to težje kot z drawLine()
Lepo deluje le pri večjih številih... Sem razmišljal, pa se boljše rešitve nisem spomnil.
import java.lang.Math; public class Trikotnik { public static void main(String[] args) { int a = 30; int b = 40; double inc = (double)b / (double)a; for(int i=1; i<=a; i++) { for(int j=1; j<Math.round(i*inc); j++) { System.out.print("*"); } System.out.println(); } } }
Lepo deluje le pri večjih številih... Sem razmišljal, pa se boljše rešitve nisem spomnil.
medobear ::
Math je razred, uporabil sem funkcijo round(), ki število zaokroži. Če to odstraniš in spremenljivko inc spremeniš v tip int, bo natančnost risanja še manjša.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Programiranje problem androidOddelek: Programiranje | 1172 (937) | g333kk |
» | Android zamenjava pogledovOddelek: Programiranje | 1077 (898) | c00L3r |
» | android črtaOddelek: Programiranje | 2398 (1669) | g333kk |
» | Puzzle 15 kodaOddelek: Programiranje | 1257 (1130) | Serial |
» | JAVA kako se premikati v Card layoutuOddelek: Programiranje | 1241 (1149) | matjazx |