Классы в Mobile Basic
- 5 refFillScreen% = 70
- 10 GOSUB 100: REM Вызываем конструктор класса Point
- 11 GOSUB refShowInfo%: REM Вызываем метод ShowInfo класса Point
- 12 GOSUB refToCenter%
- 13 GOSUB refShowInfo%
- 14 SLEEP 2000
- 20 GOSUB refFillScreen%
- 30 GOSUB 200: REM Вызываем конструктор класса Menu
- 31 GOSUB refDraw%
- 32 GOSUB refProcess%
- 50 SLEEP 1000
- 51 END
- 70 REM /* Метод FillScreen */
- 71 SETCOLOR 0, 0, 0
- 72 FILLRECT 0, 0, SCREENWIDTH(0), SCREENHEIGHT(0)
- 73 RETURN
- 100 REM ==================
- 101 REM Класс Point
- 102 REM ==================
- 110 REM /* Конструктор класса */
- 111 REM // Поля класса
- 112 pointX% = 10: pointY% = 5
- 115 REM // Ссылки на методы
- 116 refShowInfo% = 120: refToCenter% = 125
- 119 RETURN
- 120 REM /* Метод ShowInfo */
- 121 tmpStr$ = Str$(pointX%) + ":" + Str$(pointY%)
- 122 DRAWSTRING tmpStr$, pointX%, pointY%
- 123 RETURN
- 125 REM /* Метод ToCenter */
- 126 pointX% = ScreenWidth(0) / 2
- 127 pointY% = ScreenHeight(0) / 2
- 128 RETURN
- 200 REM ==================
- 201 REM Класс Menu
- 202 REM ==================
- 203 REM /* Конструктор класса */
- 210 menuCurrentIndex% = 0: menuLength% = 4
- 211 DIM menuItems$(menuLength%)
- 212 menuItems$(0)="New game"
- 213 menuItems$(1)="Options"
- 214 menuItems$(2)="About"
- 215 menuItems$(3)="Exit"
- 216 REM // Ссылки на методы
- 217 refUp% = 220: refDown% = 225
- 218 refProcess% = 230: refDraw% = 240
- 219 RETURN
- 220 REM /* Метод Up */
- 221 menuCurrentIndex% = menuCurrentIndex% - 1
- 222 IF (menuCurrentIndex% < 0) THEN menuCurrentIndex% = menuLength% - 1
- 223 RETURN
- 225 REM /* Метод Down */
- 226 menuCurrentIndex% = menuCurrentIndex% + 1
- 227 IF (menuCurrentIndex% >= menuLength%) THEN menuCurrentIndex% = 0
- 228 RETURN
- 230 REM /* Метод Process */
- 231 IF (Up(0)) THEN GOSUB refUp%: GOSUB refDraw%
- 232 IF (Down(0)) THEN GOSUB refDown%: GOSUB refDraw%
- 233 IF (Fire(0)) THEN RETURN
- 234 SLEEP 80
- 235 GOTO 230
- 240 REM /* Метод Draw */
- 241 GOSUB refFillScreen%: SETCOLOR 0, 255, 0
- 244 FOR i% = 0 to menuLength% - 1
- 245 tmpStr$ = menuItems$(i%)
- 246 IF (menuCurrentIndex% = i%) THEN tmpStr$ = ">" + tmpStr$
- 247 DRAWSTRING tmpStr$, 10, 50 + (i% * 20)
- 248 NEXT i%
- 249 RETURN
Собственно, пример использования классов в MB. Суть в том, чтобы вызывать подпрограмму не с заранее указанным номером строки, а с динамическим указанием. Если бы MB поддерживал в переменных нижнее подчёркивание, можно было бы разделять ссылки каждого класса: _point_ShowInfo, _menu_Draw и т.д., так, на мой взгляд было бы удобнее.
Также возможно наследование, путём переопределения номера в переменной-ссылке:
702 refToCenter% = 777: REM это в конструкторе производного класса
777 /* Override ToCenter */
778 ...
Также возможно наследование, путём переопределения номера в переменной-ссылке:
702 refToCenter% = 777: REM это в конструкторе производного класса
777 /* Override ToCenter */
778 ...