Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java Модуль 4.docx
Скачиваний:
14
Добавлен:
01.07.2025
Размер:
20.72 Mб
Скачать

Import java.Util.ArrayList;

В классе stopka всего одно свойство класса (переменная класса) это список значений:

// Список значений

private ArrayList<karta> lst;

Обратите внимание, что тип значения: karta. Наш список будет хранить карты колоды, реализованные в классе karta.

В конструкторе класса создается изначально пустой список:

// Создание пустого списка значений

lst = new ArrayList<karta>();

Далее в классе перечислены методы, о которых мы говорили выше. Методы, которые понадобятся нам при работе со стопкой карт на игровом поле.Далее мы создадим массив из тринадцати стопок и будем работать со всеми стопками карт на игровом поле через массив.

На этом реализация класса stopka является полностью законченной для всех уровней сложности. Больше к этому классу мы возвращаться не будем. Можно закрыть закладку stopka.java (см.рис. 3).

Рис. 3

Получается, что четыре класса проекта у нас уже полностью закончены. Все остальные доработки коснутся классов poleи game.

Начало реализации класса game

Класс gameбудет самым большим и сложным в проекте. В этом классе будет сосредоточено программирование логики игры и контроль над действиями пользователя. Перейдем на закладку game.java и добавим в самом верху уже знакомые нам пять библиотек:

// Для работы с событиями(мышь, таймер)

import java.awt.event.*;

// Для работы с окнами и кнопками

import javax.swing.*;

// Для работы с графикой

import java.awt.*;

// Для работы с картинками

import javax.imageio.*;

// Для работы с файлами

import java.io.*;

// Класс, реализующий логику игры - управление игрой

public class game { }

Эти же библиотеки добавлены в классе pole. Начнем со свойств класса game (переменных класса).В самом верху класса добавим необходимые свойства:

// Для работы с событиями(мышь, таймер)

import java.awt.event.*;

// Для работы с окнами и кнопками

import javax.swing.*;

// Для работы с графикой

import java.awt.*;

// Для работы с картинками

import javax.imageio.*;

// Для работы с файлами

import java.io.*;

// Класс, реализующий логику игры - управление игрой

public class game

{

// Изображение рубашки карты

public Image rubashka;

// Массив стопок карт

private stopka[] stopki;

// Признак первой выдачи карт из верхней

// левой стопки

private boolean pervVidacha;

// Признак окончания игры

public boolean endGame;

}

Это переменные, которые понадобятся для реализации первого уровня сложности игры. Первая переменная это изображение рубашки карты. Это изображение будет передаваться в конструктор класса karta. Изображение будет общим для всех карт колоды расположенных рубашкой вверх:

// Изображение рубашки карты

public Image rubashka;

Вторая переменнаяэто массив,который будет хранить стопки карт игрового поля. Обратите внимание, что тип массиваstopka (класс, созданный на предыдущем этапе):

// Массив стопок карт

private stopka[] stopki;

Третья переменнаяэто признак первой выдачи карт из верхней левой колоды:

// Признак первой выдачи карт из верхней

// левой стопки

private boolean pervVidacha;

Смысл в этой переменной такой: изначально все карты будут загружаться в верхнюю левую стопку (см. рис. 4).

Рис. 4

Карты будут загружаться в порядке нахождения их в файлах. Другими словами, колода будет не размешанной и карты будут отсортированы по порядку. При первой выдаче карт они будут извлекаться случайным образом из верхней левой стопки, и помещаться в правую от нее стопку (см. рис. 5).

Рис. 5

Когда все карты в верхней левой стопке закончатся в перемешанном виде они будут находиться в правой от нее стопке(см. рис. 6).

Рис. 6

При первой выдаче карт из верхней левой стопки мы будем перемешивать карты. А при всех последующих выдачах карт мы будем уже использовать перемешанную стопку. Но пользователь не будет догадываться об этом. Пользователь будет думать, что все карты уже перемешаны изначально.

Четвертая переменная это признак окончания игры:

// Признак окончания игры

public boolean endGame;

Под блоком переменных класса добавим методы класса game, но пока без программного кода. Только заголовки методов:

// Изображение рубашки карты

public Image rubashka;

// Массив стопок карт

private stopka[] stopki;

// Признак первой выдачи карт из верхней

// левой стопки

private boolean pervVidacha;

// Признак окончания игры

public boolean endGame;

//Конструктор класса

public game()

{

}

// При захвате карты мышью

public void mouseDragged(int mX, int mY)

{

}

// При одиночном нажатии левой кнопки мыши

public void mousePressed(int mX, int mY)

{

}

// При двойном щелчке левой клавишей мыши

public void mouseDoublePressed(int mX, int mY)

{

}

// При отпускании левой кнопки мыши

public void mouseReleased(int mX, int mY)

{

}

// Определение стопки на которую нажали мышью

private int getNomKolodaPress(int mX, int mY)

{

// Если курсор мыши не попал по стопке карт

return-1;

}

// Выдача карт из верхней левой стопки

private void vidacha()

{

}

// Старт игры - Новая игра

public void start()

{

}

// Загрузка изображений колоды

private void load()

{

}

// Метод отрисовки всех стопок карт

public void drawKoloda(Graphics gr)

{

}

Программный код внутри этих методов нам предстоит написать позднее. А пока рассмотрим их предназначение. Конструктор класса, как обычно, выполняет стартовые действия при создании объекта:

//Конструктор класса

public game()

Четыре метода, которые начинаются со слова mouse, будут вызываться при различных действиях мышью. Этим методам будут передаваться координаты курсора мыши.

Метод getNomKolodaPress()будет вычислять номер стопки, на которую нажал мышью пользователь. Вычисление будет производиться по координатам курсора мыши:

// Определение стопки на которую нажали мышью

private int getNomKolodaPress(int mX, int mY)

Метод vidacha() будет отвечать за выдачу карт из верхней левой стопки:

// Выдача карт из верхней левой стопки

private void vidacha()

Метод start()будет вызываться при запуске новой игры:

// Старт игры - Новая игра

public void start()

Метод load()будет загружать изображения карт:

// Загрузка изображений колоды

private void load()

И метод drawKoloda() будет выполнять отрисовку всех стопок карт:

// Метод отрисовки всех стопок карт

public void drawKoloda(Graphics gr)

К созданию программного кода методов класса game мы приступим после реализации класса pole.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]