RU 📌 Pinned

Как сделать?

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

dmvikar Спасибо очень помог. Я снова с вопросом)
У меня условно есть таблица 3х3

Spoiler
$Таблица1+="<table>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$персонаж1</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
$Таблица1+="</table>"

На которой располагается персонаж и остальные клетки пустые. Но в зависимости от ситуации он может перемещаться по таблице. Вопрос. Как можно это компактно организовать? первая мысль у меня была прописать условие и прописывать каждое положение, вроде :

Spoiler
if позиция =1 :
   $Таблица1+="<table>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$персонаж1</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
   $Таблица1+="</table>"
elseif if позиция =2 :
  $Таблица1+="<table>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$персонаж1</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
	$Таблица1+="<tr>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
		$Таблица1+="<td>$картинка_пустой_клетки</td>"
	$Таблица1="</tr>"
   $Таблица1+="</table>"

и тд.
Но эта идея была откинута как идиотская так как в процессе игры на этих же клетках появиться еще $персонаж2, $персонаж3 и тд. и каждую позицию просто адово прописывать таким образом

Дамир Белялов #654 04.11.2023 08:55 (2 years ago)

Господа, приветствую. Снова я со своим qsp рогаликом. такой вопрос: Можно ли назначить горячие клавиши, чтоб по стрелочкам не тыкать постоянно (и не через девять действий acts, а отдельно назначить)?

так же у меня возникла неудобная кривая проблема, связанная с размером отображаемых блоков. Я хочу сделать в игре настройки, чтоб игрок мог сам выбрать размер иконок 32 на 32 или 64 на 64, но как только я меняю размер иконок во время игры, получается чушь (только иконка игрока меняется). Поскольку размер блоков мира был задан при генерации вместе с HTML лабудой типа <img src=“” widght=“X” height=“X”>, то я незнаю как уже во время игры всё это переделать. Мир уже сгенерирован, переменная отображения уже задана =( .

Дамир Белялов,
1) Тебе сюда
2) Ну, у тебя же сетка как-то создаётся? Где-то храниться? Вот при изменении размера, просто заново её строить уже с учетом новых размеров.

Darvin432,
Без массивов и циклов я даже хз как такое решать с текущим кодом)
Набросал свой вариант: TestGrid.qsp
Перемещаться если что можно нумпадом.

Дамир Белялов #654 04.11.2023 13:07 (2 years ago)

ни один из советов не помог
1) начало статьи про привязку очень точно указывает на мою проблему, однако меня не устраивает то, что нужно задействовать поле ввода. мне нужно без него нажать на клавишу “W”, “A”, “S”, “D”, где в определенной локации нажатие будет инициировать процесс перехода по клеткам.
2) способ годен для “заскриптованной” заданной по каждому блоку карты. Но у меня перед заданными объектами существует ещё и случайное наполнение карты. Если перегенерирую карту - получится бред и это будет ЧРЕЗВЫЧАЙНО заметно игроку. Типа… Чё? мир по новому построился WTF???!

Дамир Белялов,
1) Ну тут только использовать qSpider, на классике тебе этого не достичь, увы.
2) Тогда можно $MainTxt/либо массив/переменная где у тебя хранится текст заменить через $Replace все width и height на нужные значения. Либо через регулярные выражения. Но первое проще, возможно правда медленнее, тут не знаю.

Что-то типа:

$Replace($location[i], "width=32", "width=64")

Dominus спасибо буду разбираться в твоём примере. А он подрузумевает наличие 2го персонажа? например если ближайшая ячейка сверху уже занята то персонаж1 не должен туда переходить

Darvin432,
Нет, но поняв принцип, не составит труда такое реализовать)
Даточно например используя get_cell_by_xy получить содержимое ячейки и узнать, есть ли там кто-то или что-то, на что нельзя наступать. Если есть, то отказать в переходе на ячейку.

Дамир Белялов #654 04.11.2023 19:22 (2 years ago)

эффект тот же, код конечно сработал, но по той же песне((
пример из моих переменных:

$x['<<x>>,<<y>>,<<map>>, символ'] & ! - это массив символа 1й клетки на которой стоит игрок на карте номер 1

есть ли возможность сделать хитрый реплейсер типа:

$Replace($x['<<!все цифры>>,<<!все цифры>>,<<!все цифры>>, символ'], height="32", height="64")
$Replace($x['<<!все цифры>>,<<!все цифры>>,<<!все цифры>>, символ'], width="32", width="64")

!все цифры - значит все возможные значения, братан, я просто вола зае#у, если буду от x=1 до x=maxX и от y=1 до y=maxY фигачить циклы реплейса. Но если уж других нет вариантов то мне придётся сломаться на пару часов…

Дамир Белялов,
Ну тут же как раз циклы просматриваются)
Ты же как-то заполнял эту карту не руками, правильно?)
Вот пример: ChangeTilesSize.qsp

1. Чем тебе 9 актов не устраивают? Скрываешь окно действий, чтоб не смущало, а сами действия разносишь по актам, чтоб направления совпадали с нумпадом. Собственно, 8 направлений движения, кроме как к нумпаду и привязать-то не к чему.
2. Сделай тайлы разных размеров и не парься. Тут еще надо учесть, что твоя карта может расползтись на несколько экранов, что в куспе будет уже не играбельно.

Вопрос по массиву args: верно ли я понимаю, что этот массив глобальный, один на всех, так сказать. И, если я внутри одной функции пользовательской с заданными аргументами вызову другую функцию, при это тоже задав ряд аргументов, то аргументы из функции №2 заместят аргументы первой функции?

Aleks Versus Moderator 16.11.2023 13:35 (2 years ago)

Hungry,
нет, всё совсем наоборот. Массив args - локальный. Для каждой локации, для каждого вызова локации, создаётся свой собственный массив args, и никак не влияет на другие массивы args в других локациях. Область видимости массива args текущей локации распространяется так же на действия, созданные в текущей локации. А вот для кода dynamic тоже создаются собственные локальные args. Такой же локальный и массив $result.

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

local a, b, $back_ = 12, 99, 'глухая чаща'

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

# start
abc = 99
qwe = 103
gosub 'foo'
*pl 'start'
*pl abc
*pl qwe
- start

# foo
local abc = 277
dynamic {
  local qwe = 345
  *pl 'dynamic'
  *pl abc
  *pl qwe
}
*pl 'foo'
*pl abc
*pl qwe
- foo

Благодарствую) Значит, работать будет чуточку полегче

Дамир Белялов #654 07.01.2024 14:42 (2 years ago)

Здравствуйте, уважаемые! Напомните пожалуйста, кому не лень, пример полоски жизни через таблицу. не могу найти в рубрике “Примеры кода” на нашем сайте.
Если к примеру, данные такие:

mhp=200 
hp=mhp 
hpperc=(hp*100)/mhp

Log in or Register to post comments.