RU 📌 Pinned

Как сделать?

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

Как сделать задавание количество пшеницы на человека на ход с помощью ввода т.к. я пытался сделать кнопками +1 и -1, но это слишком долго. ТО есть обьясню проблему игрок там строит здания, атакует соседа и у него кончилась пшеница т.к. он не отправил людей работать. Он хочет урезать кол-во пшеницы а там нужен код за это дело отвечающий, у меня есть действие закончить ход в которое я готов прописать что угодно. Так вот повторюсь : как мне сделать изменение переменной пшначел через оператор инпут?

Делаю маленькое меню статистики в ‘предметах’.

В начале игры

$onobjsel = 'onobjsel'
gosub 'Меню'

Локация с массивом ‘Меню’

addobj 'Статистика'

$stat[0] = 'Дней прожито: <<daystart>>'
$stat[1] = 'Яблок поедено: <<allapples>>'

Локация-обработчик ‘onobjsel’

if $selobj = 'Статистика':
delobj 'Статистика'
addobj 'Закрыть'

:loop1
addobj $stat[i]
i=i+1
if i<arrsize('$stat'): jump 'loop1'
end

if $selobj = 'Закрыть':
addobj 'Статистика'
delobj 'Закрыть'

:loop2
delobj $stat[i]
i=i+1
if i<arrsize('$stat'): jump 'loop2'
end

unselect

Меню разворачивается нормально. А вот на сворачивании что-то идет не так.. массив не хочет удаляться. Что не так?

И уж вообще не понятно, почему статистика не отображается в этом меню? В ‘дополнительном описании’ все работает, а тут всегда 0.

А вот на сворачивании что-то идет не так.. массив не хочет удаляться. Что не так?

Нужно перед началом каждого цикла всегда обнулять переменную цикла, счётчик.

i = 0

Nex
Ура спасибо. Входит и выходит. Сворачивается и разворачивается :3

Но почему статистика не выводится?
На акте укусить яблоко у меня

allapples=allapples+1

В массиве

$stat[1] = 'Яблок поедено: <<allapples>>'

Везде выводится, только в предметах не выводится.

SneakBug8:

Как сделать задавание количество пшеницы на человека на ход с помощью ввода т.к. я пытался сделать кнопками +1 и -1, но это слишком долго. ТО есть обьясню проблему игрок там строит здания, атакует соседа и у него кончилась пшеница т.к. он не отправил людей работать. Он хочет урезать кол-во пшеницы а там нужен код за это дело отвечающий, у меня есть действие закончить ход в которое я готов прописать что угодно. Так вот повторюсь : как мне сделать изменение переменной пшначел через оператор инпут?

SneakBug8:

как мне сделать изменение переменной пшначел через оператор инпут?

http://wiki.qsp.su/help:inputs

aska:

Но почему статистика не выводится? Везде выводится, только в предметах не выводится.

Создай новую игру, добавь одну локацию и в неё код из под спойлера. Надеюсь придёт понимание.

Spoiler
daystart = 1
allapples = 1

$stat[0] = 'Дней прожито: <<daystart>>' 
$stat[1] = 'Яблок поедено: <<allapples>>' 

daystart = 2
allapples = 2

arrsize('$stat')

i=0
:loop1 
addobj $stat[i] 
i=i+1 
if i<arrsize('$stat'): jump 'loop1' 

i=0
:loop2 
pl $stat[i] 
i=i+1 
if i<arrsize('$stat'): jump 'loop2' 

i=0
:loop3
*pl $stat[i] 
i=i+1 
if i<arrsize('$stat'): jump 'loop3'

newsash,
спс помогло.

Что-то не приходит понимание.
То есть понятно, что вроде бы выводит. Но непонятно, почему у меня не выводит. Вроде бы по сути все так-же.

Spoiler
!Значения переменных
daystart=1
allapples=1

!Объекты
$stat[0] = 'Дней прожито: <<daystart>>'     
$stat[1] = 'Яблок поедено: <<allapples>>'

!А зачем тут опять?
daystart=2
allapples=2

!Выводит число элементов массива.
arrsize('$stat')

!Добавляет в объекты
i=0
:loop1
addobj $stat[i]
i=i+1
if i<arrsize('$stat'): jump 'loop1'

!Добавляет в доп описание
i=0
:loop2
pl $stat[i]
i=i+1
if i<arrsize('$stat'): jump 'loop2'

!Добавляет в основное окно
i=0
:loop3
*pl $stat[i]
i=i+1
if i<arrsize('$stat'): jump 'loop3'

aska:

!А зачем тут опять?

Это намек, что значения вычисляются в момент присвоения строки переменной. Выводятся-то единицы, а не двойки. Скорее всего проблема в этом.

И ещё нюанс - у тебя возникнут проблемы с удалением предметов, если между выводом и удалением поменяются значения. Лучше выведенную статистику в отдельной переменной хранить. Создаёшь переменную при выводе, стираешь при удалении.

newsash:

aska:

!А зачем тут опять?

Это намек, что значения вычисляются в момент присвоения строки переменной. Выводятся-то единицы, а не двойки. Скорее всего проблема в этом.

Вроде нащупывается проблема. Если вытащить объекты из локации ‘меню’, то что-то начинается получаться, но пока не очень. И я все равно не понимаю, с чем там это связано.

И почему-то данные обновляются не оперативно, а для обновления нужно прогнать луп добавить, удалить..

newsash:

И ещё нюанс - у тебя возникнут проблемы с удалением предметов, если между выводом и удалением поменяются значения. Лучше выведенную статистику в отдельной переменной хранить. Создаёшь переменную при выводе, стираешь при удалении.

Жесть. Это как-то так что-ли?

Spoiler
if $selobj = 'Статистика':
delobj 'Статистика'
addobj 'Закрыть'

daystart=x
allapples=y

i=0
:loop1
addobj $stat[i]
i=i+1
if i<arrsize('$stat'): jump 'loop1'
end

if $selobj = 'Закрыть':
addobj 'Статистика'
delobj 'Закрыть'

killvar 'x'
killvar 'y'

i=0
:loop2
delobj $stat[i]
i=i+1
if i<arrsize('$stat'): jump 'loop2'
end

unselect

aska:

Вроде нащупывается проблема. Если вытащить объекты из локации ‘меню’, то что-то начинается получаться, но пока не очень. И я все равно не понимаю, с чем там это связано.

И почему-то данные обновляются не оперативно, а для обновления нужно прогнать луп добавить, удалить..

Попробуй перед каждым циклом вывода вызывать локацию генерации меню.

aska:

Это как-то так что-ли?

Примерно так:

Spoiler
if $selobj = 'Статистика': 
  delobj 'Статистика' 
  addobj 'Закрыть' 

  gs 'generate_stat'
  killvar $stat_objs
  i=0 
  :loop1 
  addobj $stat[i]
  $stat_objs[i] = $stat[i]
  i=i+1 
  if i<arrsize('$stat'): jump 'loop1' 
end 

if $selobj = 'Закрыть': 
  addobj 'Статистика' 
  delobj 'Закрыть' 

  i=0 
  :loop2 
  delobj $stat_objs[i] 
  i=i+1 
  if i<arrsize('$stat_objs'): jump 'loop2' 
  killvar $stat_objs
end 

unselect

И используй отступы для многострочных операторов - код нечитаемый.

newsash:

Попробуй перед каждым циклом вывода вызывать локацию генерации меню.

Так получилось. Я правда все равно не понимаю почему :3

Но данные переменных все равно обновляются только, если открыть/закрыть меню.

Добрый день,у меня вопрос,как сделать ссылку на другую локацию через функцию? Код ниже,но пишет “Ошибка синтаксиса”.Что нужно исправить?

<a href="exec: gt ''Локация'' ">$func ('scale.tableHP',100,100)+' 100/100'</a>

aska:

Так получилось. Я правда все равно не понимаю почему :3

Потому что значения попадают в строку в момент присвоения строки переменной, а не в момент её вывода на экран.

aska:

Но данные переменных все равно обновляются только, если открыть/закрыть меню.

Что соответствует твоему коду. Если нужно постоянное обновление - при изменении переменных нужно удалять и добавлять эти предметы заново с новыми значениями.

toliaq:

Что нужно исправить?

А можно строчку целиком? Какие там внешние кавычки?

Народ как сделать рынок? С обменом ресурсов, я попытался сделать сделал так: сделал 3 локации ресурсы на продажу ресурсы на покупку, торговля откуда идут кнопки на две предыдущих локации, в р\локациях о ресурсах сделал действия с названием ресурсов в которых я задаю переменную х в одной а у в другой. как дальше настроить кнопку “обменять” в локации торговля??

Log in or Register to post comments.