• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

TJava

Started by jv1460, 04.03.2013, 16:38:50

« predchdzajce - alie »

jv1460

nazdar.....mohli by ste mi prosim vas pomoct s metodou update() v triede ConsoleUI??ma to vypisovat hracie pole.....dakujem

Dickenz

alebo z coho cerpat aspon ??

palechandro

Quote from: jv1460 on  04.03.2013, 16:38:50
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....

jv1460

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();
         }   

  }

veteran

Quoteif   (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();

jv1460

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

Dickenz

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 :(

veteran

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:
QuoteSystem.out.printf("%2c ", '?');

Havran

sak ked das do googlu system.out.printf tak hned ti vyhodi das 4 odkazy na stackoverflow kde to mas popisane jak to funguje
Achievement of your happiness is the only moral purpose of your life.

veteran

jojo, Stackoverflow je zázračný web  :)

jv1460

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);

                    }
                }
            }
        }
   
   
    }
 

veteran

#11
A čo ti na tom konkrétne nefunguje? Spadne to alebo to robí hlúposti??

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

jv1460

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

Havran

#13
Quote from: jv1460 on  29.03.2013, 21: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

nebude problem nahodou 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 ?
tiles[actRow][actColumn].setState(Tile.State.OPEN);
Achievement of your happiness is the only moral purpose of your life.

veteran

Quote from: jv1460 on  29.03.2013, 21: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
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ť:
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)

jv1460

Uz som to spravil......dakujem pekne

jv1460

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);
        }
       
       
    }

veteran

Mám pocit, že po kliknutí na políčko by si mal volať metódu update() alebo také niečo.

jv1460

ide to .....dakujem pekne

Dickenz

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 ?..

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 ?..

Agamemnon

take otazky sa riesia referencnou priruckou - java ma celkom slusnu na webe:
http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html
All code is crap.

42

Dickenz

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 ....

veteran

Quote from: 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 ....
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");

Havran

Quote from: 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 ?..

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
Achievement of your happiness is the only moral purpose of your life.

Dickenz

jj to mi doslo ze tam dam nejaky int ....ale nešlo to aj tak ...cez to co napisal veteran to funguje ...