Avatar
karel.vokral
Člen
Avatar
karel.vokral:

Ahoj, jsem studentem Pražského gymnázia zaměřeného na programování v Javě. Právě mám rozdělanou ročníkovou práci na téma textová adventure hra v GUI. Už sem se ptal na různých fórech, ale někdy to bylo i 14 dní co sem nedostal jediný příspěvek.

Teď k dotazu :
Hra bude situována v GUI, kde se bude nacházet text(daná část příběhu) a tři tlačítka(možnosti postupu ve hře). Řídil jsem se zde umístěných tutoriálů na GUI, ale nyní sem se sekl u jedné věci : Názvy tlačítek a text v labelu pribeh ** budou pole stringů. Když uživatel klikne na některé z tlačítek, tak chci aby se jak na label **pribeh tak na všechna tlačítka vložila určitá pozice z pole z stringů. To je můj nápad. Pokud by jste ale přišly z lehčím řešením klidně napište. Tíží mne nedostatek času. Děkuji

package hungergamesrocnikovka;

import java.awt.Button;
import java.awt.Container;
import java.awt.Event;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Gui extends JFrame {

    String moznost5 = "Po začátku hry hned uteču do lesa";
    String moznost6 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit";
    String s = moznost5;
    private JLabel pribeh;
    /*private JLabel vypisMoznosti1;
     * private JLabel vypisMoznosti2;
     * private JLabel vypisMoznosti3;*/
    private JButton moznost1;
    private JButton moznost2;
    private JButton moznost3;
    private JPanel panel1;
    private JPanel panel2;

    public Gui() {
        super("Hunger Games");



        GridBagLayout layout = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();

        Container con = getContentPane();
        gbc.insets = new Insets(10, 10, 10, 10);
        con.setLayout(layout);


        panel1 = new JPanel();
        add(panel1);

        panel2 = new JPanel();
        add(panel2);

        // Příběhová pasáž


        pribeh = new JLabel("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
        gbc.gridx = 1;
        gbc.gridy = 0;

        con.add(pribeh, gbc);

        // Tlačítka

        moznost1 = new JButton(s);
        gbc.gridx = 1;
        gbc.gridy = 1;
        con.add(moznost1, gbc);

        moznost2 = new JButton("Pokusím se získat luk a toulec s šípy");
        gbc.gridx = 1;
        gbc.gridy = 2;
        con.add(moznost2, gbc);

        moznost3 = new JButton("Popadnu nelbížší batoh a uteču z do lesa");
        gbc.gridx = 1;
        gbc.gridy = 3;
        con.add(moznost3, gbc);


        Event event = new Event();
        moznost1.addActionListener(event);
        moznost2.addActionListener(event);
        moznost3.addActionListener(event);


    }

    public class Event implements ActionListener {

        public void actionPerformed(ActionEvent e) {


            if (e.getActionCommand().equals(s)) {
                s = moznost6;
            }





        }
    }
}
Editováno 2.4.2013 21:51
 
Odpovědět 2.4.2013 21:50
Avatar
Honza Bittner
Redaktor
Avatar
Honza Bittner:

Takže děláš textovou hru která se větví na 3 možnosti ?

Jinak bych si udělal jiný systém než s poli ... např dát tomu nějaké id .. 112132112213, 23121321 atp ... a podle daného id vykreslit dané texty :)

Nahoru Odpovědět 2.4.2013 21:58
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Зайчик
Člen
Avatar
Odpovídá na karel.vokral
Зайчик:

No... dělal bych to v konzoli a ne v gui. Ale co se týče tvého problému vůbec bych to neřešil přes nějaké pole, listy myslím že by byl idealní enum a tahat si data třeba z nějaké jednoduché databáze. V db by to mohlo vypadat třeba takhle "otazka;odpoved1;od­poved2;odpoved3;" můžeš použít třeba CSV nebo XML.

Nahoru Odpovědět  +1 2.4.2013 22:03
Коммунизм для нашего будущего!
Avatar
karel.vokral
Člen
Avatar
karel.vokral:

Ano, ve hře budou tři možnosti. Potom bych tam měl taky přidat obrázek. HoBi - nerozumím tomu id..1121321...
Wintrixi, Bohužel, GUI už mám zadané. Jak přibližně by to vypadalo s tím enumem + databází (typuji v .txt) ? Děkuji

 
Nahoru Odpovědět 2.4.2013 22:10
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na karel.vokral
Honza Bittner:

to s tim id by bylo že si ty tři odpovědi očísluješ 1,2,3 a po zmáčknutí tlačítka se ti připíše 1, 2 nebo 3 ... a následně se vykreslí další část příběhu ...

a podle toho id budeš mít uložené někde že k tomu patří příběh, popisek na tl. 1, 2 a 3 ....

Nahoru Odpovědět 2.4.2013 22:16
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Samik11
Redaktor
Avatar
Odpovídá na karel.vokral
Samik11:

Vytvořit pěknou úplnou textovou hru, která se větví s každým krokem na tři další, je celkem velké sousto. Osobně bych se nejdříve zaměřil na ten příběh a zkusil ho nějak zacyklit. Klidně pár kroků, zkus třeba přidat i prvky náhody. Gui bych řešil až nakonec....

Nahoru Odpovědět 2.4.2013 22:20
„Radost vidět a rozumět, to je nejkrásnější dar přírody.“ Albert Einstein
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na Samik11
Honza Bittner:

Ano, jako první by měl člověk vytvořit příběh ... je pak hodně jednoduší udělat GUI .. :)

Nahoru Odpovědět 2.4.2013 22:26
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Зайчик
Člen
Avatar
Odpovídá na karel.vokral
Зайчик:

No heleť něco málo jsme sepsal, není to nic extra, doufám že soubory číst umíš a databázi si vytvořit taky umíš, udělal jsem ti takovou ukázku jak by to mohlo fungovat. Doufám že ti to pomůže a hodně štěstí. Já teď mám svých starostí až až ;)
// question.java

class Question implements ControlQuestion {

    public String GetString(int idx){
        return MyQuestion[idx];
    }
    private final String[]
            MyQuestion = {
            "Jsi v lese... co udelas? :",
            "Uz nejsi v lese co udelas? :",
    };
}

// ControlQuesti­on.java

interface ControlQuestion{
    String GetString(int idx);
}
enum Strings{
        Str_q1,
        Str_q2,
        };

// main soubor

public class cs {
    public static void main(String args[]){
        ControlQuestion lc = new Question();
        System.out.println(lc.GetString(0));
    }
}

Celkově se vypíše jen první otázka tzn " jsi v lese co udelas?" Teď už si to snad odvodíš sám a databáze nebude třeba ani potřeba... více jazykové aplikace dělám hard coded taky pokud tam není moc textu takže pár otázek nemusí být problém.. neřeknu kdyby otázek bylo třeba 300 to už bych to hard coded nedělal.

Nahoru Odpovědět 2.4.2013 22:40
Коммунизм для нашего будущего!
Avatar
Зайчик
Člen
Avatar
Odpovídá na Honza Bittner
Зайчик:

Ne! První by se měl naučit pracovat s jazykem a až pak dělat hru. ;)

Nahoru Odpovědět 2.4.2013 22:41
Коммунизм для нашего будущего!
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na Зайчик
Honza Bittner:

:D .. dobrá ...

  1. jazyk
  2. příběh
  3. hra

spokojený ? :D

Nahoru Odpovědět 2.4.2013 22:49
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Зайчик
Člen
Avatar
Nahoru Odpovědět  +1 2.4.2013 22:50
Коммунизм для нашего будущего!
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na karel.vokral
David Čápka:

Tak samozřejmě začneš třídami, budeš mít třídy jako Predmet, Prostor, Batoh atd. David Dostal tu udělal super engine na textovky v Javě, když ho poprosíš, třeba ho zde publikuje a můžeš se inspirovat.

Nahoru Odpovědět 4.4.2013 13:10
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
Kit
Redaktor
Avatar
Odpovídá na karel.vokral
Kit:

Spíš:

  1. Příběh
  2. Jazyk
  3. Hra

Mapa hry se dá velmi jednoduše udělat jako stavový automat. Jednotlivé stavy a texty se dají uložit do databáze, aby bylo možné hru za běhu modifikovat. Ve hře samotné by se neměl vyskytovat žádný výstupní text.

Nahoru Odpovědět 4.4.2013 13:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na karel.vokral
Kit:

Také by bylo dobré, kdybys ten program napsal objektově. V Javě je to tak lepší.

Nahoru Odpovědět 4.4.2013 13:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Dostal
Redaktor
Avatar
David Dostal:

Ještě to nemám úplně hotové, zde ke stažení jedna ze starších verzí (novější zatím není až tak příkladná, až jí dodělám tak jí zde publikuju).

 
Nahoru Odpovědět 5.4.2013 22:24
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 15 zpráv z 15.