TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach

FEI archív 2012/2013 => 2. ročník => Topic started by: jv1460 on 04.03.2013, 15:38:50

Title: TJava
Post by: jv1460 on 04.03.2013, 15:38:50
nazdar.....mohli by ste mi prosim vas pomoct s metodou update() v triede ConsoleUI??ma to vypisovat hracie pole.....dakujem
Title: Re: TJava
Post by: Dickenz on 06.03.2013, 17:57:45
alebo z coho cerpat aspon ??
Title: Re: TJava
Post by: palechandro on 07.03.2013, 00:09:29
nazdar.....mohli by ste mi prosim vas pomoct s metodou update() v triede ConsoleUI??ma to vypisovat hracie pole.....dakujem

ahoj, a comu tam nerozumies ? skusal si uz nejako zacat ?

myslienka metody update je v tom ze si proste prebehnes cele herne pole  v dvoch for-och, a pre kazdu bunku sa pytas ci je open,marked alebo closed. a podla toho vykreslis to herne pole. herne pole neni nic ine len textove riadky pod sebou....
Title: Re: TJava
Post by: jv1460 on 07.03.2013, 15:25:32
vedel som co ma update() robit len som to nevedel zapisat predtym......teraz uz len potrebujem dostat sa k metode getValue() z triedy Clue

public void update() { 
    int row, column;
        System.out.println("   0 1 2 3 4 5 6 7 8");   
        for (row=0; row < field.getRowCount(); row++) {
                           switch(row){ 
                               case 0:System.out.print("A ");break;
                               case 1:System.out.print("B ");break;
                               case 2:System.out.print("C ");break;
                               case 3:System.out.print("D ");break;
                               case 4:System.out.print("E ");break;
                               case 5:System.out.print("F ");break;
                               case 6:System.out.print("G ");break;
                               case 7:System.out.print("H ");break;
                               case 8:System.out.print("I ");break;
                           }
            for (column=0; column < field.getColumnCount() ; column++) {               
                System.out.print(" ");
                 
     
           Tile t = field.getTile(row, column);
         
                if (t.getState() == Tile.State.MARKED) {
                     System.out.print("M");
               }
                if(t.getState() == Tile.State.OPEN){
                    if   (t instanceof Mine){               
                    System.out.print("X");                 
                    }
                if   (t instanceof Clue){                                                                   
                                int c = field.getClues();    //getClues je getter v triede Filed ktory vracia pocet min      naokolo lebo neviem pouzit metodu getValue z triedy Clue
                    System.out.print(+c);
                    }
                } 
                if(t.getState() == Tile.State.CLOSED){
                    System.out.print("-");
                }
            }
         System.out.println();
         }   

  }
Title: Re: TJava
Post by: veteran on 07.03.2013, 15:56:12
Quote
if   (t instanceof Clue){                                                                   
           int c = field.getClues();    //getClues je getter v triede Filed ktory vracia pocet min      naokolo lebo neviem pouzit metodu getValue z triedy Clue
           System.out.print(+c);
}

t treba pretypovať na Clue a potom zavolať getValue(). Teda čosi takéto:
Quote
((Clue) t).getValue();
Title: Re: TJava
Post by: jv1460 on 07.03.2013, 16:13:54
Sanka dole.....tak dlho som to skusal a ked vidim ako to malo byt tak mi je do placu ze som to nespravil sam.....dakujem pekne
Title: Re: TJava
Post by: Dickenz on 12.03.2013, 20:14:39
v navode pišu že odporučaju na vykreslenie použiť printf ....kde sa viem niečo o printf dočitať ? ..nepoužil som to ešte nikdy a nerozumiem ako vie printf krajšie vykresliť ten zaklad hracieho pola čiže čisla od 1 po n a tak isto abecedu od A po XYZ....určite niečo take existuje ale moje klucove slova do google su vadne :(
Title: Re: TJava
Post by: veteran on 12.03.2013, 21:09:35
Krajšie vykreslenie hracieho poľa = že keď náhodou máš viac ako 10 stĺpcov, tak ti hracie pole rozhodí, lebo symboly '-', 'X', 'M', '?' sú len jednoznakové, ale označenie stĺpca bude už dvojznakové. Teda symboly už nebudú pekne zarovno s číselným označením stĺpca.

V návode narážajú konkrétne na takéto použitie printf-u:
Quote
System.out.printf("%2c ", '?');
Title: Re: TJava
Post by: Havran on 14.03.2013, 01:40:48
sak ked das do googlu system.out.printf tak hned ti vyhodi das 4 odkazy na stackoverflow kde to mas popisane jak to funguje
Title: Re: TJava
Post by: veteran on 14.03.2013, 01:50:10
jojo, Stackoverflow je zázračný web  :)
Title: Re: TJava
Post by: jv1460 on 29.03.2013, 19:09:49
Potreboval by som pomoct s metodou openAdjecentMines......robil som to podla countAdjecentMines
Neviem kde by mohla byt chyba

 private void openAdjacentMines(int row,int column){

        for (int rowOffset = -1; rowOffset <= 1; rowOffset++) {
            int actRow = row + rowOffset;
            if (actRow >= 0 && actRow < getRowCount()) {
                for (int columnOffset = -1; columnOffset <= 1; columnOffset++) {
                    int actColumn = column + columnOffset;
                    if (actColumn >= 0 && actColumn < getColumnCount()) {
                       tiles[row][column].setState(Tile.State.OPEN);

                    }
                }
            }
        }
   
   
    }
 
Title: Re: TJava
Post by: veteran on 29.03.2013, 19:22:55
A čo ti na tom konkrétne nefunguje? Spadne to alebo to robí hlúposti??

Code: [Select]
if (actColumn >= 0 && actColumn < getColumnCount()) {
                       tiles[row][column].setState(Tile.State.OPEN);

                    }

Snažíš sa otvárať stále tú istú (už otvorenú) dlaždicu, ktorej susedov kontroluješ... Pointou metódy je otvoriť práve tých susedov :D

BTW: Nemalo by sa to volať openAdjacentTiles?  ;D
Title: Re: TJava
Post by: jv1460 on 29.03.2013, 20:44:36
Ved ked sa v najvnutornejsom cykle metody countAdjecentMines ikrementuje premenna tak sa pocitaju okolite miny tak ked namiesto toho nastavim state na Open mali by sa otvarat okolite tiles ne??to mi neni velmi jasne
a hej ma sa to volat openAdjecentTiles
Title: Re: TJava
Post by: Havran on 29.03.2013, 21:01:38
Ved ked sa v najvnutornejsom cykle metody countAdjecentMines ikrementuje premenna tak sa pocitaju okolite miny tak ked namiesto toho nastavim state na Open mali by sa otvarat okolite tiles ne??to mi neni velmi jasne
a hej ma sa to volat openAdjecentTiles

nebude problem nahodou
Code: [Select]
tiles[row][column].setState(Tile.State.OPEN);bo nikde v cykle tieto hodnoty nemenis a idu zo vstupu, ostatne hodnoty sa ti pomenia ale toto [row] a [column] je furt to iste, nechces to mat nahodou takto ?
Code: [Select]
tiles[actRow][actColumn].setState(Tile.State.OPEN);
Title: Re: TJava
Post by: veteran on 29.03.2013, 21:28:04
Ved ked sa v najvnutornejsom cykle metody countAdjecentMines ikrementuje premenna tak sa pocitaju okolite miny tak ked namiesto toho nastavim state na Open mali by sa otvarat okolite tiles ne??to mi neni velmi jasne
a hej ma sa to volat openAdjecentTiles
Nastavenie Open je v poriadku, ale pozri sa, pre ktoré políčko to nastavuješ. Vždy pre jedno a to isté (na ktoré si klikol). A ty chceš otvoriť okolité prázdne políčka.

Ako je spomenuté vyššie, má byť:
Code: [Select]
tiles[actRow][actColumn].setState(Tile.State.OPEN);
row, column - "súradnice" dlaždice, ktorú si otvoril (na ktorú si klikol)
actRow, actColumn - "súradnice" okolitých dlaždíc (menia sa v cykle)
Title: Re: TJava
Post by: jv1460 on 29.03.2013, 21:29:53
Uz som to spravil......dakujem pekne
Title: Re: TJava
Post by: jv1460 on 21.04.2013, 19:42:31
nazdar.....co by mohlo chybat v tejto metode??pole je vykreslene ale dlazdice nie su clickable

@Override
    public void mousePressed(MouseEvent e) {
       
        if(field.getState() == GameState.PLAYING){
        TileComponent b = (TileComponent)e.getSource();
        if(SwingUtilities.isLeftMouseButton(e)){
        field.openTile(b.getRow(),b.getColumn());
                }
        if(SwingUtilities.isRightMouseButton(e)){
        TileComponent t = (TileComponent)e.getSource();
        field.markTile(t.getRow(), t.getColumn());
            }   
        }
        if(field.getState() == GameState.FAILED){
        JOptionPane.showMessageDialog(rootPane, menuBar, "Konec", 200);
        }
       
        if(field.getState() == GameState.SOLVED){
        JOptionPane.showMessageDialog(rootPane, menuBar, "Top seller v hre", 200);
        BestTimes b = new BestTimes();
        int m = Minesweeper.getInstance().getPlayingSeconds();
        b.addPlayerTime(System.getProperty("user.name"),m);
        }
       
       
    }
Title: Re: TJava
Post by: veteran on 21.04.2013, 19:53:09
Mám pocit, že po kliknutí na políčko by si mal volať metódu update() alebo také niečo.
Title: Re: TJava
Post by: jv1460 on 21.04.2013, 20:39:09
ide to .....dakujem pekne
Title: Re: TJava
Post by: Dickenz on 22.04.2013, 04:22:47
mam taku otazku mam to principom rovnako ako tu hore ...ale nevyskoci mi ziadna message.....naschval ked kliknem na minu cize failed malo by mi vypisat nejaku spravu nie ?..

Code: [Select]
JOptionPane.showMessageDialog(rootPane, menuBar, "YOU FAILED!!", WIDTH);

no ma zajima ze co znamena ten prvy a druhy parameter ? ..lebo to mi tam ponukol netbeans defaultne ..a neviem ci to mam alebo nemam menit ?..
Title: Re: TJava
Post by: Agamemnon on 22.04.2013, 13:14:54
take otazky sa riesia referencnou priruckou - java ma celkom slusnu na webe:
http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html (http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html)
Title: Re: TJava
Post by: Dickenz on 22.04.2013, 15:47:52
o nic nesom mudrejsi aj tak :(.... ale asi budem mat chybu lebo ked nahodou prejdem hru alebo fail ..tak v ntbnse mam chyb na rozdavanie ....
Title: Re: TJava
Post by: veteran on 22.04.2013, 16:09:29
o nic nesom mudrejsi aj tak :(.... ale asi budem mat chybu lebo ked nahodou prejdem hru alebo fail ..tak v ntbnse mam chyb na rozdavanie ....
Dokumentáciu sa dočítaš aj v NetBeanse a tam je to (IMHO) dosť jasne napísané (každý jeden parameter je tam rozpísaný).

Netreba používať všetko, čo ti NB nanúti ;) Stačí toto:
JOptionPane.showMessageDialog(rootPane, "Message");
Title: Re: TJava
Post by: Havran on 23.04.2013, 17:15:44
mam taku otazku mam to principom rovnako ako tu hore ...ale nevyskoci mi ziadna message.....naschval ked kliknem na minu cize failed malo by mi vypisat nejaku spravu nie ?..

Code: [Select]
JOptionPane.showMessageDialog(rootPane, menuBar, "YOU FAILED!!", WIDTH);

no ma zajima ze co znamena ten prvy a druhy parameter ? ..lebo to mi tam ponukol netbeans defaultne ..a neviem ci to mam alebo nemam menit ?..

neviem sice jaky to ma konstruktor, ale dost som si isty ze namiesto 'WIDTH' tam by malo byt nejake cislo alebo rozmer dajaky
Title: Re: TJava
Post by: Dickenz on 24.04.2013, 01:51:49
jj to mi doslo ze tam dam nejaky int ....ale nešlo to aj tak ...cez to co napisal veteran to funguje ...
Title: Re: TJava
Post by: Dickenz on 24.04.2013, 03:08:57
robim zle tu metodu actionPerformed ? nullpointer exepction

Code: [Select]
ActionListener listener = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
          if (field.getState() == GameState.PLAYING){
               setTimeLabelText();
               
           }
        }
    };
Title: Re: TJava
Post by: Dickenz on 01.05.2013, 03:17:56
nieco taketo nieje v jave povolene ?? ..alebo preco mi to proste nechce brat ?? .
if(SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e)
Title: Re: TJava
Post by: xxx3 on 01.05.2013, 04:36:50
to chces dat akoze podmienku, ze ked je stlacene aj lave aj prave tlacitko mysi sucasne?
Title: Re: TJava
Post by: Dickenz on 01.05.2013, 05:58:24
ano presne ....a este jeden problem mam ked klikam na bestTimes v menu hry ...kazdym kliknutim mi zduplikuje tabulku ..ked si to pozriem 15x tak mam 15x rovnaky cas pisany ...neviem preco ..kde mam hladat zadrhel  pls ??
Title: Re: TJava
Post by: Agamemnon on 01.05.2013, 16:26:51
čo keby si aj pastol kód? :) bez kódu ťažko
Title: Re: TJava
Post by: Dickenz on 01.05.2013, 17:28:23
Code: [Select]
@Override
    public void mousePressed(MouseEvent e) {
        TileComponent xx = (TileComponent) e.getSource();
        if (field.getState() == GameState.PLAYING) {
           
            if (SwingUtilities.isLeftMouseButton(e)) {
               //TODO

            }
            if (SwingUtilities.isRightMouseButton(e)) {
                //TODO
            }
            if (SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e)) {
               //TODO but NOT WORK!!!!
            }
        }
       
        update();
    }

a druhy problem s besttimes

Code: [Select]
//konstruktor
public BestTimesDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        jTextArea1.setText(Minesweeper.getInstance().getBestTimes().toString());
        setLocationRelativeTo(this);
           }



private void bestTimesMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        new BestTimesDialog(this, true).setVisible(true);
    }