русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Раздача карт в нижние семь стопок


Дата добавления: 2015-06-12; просмотров: 1527; Нарушение авторских прав


Для завершения второго уровня сложности нам осталось добавить еще один метод в класс game. Это метод для раздачи карт в нижние семь стопок. После старта игры все карты загружаются в стопку с номером 0. Нам необходимо выполнить раздачу карт из стопки с номером0 в нижние семь стопок.

Схема раздачи будет следующей. Будем перебирать все нижние семь стопок и добавлять в них карты по очереди, начиная с самой левой с номером6. Каждая карта выбирается случайным образом из стопки с номером 0. После добавления в нижнюю стопку, карта будет удаляться из стопки с номером 0. При добавлении карт в одну из нижних стопок –будем размещать каждую следующую карту на 20пикселей ниже. Все карты, кроме самой верхней будут отображаться рубашкой вверх. В каждую последующую стопку будем добавлять карт на одну больше, чем в текущую. Получится так,что нижние стопки будут содержать:

стопка с номером 6: одну карту,

стопка с номером 7: две карты,

стопка с номером 8: три карты,

стопка с номером 9: четыре карты,

стопка с номером 10: пять карт,

стопка с номером 11: шесть карт,

стопка с номером 12: семь карт.

Добавим в класс game метод razdacha(), метод реализует описанную выше схему:

// Раздача карт в нижние семь стопок

private void razdacha()

{

//Начальная координата по X

int x = 30;

//Перебираем все стопки нижние семь стопок

for (int i=6;i<13;i++)

{

//Добавление карт в стопку

for (int j=6;j<=i;j++)

{

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

int rnd = (int)(Math.random()*stopki[0].size());

// Получаем эту карту

karta getKarta = stopki[0].get(rnd);

// Если карта не самая верхняя,

// то показываем ее рубашкой

if (j<i) getKarta.tipRubashka = true;

else getKarta.tipRubashka = false; // Если карта верхняя

// Координата по X

getKarta.x = x;



// Каждую следующую карту располагаем ниже на 20пикселей

getKarta.y = 130+stopki[i].size()*20;

// Добавляем карту в нижнюю стопку

stopki[i].add(getKarta);

// Удаляем карту из верхней левой стопки

stopki[0].remove(rnd);

}

//Увеличиваем координату по X

// (смещаемся правее)

x+=110;

}

}

Далее перейдем в метод start() и после метода load()–запишем вызов метода razdacha():

// Производим загрузку

load();

//Раздача карт в нижние семь стопок

razdacha();

//Признак конца игры - false

endGame = false;

Теперь при старте игры,после загрузки карт, произойдет раздача карт в нижние семь стопок. И в верхней левой стопке с номером 0–останется 24карты. Выполним запуск проекта (см. рис. 4).

Рис. 4

На этом реализация игры"Пасьянс-Косынка" для второго уровня сложности закончена. Полный программный код класса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;

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

public game()

{

//Загрузка изображения рубашки карты

try

{

rubashka = ImageIO.read(new File("c:\\karta\\k0.png"));

}

catch (Exception ex) {}

//Создание массива из 13 элементов,

// каждый элемент массива - это список значений (стопка карт)

stopki = new stopka[13];

// Для каждого элемента массива в цикле

//создаем новый объект

for (int i=0;i<13;i++)

{

//Создание нового объекта (нового списка значений)

stopki[i] = new stopka();

}

//Запуск игры - старт игры

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 nom = getNomKolodaPress(mX, mY);

// Если верхняя левая стопка

if (nom==0)

{

// Делаем выдачу карты

vidacha();

}

}

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

private int getNomKolodaPress(int mX, int mY)

{

// Если стопка не выбрана

int nom=-1;

// Если курсор находится в зоне верхних стопок

if ((mY>=15) && (mY<=(15+97)))

{

if ((mX>=30) && (mX<=(30+72))) nom = 0;

if ((mX>=140) && (mX<=(140+72))) nom = 1;

if ((mX>=360) && (mX<=(360+72))) nom = 2;

if ((mX>=470) && (mX<=(470+72))) nom = 3;

if ((mX>=580) && (mX<=(580+72))) nom = 4;

if ((mX>=690) && (mX<=(690+72))) nom = 5;

}

// Если курсор находится в зоне нижних стопок

else if ((mY>=130) && (mY<=(700)))

{

if ((mX>=30) && (mX<=110*7))

{

if (((mX-30)%110)<=72)

{

nom = (mX-30)/110;

nom += 6;

}

}

}

// Возврат результата

return nom;

}

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

private void vidacha()

{

// Если в стопке есть карты

if (stopki[0].size()>0)

{

int nom;

// Если это первая выдача

if (pervVidacha==true)

{

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

nom = (int)(Math.random()*stopki[0].size());

}

else // Если повторная выдача

{

//Получаем самую верхнюю карту

nom = stopki[0].size()-1;

}

// Получаем карту из стопки с номером 0

karta getKarta = stopki[0].get(nom);

// Делаем отображение картинкой

getKarta.tipRubashka = false;

// Увеличиваем координату на 110 -

// сдвигаем в стопку правее

getKarta.x += 110;

// Добавляем карту в стопку с номером 1

stopki[1].add(getKarta);

// Удаляем карту из стопки с номером 0

stopki[0].remove(nom);

}

else //Если карт уже нет

{

// Вычисляем номер последней карты

// в стопке номером1

int nomPosled = stopki[1].size()-1;

// Переносим карты из стопки с номером 1

// в стопку с номером 0

for (int i=nomPosled;i>=0;i--)

{

karta getKarta = stopki[1].get(i);

// Делаем отображение рубашкой

getKarta.tipRubashka = true;

// Уменьшаем координату на110 -

// сдвигаем в стопку левее

getKarta.x -= 110;

// Добавляем в стопку с номером 0

stopki[0].add(getKarta);

}

// Очищаем стопку с номером 1

stopki[1].clear();

// Признак первой выдачи меняем на false

pervVidacha=false;

}

}

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

public void start()

{

//Очищаем все тринадцать списков

for (int i=0;i<13;i++)

{

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

stopki[i].clear();

}

//Производим загрузку

load();

//Раздача карт в нижние семь стопок

razdacha();

//Признак конца игры - false

endGame = false;

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

pervVidacha = true;

}

// Раздача карт в нижние семь стопок

private void razdacha()

{

//Начальная координата по X

int x = 30;

//Перебираем все стопки нижние семь стопок

for (int i=6;i<13;i++)

{

//Добавление карт в стопку

for (int j=6;j<=i;j++)

{

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

int rnd = (int)(Math.random()*stopki[0].size());

// Получаем эту карту

karta getKarta = stopki[0].get(rnd);

// Если карта не самая верхняя,

// то показываем ее рубашкой

if (j<i) getKarta.tipRubashka = true;

// Если карта верхняя

else getKarta.tipRubashka = false;

// Координата по X

getKarta.x = x;



// Каждую следующую карту располагаем ниже на 20 пикселей

getKarta.y = 130+stopki[i].size()*20;

// Добавляем карту в нижнюю стопку

stopki[i].add(getKarta);

// Удаляем карту из верхней левой стопки

stopki[0].remove(rnd);

}

//Увеличиваем координату по X

// (смещаемся правее)

x+=110;

}

}

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

private void load()

{

// Цикл делает 52 шага

for (int i=1;i<=52;i++)

{

// В верхнюю левую стопку загружаем карты

stopki[0].add(new karta("c:\\karta\\k"+(i)+".png", rubashka, i));

}

}

 

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

public void drawKoloda(Graphics gr)

{

//ВЕРХНЯЯ ЛЕВАЯ СТОПКА

// Если в стопке есть карты

if (stopki[0].size()>0)

{

// Получаем и рисуем самую верхнюю карту

stopki[0].get(stopki[0].size()-1).draw(gr);

}

//ВТОРАЯ СЛЕВА ВЕРХНЯЯ СТОПКА

// Если в стопке более одной карты

if (stopki[1].size()>1)

{

// Получаем и рисуем вторую сверху карту

stopki[1].get(stopki[1].size()-2).draw(gr);

// Получаем и рисуем самую верхнюю карту

stopki[1].get(stopki[1].size()-1).draw(gr);

}

// если в стопке одна карта

else if (stopki[1].size()==1)

{

// Получаем и рисуем самую верхнюю карту

stopki[1].get(stopki[1].size()-1).draw(gr);

}

 

//ЧЕТЫРЕ ДОМАШНИЕ СТОПКИ

for (int i=2;i<=5;i++)

{

//Если в стопке более одной карты

if (stopki[i].size()>1)

{

// Получаем и рисуем вторую сверху карту

stopki[i].get(stopki[i].size()-2).draw(gr);

// Получаем и рисуем самую верхнюю карту

stopki[i].get(stopki[i].size()-1).draw(gr);

}

// если в стопке одна карта

else if (stopki[i].size()==1)

{

// Получаем и рисуем самую верхнюю карту

stopki[i].get(stopki[i].size()-1).draw(gr);

}

}

//НИЖНИЕ СЕМЬ СТОПОК

for (int i=6;i<13;i++)

{

//Если в стопке есть карты

if (stopki[i].size()>0)

{

// Перебираем все карты из стопки

for (int j=0;j<stopki[i].size();j++)

{

// Рисуем карты

stopki[i].get(j).draw(gr);

}

}

}

}

}



<== предыдущая лекция | следующая лекция ==>
Перерисовка всех стопок карт | Начало реализации третьего уровня сложности


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.199 сек.