Перейти к содержимому
  • 0
Ailen

Вопрос по радару Computronics

Вопрос

Я совсем новичок в как в программировании, так и, в частности, в Lua, поэтому вопрос возможно прозвучит глупо. Тем не менее, я тут пытаюсь сделать простую программку, которая бы делала следующее:

Сканирование области и вывод имён всех игроков в области на экран, причём игроков в белом списке в одной части экрана, а игроков не в белом списке в другой.

 

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

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

 

Пытался посмотреть как это решают другие игроки, на примере программ с проксимити сенсорами из OC но не смог разобраться в коде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Я совсем новичок в как в программировании, так и, в частности, в Lua, поэтому вопрос возможно прозвучит глупо. Тем не менее, я тут пытаюсь сделать простую программку, которая бы делала следующее:

Сканирование области и вывод имён всех игроков в области на экран, причём игроков в белом списке в одной части экрана, а игроков не в белом списке в другой.

 

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

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

 

Пытался посмотреть как это решают другие игроки, на примере программ с проксимити сенсорами из OC но не смог разобраться в коде.

 

Подключи его через адаптер, посмотри какие компоненты появились, подключи его, потом вызывай функцию для получения игроков.

Далее создаешь таблицу, в неё заносишь имена из белого списка.

 

local white_list = {'NEO','Totoro','Alex'}

local component = require('component')

scanner = component.название_компонента.

 

function getWhitePlayers()

     players = scanner.getPlayers()

     white_players = {}

     for i=1, #players do

          for q = 1, #white_list do

                if(white_list[q] == players.name) then

                     white_players[#white_players+1] = players.name

                end

          end

     end

     return white_players

end

 

Это шаблон написал, но уверен функция получения игроков по другому называется.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подключи его через адаптер, посмотри какие компоненты появились, подключи его, потом вызывай функцию для получения игроков.

Далее создаешь таблицу, в неё заносишь имена из белого списка.

 

local white_list = {'NEO','Totoro','Alex'}

local component = require('component')

scanner = component.название_компонента.

 

function getWhitePlayers()

     players = scanner.getPlayers()

     white_players = {}

     for i=1, #players do

          for i = 1, #white_list do

                if(white_list == players.name) then

                     white_players[#white_players+1] = players.name

                end

          end

     end

     return white_players

end

 

Это шаблон написал, но уверен функция получения игроков по другому называется.

 

Спасибо, за помощь. С функцией получения игроков (они там в виде таблицы) я разобрался до этого, выводил имена через print, всё было нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ailen, не слушай Нео. У него вложенные циклы с одинаковыми итераторами.

А еще белый список можно создать таким образом:

local white_list = {'NEO'=true,'Totoro'=true,'Alex'=true}

Тогда поиск в белом списке можно осуществлять без цикла for i = 1, #white_list do.

if white_list[players[i].name] then
   ...
end

Люблю Луа за его таблицы!

 

Да. И не вздумай хранить белый список в коде программы. Настоящие програмеры его всегда хранят в отдельном файле. А мы ведь настоящие програмеры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

...

Для не понимающих русский, и вообще , "Это шаблон написал, но уверен функция получения игроков по другому называется.".

Я за него код не собирался писать, пусть сам думает как точно реализовать.

...

Не слушай Зеро, делай как тебе нравится, а не как советуют, не давай думать за себя.

Зеро, не раскрывай все карты, проиграешь.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

GuOmJxK.png

 

 

 

local term = require('term')
local com = require('component')
local sensor = com.radar
local gpu = com.gpu
floor = math.floor


color = {
	green = 0x00ff00,
	yellow = 0xffb600,
	red = 0xff0000
}

-- Белый список ---
white = {
	Alex = true,
	NEO = true,
	Elena23 = true,
	AdskiyGrifer12 = false
}

 
gpu.setResolution(35,15)

while true do
	pl = sensor.getPlayers()
	term.clear()
	gpu.setForeground(color.yellow)
	gpu.set(2,1, 'В зоне обнаружения радара: '..#pl..' чел.')
		for i = 1, #pl do
			if white[pl[i].name] then gpu.setForeground(color.green)
			else gpu.setForeground(color.red) end
			gpu.set(2, i+1, i..'. '..pl[i].name)
			gpu.set(25, i+1, ' - '..floor(pl[i].distance)..' м')
		end
	os.sleep(30)
end 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не играю, откуда я в зоне 23 метрах?

:)

 

Нео, есть такая вещь, как тестовая переменная, заглушки программные и прочее. Функции еще нет написанной, но ты ее уже сделал тестово и отретурнил нужный результат для отладки другого куска программы:

function getBalanceTODO(nick)
   -- когда-то тут напишу  гетзапрос :)
   -- ........
   t={balance = 250000, uu=0}
   return t
end

Так как я был в сингле, просто добавил таблу искусственно:

pl = sensor.getPlayers()	--> {{distance = 1.5547443, name = 'Alex'}}
pl = {
	{distance = 3.344403443, name = 'Alex'},
	{distance = 13.450923458, name = 'Elena23'},
	{distance = 27.231118900, name = 'Pipka13'},
	{distance = 26.240985532, name = 'AdskiyGrifer12'},
	{distance = 23.240985532, name = 'NEO'},
	{distance = 17.240985532, name = 'bamik'}
	}

а ты что подумал? Что ты как-то попал в мой комп?=)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а ты что подумал? Что ты как-то попал в мой комп?=)

Я испугался, думал меня ломанули, и теперь играют.Моя-же почта вчера засветилась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...