Классы в Mobile Basic

  1. 5 refFillScreen% = 70
  2. 10 GOSUB 100: REM Вызываем конструктор класса Point
  3. 11 GOSUB refShowInfo%: REM Вызываем метод ShowInfo класса Point
  4. 12 GOSUB refToCenter%
  5. 13 GOSUB refShowInfo%
  6. 14 SLEEP 2000
  7. 20 GOSUB refFillScreen%
  8. 30 GOSUB 200: REM Вызываем конструктор класса Menu
  9. 31 GOSUB refDraw%
  10. 32 GOSUB refProcess%
  11. 50 SLEEP 1000
  12. 51 END
  13.  
  14.  
  15. 70 REM /* Метод FillScreen */
  16. 71   SETCOLOR 0, 0, 0
  17. 72   FILLRECT 0, 0, SCREENWIDTH(0), SCREENHEIGHT(0)
  18. 73 RETURN
  19.  
  20.  
  21. 100 REM ==================
  22. 101 REM Класс Point
  23. 102 REM ==================
  24. 110 REM /* Конструктор класса */
  25. 111   REM // Поля класса
  26. 112   pointX% = 10: pointY% = 5
  27. 115   REM // Ссылки на методы
  28. 116   refShowInfo% = 120: refToCenter% = 125
  29. 119 RETURN
  30.  
  31. 120 REM /* Метод ShowInfo */
  32. 121   tmpStr$ = Str$(pointX%) + ":" + Str$(pointY%)
  33. 122   DRAWSTRING tmpStr$, pointX%, pointY%
  34. 123 RETURN
  35.  
  36. 125 REM /* Метод ToCenter */
  37. 126   pointX% = ScreenWidth(0) / 2
  38. 127   pointY% = ScreenHeight(0) / 2
  39. 128 RETURN
  40.  
  41.  
  42. 200 REM ==================
  43. 201 REM Класс Menu
  44. 202 REM ==================
  45. 203 REM /* Конструктор класса */
  46. 210   menuCurrentIndex% = 0: menuLength% = 4
  47. 211   DIM menuItems$(menuLength%)
  48. 212   menuItems$(0)="New game"
  49. 213   menuItems$(1)="Options"
  50. 214   menuItems$(2)="About"
  51. 215   menuItems$(3)="Exit"
  52. 216   REM // Ссылки на методы
  53. 217   refUp% = 220: refDown% = 225
  54. 218   refProcess% = 230: refDraw% = 240
  55. 219 RETURN
  56.  
  57. 220 REM /* Метод Up */
  58. 221   menuCurrentIndex% = menuCurrentIndex% - 1
  59. 222   IF (menuCurrentIndex% < 0) THEN menuCurrentIndex% = menuLength% - 1
  60. 223 RETURN
  61.  
  62. 225 REM /* Метод Down */
  63. 226   menuCurrentIndex% = menuCurrentIndex% + 1
  64. 227   IF (menuCurrentIndex% >= menuLength%) THEN menuCurrentIndex% = 0
  65. 228 RETURN
  66.  
  67. 230 REM /* Метод Process */
  68. 231   IF (Up(0)) THEN GOSUB refUp%: GOSUB refDraw%
  69. 232   IF (Down(0)) THEN GOSUB refDown%: GOSUB refDraw%
  70. 233   IF (Fire(0)) THEN RETURN
  71. 234   SLEEP 80
  72. 235 GOTO 230
  73.  
  74. 240 REM /* Метод Draw */
  75. 241   GOSUB refFillScreen%: SETCOLOR 0, 255, 0
  76. 244   FOR i% = 0 to menuLength% - 1
  77. 245     tmpStr$ = menuItems$(i%)
  78. 246     IF (menuCurrentIndex% = i%) THEN tmpStr$ = ">" + tmpStr$
  79. 247     DRAWSTRING tmpStr$, 10, 50 + (i% * 20)
  80. 248   NEXT i%
  81. 249 RETURN
Собственно, пример использования классов в MB. Суть в том, чтобы вызывать подпрограмму не с заранее указанным номером строки, а с динамическим указанием. Если бы MB поддерживал в переменных нижнее подчёркивание, можно было бы разделять ссылки каждого класса: _point_ShowInfo, _menu_Draw и т.д., так, на мой взгляд было бы удобнее.
Также возможно наследование, путём переопределения номера в переменной-ссылке:
702 refToCenter% = 777: REM это в конструкторе производного класса
777 /* Override ToCenter */
778 ...

Реклама

Мы в соцсетях

tw tg yt gt