diff --git a/Obesenec/.gitignore b/Obesenec/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ae3c1726048cd06b9a143e0376ed46dd9b9a8d53 --- /dev/null +++ b/Obesenec/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/Obesenec/src/cz/vsb/krouzek/Hraj.java b/Obesenec/src/cz/vsb/krouzek/Hraj.java new file mode 100644 index 0000000000000000000000000000000000000000..99d5dec377096f90dcc927962cc40b91dc77e880 --- /dev/null +++ b/Obesenec/src/cz/vsb/krouzek/Hraj.java @@ -0,0 +1,24 @@ +package cz.vsb.krouzek; + +import java.util.List; + +public class Hraj { + + public static void main(String[] args) { + oknoSibenice = new OknoSibenice(Hraj::startHry, Hraj::konecHry, Hraj::zvolenoPismeno); + + + } + + public static void startHry() { + + } + + public static void konecHry() { + + } + + public static void zvolenoPismeno(List<Character> pismena) { + } + +} diff --git a/Obesenec/src/cz/vsb/krouzek/OknoSibenice.java b/Obesenec/src/cz/vsb/krouzek/OknoSibenice.java new file mode 100644 index 0000000000000000000000000000000000000000..7d14aa80a15f3fd1c770a5633b88150fe6f22435 --- /dev/null +++ b/Obesenec/src/cz/vsb/krouzek/OknoSibenice.java @@ -0,0 +1,175 @@ +package cz.vsb.krouzek; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; + +public class OknoSibenice extends JFrame { + + private static final long serialVersionUID = -5182233956382753964L; + + private static List<String> imageNames = Arrays.asList("sibenice-0.png", "sibenice-1.png", "sibenice-2.png", + "sibenice-3.png", "sibenice-4.png", "sibenice-5.png", "sibenice-6.png", "sibenice-7.png", "sibenice-8.png"); + private JPanel letterPanel; + private JPanel gamePanel; + private JButton startButton; + private JButton endButton; + private JLabel wordLabel; + private JLabel imageLabel; + private List<JButton> charButtons = new ArrayList<JButton>(); + private int mistakeCount = 0; + + private Runnable startHry; + private Runnable konecHry; + private Consumer<List<Character>> vyberPismena; + + + public OknoSibenice(Runnable startHry, Runnable konecHry, Consumer<List<Character>> vyberPismena){ + super("HádánĂ slov"); + this.startHry = startHry; + this.konecHry = konecHry; + this.vyberPismena = vyberPismena; + initialize(); + } + + public void initialize() { + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + getContentPane().setLayout(new BorderLayout()); + + // inicializace jednotlivĂ˝ch komponent pĹ™es getter metody + getContentPane().add(getLetterPanel(), BorderLayout.SOUTH); + getContentPane().add(getImageLabel(), BorderLayout.EAST); + getContentPane().add(getGamePanel(), BorderLayout.NORTH); + getContentPane().add(getWordLabel(), BorderLayout.CENTER); + + pack(); + setVisible(true); + } + + public JPanel getLetterPanel() { + if (letterPanel == null) { + letterPanel = new JPanel(new GridBagLayout()); + int counter = 1; + for (Map.Entry<Character, List<Character>> entry : SibeniceZaklad.abeceda.entrySet()) { + JButton button = new JButton( + entry.getValue().stream().map(String::valueOf).collect(Collectors.joining(" "))); + button.setName(String.valueOf(entry.getKey())); + GridBagConstraints bagConstraints = new GridBagConstraints(); + bagConstraints.insets = new Insets(2, 2, 2, 2); + if (counter % 9 == 0) { + bagConstraints.gridwidth = GridBagConstraints.REMAINDER; + } + charButtons.add(button); + button.addActionListener(e -> { + String name = ((JButton)e.getSource()).getName(); + ((JButton)e.getSource()).setEnabled(false); + vyberPismena.accept(SibeniceZaklad.abeceda.get(name.charAt(0))); + }); + letterPanel.add(button, bagConstraints); + counter++; + } + } + return letterPanel; + } + + public JLabel getWordLabel() { + if (wordLabel == null) { + wordLabel = new JLabel(""); + wordLabel.setHorizontalAlignment(SwingConstants.CENTER); + Font font = new Font("Curier", Font.BOLD , 20); + wordLabel.setFont(font); + setWorldText("AB_H"); + } + return wordLabel; + } + + public void setWorldText(String text) { + Pattern p = Pattern.compile("(.)"); + Matcher matcher = p.matcher(text); + text = matcher.replaceAll("$1 "); + getWordLabel().setText(text); + } + + public JLabel getImageLabel() { + if (imageLabel == null) { + imageLabel = new JLabel(""); + updateImage(); + } + return imageLabel; + } + + public void setMistakeCount(int mistakeCount) { + this.mistakeCount = mistakeCount; + updateImage(); + } + + public int getMistakeCount() { + return mistakeCount; + } + + private void updateImage() { + try { + BufferedImage image = ImageIO.read(this.getClass().getResourceAsStream("images/"+imageNames.get(mistakeCount))); + imageLabel.setIcon(new ImageIcon(image)); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public JButton getStartButton() { + if (startButton == null) { + startButton = new JButton("Start"); + startButton.addActionListener(e -> { + charButtons.forEach(b -> b.setEnabled(true)); + startHry.run(); + }); + } + return startButton; + } + + public JButton getEndButton() { + if (endButton == null) { + endButton = new JButton("End"); + endButton.addActionListener(e -> { + zakazTlacitkaPismenek(); + konecHry.run(); + }); + } + return endButton; + } + + public void zakazTlacitkaPismenek() { + charButtons.forEach(b -> b.setEnabled(false)); + } + + public JPanel getGamePanel() { + if (gamePanel == null) { + // HornĂ panel s tlaÄŤĂtky start a end + gamePanel = new JPanel(new FlowLayout()); + gamePanel.add(getStartButton()); + gamePanel.add(getEndButton()); + } + return gamePanel; + } +} diff --git a/Obesenec/src/cz/vsb/krouzek/SibeniceZaklad.java b/Obesenec/src/cz/vsb/krouzek/SibeniceZaklad.java new file mode 100644 index 0000000000000000000000000000000000000000..0859c7fdef39295580887b6b61b97d0eda1c0db4 --- /dev/null +++ b/Obesenec/src/cz/vsb/krouzek/SibeniceZaklad.java @@ -0,0 +1,53 @@ +package cz.vsb.krouzek; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +public class SibeniceZaklad { + + private static List<String> slova = Arrays.asList("pĹ™Ăroda", "telefon", "zahrada", "kytara", "knihovna", "banán", + "vlak", "internet", "obrazovka", "lĂ©tánĂ", "paprika", "jablko", "turistika", "boty", "slunce", "oheĹ", + "dálnice", "hokej", "zubnĂ kartáček", "jogurt"); + + private static Random random = new Random(); + + public static String vyberNahodneSlovo() { + int nahodneCislo = random.nextInt(slova.size()); + return slova.get(nahodneCislo); + } + + public static HashMap<Character, List<Character>> abeceda = new HashMap<>(); + + static { + // VytvoĹ™enĂ mapovánĂ pĂsmen + abeceda.put('A', Arrays.asList('A', 'Ă')); + abeceda.put('B', Arrays.asList('B')); + abeceda.put('C', Arrays.asList('C', 'ÄŚ')); + abeceda.put('D', Arrays.asList('D', 'ÄŽ')); + abeceda.put('E', Arrays.asList('E', 'É', 'Äš')); + abeceda.put('F', Arrays.asList('F')); + abeceda.put('G', Arrays.asList('G', 'G')); + abeceda.put('H', Arrays.asList('H')); + abeceda.put('I', Arrays.asList('I', 'ĂŤ')); + abeceda.put('J', Arrays.asList('J')); + abeceda.put('K', Arrays.asList('K')); + abeceda.put('L', Arrays.asList('L', 'Ä˝')); + abeceda.put('M', Arrays.asList('M')); + abeceda.put('N', Arrays.asList('N', 'Ň')); + abeceda.put('O', Arrays.asList('O', 'Ă“')); + abeceda.put('P', Arrays.asList('P')); + abeceda.put('Q', Arrays.asList('Q')); + abeceda.put('R', Arrays.asList('R', 'Ĺ')); + abeceda.put('S', Arrays.asList('S', 'Ĺ ')); + abeceda.put('T', Arrays.asList('T', 'Ť')); + abeceda.put('U', Arrays.asList('U', 'Ăš', 'Ĺ®')); + abeceda.put('V', Arrays.asList('V')); + abeceda.put('W', Arrays.asList('W')); + abeceda.put('X', Arrays.asList('X')); + abeceda.put('Y', Arrays.asList('Y', 'Ăť')); + abeceda.put('Z', Arrays.asList('Z', 'Ĺ˝')); + } + +} diff --git a/Obesenec/src/module-info.java b/Obesenec/src/module-info.java new file mode 100644 index 0000000000000000000000000000000000000000..b109885d59dbff558f1ed3f35ebd8c408c4edfd3 --- /dev/null +++ b/Obesenec/src/module-info.java @@ -0,0 +1,6 @@ +/** + * @author jez04 + * + */ +module Obesenec { +} \ No newline at end of file