
З авдання № 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, в якої здійснюється розпознавання вибраного елементу та отримання відповідного результату .