русс | укр

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

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

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

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


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

Отрисовка игрового поля на основании двумерного массива


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


Перейдем в класс pole, на закладку pole.java (см. рис. 5).

Рис. 5

В классе pole выполним отрисовку игрового поля игрока на основании данных двумерного массива. Прежде всего, добавим переменную myGame с типом gameдля класса pole:

//Таймер отрисовки

private Timer tmDraw;

// Изображения, используемые в игре

private Image fon, paluba, ubit, ranen, end1, end2, bomba;

// Две кнопки

private JButton btn1,btn2;

// Переменная для реализации логики игры

private game myGame;

Через эту переменную мы сможем получить доступ к двумерному массиву после создания объекта на основании класса game. В конструкторе класса pole выполним создание объекта и вызовем метод start()для запуска игры. Добавим строки в самом начале конструктора перед загрузкой изображений:

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

public pole()

{

// Создаем объект новой игры

myGame = new game();

// Запускаем игру

myGame.start();

//Попытка загрузки всех изображений для игры

try

{

Теперь через переменнуюmyGame можно обратиться к данным двумерного массива и вызывать методы класса game. Обработчик события кнопки Новая игра пока не выполняет никаких действий.Добавим в него вызов метода start():

//Создаем кнопку Новая игра

btn1 = new JButton();

btn1.setText("Новая игра");

btn1.setForeground(Color.BLUE);

btn1.setFont(new Font("serif",0,30));

btn1.setBounds(130, 450, 200, 80);

btn1.addActionListener(new ActionListener() {

// Обработчик события при нажатии на кнопку Новая игра

public void actionPerformed(ActionEvent arg0) {

// Запуск - начало игры

myGame.start();

}

});

add(btn1);

Теперь каждый раз при нажатии на кнопку Новая игра будет происходить перезапуск игры. Осталось выполнить отрисовку игрового поля игрока на основании данных двумерного массива. Для этого перейдем в метод paintComponent()и после выведения надписей Компьютер, Игрок добавим программный код:



// Выведение надписей

gr.drawString("Компьютер", 150, 50);

gr.drawString("Игрок", 590, 50);

 

// Отрисовка игрового поля Игрока на основании массива

for (int i = 0; i < 10; i++) {

for (int j = 0; j < 10; j++) {

// Если это палуба корабля

if ((myGame.masPlay[i][j] >= 1) && (myGame.masPlay[i][j] <= 4)) {

gr.drawImage(paluba, 500 + j * 30, 100 + i * 30, 30, 30, null);

}

}

}

 

// Отрисовка сетки игрового поля из синих линий

gr.setColor(Color.BLUE);

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

{

Два цикла for перебирают массив от начала до конца. Верхний цикл for перебирает строки, а внутренний (нижний) цикл forперебирает элементы в каждой строке. Если значение в массиве в пределах от 1до 4, значит - это палуба корабля и мы выводим изображение палубы корабля. Самое сложное здесь - подобрать параметры в методе drawImage():

gr.drawImage(paluba, 500 + j * 30, 100 + i * 30, 30, 30, null);

Первый параметр –это изображениеpaluba.png, которое загружено в игру.

Четвертый параметр–это ширина картинки в пикселях – 30.

Пятый параметр –это высота картинки в пикселях –30.

Сложнее всего дело обстоит со вторым и третьим параметром–это координаты верхнего левого уголка картинки по отношению к левому верхнему углу панели (игрового поля). Отступ слева для каждой ячейки будет: 500+j*30, каждая следующая картинка должна быть правее соседней на30пикселей.Значение 500 –это левая граница игрового поля игрока. Отступ сверху для каждой ячейки будет:100+i*30, каждая следующая картинка должна быть ниже соседней на 30пикселей. Значение 100 –это верхняя граница игрового поля игрока.

Чтобы полностью отладить работу этих циклов –необходимо устанавливать различные значения в двумерном массиве в классе game. Затем запускать,смотреть и отлаживать.

На этом программный код класса pole для второго уровня сложности закончен.Остальная работа предстоит в классе game. Отрисовка в классеpole является зеркальным отражением двумерного массива на игровом поле.

Полный программный код класса pole для второго уровня сложности, выглядит так:

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

import java.awt.event.*;

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

import javax.swing.*;

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

import java.awt.*;

// Для работы с изображениями

import javax.imageio.*;

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

import java.io.*;

 

//Класс панели игрового поля

public class pole extends JPanel

{

// Таймер отрисовки

private Timer tmDraw;

// Изображения, используемые в игре

private Image fon, paluba, ubit, ranen, end1, end2, bomba;

// Две кнопки

private JButton btn1,btn2;

// Переменная для реализации логики игры

private game myGame;

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

public pole()

{

// Создаем объект новой игры

myGame = new game();

// Запускаем игру

myGame.start();

//Попытка загрузки всех изображений для игры

try

{

fon = ImageIO.read(new File("c:\\fon.png"));

paluba = ImageIO.read(new File("c:\\paluba.png"));

ranen = ImageIO.read(new File("c:\\ranen.png"));

ubit = ImageIO.read(new File("c:\\ubit.png"));

end1 = ImageIO.read(new File("c:\\end1.png"));

end2 = ImageIO.read(new File("c:\\end2.png"));

bomba = ImageIO.read(new File("c:\\bomba.png"));

}

catch (Exception ex) {}

//Создаем, настраиваем и запускаем таймер

//для отрисовки игрового поля

tmDraw = new Timer(50,new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// Вызываем перерисовку -paintComponent()

repaint();

}

});

tmDraw.start();

//Включаем возможность произвольного размещения

//элементов интерфейса на панели

setLayout(null);

//Создаем кнопку Новая игра

btn1 = new JButton();

btn1.setText("Новая игра");

btn1.setForeground(Color.BLUE);

btn1.setFont(new Font("serif",0,30));

btn1.setBounds(130, 450, 200, 80);

btn1.addActionListener(new ActionListener() {

// Обработчик события при нажатии на кнопку Новая игра

public void actionPerformed(ActionEvent arg0) {

// Запуск -начало игры

myGame.start();

}

});

add(btn1);

//Создаем кнопку Выход

btn2 = new JButton();

btn2.setText("Выход");

btn2.setForeground(Color.RED);

btn2.setFont(new Font("serif",0,30));

btn2.setBounds(530, 450, 200, 80);

btn2.addActionListener(new ActionListener() {

// Обработчик события при нажатии на кнопку Новая игра

public void actionPerformed(ActionEvent arg0) {

// Выход их игры -завершение работы приложения

System.exit(0);

}

});

add(btn2);

}

 

// Метод отрисовки

public void paintComponent(Graphics gr)

{

//Очищение игрового поля

super.paintComponent(gr);

//Отрисовка фона

gr.drawImage(fon,0,0,900,600,null);

//Установка шрифта

gr.setFont(new Font("serif",3,40));

//Установка цвета

gr.setColor(Color.BLUE);

//Выведение надписей

gr.drawString("Компьютер", 150, 50);

gr.drawString("Игрок", 590, 50);

 

//Отрисовка игрового поля Игрока на основании массива

for (int i = 0; i < 10; i++) {

for (int j = 0; j < 10; j++) {

 

// Если это палуба корабля

if ((myGame.masPlay[i][j] >= 1) && (myGame.masPlay[i][j] <= 4)) {

gr.drawImage(paluba, 500 + j * 30, 100 + i * 30, 30, 30, null);

}

}

}

 

//Отрисовка сетки игрового поля из синих линий

gr.setColor(Color.BLUE);

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

{

// Рисование линий сетки игрового поля Компьютера

gr.drawLine(100+i*30, 100, 100+i*30, 400);

gr.drawLine(100, 100+i*30, 400, 100+i*30);

// Рисование линий сетки игрового поля Человека

gr.drawLine(500+i*30, 100, 500+i*30, 400);

gr.drawLine(500, 100+i*30, 800, 100+i*30);

}

//Установка шрифта

gr.setFont(new Font("serif",0,20));

//Установка цвета

gr.setColor(Color.RED);

//Введение цифр и букв слева и сверху от игровых полей

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

{

// Вывод цифр

gr.drawString(""+i, 73, 93+i*30);

gr.drawString(""+i, 473, 93+i*30);

// Вывод букв

gr.drawString(""+(char)('A'+i-1), 78+i*30, 93);

gr.drawString(""+(char)('A'+i-1), 478+i*30, 93);

}

}

}

Перейдем на закладкуgame.java (см. рис. 6)к классу game.

Рис. 6

Если сейчас выполнить запуск игры, то не увидим каких-либо изменений, потому что двумерный массив заполнен нулями. Перейдем в метод start()

после обнуления массива запишем значение один "1", например, в верхний левый элемент массива:

// Запуск игры - начало игры

public void start() {

//Очищаем игровое поле игрока

for (int i = 0; i < 10; i++) {

for (int j = 0; j < 10; j++) {

masPlay[i][j] = 0;

}

}

//Запишем единицу в верхний левый элемент массива

masPlay[0][0] = 1;

}

В результате наш массив будет выглядеть так (см. рис. 7).

Рис. 7

Мы установили однопалубный корабль в верхний левый элемент массива.

Запустим наше приложение (см. рис. 8). В результате однопалубный корабль появился на игровом поле в указанном месте.Путем подобных экспериментов можно отлаживать программный код, который отвечает за отрисовку. Подставляя нужные значения в различные элементы массива –нужно смотреть на правильность отображения корабля на игровом поле.Удалим строчку:

//Запишем единицу в верхний левый элемент массива

masPlay[0][0] = 1;

Эта строка была добавлена для отладочных целей!

Рис. 8



<== предыдущая лекция | следующая лекция ==>
Реализация второго уровня сложности игры Морской бой | Ситуация выхода за пределы массива


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


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

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

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


 


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

 
 

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

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