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
karel.vokral
Člen
Avatar
karel.vokral:2.4.2013 21:50

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
Tvůrce
Avatar
Honza Bittner:2.4.2013 21:58

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
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Зайчик
Člen
Avatar
Odpovídá na karel.vokral
Зайчик:2.4.2013 22:03

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
2.4.2013 22:03
Коммунизм для нашего будущего!
Avatar
karel.vokral
Člen
Avatar
karel.vokral:2.4.2013 22:10

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
Tvůrce
Avatar
Odpovídá na karel.vokral
Honza Bittner:2.4.2013 22:16

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
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Samik11
Tvůrce
Avatar
Odpovídá na karel.vokral
Samik11:2.4.2013 22:20

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
Tvůrce
Avatar
Odpovídá na Samik11
Honza Bittner:2.4.2013 22:26

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
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Зайчик
Člen
Avatar
Odpovídá na karel.vokral
Зайчик:2.4.2013 22:40

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
Зайчик:2.4.2013 22:41

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
Tvůrce
Avatar
Odpovídá na Зайчик
Honza Bittner:2.4.2013 22:49

:D .. dobrá ...

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

spokojený ? :D

Nahoru Odpovědět
2.4.2013 22:49
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Зайчик
Člen
Avatar
Nahoru Odpovědět
2.4.2013 22:50
Коммунизм для нашего будущего!
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na karel.vokral
David Hartinger:4.4.2013 13:10

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
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na karel.vokral
Kit:4.4.2013 13:21

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
Tvůrce
Avatar
Odpovídá na karel.vokral
Kit:4.4.2013 13:26

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
Tvůrce
Avatar
David Dostal:5.4.2013 22:24

Ještě to nemám úplně hotové, <a href="https:/­/www.dropbox.com/s/lm8c8­z25o86yaqr/Tex­t_game_Salatik­.zip">zde</a> 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.