https://pastein.ru/t/CN
скопируйте уникальную ссылку для отправки
Загрузка данных
package kosynka;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.Timer;
public class Logic {
//признак окончания игры
public boolean gameEnd; // endGame
public Image backOfCard; // rubashka
//массив стопок карт
private Stack[] stackArray; // stopki
//признак первой выдачи карт из верхней левой стопки
private boolean firstDelivery; // pervVidacha
//номеро стопки захваченной пользователем
private int selectedStackNum; // nomStopki
//номер карты в стопке захваченной пользователем
private int selectCardNum;
//Смещение координат курсора мыши
//относительно координаты карты
private int dX, dY;
//координаты карты до начала переноса мышью
private int oldX, oldY;
//таймер для эффекта окончания игры
private Timer timerGameEnd;
//конструктор
public Logic() {
try {
backOfCard = ImageIO.read(new File("C:\\cards\\cardback.png"));
}
catch (Exception ex) {
System.out.println("Изображение рубашки не найдено");
}
//создание массива из 13 элементов
//каждый элемент массива - это список значения (стопка карт)
stackArray = new Stack[13];
//заполнение массива в цикле
for(int i = 0; i<13; i++) {
stackArray[i] = new Stack();
}
//таймер для эффекта окончания игры
//будет запсукаться при успешном завершении игры
//скорость работы - 10 раз в секунду
timerGameEnd = new Timer(100, new ActionListener() {
public void actionPerformed(ActionEvent e) {
//перебираем все четыре домашние стопки
for(int i = 2; i<=5; i++) {
//получаем самую нижнюю карту
}
}
}
start();
}
//При захвате карты мышью
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) {
int num = getPressedStackNum(mX, mY);
if (num == 0) {
delivery();
}
}
//Определение стопки на которую нажали мышью
private int getPressedStackNum (int mX, int mY) {
//Если курсор мыши не попал по стопке карт
//Если стопка не выбрана
int num = -1;
//если курсор находится в зоне верхних стопок
if( (mY>= 15) && (mY <= (15+97))) {
if((mX>=30) && (mX <=(30+72))) num = 0;
if((mX>=140) && (mX <=(140+72))) num = 1;
if((mX>=360) && (mX <=(360+72))) num = 2;
if((mX>=470) && (mX <=(470+72))) num = 3;
if((mX>=580) && (mX <=(580+72))) num = 4;
if((mX>=690) && (mX <=(690+72))) num = 5;
}
//если курсор находится в зоне нижних стопок
else if( (mY>=150) && (mY<=700) ) {
if( (mX>=30) && (mX<= 110*7) ) {
if(( (mX-30)%110 ) <=72) {
num = (mX-30)/110;
num += 6;
}
}
}
return num;
}
//Выдача карт из верхней леовй стопки
private void delivery() { // vidacha()
if(stackArray[0].size()>0) {
int num;
//Если это первая выдача
if(firstDelivery == true) {
//поулчаем номер
num = (int)(Math.random()*stackArray[0].size());
}
else {
num = stackArray[0].size() - 1;
}
//получаем карту из стопки под номером 0
Card card = stackArray[0].getCard(num);
//делаем отображение картинкой
card.isInverted= false;
card.x+=110;
//Увеличаем координату на 110
stackArray[1].addCard(card);
stackArray[0].removeCard(num);
}
else {
//вычисляем номер последней картф
int numLast = stackArray[1].size()-1;
//переносим карты из стопки с номером 1 в стопку 0
for(int i = numLast; i>=0; i--) {
Card card = stackArray[1].getCard(i);
card.isInverted = true;
//уменьшаем коодинату на 110
card.x -= 110;
stackArray[0].addCard(card);
}
stackArray[1].clear();
firstDelivery= false;
}
}
///старт игры - новая игры
public void start() {
//очищаем все тринадцать списков
for(int i = 0; i<13; i++) {
//удаление элементов
stackArray[i].clear();
}
//Производим
load();
distribution();
gameEnd = false;
firstDelivery = true;
}
//загрузка изображений колоды
private void load() {
for(int i = 0; i <= 52; i++) {
//в верхнюю левую стопку загружаем карты
stackArray[0].addCard(new Card("C:\\cards\\k" + (i) + ".png", backOfCard, i));
}
}
//метод отрисовки всех стопок карт
public void drawStack(Graphics gr) {
//ВЕРХНЯЯ ЛЕВАЯ СТОПКА
//ЕСЛИ В СТОПКЕ ЕСТЬ КАРТЫ
if(stackArray[0].size()>0) {
//поулчаем и рисуем самую верхнюю карту
stackArray[0].getCard(stackArray[0].size()-1).draw(gr);
}
//вторая слева верхняя стопка
if(stackArray[1].size()>1) {
stackArray[1].getCard(stackArray[1].size()-2 ).draw(gr);
//получаем и рисуем самую верхнюю карту
stackArray[1].getCard(stackArray[1].size()-1).draw(gr);
}
else if(stackArray[1].size()==1) {
stackArray[1].getCard(stackArray[1].size()-1).draw(gr);
}
//ОТРИСОВА ЧЕТЫРЕХ ДОМАШНИХ СТОПОК
for(int i = 2; i<=5; i++) {
//если в стопке более одной карты
if(stackArray[i].size()>1) {
//полккчаем и рисуем вторую сверху карту
stackArray[i].getCard(stackArray[i].size()-2).draw(gr);
//получаем и рисуем самую верхнюю карту
stackArray[i].getCard(stackArray[i].size()-1).draw(gr);
}
else if(stackArray[i].size()==1) {
stackArray[i].getCard(stackArray[i].size()-1).draw(gr);
}
}
//нижние семь стопок
for(int i = 6; i<13; i++) {
//Если в стопке есть карты
if(stackArray[i].size()>0) {
//перебираем все карты из стопки
for(int j=0;j<stackArray[i].size();j++) {
stackArray[i].getCard(j).draw(gr);
}
}
}
}
private void distribution() { //razdacha()
//начальная координата по Х
int x = 30;
//перебираем все нижние стопки
for(int i = 6; i<13; i++) {
//добавление карт в стопку
for(int j = 6; j<=i; j++) {
//получваем номер случайной стопки карты из верхней левой стопки
int random = (int)(Math.random()*stackArray[0].size());
//получаем эту карту
Card card = stackArray[0].getCard(random);
//если карта не самая верхняя, то показываем рубашкой вверх
if(j<i) card.isInverted = true;
else card.isInverted = false;
//кордината по Х
card.x = x;
//Каждую следующую карту располагаем ниже на 20 пикселей
card.y = 150+stackArray[i].size()*20;
//добавляем карту в нижнюю стопку
stackArray[i].addCard(card);
//удаляем карту из верхней левой стопки
stackArray[0].removeCard(random);
}
//увеличиваем координату по Х
x+=110;
}
}
}