Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой_ТСПП_Женька.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.69 Mб
Скачать

З авдання № 5

“Вибір даних за ознакою”

1. Зміст виконання завдання

Змістом виконання завдання є написання і дебагинг програмного коду на алгоритмічній мові Java, в якому здійснюється розпознавання вибраного елементу та отримання відповідного результату .

2. Порядок виконання завдання

1) Написати програмний код за індивідуальним завданням.

2) Завантажити програмний код до JVM.

3) Виконати старт і дебагинг програми і виправити помилки, якщо такі з’являться.

4) Оформити розділ пояснювальної записки.

Програмний код:

/*"Алхимия". Правила:

Комбинируйте по два элемента для создания новых. В начале игры доступно 4 элемента. Ваша цель - открыть все 12. Удачных экспериментов! */

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class Alchemy extends JFrame

implements ActionListener{

JButton button;

JFrame frame,start;

JLabel labelOutput = new JLabel();

JLabel ilabelOutput = new JLabel();

// Элементы

Checkbox water = new Checkbox("Water",null,false);//Вода

Checkbox ground = new Checkbox("Ground");//Земля

Checkbox air = new Checkbox("Air");//Воздух

Checkbox fire = new Checkbox("Fire");//Огонь

Checkbox dust = new Checkbox("Dust");//Пыль

Checkbox dirt = new Checkbox("Dirt");//Грязь

Checkbox pairs = new Checkbox("Pairs");//Пар

Checkbox swamp = new Checkbox("Swamp");//Болото

Checkbox stone = new Checkbox("Stone");//Камень

Checkbox metal = new Checkbox("Metal");//Металл

Checkbox sand = new Checkbox("Sand");//Песок

Checkbox beach = new Checkbox("Beach");//Пляж

//Иконки

ImageIcon IMGwater = new ImageIcon("icons/water.png");

JLabel iwater = new JLabel(IMGwater);

ImageIcon IMGground = new ImageIcon("icons/ground.png");

JLabel iground = new JLabel(IMGground);

ImageIcon IMGair = new ImageIcon("icons/air.png");

JLabel iair = new JLabel(IMGair);

ImageIcon IMGfire = new ImageIcon("icons/fire.png");

JLabel ifire = new JLabel(IMGfire);

ImageIcon IMGdust = new ImageIcon("icons/dust.png");

JLabel idust = new JLabel(IMGdust);

ImageIcon IMGdirt = new ImageIcon("icons/dirt.png");

JLabel idirt = new JLabel(IMGdirt);

ImageIcon IMGpairs = new ImageIcon("icons/pairs.png");

JLabel ipairs = new JLabel(IMGpairs);

ImageIcon IMGswamp = new ImageIcon("icons/swamp.png");

JLabel iswamp = new JLabel(IMGswamp);

ImageIcon IMGstone = new ImageIcon("icons/stone.png");

JLabel istone = new JLabel(IMGstone);

ImageIcon IMGmetal = new ImageIcon("icons/metal.png");

JLabel imetal = new JLabel(IMGmetal);

ImageIcon IMGsand = new ImageIcon("icons/sand.png");

JLabel isand = new JLabel(IMGsand);

ImageIcon IMGbeach = new ImageIcon("icons/beach.png");

JLabel ibeach = new JLabel(IMGbeach);

ImageIcon IMGerror = new ImageIcon("icons/error.png");

JLabel ierror = new JLabel(IMGerror);

boolean dustOn, dirtOn, pairsOn, swampOn, stoneOn, metalOn, sandOn, beachOn;

//Заносим элементы в коллекции

ArrayList<Checkbox> Elements = new ArrayList<Checkbox>() {{

add(water); add(ground); add(air); add(fire); add(dust); add(dirt); add(pairs); add(swamp); add(stone); add(metal); add(sand); add(beach);

}};

ArrayList<Boolean> ElementsOn = new ArrayList<Boolean>() {{

add(dustOn); add(dirtOn); add(pairsOn); add(swampOn); add(stoneOn); add(metalOn); add(sandOn); add(beachOn);

}};

ArrayList<JLabel> Labels = new ArrayList<JLabel>() {{

add(iwater); add(iground); add(iair); add(ifire); add(idust);

add(idirt); add(ipairs); add(iswamp); add(istone); add(imetal);

add(isand); add(ibeach);

}};

public Alchemy() {

//Инструкции к игре

JOptionPane.showMessageDialog(start, "Combine the two elements for creating new ones. At the beginning of the game is available 4 elements. Your goal is to open all 12. Successful experiments!");

Container container = getContentPane();

container.setLayout(new BorderLayout(5, 0));

container.setBackground(Color.black);

Font font1 = new Font("TimesRoman", Font.PLAIN, 15);

Font font2 = new Font("TimesRoman", Font.BOLD, 20);

//Шрифт подписей элементов и цвет

for(int j=0; j < Elements.size();j++) {

Elements.get(j).setForeground(Color.WHITE);

Elements.get(j).setFont(font1);

}

//Рабочая кнопка,добавление слушателя

JButton button = new JButton("Enter");

button.addActionListener(this);

//Название

JLabel title = new JLabel("Alchemy");

title.setBackground(Color.black);

title.setForeground(Color.WHITE);

title.setFont(font2);

title.setHorizontalAlignment(JLabel.CENTER);

//Вывод текста

labelOutput.setForeground(Color.WHITE);

labelOutput.setFont(font2);

labelOutput.setHorizontalAlignment(JLabel.CENTER);

//Панель для элементов

JPanel elementsPanel = new JPanel();

elementsPanel.setBackground(Color.black);

elementsPanel.setLayout(new GridLayout(4,6,5,10));

//Добавление элементов и иконок на панель

for(int j=0; j < Elements.size();j++) {

elementsPanel.add(Elements.get(j));

elementsPanel.add(Labels.get(j));

}

//Все элементы, кроме 4 главных, делаем невидимыми

for(int j=0; j < ElementsOn.size();j++) {

ElementsOn.set(j, false);

}

doVisible();

//Расположение объектов в главном окне

container.setLayout(null);

container.add(title);

title.setBounds(0,5,435,40);

container.add(elementsPanel);

elementsPanel.setBounds(15,70,410,210);

container.add(button);

button.setBounds(190,290,70,25);

container.add(labelOutput);

labelOutput.setBounds(15,330,335,60);

container.add(ilabelOutput);

ilabelOutput.setBounds(350,330,50,50);

}

//Главная функция

public static void main(String args[]) {

//Главное окно

Alchemy frame = new Alchemy();

frame.setTitle("Task 5: Alchemy ");

frame.setLocation(100, 100);

frame.setSize(435, 440);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

//Реакция на нажатие кнопки

public void actionPerformed(ActionEvent e) {

if(doCheck())

Connections();

if(dustOn & dirtOn & pairsOn & swampOn & stoneOn & metalOn &sandOn & beachOn)

labelOutput.setText("Game over");

doVisible();

AllFalse();

}

//Соединение элементов

public void Connections() {

//water + ground = swamp

if(water.getState()&ground.getState())

{

if(swampOn == false) //Если элемент не был открыт

{

labelOutput.setText("You open swamp!");

ilabelOutput.setIcon(IMGswamp);

swampOn = true;

}

else

{ labelOutput.setText("You create swamp");

ilabelOutput.setIcon(IMGswamp);}

}

// ground+fire=stone

else if(fire.getState()&ground.getState())

{

if(stoneOn == false)

{

labelOutput.setText("You open stone!");

ilabelOutput.setIcon(IMGstone);

stoneOn = true;

}

else

{ labelOutput.setText("You create stone");

ilabelOutput.setIcon(IMGstone); }

}

// air+water=pairs

else if(air.getState()&water.getState())

{

if(pairsOn == false)

{

labelOutput.setText("You open pairs!");

ilabelOutput.setIcon(IMGpairs);

pairsOn = true;

}

else

{ labelOutput.setText("You create pairs");

ilabelOutput.setIcon(IMGpairs); }

}

// air+ground = dust

else if(air.getState()&ground.getState())

{

if(dustOn == false)

{

labelOutput.setText("You open dust");

ilabelOutput.setIcon(IMGdust);

dustOn = true;

}

else

{ labelOutput.setText("You create dust");

ilabelOutput.setIcon(IMGdust); }

}

//air+stone=sand

else if(air.getState()&stone.getState())

{

if(sandOn == false)

{

labelOutput.setText("You open sand!");

ilabelOutput.setIcon(IMGsand);

sandOn = true;

}

else

{ labelOutput.setText("You create sand");

ilabelOutput.setIcon(IMGsand); }

}

//water+sand=beach

else if(water.getState()&sand.getState())

{

if(beachOn == false)

{

labelOutput.setText("You open beach!");

ilabelOutput.setIcon(IMGbeach);

beachOn = true;

}

else

{labelOutput.setText("You create beach");

ilabelOutput.setIcon(IMGbeach); }

}

//water+dust=dirt

else if(water.getState()&dust.getState())

{

if(dirtOn == false)

{

labelOutput.setText("You open dirt!");

ilabelOutput.setIcon(IMGdirt);

dirtOn = true;

}

else

{ labelOutput.setText("You create dirt");

ilabelOutput.setIcon(IMGdirt); }

}

//fire+stone=metal

else if(fire.getState()&stone.getState())

{

if(metalOn == false)

{

labelOutput.setText("You open metal!");

ilabelOutput.setIcon(IMGmetal);

metalOn = true;

}

else

{ labelOutput.setText("You create metal");

ilabelOutput.setIcon(IMGmetal); }

}

else

{ labelOutput.setText("These elements are not connected");

ilabelOutput.setIcon(IMGerror);}

}

//Установка для всех элементов значения ЛОЖЬ

public void AllFalse()

{

for(int j=0; j < Elements.size();j++)

(Elements.get(j)).setState(false);

}

//Установка видимости полей

public void doVisible()

{

dust.setVisible(dustOn);

dirt.setVisible(dirtOn);

pairs.setVisible(pairsOn);

swamp.setVisible(swampOn);

stone.setVisible(stoneOn);

metal.setVisible(metalOn);

sand.setVisible(sandOn);

beach.setVisible(beachOn);

idust.setVisible(dustOn);

idirt.setVisible(dirtOn);

ipairs.setVisible(pairsOn);

iswamp.setVisible(swampOn);

istone.setVisible(stoneOn);

imetal.setVisible(metalOn);

isand.setVisible(sandOn);

ibeach.setVisible(beachOn);

}

//Проверка количества выбраных значений

public boolean doCheck()

{

int bufer=0;

for(int j=0; j < Elements.size();j++)

if ((Elements.get(j)).getState() == true)

bufer = bufer+1;

//Если выбрано два элемента

if (bufer == 2)

return true;

//Если не выбрано ни одного элемента

if (bufer == 0)

labelOutput.setText("Try again - choose 2 elements");

else

//Выбран один элемент или больше двух

labelOutput.setText("Just choose 2 elements");

ilabelOutput.setIcon(IMGerror);

return false;

}

}

Висновок: В ході виконання завдання була написана програма на алгоритмічній мові Java, в якої здійснюється розпознавання вибраного елементу та отримання відповідного результату .