RU

Что то не так в коде) посмотрите кто шарит)

FIdan #819 19.04.2013 11:07 12 comments 10796 views

у меня есть три локации
1 пляж

'Около пляжа растёт множество кокосов былобы неплохо их собрать'
'   У вас <<доска>> досок.'
if доска >= 3 or OBJ 'стол' or дом<5:
     act 'Собрать стол':
         ADDOBJ 'стол'
         доска = доска-3
         gt 'пляж'
     end   
 end
if доска >= 2 or OBJ 'стул' or дом<5:
     act 'Собрать стул':
         ADDOBJ 'стул'
         доска = доска-2
         gt 'пляж' 
     end
 end
if доска >= 5 or OBJ 'кровать' or дом<5:
     act 'Собрать кровать' :
          ADDOBJ 'кровать'
         доска = доска-5
         gt 'пляж'
     end 
end   
if доска >= 4 or OBJ 'ставни' or дом<5:
     act 'Изготовить крепкие ставни':
          ADDOBJ 'ставни'
         доска = доска-4
         gt 'пляж' 
     end 
 end
if доска >= 3 or OBJ 'дверь' or дом<5:
     act 'Собрать Крепкую дверь':
         ADDOBJ 'Дверь'
         доска = доска-3
         gt 'пляж'
     end
end
Act 'Идти к берегу': gt 'Берег'
 end
if дом=5:  act 'идти к дому' gt 'дом' 
end
if дом<5: gt 'лачуга'
 end
 end

2 берег

'На берегу валяется множество обломков корабля из них можно будет собрать  мебель'
'   У вас <<доска>> досок.'
act 'Собирать обломки': 
     доска = доска + 1
end
Act 'Идти на пляж': gt 'пляж'
 end
if дом=5:  act 'идти к дому': gt 'дом' 
end
if дом<5: act 'идти к лачуге': gt 'лачуга'

end

и 3 лачуга

'Ваша лачуга нуждается в мебеле'
'   У вас <<доска>> досок.'
IF OBJ 'стол':
	ACT 'Поставить стол у окна':
		DELOBJ 'стол'
		'Стол хорошо вписался в обстановку'
		дом=дом+1
		DELACT 'Поставить стол у окна'
	END
END
IF OBJ 'стул':
	ACT 'Поставить стул у стола':
		DELOBJ 'стул'
		'Стул хорошо вписался в обстановку'
		дом=дом+1
		DELACT 'Поставить стул у стола'
	END
END
IF OBJ 'кровать':
	ACT 'Поставить кровать у стены':
		DELOBJ 'стул'
		'кровать хорошо вписалась в обстановку'
		дом=дом+1
		DELACT 'Поставить кровать у стены'
	END
END
IF OBJ 'дверь':
	ACT 'Поставить новую дверь':
		DELOBJ 'стул'
		'С такой дверью можно не боясь спать'
		дом=дом+1
		DELACT 'Поставить новую дверь'
	END
END
IF OBJ 'ставни':
	ACT 'Поставить новые ставни':
		DELOBJ 'ставни'
		'Окно стало безопасным'
		дом=дом+1
		DELACT 'Поставить новую дверь'
	END
END
Act 'Идти на пляж': gt 'пляж'
 end
Act 'Идти к берегу': gt 'Берег' 
end

по задумке на береге он должен собирать доски на пляже изготавливать мебель а лачугу обустраивать
после того как в лачуге появится 5 элементов декора он должен стать домом. но чтото в коде нето)

локация пляж перестала быть активной

Edited at 19.04.2013 11:09 (12 years ago)

у тебя условия добавления действий “Собрать стол” и т.д. не правильные
например

if доска >= 3 or OBJ 'стол' or дом<5:

действие будет отображаться если досок больше 2 ИЛИ стол есть в инвентаре ИЛИ переменная дом меньше 5
соответственно действие будет добавляться постоянно
нужно

if доска >= 3 AND NO OBJ 'стол' AND дом<5:

и еще в данной реализации можно один и тот же предмет собирать несколько раз - не зная, задумывал ли ты так или нет, если нет надо добавить переменную для отслеживания уже собранных вещей и добавить ее в услови

и еще - ты путаешь одно и многострочную запись if и act
например

Act 'Идти на пляж': gt 'пляж'
end

нужно или

act 'Идти на пляж': gt 'пляж'

или

act 'Идти на пляж': 
   gt 'пляж'
end

то есть, если пишешь код в той же строчке, что и if или act, то end не нужен
в твоем примере это не критично, но если такая запись будет внутри другого многострочного if/act будут проблемы

я поправил эти ошибки но он всеравно не заходит на пляж переходит только между лачугой и берегом
лачуга

'Ваша лачуга нуждается в мебеле'
'   У вас <<доска>> досок.'
IF OBJ 'стол':
	ACT 'Поставить стол у окна':
		DELOBJ 'стол'
		'Стол хорошо вписался в обстановку'
		дом=дом+1
		DELACT 'Поставить стол у окна'
	END
END
IF OBJ 'стул':
	ACT 'Поставить стул у стола':
		DELOBJ 'стул'
		'Стул хорошо вписался в обстановку'
		дом=дом+1
		DELACT 'Поставить стул у стола'
	END
END
IF OBJ 'кровать':
	ACT 'Поставить кровать у стены':
		DELOBJ 'стул'
		'кровать хорошо вписалась в обстановку'
		дом=дом+1
		DELACT 'Поставить кровать у стены'
	END
END
IF OBJ 'дверь':
	ACT 'Поставить новую дверь':
		DELOBJ 'стул'
		'С такой дверью можно не боясь спать'
		дом=дом+1
		DELACT 'Поставить новую дверь'
	END
END
IF OBJ 'ставни':
	ACT 'Поставить новые ставни':
		DELOBJ 'ставни'
		'Окно стало безопасным'
		дом=дом+1
		DELACT 'Поставить новую дверь'
	END
END
Act 'Идти на пляж': 
gt 'пляж'
end
Act 'Идти к берегу':
gt 'Берег' 
end

берег

'На берегу валяется множество обломков корабля из них можно будет собрать  мебель'
'   У вас <<доска>> досок.'
act 'Собирать обломки': 
     доска = доска + 1
     CLR
     
end

Act 'Идти на пляж': gt 'Пляж'
if дом=5: 
      act 'идти к дому': gt 'дом' 
end
if дом<5: 
     act 'идти к лачуге': gt 'лачуга'
end
end

пляж

'Около пляжа растёт множество кокосов былобы неплохо их собрать'
'   У вас <<доска>> досок.'
if доска >= 3 and no OBJ 'стол' and дом<5 and sz=0:
     act 'Собрать стол':
         ADDOBJ 'стол'
         доска = доска-3
         sz=1
         gt 'Пляж'
     end   
 end
if доска >= 2 and no OBJ 'стул' and дом<5 and sx=0:
     act 'Собрать стул':
         ADDOBJ 'стул'
         доска = доска-2
         cx=1
         gt 'Пляж'
     end
 end
if доска >= 5 and no OBJ 'кровать' and дом<5 and st=0:
     act 'Собрать кровать' :
          ADDOBJ 'кровать'
         доска = доска-5
         st=1
         gt 'Пляж'
     end 
end   
if доска >= 4 and no OBJ 'ставни' and дом<5 and sv=0:
     act 'Изготовить крепкие ставни':
          ADDOBJ 'ставни'
         доска = доска-4
         sv=1 
         gt 'Пляж' 
     end 
 end
if доска >= 3 and no OBJ 'дверь' and дом<5 and cb=0:
     act 'Собрать Крепкую дверь':
         ADDOBJ 'Дверь'
         доска = доска-3
         cb=1
         gt 'Пляж'
     end
end
Act 'Идти к берегу': gt 'Берег'
end
if дом=5:  act 'идти к дому' gt 'дом' 
end
if дом<5: gt 'лачуга'
end
end

Полность не уверен, но возможно проблема в этих строках:

Act 'Идти к берегу': gt 'Берег' 
end 
if дом=5:  act 'идти к дому' gt 'дом' 
end 
if дом<5: gt 'лачуга' 
end 
end

Получается что при каждом переходе на локацию “Пляж” код срабатывает так что ты появляешься у лачуги. Лучше убрать эти условия или, по возможности, заменить их чем либо другим, скажем добавь в условие переменную-флаг. Удачи!

Заработалоо спасиба)

Act 'Идти к берегу': gt 'Берег'
end
if дом=5: 
      act 'идти к дому': gt 'дом' 
end
if дом<5: 
     act 'идти к лачуге': gt 'лачуга'
end

Перепутаны многострочные и однострочные операторы. Классика.

Поэтому однострочные формы лучше не использовать совсем.

я забыл вписать

act 'идти к лачуге':

пляж

if доска >= 4 and no OBJ 'ставни' and дом<5 and sv=0:
     act 'Изготовить крепкие ставни':
          ADDOBJ 'ставни'
         доска = доска-4
         sv=1 
         msg 'Вы соорудили ставни'
         gt 'Пляж' 
     end 
end

лачуга

IF OBJ 'ставни'and aq=0 :
	 ACT 'Поставить новые ставни':
		 DELOBJ 'ставни'
		 дом=дом+1
		 aq=1
		 msg'Окно стало безопасным'
		 DELACT 'Поставить новую дверь'
	 END
END

на пляже делаю ставни их можно сделать всего 1ни в лачуге ставни можно поставить только 1 раз

так должно быть

на пляже делаю ставни их можно сделать всего 1ни в лачуге ставни можно поставить нное кол раз

а так получается

в итоге счетчик фрагментов интерьера считает слишком много и не могу попасть в локацию дом. как сделать чтоб ставни можно былоб разместить только 1 раз

FIdan,
Действие по условию.

У тебя в DELACT удаляется не то действие которое выбрал игрок. Из-за таких ошибок лучше обходиться вообще без DELACT.

=)спасиба)

а как можно обойтись без delact ?

FIdan,
см. примеры по ссылке в моём предыдущем сообщении.

А также см. учебник.

Aleks Versus Moderator 20.04.2013 18:01 (12 years ago)

FIdan:

а как можно обойтись без delact

Проверять условие в действии, например.

Spoiler
ACT 'Поставить новые ставни':
         IF OBJ 'ставни'and aq=0 :
            DELOBJ 'ставни' 
            дом=дом+1 
            aq=1 
            msg'Окно стало безопасным'
         ELSEIF aq=1:
            'На окне уже есть ставни'
         ELSE
            'У тебя нет нужного предмета'
         END 
     END

Log in or Register to post comments.