        IF1
INCLUDE COMDEF.INC              ; Include command definition
        ENDIF
VOL     EQU     0               ; Define volume number
LOGIC   SEGMENT BYTE
        ASSUME  CS:LOGIC
        BEGIN                   ; Start up

; logic 11; опыты Франклина
; А.В.Хорев, обучающая программа "ГРОЗА", 1991 год.

         if_
           isset 5     ; f5 установлен (=1) ?
         else_ NotNr

;┌───────────────────────────────────────────────────────────────────────────┐
;│   Инициализация log11.                                                    │
;│   Сюда мы попадаем только при первом вхождении в log11 по ком.new_room 11 │
;│ выданной в log09 (см.описание new_room). При этом автоматически f5 -> 1.  │
;│   После возврата из этой части в log0 по оператору return, log0 передаст  │
;│ управление интерпретатору, который в своем следующем цикле установит      │
;│ f5 -> 0 (см.цикл работы интерпретатора). Именно поэтому управление этой   │
;│ части программы передается только один раз.                               │
;│   Поэтому, если из логики будут вызываться другие логики, имеющие части   │
;│ инициализации, то они должны быть загружены и вызваны в инициализационной │
;│ части вызывающей логики.                                                  │
;└───────────────────────────────────────────────────────────────────────────┘

	  set_horizon 1 ; установить линию горизонта у=1
       ;   load_logic 4
       ;   call_      4

; берег с домом без облаков

	  load_pic    0  ; загрузить picture по значению v0 (v0 = 11)   
	  draw_pic    0  ; изобразить декорацию в буфере интерпретатора
	  discard_pic 0  ; уничтожить picture в памяти                 

          load_sound  31 ; загрузить звук 31 (сопровождение искры)
          load_sound  54 ; и 54 (привлечение внимания перед выводом сообщений)

	  load_view      28 ; загрузить view 28 - облако для эксперимента 
	                    ; (управляемое, т.к.объект 0)
	  animate_obj    0        ; объект #0 вкл.в список упр.объектов   
	  ignore_horizon 0        ; объекту #0 не замечать линию горизонта
	  ignore_objs    0        ; объекту #0 не замечать др.объекты     
          observe_blocks 0        ; объекту #0 реагировать на блоки          
	  set_view       0, 28    ; связать объект #0 с view #28         
	  set_priority   0, 11    ; объекту #0 устан.приоритет 11         
	  position       0, 1, 29 ; объекту #0 устан.нач.х=1, у=29        
          set_loop       0, 0     ; объекту #0 устан.цикл 0 во view #28   
     	  set_cel        0, 0     ; объекту #0 устан.кадр 0 в цикле 0     
				  ; во view #28                           
	  load_view      24 ; загрузить view 24 - воздушный змей
	  animate_obj    1         ; объект #1 вкл.в список упр.объектов   
	  ignore_horizon 1         ; объекту #1 не замечать линию горизонта
	  ignore_objs    1         ; объекту #1 не замечать др.объекты     
	  ignore_blocks  1         ; объекту #1 не замечать блоки          
	  set_view       1, 24     ; связать объект #1 с view #24           
	  set_priority   1, 10     ; объекту #1 устан.приоритет 10          
	  position       1, 80, 122; объекту #1 устан.нач.х=80, у=122        
          set_loop       1, 0      ; объекту #1 устан.цикл 0 во view #24    
     	  set_cel        1, 0      ; объекту #1 устан.кадр 0 в цикле 0     
				   ; во view #24                            
	  load_view      27 ; загрузить view 27 - электрическая искра
	  animate_obj    2          ; объект #2 вкл.в список упр.объектов   
	  ignore_horizon 2          ; объекту #2 не замечать линию горизонта
	  ignore_objs    2          ; объекту #2 не замечать др.объекты     
	  ignore_blocks  2          ; объекту #2 не замечать блоки          
	  set_view       2, 27      ; связать объект #2 с view #27          
	  set_priority   2, 9       ; объекту #2 устан.приоритет 9         
	  position       2, 99, 102 ; объекту #2 устан.нач.х=99, у=102      
          set_loop       2, 0       ; объекту #2 устан.цикл 0 во view #27   
     	  set_cel        2, 0       ; объекту #2 устан.кадр 0 в цикле 0     
				    ; во view #27                           
	  load_view      5 ; загрузить view 5 - гнущееся дерево

     ; первое дерево
	  animate_obj    3        ; объект #3 вкл.в список упр.объектов    
	  ignore_horizon 3        ; объекту #3 не замечать линию горизонта 
	  ignore_objs    3        ; объекту #3 не замечать др.объекты      
	  ignore_blocks  3        ; объекту #3 не замечать блоки           
	  set_view       3, 5     ; связать объект #3 с view #5            
	  set_priority   3, 9     ; объекту #3 устан.приоритет 9           
	  position       3, 0, 68 ; объекту #3 устан.нач.х=0, у=68        
          set_loop       3, 0     ; объекту #3 устан.цикл 0 во view #5    
     	  set_cel        3, 4     ; объекту #3 устан.кадр 4 в цикле 0      
				  ; во view #5
     ; второе дерево				                               
	  animate_obj    4        ; объект #4 вкл.в список упр.объектов   
	  ignore_horizon 4        ; объекту #4 не замечать линию горизонта
	  ignore_objs    4        ; объекту #4 не замечать др.объекты     
	  ignore_blocks  4        ; объекту #4 не замечать блоки          
	  set_view       4, 5     ; связать объект #4 с view #5           
	  set_priority   4, 9     ; объекту #4 устан.приоритет 9          
	  position       4, 12, 87; объекту #4 устан.нач.х=12, у=87        
          set_loop       4, 0     ; объекту #4 устан.цикл 0 во view #5    
     	  set_cel        4, 4     ; объекту #4 устан.кадр 4 в цикле 0     
				  ; во view #5
     ; третье дерево				                              
	  animate_obj    5           ; объект #5 вкл.в список упр.объектов   
	  ignore_horizon 5           ; объекту #5 не замечать линию горизонта
	  ignore_objs    5           ; объекту #5 не замечать др.объекты     
	  ignore_blocks  5           ; объекту #5 не замечать блоки          
	  set_view       5, 5        ; связать объект #5 с view #5           
	  set_priority   5, 9        ; объекту #5 устан.приоритет 9          
	  position       5, 121, 104 ; объекту #5 устан.нач.х=121, у=104      
          set_loop       5, 0        ; объекту #5 устан.цикл 0 во view #5    
     	  set_cel        5, 4        ; объекту #5 устан.кадр 4 в цикле 0     
				     ; во view #5                            
          assignn 123, 11   ; присвоить переменнным 123, 124 и 125   
	  assignn 124, 10   ; задержки в циклах интерпр. для деревьев
          assignn 125,  9   ; соответственно                         

          cycle_time 3, 123 ; объектам ## 3, 4, 5 установить время в циклах
          cycle_time 4, 124 ; интепр.между сменой кадров по значению v123, 
          cycle_time 5, 125 ; v124, v125                                   

          show_pic          ; изобразить декорацию на экране
          status_line_on    ; дать строку состояния         
          draw           0  ; изобразить на экране объект #0 - облако
          stop_cycling   0  ; запретить авт.смену кадров для объекта 0
          start_motion   0  ; разрешить перемещение объекта 0
	  draw           3 ; изобразить на экране объект #1 (1-е дерево)
	  draw           4 ; изобразить на экране объект #2 (2-е дерево)
	  draw           5 ; изобразить на экране объект #3 (3-е дерево)

          clear_lines 23, 24, 0   ; строки 23 и 24 очистить цветом 0                                         
          set_text_attribute 6, 0 ; установить цвет букв 6 и фона 0                                          
          display     24, 1, 1    ; в строку 24 с поз.1 вывести сообщ. 1

	  assignn 130, 1  ; v130 = 1 -  управление выводом сообщений
	  reset   230     ; f230 -> 0 (служит для искл.части проверок; см.далее)
	  reset 15        ; f 15 -> 0 ; окно с экр.будет удал.авт.или Enter

	  return          ; возврат управления в log0

NotNr:  ;display 23, 10, 18
        if_
          isset 230    ; f230 -> 1 ?
	else_ EQ1      ; нет : переход на EQ1
		       ; да: для исключения проверок от EQ1 до EQ6
	  jump EQ7     ;     сразу перейти на EQ7

EQ1:    if_
          equaln 130, 1  ; v130 = 1 ?
	else_ EQ2        ; нет : переход на EQ2
			 ; да:
	  assignn 21, 17   ; окно удал. автоматически через (v21=17)/2 сек        
	  sound   54, 52   ; исполнить звук 54 (внимание), по оконч.f52 -> 1
	  print    2       ; печать сообщения 2                             
	  jump ENDLOG      ; безусловный переход на ENDLOG

EQ2:    if_
         equaln 130, 2   ; v130 = 2 ?         
	else_ EQ3        ; нет : переход на EQ3
			 ; да:
	  assignn 21, 55   ; окно удал. автоматически через (v21=55)/2 сек   
	  sound   54, 52   ; исполнить звук 54 (внимание), по оконч.f52 -> 1 
	  print    3       ; печать сообщения 3                              
	  jump ENDLOG      ; безусловный переход на ENDLOG

EQ3:    if_                                   
         equaln 130, 3   ; v130 = 3 ?                                                     
	else_ EQ4        ; нет : переход на EQ4                      
			 ; да:
	  assignn 21, 35   ; окно удал. автоматически через (v21=35)/2 сек  
	  sound   54, 52   ; исполнить звук 54 (внимание), по оконч.f52 -> 1
	  print    4       ; печать сообщения 4                             
	  jump ENDLOG      ; безусловный переход на ENDLOG                  

EQ4:    if_
         equaln 130, 4   ; v130 = 4 ?                                
	else_ EQ5        ; нет : переход на EQ5                      
			 ; да:
	  assignn 21, 30   ; окно удал. автоматически через (v21=30)/2 сек  
	  sound   54, 52   ; исполнить звук 54 (внимание), по оконч.f52 -> 1
	  print    5       ; печать сообщения 5                             
	  jump ENDLOG      ; безусловный переход на ENDLOG                  

EQ5:    if_
         equaln 130, 5   ; v130 = 5 ?                                
	else_ EQ6        ; нет : переход на EQ6                      
			 ; да:
	  assignn 21, 65   ; окно удал. автоматически через (v21=65)/2 сек  
	  sound   54, 52   ; исполнить звук 54 (внимание), по оконч.f52 -> 1
	  print    6       ; печать сообщения 6                             
	  jump ENDLOG      ; безусловный переход на ENDLOG                  

EQ6:    if_
          equaln 130, 6  ; v130 = 6 ?         
	else_ EQ7        ; нет : переход на EQ7
			 ; да:
; подготовка к изображению эксперимента Франклина

          load_sound 112  ; загрузить звук 112 (приглашение к эксперименту)
          start_motion 0  ; разрешить перемещения объекта 0 в блоке с коорд.
          block        0, 0, 159, 30 ; углов: левого верхн. х1=0, у1=0 и
	                             ;        правого нижн. х2=159, у2=30
	  stop_cycling 0  ; запретить авт.смену кадров для объекта 0

	  assignn 121, 6  ; присвоить v121=6, 
	  assignn 122, 1  ; v122=1 задержки в циклах интерпр.
	  cycle_time 1, 121 ; задать время между сменой кадров для об.1 и 2
	  cycle_time 2, 122 ; по значениям перем. v121 и v122
	  draw       1     ; изобр. на экр. объект 1 (воздушный змей)
	  set      230     ; f230 -> 1 (,чтобы сразу переход на EQ7)
          set      222     ; f222 -> 1 (для однократного выв.некот.сообщ.)

          set_text_attribute  14, 0     ; устан.цвет символов 14 на фоне 0
          clear_lines         23, 23, 0 ; очистить строку 23 цветом 0
          display             23, 9, 19 ; вывести сообщ. 19 в стр.23 с поз.9
	                                ; ("управляйте облаком!"),
          sound              112, 52    ; сопроводив звуком 112, по оконч.f52->1

          jump ENDLOG      ; безусловный переход на ENDLOG

EQ7:     if_
           equaln 130, 7   ; v130 = 7 ?         
         else_ EQ8         ; нет : переход на EQ8
			   ; да:
      ; изображение эксперимента Франклина (пока не нажата любая клавиша,
      ; кроме стрелок и зарезервированных)
                                     
           if_
             not_          ; не
             have_key      ; нажата клавиша  ?
	   else_ ENDLOG    ; нет, нажата и переход на ENDLOG
			   ; да: показывать эксперимент
EQ7$:        if_
               center_position 0, 69, 15, 121, 31 ; змей в облаке?
	                       ;(центр базы объекта находится в прямоугольнике
			       ; с коорд.углов: лев.верхн. х1= 69, у1=15 и
			       ;                прав.нижн. х2=121, у2=31) ?
	     else_ EQ7d        ; нет (не в облаке): переход на EQ7d
			       ; да:
               if_
                 isset 222     ; f222 -> 1 ? (сообщ.20 не выводилось)?
		               ; если не сделать подобной проверки, то 
			       ; сообщ.20 в стр.23 будет выводиться в
			       ; каждом цикле интерпретатора и мигать)
               else_ EQ7a      ; нет: переход на EQ7a
			       ; да :

	         draw          2         ; изобр.объект 2 (искра) сопроводив 
                 sound        31, 52     ; его появление звуком 31, по оконч.
					 ; звука f52 -> 1
		 clear_lines  23, 23, 0  ; очистить строку 23 цветом 0
		 display      23, 12, 20 ; в стр.23 с поз.12 вывести сообщ.20
		                         ; ("змей в облаке!")
                 reset       222         ; f222 -> 0

EQ7a:          if_
                 isset 122 ; f122 -> 1 (мультфильм объекта 2 закончен) ?
               else_ EQ7b  ; нет (ждать окончания): переход на EQ7b

	         end_of_loop 2, 122; однократно прокрутить мультфильм для
				   ; объекта 2, по оконч. f122 -> 1
EQ7b:          if_
                 isset 52 ; f52 -> 0 (звук 31 окончен) ?
               else_ EQ7c ; нет (ждать окончания): переход на EQ7с

                 sound 31, 52 ; исполнить звук 31, по оконч. f52 -> 1
    
EQ7c:          return  ; вернуть упр. в log0 и оттуда интерпретатору

EQ7d:     ; змей не в облаке   
             erase 2           ; стереть с экрана объект 2 (искра) 
             stop_sound        ; прекратить звук
             display 23, 9, 19 ; в стр.23 с поз.9 вывести сообщ.19
	                       ; ("управляйте облаком!")
             set 222           ; f222 -> 1

             return  ; вернуть упр. в log0 и оттуда интерпретатору

EQ8:  ; эксперимент закончен  
        if_
          equaln 130, 8   ; v130 = 8 ?         
	else_ EQ9         ; нет : переход на EQ9
			  ; да:
          erase 1         ; стереть с экр. объект 1 (возд.змей)
          erase 2         ; стереть с экр. объект 2 (искра)
          clear_lines 23, 23, 0 ; очистить строку 23 цветом 0
	  assignn 21, 60  ; окно удал. автоматически через (v21=60)/2 сек   
	  sound   54, 52  ; исполнить звук 54 (внимание), по оконч.f52 -> 1 
	  print    7      ; печать сообщения 7                              
	  jump ENDLOG     ; безусловный переход на ENDLOG                   

EQ9:    if_
          equaln 130, 9   ; v130 = 9 ?         
	else_ EQ10        ; нет : переход на EQ10
			  ; да:
	  assignn 21, 50  ; окно удал. автоматически через (v21=50)/2 сек    
	  sound   54, 52  ; исполнить звук 54 (внимание), по оконч.f52 -> 1  
	  print    8      ; печать сообщения 8                               
	  jump ENDLOG     ; безусловный переход на ENDLOG                    

EQ10:    if_
          equaln 130, 10   ; v130 = 10 ?         
	else_ EQ11         ; нет : переход на EQ11
			   ; да:
	  assignn 21, 30  ; окно удал. автоматически через (v21=30)/2 сек    
	  sound 54, 52    ; исполнить звук 54 (внимание), по оконч.f52 -> 1  
	  print 9         ; печать сообщения 9                               
	  jump ENDLOG     ; безусловный переход на ENDLOG                    

EQ11:    if_
          equaln 130, 11   ; v130 = 11 ?         
	else_ EQ12         ; нет : переход на EQ12
			   ; да:
	  assignn 21, 40  ; окно удал. автоматически через (v21=40)/2 сек    
	  sound 54, 52    ; исполнить звук 54 (внимание), по оконч.f52 -> 1  
	  print 10        ; печать сообщения 10                               
	  jump ENDLOG     ; безусловный переход на ENDLOG                    

EQ12:   if_
          equaln 130, 12   ; v130 = 12?         
	else_ EQ13         ; нет : переход на EQ13
			   ; да:
      ; демонстрация распределения зарядов на дереве, море и суше

          get_posn     0, 38, 39 ; занести коорд.базовой точки объекта 0
				 ; в перем. x -> v38, y -> v39
	  if_
	    greatern 38, 79 ; v38 (x) > 79 ? 
          else_ EQ12a ; нет: переход на EQ12a
		      ; да: 
	    move_obj 0, 79, 29, 1, 100 ; переместить объект 0 в точку (79,29)
				       ; с шагом 1, по оконч. f100 -> 1
            return    ; вернуть упр. в log0

EQ12a:    erase        0            ; стереть объект 0 (облако) с экрана
	  set_cel      0, 1         ; установить объекту 0 кадр 1 (цикл тот же)
          unblock                   ; отменить ранее установленный блок
          block        0, 0, 80, 30 ; установить новый блок (0,0) и (80,30)
	  draw         0            ; изобр.объект 0 (облако с зарядами) на экр.
          start_motion 0            ; разрешить движение объекту 0
	  stop_cycling 0            ; и запретить объекту 0 авт.смену кадров

          load_sound  15 ; загр.звук 15 ( сопровождает появление зарядов)
	  load_view   30 ; загр.view 30 (заряды, наведенные облаком на объектах)

	  animate_obj    6          ; объект  #6 вкл.в список упр.объектов   
	  ignore_horizon 6          ; объекту #6 не замечать линию горизонта
	  ignore_objs    6          ; объекту #6 не замечать др.объекты     
          ignore_blocks  6          ; объекту #6 не замечать блоки          
	  set_view       6, 30      ; связать объект #6 с view #30          
	  set_priority   6, 10      ; объекту #6 устан.приоритет 10         
	  position       6, 12, 87  ; объекту #6 устан.нач.х=12, у=87       
          set_loop       6,  0      ; объекту #6 устан.цикл 0 во view #30   
     	  set_cel        6,  0      ; объекту #6 устан.кадр 0 в цикле 0     
	                            ; во view #30 (заряды на дереве)       

	  animate_obj    7          ; объект  #7 вкл.в список упр.объектов  
	  ignore_horizon 7          ; объекту #7 не замечать линию горизонта
	  ignore_objs    7          ; объекту #7 не замечать др.объекты     
          ignore_blocks  7          ; объекту #7 не замечать блоки          
	  set_view       7, 30      ; связать объект #7 с view #30          
	  set_priority   7, 10      ; объекту #7 устан.приоритет 10         
	  position       7, 41, 122 ; объекту #7 устан.нач.х=41, у=122      
          set_loop       7,  1      ; объекту #7 устан.цикл 1 во view #30   
     	  set_cel        7,  0      ; объекту #7 устан.кадр 0 в цикле 1     
	                            ; во view #30 (заряды на суше)        

	  animate_obj    8          ; объект  #8 вкл.в список упр.объектов  
	  ignore_horizon 8          ; объекту #8 не замечать линию горизонта
	  ignore_objs    8          ; объекту #8 не замечать др.объекты     
          ignore_blocks  8          ; объекту #8 не замечать блоки          
	  set_view       8, 30      ; связать объект #8 с view #30          
	  set_priority   8, 10      ; объекту #8 устан.приоритет 10         
	  position       8, 82, 95  ; объекту #8 устан.нач.х=82, у=95      
          set_loop       8,  2      ; объекту #8 устан.цикл 2 во view #30   
     	  set_cel        8,  0      ; объекту #8 устан.кадр 0 в цикле 2     
	                            ; во view #30 (заряды на море)          

	  assignn   120, 5          ; v120 = 5
	  cycle_time  6, 120        ; объектам ## 6, 7, 8 установить время  
	  cycle_time  7, 120        ; в циклах интепр.между сменой кадров   
	  cycle_time  8, 120        ; по значению v120
	  
	  set_text_attribute 14,  0     ; устан.цвет символов 14 на фоне 0
          clear_lines        23, 23,  0 ; очистить стр.23 цветом 0
          display            23,  9, 19 ; в стр.23 с поз.9 вывести сообщ.19
			                ; ("управляйте облаком!"),          
          sound  112, 52                ; издав звук 112, по оконч.f52->1
	  jump ENDLOG                   ; безусловный переход на ENDLOG
	  
EQ13:     if_
	    equaln 130, 13 ; v130 = 13 ?         
	  else_ EQ14       ; нет : переход на EQ14

 ; демонстрировать наведение зарядов облаком на дереве, море и суше

	    if_
	      not_       ; не
	      have_key   ; нажата любая клавиша
	    else_ ENDLOG ; нет (нажата): переход на ENDLOG
			 ; да (не нажата): продолжать демонстрацию
	      if_
                center_position 0, 29, 15, 29, 31 ;ценр базы объекта 0
		                                  ;в прямоугольнике (29,15)
						  ;(29,31) - над деревом?
	      else_ EQ13a  ; нет, переход на EQ13a
			   ; да:
       ; облако над деревом
	        erase         7        ; стереть объект 7 (заряды на суше)
		erase         8        ; стереть объект 8 (заряды на море)
		stop_cycling  4        ; объекту 4 запретить смену кадров
		                       ; (2-е дерево)
		draw          6        ; изобр.объект 6 (заряды на дереве),
                sound        15, 52    ; сопроводив звуком 15, по оконч.f52->1
		clear_lines  23, 23 0  ; очистить стр.23 цветом 0
		display      23, 5, 13 ; в стр.23 с поз.5 вывести сообщ.13
		                       ; ("облако над деревом!")
		start_cycling 4        ; объекту 4 разрешить авт.смену кадров

EQ13a:        if_
                center_position 0, 58, 15, 58, 31 ;центр базы объекта 0     
		                                  ;в прямоугольнике (58,15)
		                                  ;(58,31) - над сушей?  
	      else_ EQ13b  ; нет, переход на EQ13b
			   ; да:
       ; облако над сушей

	        erase         6        ; стереть объект 6 (заряды на дереве)
		erase         8        ; стереть объект 8 (заряды на море)
		draw          7        ; изобр.  объект 7 (заряды на суше),
                sound        15, 52    ; сопроводив звуком 15, по оконч.f52->1
		clear_lines  23, 23, 0 ; очистить стр.23 цветом 0         
		display      23, 5, 12 ; в стр.23 с поз.5 вывести сообщ.12
                                       ; ("облако над сушей!")          

EQ13b:        if_
                center_position 0, 100, 15, 100, 31;центр базы объекта 0     
		                                   ;в прямоугольнике (100,15)
		                                   ;(100,31) - над морем?    
	      else_ EQ13c  ; нет, переход на EQ13c
			   ; да:                  
       ; облако над морем

	        erase         6        ; стереть объект 6 (заряды на дереве)
		erase         7        ; стереть объект 7 (заряды на суше)
		draw          8        ; изобр.  объект 8 (заряды на море),
                sound        15, 52    ; сопроводив звуком 15, по оконч.f52->1
		clear_lines  23, 23, 0 ; очистить стр.23 цветом 0             
		display      23, 5, 11 ; в стр.23 с поз.5 вывести сообщ.11    
		                       ; ("облако над морем!")                

EQ13c:    return   ; вернуть упр. в log0

EQ14:    if_
          equaln 130, 14   ; v130 = 14?         
	 else_ EQ15        ; нет : переход на EQ15
			   ; да:
   ; закочить показ выводом вопросов

             set         15     ; f15 -> 1 (окно с вопросами авт.не удалять)
             load_sound   7     ; загр. звук 7 (сопровождает вывод вопросов)
	     sound        7, 21 ; исполнить звук 7, по оконч. f21 -> 0      
             print       14     ; вывести сообщ. 14 (вопросы)
             clear_lines 23, 23, 0    ; очистить строку 23 цветом 0             
             set_text_attribute 13, 0 ; устан.цвет символов 13 на фоне 0 для    
				      ; приглашения, кот.будет выведено в стр.  
				      ; 23 (см.команду configure_screen в log01)
             accept_input             ; разрешить ввод с клавиатуры             
             get_num 15, 40           ; ввести число в v40 по приглашению,      
				      ; которым служит сообщение 15              
	     prevent_input            ; запретить ввод с клавиатуры             
             close_window             ; закрыть текстовое окно (с вопросами)    
             set_text_attribute 6, 0  ; восстановить цвет символов и фона       
	     reset 21                 ; f21 -> 0                                

             if_
               equaln 40, 2  ; v40 = 2 (выбран ответ 2) ?                 
             else_ REPEAT    ; нет: переход на метку REPEAT (неправ.ответ)
			     ; да: ответ правильный !
			                          
	       load_sound  90   ; загр.звук 90, сопровожд.правильный ответ
               sound    90, 21  ; исполн. звук 90, по оконч. f21 -> 1     
               reset    15      ; f15 -> 0 - окно убирать автоматически        
               assignn  21, 8   ; через (v21 = 8)/2 сек                          
               print    16      ; вывести сообщение 9                          
               reset    21      ; f21 -> 0 
	       addn      3, 2   ; v3=v3+2 - добавить два очка за правильн.ответ
	       jump ENDLOG      ; безусловный переход на ENDLOG

REPEAT: ; неправильный ответ

          load_sound  8      ; загр.звук 8 (сопровождает неправ.ответ)     
          sound       8, 21  ; и исполнить его, по оконч. f21 -> 1           
          reset      15      ; f15 -> 0 - окно убирать автоматически       
          assignn    21, 8   ; через (v21 = 8)/2 сек                         
          print      17      ; вывести сообщение 17                        
          reset      21      ; f21 -> 0                                    
          decrement   3      ; v3=v3-1 - вычесть очко за неправильный ответ
          new_room   11      ; повторить обучение в комн. 11 заново         


EQ15:	 if_
           equaln 130, 15  ; v130 = 15?         
	 else_ EQ16        ; нет : переход на EQ16
	                   ; да:
           assignn 21, 70  ; окно удал. автоматически через (v21=70)/2 сек  
	   sound   54, 52  ; исполнить звук 54 (внимание), по оконч.f52 -> 1
	   print   21      ; печать сообщения 21                             
	   jump ENDLOG     ; безусловный переход на ENDLOG                  

EQ16:    if_
           equaln 130, 16  ; v130 = 16 ?         
	 else_ EQ17        ; нет : переход на EQ17
			   ; да:
           assignn 21, 50  ; окно удал. автоматически через (v21=50)/2 сек  
	   sound   54, 52  ; исполнить звук 54 (внимание), по оконч.f52 -> 1
	   print   22      ; печать сообщения 22                            
	   jump ENDLOG     ; безусловный переход на ENDLOG                  

EQ17:    if_
           equaln 130, 17  ; v130 = 17?         
	 else_ EQ17a       ; нет : переход на EQ17a
			   ; да:
           assignn 21, 40  ; окно удал. автоматически через (v21=50)/2 сек  
	   sound   54, 52  ; исполнить звук 54 (внимание), по оконч.f52 -> 1
	   print   23      ; печать сообщения 23                            

               assignn  21, 0   ; очистить vars & flags
	       assignn  30, 0   
	       assignn  40, 0   
               assignn 123, 0 
               assignn 124, 0 
               assignn 125, 0 
               assignn 130, 0

	       reset    52
               reset   222

           new_room 13 ; перейти в комнату 13 (см.опис.этой команды)

EQ17a:   return   ; вернуть упр. в log0

ENDLOG: increment 130 ; v130 = v130 + 1
        return        ; вернуть упр. в log0

         MESSAGES      23 ; сообщения

m1     db   "Для продолжения нажмите Enter/Return", 0

m2     db  ' Какое же отношение имеет грозовое облако к молнии ?', 10
       db  ' Чтобы ответить на этот вопрос перенесемся в то время, '
       db  'когда было открыто электричество.', 0

m3     db  ' Считается, что электричество стало известно с того момента,'
       db  'когда человек обратил внимание на удивительную способность '
       db  'янтаря, потертого о шерсть, притягивать к себе различные '
       db  'мелкие предметы и искриться в темноте.', 10
       db  ' Янтарь, по-гречески, - электрон, поэтому и вещества,'
       db  'обладающие такими же свойствами, стали называться электрическими.',0

m4     db  ' В это время электрические явления еще не изучаются, а созерцаются.'
       db  ' Пройдет еще немало времени, прежде чем американец Бенжамен '
       db  'Франклин введет понятия положительного и отрицательного '
       db  'электричества.', 10, ' При трении двух тел наиболее подвижные '
       db  'заряженные частицы - электроны, переходят с одного тела на '
       db  'другое.', 0

m5     db  'Тело, получившее электроны в избытке, заряжается отрицательно,'
       db  'а тело, потерявшее электроны - положительно.', 10
       db  ' Разноименно заряженные тела притягиваются, а одноименно '
       db  'заряженные - отталкиваются.', 0

m6     db  ' Изучая электрические явления, Б.Франклин сделал сенсационное '
       db  'открытие, что молния - это тоже электрический разряд, '
       db  'порожденный грозовым облаком.', 10
       db  ' Свое открытие он подтвердил блестящим экспериментом, пропустив '
       db  'разряд молнии по влажной бечевке от воздушного змея.', 10
       db  ' Сейчас на экране Вы сможете воспроизвести эксперимент Франклина,'
       db  'управляя движением облака влево и вправо.',10, 10
       db  ' Обратите внимание, когда проскакивает искра между стерженьками.',0

m7     db  ' Мы закончили эксперимент и теперь зададимся вопросом, '
       db  ' если молния - это электрический разряд, то грозовое облако '
       db  'и земля должны иметь заряды, причем противоположные по знаку.', 10
       db  ' Как же они образуются ?', 10
       db  ' В настоящее время нет единой теории, которая бы позволила точно '
       db  'ответить, как появляются заряды в облаке. Поэтому ограничимся '
       db  'самым простым объяснением.', 0

m8     db  ' В окружающем нас воздухе всегда имеются свободные электрические '
       db  'заряды, рассеянные крайне неравномерно. Мельчайшие частички, '
       db  'капельки, ледяные кристаллики, двигаясь в воздухе захватывают '
       db  'электрические заряды. При этом одни из них заряжаются '
       db  'положительно, а другие отрицательно. Положительно заряженные '
       db  'капельки воздушным потоком относятся в верхнюю часть облака, '
       db  'а отрицательные остаются внизу.', 0

m9     db  ' Так как действие электрического заряда проявляется на '
       db  'расстоянии, то отрицательно заряженный нижний край облака '
       db  'наводит положительный заряд на поверхности земли, моря, и '
       db  'других объектов, над которыми оно находится.', 0

m10    db  ' Плотность наведенного заряда зависит от проводимости вещества, '
       db  'т.е. способности проводить электрический ток:' 
       db  'чем больше проводимость, тем выше плотность заряда.', 10, 10
       db  ' Управляя перемещением облака проследите, где плотность зарядов '
       db  'выше.', 0

m11    db  ' Сейчас облако над морем. ', 0
m12    db  ' Сейчас облако над сушей.', 0
m13    db  ' Сейчас облако над деревом.', 0

m14    db   " A теперь постарайтесь выбрать правильный ответ на следующий "
       db   "вопрос :", 10
       db   " Где концентрация зарядов, наведенных облаком, "
       db   "выше и почему?", 10, 10
       db   " 1. На суше, так как ее проводимость ниже.", 10
       db   " 2. На море, так как его проводимость выше.", 10
       db   " 3. На суше и на море распределение зарядов одинаково, "
       db   "так как расстояния от тучи до моря и суши равны.", 0

m15    db   " Я считаю правильным ответ номер : ", 0
m16    db   " Вы совершенно правы !", 10,"      Отлично !", 0
m17    db   "  Увы. Ответ неверен.", 10,"  Придется повторить !", 0

m18    db  ' Var(130) = %v130', 0
m19    db  ' Управляйте облаком !', 0
m20    db  ' Змей в облаке !', 0

m21    db   " Между заряженными облаком и землей, а также внутри "
       db   "облака образуется сильное электрическое поле, которое "
       db   "характеризуется напряженностью.", 10, 10
       db   " Напряженность электрического поля - это напряжение между "
       db   "двумя точками поля, находящимися друг от друга на "
       db   "расстоянии одного метра.", 0

m22    db   " По мере накопления заряда напряженность поля растет.", 10
       db   " Когда она достигaет предельного значения, то внутри облака "
       db   "или между облаком и землей происходит электрический разряд.", 10
       db   " Мы видим вспышку молнии и слышим раскаты грома.", 10
       db   " Вы уже видели как это происходит.", 0

m23    db   " Чтобы понять, что из себя представляет молния и как протекает "
       db   "электрический разряд, познакомимся с процессом ионизации.", 10, 10
       db   " Представим себе, что мы находимся в облачной капле высоко "
       db   "над землей.", 0


VERYEND EQU $
LOGIC   ENDS
        END