mrand's blog
Welcome to my Blog

mrand's blog

ABAP Minesweeper

Wed Apr 01, 2009 1:28 am



01.04.2009 На сапфоруме иногда упоминается контрол CL_GUI_HTML_VIEWER, про который известно, что с ним можно преодолеть все юзер-интерфейсные ограничения абапа, и что на практике делать этого не следует, так как получится нестандартно, да ещё и пользователей разбалуешь.

И есть одна область, где такие недостатки являются достоинствами, это абап-игры. Зачем вообще браться за игры, каждый решает сам, но если уж делать, то делать хорошо. В общем, я сделал абап-игрушку на CL_GUI_HTML_VIEWER. (Судя по гуглу, впервые в sap-сообществе?)

ABAP Minesweeper

Исходный код: здесь
Аналоги: раз, два



Итак, игра с HTML-интерфейсом. HTML-оформление сильно выигрывает у ABAP-List. Причём связка HTML и JavaScript сама по себе настолько достаточна для игры, что ABAP там уже и не особо нужен. Но ABAP - это наше всё по определению, поэтому вся логика в Minesweeper сделана именно в ABAP, а в HTML вынесено только представление. Для иллюстрации такого устройства программы, в игре есть 2 режима отображения: и новомодный HTML, и через старые добрые WRITE-ы. В ходе игры доступно «горячее» переключение между двумя режимами.

Спрайты. GIF-изображения хранятся прямо в ABAP-коде. Это хорошо, так как не потребуется инсталляция картинок на сервер/клиент. И это плохо, потому что нетекстовые данные в коде программы вызывают настороженность.

Взаимодействие ABAP и HTML. Каждая клетка поля имеет свой ID. Клик мышкой на клетке посылает из HTML в ABAP событие SAPEVENT со значением ID. ABAP-обработчик формирует в ответ массив «что надо перекрасить» из пар {ID, новое_значение}, и отправляет его в HTML на отрисовку.

Новые возможности HTML ввода/вывода по сравнению с ABAP-List:
    1. клавиатура – все клавиши (в ABAP - только F1-F12),
    2. мышь - все кнопки (в ABAP - только дабл-клик левой кнопкой).
    3. скорость - частота обновления экрана ограничена лишь скоростью сети между сервером и клиентом (в ABAP обновление экрана – не чаще чем 1 раз в секунду).





И ещё, не весь какое усовершенствование, но у других не видел: представление игрового поля в программе для простых board-based games,

вместо использования itab-ов со столбцами {X,Y,Value}, я нахожу более удобным использовать просто непрерывную область памяти, и немного поиграться c адресной арифметикой. Казалось бы, манипулировать такими данным будет непросто? Посмотрим:

На рисунке показано игровое поле размером 8 на 8, имеющее дополнительный бортик снаружи, который можно не показывать пользователю. В клетки бортика записано значение, не встречающееся на поле игры, что позволяет не делать унылые проверки границ вида IF (x LT 0) OR (x GT cols) OR (y LT 0) OR (y GT rows).

Игра 8*8 удобна при отладке, так как клетка в строке 5 столбец 2 имеет индекс 52 (ID = индекс).

Пример 1: Печать поля без бортика
ofs = min.
DO rows TIMES.
NEW-LINE.
DO cols TIMES.
WRITE board+ofs(1).
ofs = ofs + 1.
ENDDO.
ofs = ofs + 2.
ENDDO.


Пример 2: Закраска непрерывной области одного цвета
"eight_directions = [-11, -10, -09,  -1, 1,  09, 10, 11] 
FORM cell_floodfill USING
start_ofs TYPE i
color1 TYPE c
color2 TYPE c.

DATA: floodfill TYPE TABLE OF i.

board+star_ofst(1) = color2.
APPEND start_ofs TO floodfill.

LOOP AT floodfill INTO ofs.
LOOP AT eight_directions INTO dir.
i = ofs + dir.
if board+i(1) = color1.
board+i(1) = color2.
APPEND i TO floodfill.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM.


Возможна быстрая и наглядная обработка всего поля операторами SEARCH, REPLACE, TRANSLATE.


The Trackback URL for this entry is:

http://www.sapnet.ru/trackback.php?e=41

Page 1 of 1   

Author Message
Armann
Модератор

Joined: 01 Jan 2008
Posts: 422
Location: Moscow
View Blog

PostPosted: Wed Apr 01, 2009 8:36 am    Post subject:    

красота Smile
Back to top View user's profile Send private message
John Doe
Модератор

Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар
View Blog

PostPosted: Wed Apr 01, 2009 8:50 am    Post subject:    

И лепота Very Happy
Back to top View user's profile Send private message
admin
Администратор

Joined: 01 Sep 2007
Posts: 1636



PostPosted: Wed Apr 01, 2009 7:55 pm    Post subject:    

Даже не ожидал, что в этом блоге так красиво можно оформить. Зачёт! Smile
Back to top View user's profile Send private message
Display posts from previous:   

Russian ABAP Developer's Club Forum Index -> Blogs -> mrand's blog -> ABAP Minesweeper