Avatar
GunSpawn
Redaktor
Avatar
GunSpawn:

Ahoj všem,
potřebuju poradit s tlačítkama v Javě. Programuju v Eclipsu a chci aby po stisknutí tlačítka "Start" se spustila hra.
Kód okna:

package thecode;

import javax.swing.*;

import java.awt.*;

public class GameWindow {

        public static void main(String[] args) {
                Okno okno = new Okno();
        }

}
  class Okno extends JFrame
  {
        public Okno()
        {
                super ("Nim-The Game");
                setSize(800 , 200);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setVisible(true);
                Container kontej = getContentPane();
                GridBagLayout srg = new GridBagLayout();
                GridBagConstraints gbc = new GridBagConstraints();
                kontej.setLayout (srg);
                JButton tl1 = new JButton("Start");
                gbc.gridx = 1;
                gbc.gridy = 0;
                kontej.add(tl1, gbc);
                JButton tl2 = new JButton("Návod");
                gbc.gridx = 1;
                gbc.gridy = 1;
                kontej.add(tl2, gbc);
                setContentPane(kontej);

        }

  }

Kód hry

package thecode;

import java.util.Scanner;

public class Game
{
        static Scanner vstupUzivatele1 = new Scanner (System.in);
    static Scanner vstupUzivatele2 = new Scanner (System.in);
    static Scanner vstupUzivatele3 = new Scanner (System.in);
    static boolean kdoZacne = true;
    static int pocetSirek = 0;
    static int odecteneSirky = 1;

  public static void main(String[] args)
  {
          System.out.print("S kolika sirkami chcete hrát (10+): ");
            pocetSirek = vstupUzivatele1.nextInt();
            if (pocetSirek > 9)
              System.out.print("Chcete hrát jako první(true or false)?");
              kdoZacne = vstupUzivatele2.nextBoolean();
              System.out.println("Hra začíná");
              kdo();
  }
        public static void kdo()
        {
            if (kdoZacne == true)
                Hrac.hrac();
            else
                PC.pc();
    }



  static class Hrac extends Game
  {
    public static void hrac()
    {
         System.out.print("Kolik odeberete sirek:");
         odecteneSirky = vstupUzivatele3.nextInt();
         if (odecteneSirky > 3)
         {
                 System.out.println("Nelze");
                 odecteneSirky = 0;
                 System.out.print("Kolik odeberete sirek:");
             odecteneSirky = vstupUzivatele3.nextInt();
         }
         pocetSirek = pocetSirek - odecteneSirky;
         if (pocetSirek < 0)
         {
                 System.out.println("Nelze");
         }
         System.out.println("Zbývá " + pocetSirek);
         kdoZacne = false;
       if (pocetSirek == 0)
       {
         System.out.println("Vyhrál jste");
           PC.konec();
       }
       Game.kdo();
    }
  }


static class PC extends Game
{
 public static void pc()
 {
         odecteneSirky = pocetSirek % 4;
                while (odecteneSirky == 0)
                {
                        odecteneSirky = 1;
                }
                        pocetSirek = pocetSirek - odecteneSirky;
              System.out.println("Počítač odebral " + odecteneSirky);
              System.out.println("Zbývá " + pocetSirek);
              kdoZacne = true;
                if (pocetSirek == 0)
                {
                        System.out.println("Vyhrál PC");
                    PC.konec();
                }
             Game.kdo();
 }
 public static void konec()
        {
                System.out.println("Konec hry.");
                System.exit(0);
        }
}
}

Díky všem za odpověď.

Odpovědět 15.12.2013 13:34
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na GunSpawn
Jan Vargovský:

Nato by se hodil obrázek "Static, static everywhere"

 
Nahoru Odpovědět  +1 15.12.2013 13:37
Avatar
GunSpawn
Redaktor
Avatar
GunSpawn:

To asi jo, ale nevíš co s tím?

Nahoru Odpovědět 15.12.2013 13:38
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na GunSpawn
Jan Vargovský:

Nepoužívej statiku, pak se v tom třeba bude dát vyznat. Už jako první fail vidím, proč třída Hrac dědí z Game? Game je snad nějaký hráč ? To samé PC. Nesmyslné pojmenování objektů. Zkus si to promyslet v hlavě nejdřív.

 
Nahoru Odpovědět  +1 15.12.2013 13:41
Avatar
GunSpawn
Redaktor
Avatar
Odpovídá na Jan Vargovský
GunSpawn:

To kvůli proměnným, které obsahuje třída Game

Nahoru Odpovědět 15.12.2013 13:47
Save early, save often, save everything, everywhere, everytime.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na GunSpawn
David Čápka:

Smazat a napsat znovu, protože takhle se neprogramuje. Přečti si zdejší seriál o OOP.

Nahoru Odpovědět  +1 15.12.2013 13:47
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
 
Nahoru Odpovědět 15.12.2013 13:48
Avatar
GunSpawn
Redaktor
Avatar
Odpovídá na David Čápka
GunSpawn:

Dobrá pokusím se to předělat.

Nahoru Odpovědět 15.12.2013 13:49
Save early, save often, save everything, everywhere, everytime.
Avatar
Kit
Redaktor
Avatar
Odpovídá na GunSpawn
Kit:

Správně jsi napsal slovo obsahuje. V tom případě nesmíš použít dědičnost, ale kompozici, která vystihuje slovo "obsahuje". Kdyby tam bylo slovo je, tak by to znamenalo výzvu k použití dědičnosti.

Nahoru Odpovědět  +1 15.12.2013 14:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
GunSpawn
Redaktor
Avatar
Odpovídá na Kit
GunSpawn:

Ok pokusím se poučit z chyb a opravit to. Díky za bleskurychlou reakci.

Nahoru Odpovědět 15.12.2013 16:51
Save early, save often, save everything, everywhere, everytime.
Avatar
Kit
Redaktor
Avatar
Odpovídá na GunSpawn
Kit:

Jestli se chceš nechat inspirovat:
http://www.itnetwork.cz/dev-lighter/263
Vzal jsem tvou třídu GameWindow a trochu ji upravil podle sebe. Funguje tak, že po kliknutí na tlačítko se vypíše v konzoli jméno tlačítka. Místo toho si tam můžeš dát co chceš.

Nahoru Odpovědět 15.12.2013 17:05
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
GunSpawn
Redaktor
Avatar
Odpovídá na Kit
GunSpawn:

Díky za pomoc pokusím se to nějak upravit. Při nejhorším začnu znova. Aspoň se to pořádně naučím.

Nahoru Odpovědět 15.12.2013 18:31
Save early, save often, save everything, everywhere, everytime.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.