diff kopieckreta/src/KopiecKreta.java @ 0:2787f5e749ae

INIT
author prymula <prymula76@outlook.com>
date Thu, 21 Sep 2023 22:33:57 +0200
parents
children 489244127359
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kopieckreta/src/KopiecKreta.java	Thu Sep 21 22:33:57 2023 +0200
@@ -0,0 +1,923 @@
+
+/* 
+    Kopiec Kreta - gra w odgadywanie słów
+    ver. 0.4.0-beta
+    autor: Przemysław R. Pietraszczyk
+    data: 2020-09-30
+    licencja: Public Domain
+
+    słownik pochodzi z: sjp.pl
+
+*/
+
+package src;
+
+import java.awt.*;  // Toolkit
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JButton;
+//import javax.swing.JComponent;
+import javax.swing.JMenuBar;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.Box;
+import javax.swing.JTextArea;
+import javax.swing.JDialog;
+import javax.swing.JTextField;
+import javax.swing.JCheckBox;
+import javax.swing.BorderFactory;
+import javax.swing.WindowConstants;
+import java.awt.event.*;
+import java.awt.event.ActionListener;
+//import java.awt.event.KeyListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ItemEvent;
+//import java.awt.event.KeyEvent;
+import java.util.*; //Timer
+//import java.awt.Robot;
+import java.awt.Toolkit;
+
+import java.beans.*; //property change stuff
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+
+public class KopiecKreta extends JTextArea implements ActionListener {
+    
+    static JMenuBar menuBar;
+    static JMenu menu, info, menu2;
+    static JMenuItem menuItem, menuExit, menuInfo, menuPref;
+    static JFrame frame;
+    static boolean go=false;
+    static Timer timer = new Timer();
+    static String content;
+    final static int NRINGS=11;
+    final static int NCHAR=23; //32;
+    static MyResource res = new MyResource();
+    static wavResource wav;
+    static Ring []truering = new Ring[NRINGS];
+    static Ring []falsering = new Ring[NRINGS];
+    static String [] mound = new String[20];  // tekst do wyswietlenia przez paint
+    static JTextArea textArea;
+    static JPanel startScreen;
+    static int activeRing;  // indeks ringu na którym jest prowadzona aktualnie gra 
+    static KopiecKreta kk;
+    static Actions actions;
+    final static String CONSTCH="1234"; 
+    //final static Character[] charsInStock= {'a', 'ą', 'b', 'c', 'ć', 'd', 'e', 'ę', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'ł', 'm', 'n', 'ń', 'o', 'ó', 'p', 'r', 's', 'ś', 't', 'u', 'w', 'y', 'z', 'ż', 'ź'};
+    final static Character[] charsInStock= {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'w', 'y', 'z'};
+    static ArrayList<String> cheatSheet;
+    static int pointsForTheRing;
+    static int pointsFOrTheMund;
+    static int totalScore, level;
+    static boolean cheatActivate=false;
+    static SoundDialog sounddialog;
+    //static ResetDialog resetdialog;
+    //static GetNameDialog getNameDialog;
+    //Boolean runSoundDialog=Boolean.valueOf(false);
+    static ConfigFile configfile;
+    //static char pressKey=' ';
+    
+    public KopiecKreta() {
+        //GridBagLayout gridbag = (GridBagLayout)getLayout();
+        //GridBagConstraints c = new GridBagConstraints();
+
+        menuBar = new JMenuBar();
+        menu = new JMenu("Plik");
+        menuBar.add(menu);
+        menu2 = new JMenu("Opcje");
+        menuBar.add(menu2);
+        // przenosi INFO na prawa strone
+        menuBar.add(Box.createHorizontalGlue());
+        info = new JMenu("Info");
+        // kierunek wyswietlania menu
+        info.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
+        menuBar.add(info);
+        menuItem = new JMenuItem("Nowa Gra", null);
+        menuItem.setActionCommand("MenuItem1");
+        menuItem.addActionListener(this);
+        menuItem.setToolTipText("Rozpoczyna nową grę.");
+        menu.add(menuItem);
+        //menuItem = new JMenuItem("Sala sławy", null);
+        //menuItem.setActionCommand("MenuItem11");
+        //menuItem.addActionListener(this);
+        //menuItem.setToolTipText("Wyświetla najlepsze wyniki");
+        //menu.add(menuItem);
+        menu.addSeparator();
+        menuExit = new JMenuItem("Zakończ", null);
+        menuExit.setActionCommand("MenuItem2");
+        menuExit.addActionListener(this);
+        menuExit.setToolTipText("Wyjście z programu");
+        menu.add(menuExit);
+        menuPref = new JMenuItem("Preferencje dzwięku",null);
+        menuPref.setActionCommand("MenuItem4");
+        menuPref.addActionListener(this);
+        menuPref.setToolTipText("Preferencje dotyczące dzwięku");
+        menu2.add(menuPref);
+        /*
+        menuPref = new JMenuItem("Resetowanie",null);
+        menuPref.setActionCommand("MenuItem5");
+        menuPref.addActionListener(this);
+        menuPref.setToolTipText("Resetowanie najlepszych wyników");
+        menu2.add(menuPref);
+        */
+        menuInfo = new JMenuItem("Pomoc", null);
+        menuInfo.setActionCommand("MenuItem33");
+        menuInfo.addActionListener(this);
+        menuInfo.setToolTipText("Samouczek");
+        info.add(menuInfo);
+        menuInfo = new JMenuItem("O Programie", null);
+        menuInfo.setActionCommand("MenuItem3");
+        menuInfo.addActionListener(this);
+        menuInfo.setToolTipText("Informacje o programie");
+        info.add(menuInfo);
+        
+        //addKeyListener(this);
+        //actions = new Actions();
+        //addKeyListener(actions);
+        //setFocusable(true);
+        
+        
+    }
+    
+    
+    public void actionPerformed(final ActionEvent e) {
+    
+        // Nowa gra
+        if(e.getActionCommand().equals("MenuItem1")) {
+            //getNameDialog.initUI(configfile, frame, getNameDialog.runGetNameDialog);
+            //getNameDialog.runGetNameDialog=true;
+            //if (getNameDialog.go){
+            
+            activeRing=10;
+            totalScore=0;
+            pointsForTheRing=0;
+            pointsFOrTheMund=0;
+            level=1;
+            //frame.remove(startScreen);
+            //frame.add(textArea);
+            startScreen.setVisible(false);
+            textArea.setVisible(true);
+            create_secret_mound();
+            create_real_mound(); // generuje prawdziwy kopiec
+            cheatSheet = new ArrayList<String>();
+            setCharCheatSheet ();
+            go=true;
+            setDisplayMound();
+           // }
+        }
+        // Zakonczenie
+        else if(e.getActionCommand().equals("MenuItem2")) {
+            System.exit(0);
+        }
+        // O Programie
+        else if(e.getActionCommand().equals("MenuItem3")) {
+            String s1="  Port mojej gry pierwotnie napisanej dla Androida 2.3\n\n",
+                   s2=" Program napisany na podstawie fragmentów kodów,\n",
+                   s3="            wyszukanych w wyszukiwarce Google,\n",
+                   s4="                                plus własna inwencja\n\n",
+                   s5="  Autor zarzeka się że nigdy nie posiadał, ani nie posiada\n",
+                   s6="                          żadnej ksiażki na temat Javy.\n",
+                   s7="Oraz nie przeczytał ani jednej ksiązki na temat tego języka!\n\n",
+                   s8="             Przemysław R. Pietraszczyk - jesień 2020\n",
+                   s9="                               Licencja: Public Domain\n\n",
+                   s10="         Stworzono w oparciu o OpenJDK 11 oraz ANT\n\n",
+                   s11="   o/s: "+configfile.osName+"    ver. "+configfile.osVersion+"\n",
+                   s12="   java ver: "+configfile.jvmVersion;
+
+            JOptionPane.showMessageDialog(frame,
+                    s1+s2+s3+s4+s5+s6+s7+s8+s9+s10+s11+s12,
+                    "Kopiec Kreta 0.4.0-beta",
+                    JOptionPane.PLAIN_MESSAGE);
+
+        }
+        else if(e.getActionCommand().equals("MenuItem33")) {
+            String s1="Celem gry jest odgadnięcie wszyskich zakrytych pól.\n",
+                  s2="Rozgrywkę rozpoczyna się od dolnego pierścienia.\n",
+                  s3="Po odgadnięciu wszyskich liter w danym pierścieniu,\n",
+                  s4="rozgrywka przenosi się na kolejny, wyższy ring.\n",
+                  s5="Po odgadnięciu wszystkich liter, gracz pytany jest\n",
+                  s6="o chęć gry na opcjonalnym następnym poziomie.\n\n",
+                  s7="UWAGA ! Caps Lock - bez znaczenia !\n",
+                  s8="\n";
+            JOptionPane.showMessageDialog(frame,
+                s1+s2+s3+s4+s5+s6+s7+s8,
+                "Pomoc",
+                JOptionPane.PLAIN_MESSAGE);
+        }
+        else if(e.getActionCommand().equals("MenuItem4")) {
+            sounddialog.initUI(configfile, frame, sounddialog.runSoundDialog);
+            sounddialog.runSoundDialog=true;
+        }
+        /*
+        else if(e.getActionCommand().equals("MenuItem5")) {
+            resetdialog.initUI(configfile);
+        }
+        */
+        // sala sławy
+        /*
+        else if(e.getActionCommand().equals("MenuItem11")) {
+            
+        }
+        */
+        //System.out.println("ACTION PERFORMED " + e);
+    }
+
+    private static void createAndShowGUI() {
+        
+        frame=new JFrame("Kopiec Kreta");
+        //Robot robot;
+        // menuBar z konstruktora
+        final int frameWidth = 250;
+        final int frameHeight = 460;
+        final int GNOMEPANEL=80;  // nieco niżej niż panel
+        final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+        //frame.setBounds((int) screenSize.getWidth() - frameWidth,
+        //        (int) screenSize.getHeight() - frameHeight, frameWidth, frameHeight);
+        frame.setBounds((int) screenSize.getWidth() - frameWidth,
+                GNOMEPANEL, frameWidth, frameHeight);
+        frame.setResizable(false);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        sounddialog = new SoundDialog();
+        //resetdialog = new ResetDialog();
+        //getNameDialog = new GetNameDialog();
+        textArea = new KopiecKreta(); 
+        startScreen = new StartScreen();
+        //textArea.setFont(new Font("Serif", Font.ITALIC, 18));
+        textArea.setFont(new Font("Serif", Font.BOLD, 18));
+        textArea.setLineWrap(true);  //nowe
+        textArea.setWrapStyleWord(true);  // nowe
+        textArea.setEditable(false);
+        textArea.setBounds(5,5,240,430);
+        frame.add(textArea);
+        textArea.setVisible(false);
+        frame.add(menuBar);
+        frame.add(startScreen);
+        startScreen.setFont(new Font("Serif", Font.BOLD, 18));
+        startScreen.setBounds(5,5,240,430);
+            
+        frame.setJMenuBar(menuBar);  
+        frame.setLayout(null);    
+        frame.setSize(250,500);  // 400 x 400  
+        frame.setVisible(true);
+        actions = new Actions();
+        frame.addKeyListener(actions);
+        frame.setFocusable(true);
+        textArea.setForeground(Color.BLACK);
+        textArea.setBackground(Color.GREEN);
+        // zapobiega utracie KeyEvent po wyjściu z SoundDialog i ResetDialog
+        frame.addFocusListener(new FocusListener(){
+            public void focusGained(FocusEvent e){
+                //System.out.println("Focus GAINED:"+e);
+            }
+            public void focusLost(FocusEvent e){
+                //System.out.println("Focus LOST:"+e);
+
+                // FIX FOR GNOME/XWIN FOCUS BUG
+                e.getComponent().requestFocus();
+            }
+        });
+        try {
+            configfile = new ConfigFile();
+        }catch (IOException e){}
+        configfile.load();
+        
+        /*
+        try {
+            // obiekt robot posiada metode do pobierania koloru pixela
+            robot = new Robot();
+            robot.mouseMove(screenSize.width-100, 200);
+            robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
+            robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+        }catch (AWTException e) {} 
+            frame.setAlwaysOnTop(true);
+        */
+        
+        timer.schedule(new KeyTicks(), 0, 1000);  // lepiej 1000
+
+    } 
+    // dodaje punkty za pierścień i kazuje pozostałe litery ściągi
+    static public void addScores(){
+        int n;
+        pointsForTheRing=0;
+        if (!cheatActivate){
+            for (int i=0;i< cheatSheet.size();i++){
+                pointsForTheRing++;
+            }
+            pointsFOrTheMund+=pointsForTheRing;
+        }
+       //System.out.println("Naliczyłem "+pointsForTheRing+" punktów za ring");
+    }
+    // zapełnia tablice ze znakami do podpowiedzi
+    static private void setCharCheatSheet (){
+        
+        for (int i=0; i<NCHAR; i++){
+            // przepisujemy kolejno znaki do listy stringów
+            char c= Character.toUpperCase(charsInStock[i]);
+            cheatSheet.add(String.valueOf(c));
+        }
+    }
+    static private void refreshCheatSheet(int n){
+        String t="";
+        cheatSheet.remove(n);
+        for (int i=0;i< cheatSheet.size();i++){
+            t+=cheatSheet.get(i);
+        }
+    }
+    // szuka znaku w tablicy z podpowiedzia
+    static private int searchCharChaetSheet(char c){
+        String s="";
+        String sc="";
+        //String test="";
+        for (int i=0;i< cheatSheet.size();i++){
+            s=cheatSheet.get(i);
+            sc = String.valueOf(c);
+           // test+=sc;
+            if (s.equals(sc)) {
+                return i;
+            }
+        }
+        //System.out.println("Nie odnalazłem znaku:"+sc);
+        return -1;
+    }
+    static private void create_real_mound(){
+
+        int n_char=3;
+        String r="";
+        
+        for (int i=0; i<NRINGS; i++){
+            truering[i] = new Ring(res.getDirectory(n_char));
+            n_char++;
+            for (int j=0;j<truering[i].getLength();j++){
+                String _r=Character.toString(truering[i].getChar(j));
+            
+                r+=_r;
+            }
+            r+="\n";
+        }
+        
+        System.out.println(r);
+
+    }
+    public static void create_secret_mound(){
+        // kodujemy od 3 liter
+        String s="???";
+            
+        for (int i=0; i<NRINGS; i++){
+            falsering[i] = new Ring(s);
+            s+="?";
+        }
+    }
+
+    public static void main(final String[] args) {
+            
+            try {
+                res.read();
+                //wav = new wavResource();
+                //wav.loadWav();
+                //wav.initWav();
+            }catch (Exception e) {
+                e.printStackTrace();
+            }
+        javax.swing.SwingUtilities.invokeLater(new RunnableImplementation());
+    }
+    
+    static private void setDisplayMound(){
+        String sr = new String();
+        String r="";
+        textArea.setText(null);
+        sr+="\n";
+        // i=1 ponieważ pomijamy 3 literowy ring
+        for (int i=1;i<NRINGS;i++){
+            
+            //String r="";
+            for (int j=0;j<truering[i].getLength();j++){
+                
+                String _r=Character.toString(truering[i].getChar(j));
+                r+=_r;
+            }
+            //System.out.println(r);
+            r="";
+            sr+="       ";
+            if (i==activeRing){
+                sr+=">";
+            }
+            else sr+="   ";
+            for (int j=0;j<falsering[i].getLength();j++){
+                String _s=Character.toString(falsering[i].getChar(j));
+                sr +=_s;
+            }
+            if (i==activeRing){
+                sr+="<";
+            }
+            mound[i]=sr;
+            //System.out.println("mound["+i+"] "+mound[i]);
+            
+            textArea.append(mound[i]+"\n");
+            sr="";
+        }
+        textArea.append("\n\n");
+        for (int i=0; i<cheatSheet.size();i++){
+            textArea.append(cheatSheet.get(i));
+            textArea.append(" ");
+        }
+        
+    }
+    
+    
+    private static final class RunnableImplementation implements Runnable {
+        public void run(){
+            wav = new wavResource();
+            createAndShowGUI();
+	}
+    }
+    public static void unhideWords(){
+        for (int j=0;j<truering[activeRing].getLength();j++){
+            falsering[activeRing].setChar(truering[activeRing].getChar(j),j);
+        }
+    }
+
+    static class KeyTicks extends TimerTask {
+        int cw=0;
+        static char pressKey='Q';
+        static char lastKey='Q';
+        static boolean firstRun=true;
+        int n=0;
+        /* FIXME - miga gdy odnaleziono litere ?
+        */ 
+        public void run() {
+            ArrayList<Integer> indexExist = new ArrayList<Integer>();
+            int returnIndex;
+            
+            
+            pressKey=actions.getKey();
+            
+            if (go) {
+                wav.stop();
+                indexExist=checkInstance(pressKey);
+                for (int exist: indexExist){
+                    falsering[activeRing].setChar(pressKey,exist);
+                    wav.PlayFlag=true;
+                    if (lastKey != pressKey) {
+                        if (sounddialog.soundAccept()){
+                            System.out.println("Dzwięk akceptuje");
+                            wav.play("/smooth-ok.wav");
+                        }
+                        else System.out.println("Dzwięk NIE akceptuje");
+                    }
+                }
+                if (lastKey != pressKey && indexExist.isEmpty() && !firstRun) {
+                //if (lastKey != pressKey && indexExist.isEmpty()) {
+
+                    wav.PlayFlag=true;
+                    if (sounddialog.soundAccept()){
+                        System.out.println("Dzwięk akceptuje");
+                        wav.play("/bass-bad.wav");
+                    }
+                    else System.out.println("Dzwięk NIE akceptuje");
+                }
+                lastKey=pressKey;
+               
+                returnIndex = searchCharChaetSheet(pressKey);
+                if (returnIndex != -1){
+                    refreshCheatSheet(returnIndex);
+                }
+                setDisplayMound();
+                pressKey=' ';
+                indexExist.clear();
+                
+                if (actions.getCheat().equals(CONSTCH)){
+                    //pointsForTheRing=0;
+                    actions.resetCheat();
+                    cheatActivate=true;
+                    unhideWords();
+                }
+                if (checkFullRing()) {
+                    totalScore+=pointsForTheRing;
+                    setCharCheatSheet ();
+                    setDisplayMound();
+                  
+                }
+               
+               firstRun=false;
+            }
+        }
+        static private boolean checkFullRing() {
+            if (truering[activeRing].getString().equals(falsering[activeRing].getString())){
+                //System.out.println("Czy zaliczony pierścień ? activeRing:"+activeRing);
+                if (activeRing >1){
+                    addScores();
+                    cheatActivate=false;
+                    // nowa ściąga
+                    cheatSheet = new ArrayList<String>();
+                    activeRing--;
+                    return true;
+                }
+                else {
+                   go=false;
+                   
+                   setDisplayMound();
+                    if(activeRing==1){
+                        
+                        String s1="Ukończyłeś poziom "+level+" !\n",
+                               s2="Na tym poziomie uzyskałeś "+pointsFOrTheMund+" punktów.\n",
+                               s3="Póki co ugrałeś "+totalScore+" punktów !\n\n",
+                               s4="Kontynujesz grę ?";
+                        
+                        // moze boolean ?
+                        int dialogButton = JOptionPane.YES_NO_OPTION;
+                        int answer = JOptionPane.showConfirmDialog (frame, s1+s2+s3+s4,"Komunikat", dialogButton);
+                        
+                        if(answer == JOptionPane.YES_OPTION) {
+                            activeRing=10;
+                            go=true;
+                            level++;
+                            create_secret_mound();
+                            create_real_mound(); // generuje prawdziwy kopiec
+                            setDisplayMound();
+                            pointsFOrTheMund=0;
+                        }
+                        if(answer == JOptionPane.NO_OPTION) {
+                            System.exit(0);
+                            
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+        // sprawdza czy rządana litera znajduje sie w pierscieniu
+        static private ArrayList<Integer> checkInstance(char key){
+            ArrayList<Integer> indexExist = new ArrayList<Integer>();
+        
+            for (int i=0; i<truering[activeRing].getLength();i++){
+                if (truering[activeRing].getChar(i) == key) {
+                    indexExist.add(i);
+                }
+            }
+            /*
+            if (indexExist.size()!=0) {
+                changeView=true;
+            }
+*/
+            return indexExist;
+        }
+    }
+    static class Ring {
+        char c[];
+        int l=0; // dlugosc
+        public Ring(String s){
+            //System.out.println("Z Ring constructor: "+s+" dlugosc: "+s.length());
+            c = new char[s.length()+2];
+            c =s.toCharArray();
+            l=s.length();
+        }
+        public char getChar(int poz){
+            return (char) c[poz];
+        }
+        public void setChar(char _c,int p){
+            c[p]=_c;
+        }
+        public int getLength(){
+            return l;
+        }
+        public String getString(){
+            String sr = new String();
+            for (int j=0;j<l;j++){
+                String _s=Character.toString(c[j]);
+                sr +=_s;
+            }
+            return sr;
+        }
+    }
+}
+class SoundDialog implements ItemListener, ActionListener{
+    JCheckBox chkBox1;
+    JFrame frame;
+    boolean sound = true;
+    ConfigFile config;
+    public Boolean runSoundDialog=false;
+    
+    protected void initUI(ConfigFile cf, JFrame f, Boolean run) {
+        if (!run) {
+            frame = new JFrame("Zapytanko");
+            frame.getContentPane().setSize(new Dimension(300,200)); // nie działa
+            frame.getContentPane().setLayout(new GridBagLayout());
+            frame.setAlwaysOnTop(true);
+            GridBagConstraints c = new GridBagConstraints();
+            // nadpisanie metody zamykania okna
+            frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+            frame.addWindowListener(new WindowAdapter() {
+                public void windowClosing(WindowEvent ev) {
+                    runSoundDialog=false;
+                    frame.dispose();
+                }
+                // zapobiega minimalizacji okna dialogowego
+                public void windowIconified(WindowEvent we) {
+                    frame.setState(JFrame.NORMAL);
+                    //JOptionPane.showMessageDialog(frame, "Cant Minimize");
+                }
+            });
+            JLabel label = new JLabel(" ");
+            JButton button = new JButton("Zatwierdź");
+            chkBox1= new JCheckBox("Odtwarzaj dźwięk");
+            config=cf;
+            sound = cf.load();
+            System.out.println("Dzwiek: "+sound);
+            chkBox1.setSelected(sound);
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.ipady = 0;
+            c.weighty = 1.0;
+            c.gridwidth = 3;
+            c.gridx = 0;
+            c.gridy = 0;
+            frame.getContentPane().add(chkBox1,c);
+        
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.ipady = 0;
+            c.weighty = 1.0;
+            c.gridwidth = 3;
+            c.gridx = 0;
+            c.gridy = 1;
+            frame.getContentPane().add(label,c);
+        
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.ipady = 0;
+            c.weighty = 1.0;
+            c.anchor = GridBagConstraints.PAGE_END; //bottom of space
+            c.gridwidth = 3;
+            c.gridx = 0;
+            c.gridy = 2;
+            frame.getContentPane().add(button,c);
+        
+            chkBox1.addItemListener(this);
+            button.addActionListener(this);
+            if (cf.osName.equals("Linux")) frame.setUndecorated(true);
+            chkBox1.setBorder(BorderFactory.createMatteBorder(20, 20, 20, 20, Color.RED)); //  w tym wypadku kolor nie ma znaczenia
+            frame.getRootPane().setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, Color.RED));
+            frame.pack();
+            // pojawi się nad oknem rodzica
+            frame.setLocationRelativeTo(f);
+            frame.setResizable(false);
+            frame.setVisible(true);
+        }
+    }
+    public void itemStateChanged(ItemEvent e) {
+
+        Object source = e.getItemSelectable();
+ 
+        if (source == chkBox1) {
+            //System.out.println("Zaznaczono dzwiek");
+            sound = true;
+        }
+        if (e.getStateChange() == ItemEvent.DESELECTED) {
+            //System.out.println("Odznaczono dzwiek");
+            sound = false;
+
+        }
+        
+    }
+    public void actionPerformed(ActionEvent e) {
+        frame.setVisible(false);
+        config.save(sound);
+        runSoundDialog=false;
+        //System.out.println("Zapisuje dzwięk: "+sound);
+        
+    }
+    public boolean soundAccept(){
+        return sound;
+    }
+}
+/*
+class ResetDialog implements ItemListener, ActionListener{
+    JCheckBox chkBox1;
+    JFrame frame;
+    boolean reset = false;
+    protected void initUI(ConfigFile cf) {
+    
+        frame = new JFrame("Zapytanko");
+        
+        JPanel mainPanel;
+        JButton button;
+        frame.getContentPane().setLayout(new GridBagLayout());
+        GridBagConstraints c = new GridBagConstraints();
+        button = new JButton("Zatwierdź");
+        //chkBox1= new JCheckBox("Odtwarzaj dźwięk");
+        chkBox1= new JCheckBox("Zresetuj najlepsze wyniki");
+        
+        chkBox1.setSelected(reset);
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.ipady = 0;
+        c.weighty = 1.0;
+        //c.anchor = GridBagConstraints.PAGE_END; //bottom of space
+        c.gridwidth = 3;
+        c.gridx = 0;
+        c.gridy = 0;
+        frame.getContentPane().add(chkBox1,c);
+        
+        
+        
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.ipady = 0;
+        c.weighty = 1.0;
+        c.anchor = GridBagConstraints.PAGE_END; //bottom of space
+        c.gridwidth = 3;
+        c.gridx = 0;
+        c.gridy = 2;
+        frame.getContentPane().add(button,c);
+        
+        
+        
+        chkBox1.addItemListener(this);
+        button.addActionListener(this);
+        frame.pack();
+        frame.setLocationRelativeTo(null);
+        frame.setResizable(false);
+        frame.setVisible(true);
+    }
+    public void itemStateChanged(ItemEvent e) {
+        //t index = 0;
+        //ar c = '-';
+        Object source = e.getItemSelectable();
+ 
+        if (source == chkBox1) {
+            //dex = 0;
+            System.out.println("Zaznaczono dzwiek");
+            reset = true;
+        }
+        if (e.getStateChange() == ItemEvent.DESELECTED) {
+            System.out.println("Odznaczono dzwiek");
+            reset = false;
+
+        }
+        
+    }
+    public void actionPerformed(ActionEvent e) {
+        frame.setVisible(false);
+        System.out.println("jestem action");
+    }
+    public boolean resetAccept(){
+        return reset;
+    }
+}
+*/
+/*
+class GetNameDialog implements ActionListener, KeyListener {
+    JTextField text;
+    JFrame frame;
+    public String namePlayer="";
+    public boolean go;
+    ConfigFile config;
+    public Boolean runGetNameDialog=false;
+    
+    protected void initUI(ConfigFile cf, JFrame f, Boolean run) {
+        if (!run) {
+            frame = new JFrame("Zapytanko");
+            frame.getContentPane().setSize(new Dimension(300,200)); // nie działa
+            frame.getContentPane().setLayout(new GridBagLayout());
+            frame.setAlwaysOnTop(true);
+            GridBagConstraints c = new GridBagConstraints();
+            // nadpisanie metody zamykania okna
+            frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+            frame.addWindowListener(new WindowAdapter() {
+                public void windowClosing(WindowEvent ev) {
+                    runGetNameDialog=false;
+                    frame.dispose();
+                }
+            });
+            JLabel label1 = new JLabel(" ");
+            JLabel label2 = new JLabel("Najperw się przedstaw:");
+            JButton button = new JButton("Zatwierdź");
+            button.setActionCommand("Button");
+
+            text = new JTextField();
+            //text.addActionListener(this);
+            //text.setActionCommand("Text");
+
+            text.addKeyListener(this);
+            text.setFocusable(true);
+            text.requestFocus();
+            
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.ipady = 0;
+            c.weighty = 1.0;
+            c.gridwidth = 3;
+            c.gridx = 0;
+            c.gridy = 0;
+            frame.getContentPane().add(label2,c);
+        
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.ipady = 0;
+            c.weighty = 1.0;
+            c.gridwidth = 3;
+            c.gridx = 0;
+            c.gridy = 1;
+            frame.getContentPane().add(text,c);
+        
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.ipady = 0;
+            c.weighty = 1.0;
+            c.gridwidth = 3;
+            c.gridx = 0;
+            c.gridy = 2;
+            frame.getContentPane().add(label1,c);
+            
+            c.fill = GridBagConstraints.HORIZONTAL;
+            c.ipady = 0;
+            c.weighty = 1.0;
+            c.anchor = GridBagConstraints.PAGE_END; //bottom of space
+            c.gridwidth = 3;
+            c.gridx = 0;
+            c.gridy = 3;
+            frame.getContentPane().add(button,c);
+            text.setEditable(true);
+            if (namePlayer.length()!=0){
+                text.setText(namePlayer);
+                text.selectAll();
+            }
+            button.addActionListener(this);
+            if (cf.osName.equals("Linux")) frame.setUndecorated(true);
+            frame.getRootPane().setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, Color.RED));
+            frame.pack();
+            frame.setLocationRelativeTo(f);
+            frame.setResizable(false);
+            frame.setVisible(true);
+        }
+    }
+    
+    public void actionPerformed(ActionEvent e) {
+        if(e.getActionCommand().equals("Button")) {
+
+            frame.setVisible(false);
+            namePlayer=text.getText();
+            runGetNameDialog=false;
+            if (namePlayer.length()!=0){
+                go=true;
+            }
+        }
+        else if(e.getActionCommand().equals("Text")) {
+            
+            String t= text.getText();
+            text.setText(t);
+            text.selectAll();
+            
+        }
+    }   
+    
+    @Override
+    public void keyTyped(KeyEvent e) {
+    }
+
+    @Override
+    public void keyReleased(KeyEvent event) {
+    }
+
+    @Override
+    public void keyPressed(KeyEvent event) {
+        if (event.getExtendedKeyCode() == KeyEvent.getExtendedKeyCodeForChar('a')) {
+            System.out.println("OK");
+        }
+        System.out.println("GETNAME");
+        String t= text.getText();
+        text.setText(t);
+        text.selectAll();
+    }
+}
+
+    /*
+    private void readConfig() {
+        
+    
+        try { 
+            InputStream is = this.getClass().getResourceAsStream("/config");
+            BufferedReader br=new BufferedReader(new InputStreamReader(is, "utf-8"));
+            
+                lineConfig = br.readLine();
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+    */
+    /*
+    private void writeConfig() {
+        
+    
+        try { 
+            OutputStream is = this.getClass().getResourceAsStream("/config");
+            BufferedReader br=new BufferedReader(new InputStreamReader(is, "utf-8"));
+            
+                lineConfig = br.readLine();
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+    */
+//}
\ No newline at end of file