Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.Random;
- import javax.swing.*;
- import javax.swing.border.LineBorder;
- import java.awt.*;
- import javax.swing.plaf.basic.BasicArrowButton;
- class Dane implements Serializable {
- int rozmiar = 7;
- int szerokoscOkna = 1280;
- int wysokoscOkna = 720;
- Pole kratki[][] = new Pole[rozmiar][rozmiar];
- ArrayList<Point> historia = new ArrayList<Point>();
- ArrayList<Point> historia2 = new ArrayList<Point>();
- JButton cofnij = new JButton("cofnij");
- JButton przywroc = new JButton("przywroc");
- }
- class Pole extends JButton {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- int x;
- int y;
- Color kolorek = new Color(182, 126, 226);
- Color kolorek2 = new Color(164, 95, 220);
- Color kolorek3 = new Color(143, 61, 211);
- boolean czyKlik = false;
- boolean ukryty = false;
- boolean czyCofnij = false;
- int wartosc;
- Random random = new Random();
- private void czyWygrana() {
- int roz = Sekwencje.dane.rozmiar;
- int dobrze = 0;
- for(int i = 1; i < roz - 1; i++) {
- boolean v = false;
- boolean v2 = false;
- boolean v3 = false;
- boolean v4 = false;
- int val = Sekwencje.dane.kratki[0][i].wartosc; // gora
- int val2 = Sekwencje.dane.kratki[roz - 1][i].wartosc; // dol
- int val3 = Sekwencje.dane.kratki[i][0].wartosc; // lewo
- int val4 = Sekwencje.dane.kratki[i][roz - 1].wartosc; // prawo
- if(val == 0)
- v = true;
- else if(val2 == 0)
- v2 = true;
- else if(val3 == 0)
- v3 = true;
- else if(val4 == 0)
- v4 = true;
- int vals = 0;
- int vals2 = 0;
- int vals3 = 0;
- int vals4 = 0;
- for(int j = 1; j < roz - 1; j++) {
- if(Sekwencje.dane.kratki[j][i].czyKlik == false) { // gora i dol
- vals ++;
- if(vals >= val)
- v = true;
- vals2 = 0;
- }
- else {
- vals2 ++;
- if(vals2 >= val2)
- v2 = true;
- vals = 0;
- }
- if(Sekwencje.dane.kratki[i][j].czyKlik == false) { // lewo i prawo
- vals3 ++;
- if(vals3 >= val3)
- v3 = true;
- vals4 = 0;
- }
- else {
- vals4 ++;
- if(vals4 >= val4)
- v4 = true;
- vals3 = 0;
- }
- }
- if(v == true && v2 == true && v3 == true && v4 == true)
- dobrze ++;
- }
- if(dobrze == Sekwencje.dane.rozmiar - 2)
- ((Plansza) this.getParent().getParent().getParent().getParent().getParent().getParent()).wygrana();
- }
- //nadpisuje rysowanie guzikow, zeby miec dostep do rollover itp, uzywam tego zamiast actionlistenera
- @Override
- protected void paintComponent(Graphics g) {
- if(getModel().isEnabled() == true){
- if (getModel().isPressed()) {
- if(this.czyKlik == false) {
- this.setBackground(kolorek);
- this.czyKlik = true;
- }
- else {
- this.setBackground(kolorek3);
- this.czyKlik = false;
- }
- getModel().setPressed(false);
- getModel().setRollover(false);
- if(czyCofnij == false) {
- Sekwencje.dane.historia.add(new Point(x, y));
- Sekwencje.dane.cofnij.setEnabled(true);
- Sekwencje.dane.przywroc.setEnabled(false);
- Sekwencje.dane.historia2.clear();
- }
- czyCofnij = false;
- czyWygrana();
- }
- else if (getModel().isRollover())
- this.setBackground(kolorek2);
- else {
- if(this.czyKlik == false)
- this.setBackground(kolorek);
- else
- this.setBackground(kolorek3);
- }
- }
- super.paintComponent(g);
- }
- //konstruktor guzikow
- Pole(int a, int b) {
- x = a;
- y = b;
- this.setText("");
- this.setFont(new Font(this.getFont().getFontName(), this.getFont().getStyle(), 48));
- this.setBackground(kolorek);
- this.setBorder(new LineBorder(new Color(180, 184, 29)));
- this.setFocusPainted(false);
- this.ukryty = random.nextBoolean();
- UIManager.getDefaults().put("Button.disabledText", Color.BLACK); //zmiana koloru tekstu na guzikach jesli sa wylaczone
- UIManager.getDefaults().put("TextArea.disabledText", Color.BLACK); //zmiana koloru tekstu na pomocy
- }
- }
- class Plansza extends JFrame {
- JSplitPane split = new JSplitPane();
- JPanel plansza = new JPanel();
- JPanel opcje = new JPanel();
- JPanel help = new JPanel();
- JPanel wygrana = new JPanel();
- Container cp = getContentPane();
- JTextField rozmiarText = new JTextField();
- JTextArea pomocText = new JTextArea();
- class NowaGra implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- Sekwencje.dane.kratki = new Pole[Sekwencje.dane.rozmiar][Sekwencje.dane.rozmiar];
- Sekwencje.dane.historia.clear();
- Sekwencje.dane.historia2.clear();
- plansza = new JPanel();
- init();
- stworz();
- zlicz();
- }
- }
- class Cofnij implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- Point poz = new Point(Sekwencje.dane.historia.get(Sekwencje.dane.historia.size() - 1).x, Sekwencje.dane.historia.get(Sekwencje.dane.historia.size() - 1).y);
- Sekwencje.dane.kratki[poz.x][poz.y].czyCofnij = true;
- if(Sekwencje.dane.kratki[poz.x][poz.y].getModel().isPressed() == true)
- Sekwencje.dane.kratki[poz.x][poz.y].getModel().setPressed(false);
- else
- Sekwencje.dane.kratki[poz.x][poz.y].getModel().setPressed(true);
- Sekwencje.dane.historia2.add(Sekwencje.dane.historia.get(Sekwencje.dane.historia.size() - 1));
- Sekwencje.dane.historia.remove(Sekwencje.dane.historia.size() - 1);
- Sekwencje.dane.przywroc.setEnabled(true);
- if(Sekwencje.dane.historia.size() == 0)
- Sekwencje.dane.cofnij.setEnabled(false);
- }
- }
- class Przywroc implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- Point poz = new Point(Sekwencje.dane.historia2.get(Sekwencje.dane.historia2.size() - 1).x, Sekwencje.dane.historia2.get(Sekwencje.dane.historia2.size() - 1).y);
- Sekwencje.dane.kratki[poz.x][poz.y].czyCofnij = true;
- if(Sekwencje.dane.kratki[poz.x][poz.y].getModel().isPressed() == true)
- Sekwencje.dane.kratki[poz.x][poz.y].getModel().setPressed(false);
- else
- Sekwencje.dane.kratki[poz.x][poz.y].getModel().setPressed(true);
- Sekwencje.dane.historia.add(Sekwencje.dane.historia2.get(Sekwencje.dane.historia2.size() - 1));
- Sekwencje.dane.historia2.remove(Sekwencje.dane.historia2.size() - 1);
- Sekwencje.dane.cofnij.setEnabled(true);
- if(Sekwencje.dane.historia2.size() == 0)
- Sekwencje.dane.przywroc.setEnabled(false);
- }
- }
- class RozmiarGuzik implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- if(((BasicArrowButton) e.getSource()).getDirection() == 1)
- Sekwencje.dane.rozmiar ++;
- else
- Sekwencje.dane.rozmiar --;
- if(Sekwencje.dane.rozmiar < 5)
- Sekwencje.dane.rozmiar = 5;
- if(Sekwencje.dane.rozmiar > 22)
- Sekwencje.dane.rozmiar = 22;
- rozmiarText.setText(Integer.toString(Sekwencje.dane.rozmiar - 2));
- }
- }
- class Zapisz implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- JFileChooser j = new JFileChooser();
- j.setApproveButtonText("Zapisz");
- int r = j.showOpenDialog(null);
- if(r == JFileChooser.APPROVE_OPTION){
- try {
- FileOutputStream f = new FileOutputStream(j.getSelectedFile());
- ObjectOutputStream os = new ObjectOutputStream(f);
- os.writeObject(Sekwencje.dane);
- f.close();
- } catch (IOException x) {}
- }
- }
- }
- class Wczytaj implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- JFileChooser j = new JFileChooser();
- j.setApproveButtonText("Wczytaj");
- int r = j.showOpenDialog(null);
- if(r == JFileChooser.APPROVE_OPTION){
- try {
- FileInputStream f = new FileInputStream(j.getSelectedFile());
- ObjectInputStream is = new ObjectInputStream (f);
- Sekwencje.dane = (Dane)is.readObject();
- f.close();
- } catch (IOException x) {} catch (ClassNotFoundException x){}
- plansza = new JPanel();
- opcje = new JPanel();
- if(Sekwencje.dane.historia.size() > 0)
- Sekwencje.dane.cofnij.setEnabled(true);
- if(Sekwencje.dane.historia2.size() > 0)
- Sekwencje.dane.przywroc.setEnabled(true);
- init();
- zlicz();
- opcje();
- for (int i = 0; i < Sekwencje.dane.rozmiar; i++) {
- for (int i2 = 0; i2 < Sekwencje.dane.rozmiar; i2++) {
- plansza.add(Sekwencje.dane.kratki[i][i2]);
- }
- }
- }
- }
- }
- class Pomoc implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- if(split.getLeftComponent().getName() == "plansza")
- split.setLeftComponent(help);
- else
- split.setLeftComponent(plansza);
- rozmiarUpdate();
- }
- }
- private void rozmiarUpdate() {
- Sekwencje.dane.szerokoscOkna = this.getWidth();
- Sekwencje.dane.wysokoscOkna = this.getHeight();
- split.setDividerLocation(this.getWidth() / 10 * 7);
- pomocText.setSize(Sekwencje.dane.szerokoscOkna / 10 * 7, Sekwencje.dane.wysokoscOkna);
- }
- private void init() {
- this.setSize(Sekwencje.dane.szerokoscOkna, Sekwencje.dane.wysokoscOkna);
- this.setVisible(true);
- // zmiana wielkosci okna przesuwa podzial ekranu w odpowiednie miejsce
- this.addComponentListener(new ComponentAdapter() {
- public void componentResized(ComponentEvent componentEvent) {
- rozmiarUpdate();
- }
- });
- Sekwencje.dane.cofnij.setEnabled(false);
- Sekwencje.dane.przywroc.setEnabled(false);
- plansza.setLayout(new GridLayout(Sekwencje.dane.rozmiar, Sekwencje.dane.rozmiar));
- plansza.setName("plansza");
- opcje.setLayout(new GridLayout(3, 3));
- split.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
- split.setLeftComponent(plansza);
- split.setRightComponent(opcje);
- split.setEnabled(false);
- rozmiarUpdate();
- cp.add(split);
- }
- private void opcje() {
- BasicArrowButton rozmiarZwieksz = new BasicArrowButton(BasicArrowButton.NORTH);
- BasicArrowButton rozmiarZmniejsz = new BasicArrowButton(BasicArrowButton.SOUTH);
- JTextField wygranaText = new JTextField();
- pomocText.setText("Cyfry przy brzegu diagramu oznaczają, z ilu pól jasnych (cyfry u góry i z lewej strony) lub ciemnych (cyfry u dołu i z prawej strony) składa się najdłuższa sekwencja (nieprzerwany ciąg pól) w danym rzędzie lub kolumnie. Zaczernione przy wykorzystaniu tych współrzędnych odpowiednie pola - utworzą rysunek.");
- pomocText.setFont(new Font(this.getFont().getFontName(), this.getFont().getStyle(), 48));
- pomocText.setWrapStyleWord(true);
- pomocText.setDisabledTextColor(Color.BLACK);
- pomocText.setLineWrap(true);
- pomocText.setOpaque(false);
- pomocText.setEnabled(false);
- rozmiarText.setText(Integer.toString(Sekwencje.dane.rozmiar - 2));
- rozmiarText.setFont(new Font(this.getFont().getFontName(), this.getFont().getStyle(), 48));
- rozmiarText.setHorizontalAlignment(JTextField.CENTER);
- rozmiarText.setEditable(false);
- wygranaText.setBackground(new Color(0, 0, 0, 0));
- wygranaText.setFont(new Font(this.getFont().getFontName(), this.getFont().getStyle(), 48));
- wygranaText.setHorizontalAlignment(JTextField.CENTER);
- wygranaText.setText("WYGRANA!");
- wygranaText.setLayout(null);
- rozmiarZwieksz.addActionListener(new RozmiarGuzik());
- rozmiarZmniejsz.addActionListener(new RozmiarGuzik());
- Sekwencje.dane.cofnij.addActionListener(new Cofnij());
- Sekwencje.dane.przywroc.addActionListener(new Przywroc());
- JButton nowaGra = new JButton("Nowa gra");
- JButton zapisz = new JButton("Zapisz");
- JButton wczytaj = new JButton("Wczytaj");
- JButton pomoc = new JButton("Pomoc");
- nowaGra.addActionListener(new NowaGra());
- zapisz.addActionListener(new Zapisz());
- wczytaj.addActionListener(new Wczytaj());
- pomoc.addActionListener(new Pomoc());
- help.add(pomocText);
- opcje.add(nowaGra);
- opcje.add(zapisz);
- opcje.add(wczytaj);
- opcje.add(rozmiarText);
- opcje.add(rozmiarZwieksz);
- opcje.add(rozmiarZmniejsz);
- opcje.add(Sekwencje.dane.cofnij);
- opcje.add(Sekwencje.dane.przywroc);
- opcje.add(pomoc);
- rozmiarUpdate();
- }
- // zliczanie wartosci brzegow planszy
- private void zlicz() {
- for (int i = 1; i < Sekwencje.dane.rozmiar - 1; i++) {
- int maxKlik = 0;
- int tempKlik = 0;
- int maxnKlik = 0;
- int tempnKlik = 0;
- int maxKlik2 = 0;
- int tempKlik2 = 0;
- int maxnKlik2 = 0;
- int tempnKlik2 = 0;
- for (int j = 1; j < Sekwencje.dane.rozmiar - 1; j++) {
- if (Sekwencje.dane.kratki[i][j].ukryty == true) {
- tempnKlik = 0;
- tempKlik++;
- if (tempKlik > maxKlik)
- maxKlik = tempKlik;
- } else {
- tempKlik = 0;
- tempnKlik++;
- if (tempnKlik > maxnKlik)
- maxnKlik = tempnKlik;
- }
- if (Sekwencje.dane.kratki[j][i].ukryty == true) {
- tempnKlik2 = 0;
- tempKlik2++;
- if (tempKlik2 > maxKlik2)
- maxKlik2 = tempKlik2;
- } else {
- tempKlik2 = 0;
- tempnKlik2++;
- if (tempnKlik2 > maxnKlik2)
- maxnKlik2 = tempnKlik2;
- }
- }
- Sekwencje.dane.kratki[i][0].wartosc = maxnKlik;
- Sekwencje.dane.kratki[i][Sekwencje.dane.rozmiar - 1].wartosc = maxKlik;
- Sekwencje.dane.kratki[0][i].wartosc = maxnKlik2;
- Sekwencje.dane.kratki[Sekwencje.dane.rozmiar - 1][i].wartosc = maxKlik2;
- Sekwencje.dane.kratki[i][0].setText(Integer.toString(maxnKlik));
- Sekwencje.dane.kratki[i][Sekwencje.dane.rozmiar - 1].setText(Integer.toString(maxKlik));
- Sekwencje.dane.kratki[0][i].setText(Integer.toString(maxnKlik2));
- Sekwencje.dane.kratki[Sekwencje.dane.rozmiar - 1][i].setText(Integer.toString(maxKlik2));
- }
- }
- // tworzenie planszy
- private void stworz() {
- for (int i = 0; i < Sekwencje.dane.rozmiar; i++) {
- for (int j = 0; j < Sekwencje.dane.rozmiar; j++) {
- Sekwencje.dane.kratki[i][j] = new Pole(i, j);
- if (i == 0 || i == Sekwencje.dane.rozmiar - 1 || j == 0 || j == Sekwencje.dane.rozmiar - 1) {
- if (i == Sekwencje.dane.rozmiar - 1 && j == Sekwencje.dane.rozmiar - 1)
- Sekwencje.dane.kratki[i][j].setBackground(new Color(143, 61, 211));
- else if (i == 0 && j == 0)
- Sekwencje.dane.kratki[i][j].setBackground(new Color(208, 173, 237));
- else if ((i == 0 && j == Sekwencje.dane.rozmiar - 1) || (i == Sekwencje.dane.rozmiar - 1 && j == 0))
- Sekwencje.dane.kratki[i][j].setVisible(false);
- Sekwencje.dane.kratki[i][j].setEnabled(false);
- }
- plansza.add(Sekwencje.dane.kratki[i][j]);
- }
- }
- }
- public void wygrana() {
- System.out.println("tet");
- Sekwencje.dane.cofnij.setEnabled(false);
- Sekwencje.dane.przywroc.setEnabled(false);
- Sekwencje.dane.kratki[Sekwencje.dane.rozmiar / 2][Sekwencje.dane.rozmiar / 2].setText(":)");
- for(Component component : plansza.getComponents()) {
- component.setEnabled(false);
- }
- }
- // konstruktor planszy
- Plansza() {
- init();
- stworz();
- zlicz();
- opcje();
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- }
- }
- public class Sekwencje {
- static Dane dane = new Dane();
- public static void main(String arg[]) {
- JFrame gra = new Plansza();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment