Skip to content
Snippets Groups Projects
Commit 1594a576 authored by jez04's avatar jez04
Browse files

kostra hry Obesenec - GUI

parent b00b2f86
No related merge requests found
/bin/
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) {
}
}
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;
}
}
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', 'Ž'));
}
}
/**
* @author jez04
*
*/
module Obesenec {
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment