Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
GunSpawn
Tvůrce
Avatar
GunSpawn:15.12.2013 13:34

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ý
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:15.12.2013 13:37

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

 
Nahoru Odpovědět
15.12.2013 13:37
Avatar
GunSpawn
Tvůrce
Avatar
GunSpawn:15.12.2013 13:38

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ý
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:15.12.2013 13:41

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
15.12.2013 13:41
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:15.12.2013 13:47

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 Hartinger
Vlastník
Avatar
Odpovídá na GunSpawn
David Hartinger:15.12.2013 13:47

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

Nahoru Odpovědět
15.12.2013 13:47
You are the greatest project you will ever work on.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:15.12.2013 13:48

Tak je to blbě.

 
Nahoru Odpovědět
15.12.2013 13:48
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na David Hartinger
GunSpawn:15.12.2013 13:49

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
Tvůrce
Avatar
Odpovídá na GunSpawn
Kit:15.12.2013 14:08

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
15.12.2013 14:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Kit
GunSpawn:15.12.2013 16:51

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
Tvůrce
Avatar
Odpovídá na GunSpawn
Kit:15.12.2013 17:05

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
Tvůrce
Avatar
Odpovídá na Kit
GunSpawn:15.12.2013 18:31

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.