RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2430368 views

Я очень плохо разбираюсь в программирование однако считаю, нет лучше обучения, чем самообучение. Поэтому прискорбному факту, считаю, что пока рано что то убирать из украденного чужого кода, потому, как механизм может совсем отказать.
Вот моя игра, пока набростки. Хочу прикрутить сюда счетчики усталости, которые при нуле отправляют ГГ в принудительный сон, счетчик голода, который при нуле убивает героя и счетчик жажды который при нуле убивает героя.
##остров##

Aleks Versus:

можно и нужно убрать лишние циклы:

Тогда уж и лишние условия убрать. И ошибки вылечить, которые появились от убирания циклов.

Spoiler
VIEW 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
hour_plus = minut / 60         &! сколько полных часов прошло 
minut = minut mod 60           &! приводим минуты в нормальный вид (от 0 до 59)
hour = hour + hour_plus        &! прибавляем к текущему времени, сколько полных часов прошло 

! подсчитываем голод и усталость: 
golod = golod - hour_plus 
son = son - hour_plus 

day_plus = hour / 24    &! сколько полных дней прошло 
hour = hour mod 24      &! приводим часы в норму (от 0 до 23)  
daystart = daystart + day_plus     &! количество дней от начала игры

week = (week + day_plus) mod 7     &! выставляем день недели 

if week = 0:Set $week = 'Воскресенье'   &! Счёт идёт от 0.
if week = 1:Set $week = 'Понедельник' 
if week = 2:Set $week = 'Вторник' 
if week = 3:Set $week = 'Среда' 
if week = 4:Set $week = 'Четверг' 
if week = 5:Set $week = 'Пятница' 
if week = 6:Set $week = 'Суббота' 

day = day - 1          &! Хак для нормальной работы в диапазоне от 1 до 30

 day = day + day_plus   &!    увеличиваем количество текущих дней 
 month_plus = day/30 
 day = day mod 30
 month = month + month_plus 

day = day + 1          &! Хак для нормальной работы в диапазоне от 1 до 30

if month = 0:Set month = 1 
if month = 13:Set month = 1&set year = year + 1 
If month = 1:set $month = 'Январь' 
If month = 2:set $month = 'Февраль' 
If month = 3:set $month = 'Март' 
If month = 4:set $month = 'Апрель' 
If month = 5:set $month = 'Май' 
If month = 6:set $month = 'Июнь' 
If month = 7:set $month = 'Июль' 
If month = 8:set $month = 'Август' 
If month = 9:set $month = 'Сентябрь' 
If month = 10:set $month = 'Октябрь' 
If month = 11:set $month = 'Ноябрь' 
If month = 12:set $month = 'Декабрь' 

if minut < 10:set $nilmin = '0' 
if minut >= 10:set $nilmin = '' 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
!!!!!!!!!КОНЕЦ РАЧЕТА ВРЕМЕНИ 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 



!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
!!!!!!!!!НАЧАЛО ОПИСАНИЯ 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
if opisanie=0:'<center>Время <B><<hour>></B> часов <B><<$nilmin>><<minut>></B> минут. Сейчас <<day>> <<$month>> <<year>>года, <<$week>></center>'

пороль к игре 19141914

Aleks Versus Moderator 16.12.2013 09:19 (12 years ago)

newsash,
точно. Здесь же сразу высчитывается текущее время.
vais,
Тебе надо проверить опечатки. Из-за них может возникнуть много ошибок. Жажда на локации “начало” обозвана “жажжа”.
В остальном всё должно работать. На локации “время” в самом низу пишешь что-то вроде:

if golod<1:
*clr
*pl 'Вы умерли'
end

То же самое для жажды и усталости. То есть подсчёт у тебя работает, тебе только нужно разобраться с переменными. В указанном коде, голод подсчитывается переменной golod. тебе достаточно на локации “начало” указать golod = 72. И через семьдесят два часа по игре, голод убьёт героя. Для жажды, напротив, нужно прописать на локации “время”, после строки golod = golod -1 строку жажда = жажда -1
Как бы ты не хотела, поправить чужой код придётся. :)

Aleks Versus,
Ребят ну миди это хорошо, а как к плееру фестиваль(festival) подключить? Делал кто, нет?

Aleks Versus Moderator 16.12.2013 15:18 (12 years ago)

BECEJIb4AK_Y, mp3 делал, wav делал. festival, я запамятовал, - это что?

Синтезатор речи?

да. в вики описание легко найти, и ставится вроде не сложно.

Ребят, а как сделать меню в инвентаре? что бы можно было нажать туда и от туда выйдет еще один список. Пример

Инвентарь
Характерисктики
Умения
Дневник

при нажатии инвентар выводится список вещей в инвентаре итд

vais:

Ребят, а как сделать меню в инвентаре? что бы можно было нажать туда и от туда выйдет еще один список. Пример

Хотел предложить menu, но тут явно другое нужно.
Изучаешь применение $onobjsel.
В локации-обработчике выбора предмета (которую задаёшь с помощью $onobjsel) выбранный предмет (selobj) по вариантам.

if $selobj = '<<Назад':
  delobj
  addobj 'Инвентарь'
  ...
end
if $selobj = 'Инвентарь'
  delobj
  addobj '<<Назад'
  i = 0
  :loop
    addobj $инвентарь[i]
    i += 1
  if i < arrsize('инвентарь'): jump 'loop'
end

В этом примере по выбору инвентаря выводится в инвентарь массив ‘$инвентарь’.

Это слишком сложно для меня(

vais:

Это слишком сложно для меня(

Сначала делаешь поиск по файлу по строке ‘onobjsel’ (без кавычек само собой) на случай, если в том коде, который ты брала за образец, это уже используется.
Если ничего не нашлось, создаёшь локацию с названием ‘$onobjsel’. В первой локации игры пишешь $onobjsel = ‘$onobjsel’. В коде локации пишешь то, что в моём предыдущем посте (нужно дописать код по образцу, там должно быть несложно). Появятся вопросы - спрашиваешь. :)

Aleks Versus Moderator 16.12.2013 20:13 (12 years ago)

vais,
ничего сложного. Newsash правильно говорит.
Инвентарь приходится держать в разных массивах. Допустим, верхний уровень твои четыре предмета:

$root[0] = "Инвентарь"
$root[1] = 'Характерисктики' 
$root[2] = 'Умения'
$root[3] = 'Дневник'

В массиве $inventar держишь предметы, которые как бы в рюкзаке у героя:

$inventar[0] = 'ручка'
$inventar[1] = 'отвёртка'
$inventar[2] = 'молоток'
$inventar[3] = 'яблоко'

Уж не знаю, где ты их будешь вписывать в этот массив. В действиях, или на самих локациях, но выглядит для примера это так.

Создаёшь “локацию-обработчик выбора предмета”. Название может быть любым, но чтоб не заморачиваться обычно используют onObjSel. В локации “начало” пишешь

$onobjsel = 'onObjSel'

На локации “onObjSel” пишешь код, который будет воспроизводить предметы из массивов:

if $selobj = 'Инвентарь':
! если выбран объект инвентарь
  delobj &! очищаем список предметов

  addobj '<<Назад' &! добавляем предмет для возврата к предыдущему списку
! цикл, который воспроизводит предметы:
  i = 0 
  :loop1 
    addobj $inventar[i] 
    i += 1 
  if i < arrsize('$inventar'): jump 'loop1'
end

if $selobj = '<<Назад':
! если выбран предмет, который должен нас возвратить к предыдущему списку:
delobj &! очищаем список предметов
! цикл, который воспроизводит предметы:
  i = 0 
  :loop2
    addobj $root[i] 
    i += 1 
  if i < arrsize('$root'): jump 'loop2'
end
! последняя строка снимает выделение с предмета:
unselect

практически тебе придётся добавлять предметы не с помощью addobj, а просто внося названия в массив.
Например действие “поднять яблоко”. Было такое:

act "поднять яблоко":
     addobj "яблоко"
     delact $selact
end

А стало такое:

act "поднять яблоко":
     $inventar[] = "яблоко"
     delact $selact
end

Если я с фестивалем спросил давно замусоленую банальщину дайте ссыль я почитаю. плз

Кто может мне помощь с боевой системой =(
Целый день мучаюсь, нечего лучше этого не написала

if былпляж2=0
'вы видете свою жену и дочерей. Это была хорошая новость, а вот новость плохая, их загнал на небольшую скалу большой краб, ни жена ни дети еще вас пока не увидили'
act 'напасть на краба':
	if 'кокосовый орех':
		act 'бросить кокосом в краба':
			крабкокос=rand(1,10)
				if крабкокос=1:
				молодойкрабжизнь=молодойкрабжизнь-5
				'Вы попали кокосовым орехом в краба'
					act 'ударить':
					крабударить=rand(1,10)
					крабатака1=rand(1,100)
					крабатака2=rand(1,100)
						if крабударить=1:
							молодойкрабжизнь=молодойкрабжизнь-урон
							end
						if крабатака1=<15:
							жизнь=жизнь-молодойкрабурон
							end
						if крабатака2=<15:
							жизнь=жизнь-молодойкрабурон
							end
						end
					end
				end
			end
		end
	end
end

Столкнулся с небольшой проблемой, которая сильно сбила меня с толку. Вообще ситуация очень сильно похожа на баг плеера (?), хотя я возможно не знаю каких-то тонкостей, так что хотелось бы прояснить.
Есть две строки кода, выглядящие таким образом:

$a=$a-$b
if $c>$a : $c=$a

Во всех трех переменных - числа и кроме чисел ничего там быть в принципе не может. До этих строк $a всегда равно $c ($b иногда может быть больше нуля и равна нулю). Прикол вот в чем: какое-то время все работает как надо, все считается правильно, но рано или поздно вторая строка почему-то начинает игнорироваться. Я даже вывод переменных в доп. описание давал: получалось, например, ДО строк что $a=10 $b=2 $c=10, а после: $a=8 $b=2 $c=10. Спрашивается как такое вообще возможно? Строковые переменные в числовые переводятся автоматом (я собственно только их и использую для удобства) и никаких проблем до этого не встречалось. Что интересно проблема вроде бы исчезла после того как я заменил вторую строку на $c=$c-$b (то же самое по сути), во всяком случае прогнал код с сотню раз и такого казуса как в предыдущем случае не возникало. При первом варианте он проявлялся где-то через 10-20 повторов. За почти 150кб работоспособного кода в первый раз встречаю косяк, которому просто не вижу никакого разумного объяснения. Вообще с кодом так - либо работает, либо нет. А серединный вариант - это чушь какая-то… Тем более на таком простеньком отрезке.

Log in or Register to post comments.