mrand's blog
Welcome to my Blog
Russian ABAP Developer's Club Forum Index -> Blogs -> mrand's blog

Users browsing this blog: None

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.

Posted By: mrand    3 Comments    (Post your comment)
Trackbacks (0) Permalink


 
Blog Owner: mrand
Contributors: (none)
Blog: View All Entries
Friends
Go: Back/Forward
 

 

Calendar

 «   <   »   >  October 2017
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
 

 

Contact mrand

Email
Send Email
Private Message
Send private message
MSN Messenger
Yahoo Messenger
AIM Address
ICQ Number
 

 

About mrand

Joined
Tue Apr 15, 2008 4:38 pm
Location
москва
Occupation
Interests
 

 

Blog

Blog Started
Mon Mar 23, 2009 12:01 pm
Total entries
1
Blog Age
3134 days
Total replies
3
Visits
117437
 

 

RSS

RSS Feed