Перейти к содержимому
Dimiron

Рулетка OpenComputers совмещённое с AE2

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

Прошу сделать рулетку которая будет принимать ставку воронкой а выкидывать выйгрыш выбрасывателем

Надо чтобы процент выйгрыша можно было менять.

К сожалению ничего в награждение предложить не смогу:unsure: Но буду Ооочень благодарен тем кто согласится сделать это

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

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


Ссылка на сообщение
Поделиться на других сайтах
16 часов назад, Dimiron сказал:

сделать рулетку которая будет принимать ставку воронкой а выкидывать выйгрыш выбрасывателем

Начинал я делать подобную штуку, но как то забросил.

В самой игре много скользких моментов.

Сначала я делал рулетку на несколько фигур, всякие ягодки, грибочки, BAR-ы, семёрки,
в итоги от этой идеи отказался, выиграть в подобное не реально.
Упростил до всем понятным крестик и нолик в одну линию.

 

16 часов назад, Dimiron сказал:

Надо чтобы процент выигрыша можно было менять

Менять процент выигрыша гиблое дело, игрок должен выигрывать хотя бы иногда, или играть он не будет.

 

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

 

демка:

Скрытый текст

NnbLQDH.gif

пример сборки:

Скрытый текст

P2MDpKV.png

aWYuL2X.png

 

Код без выдачи призов (можно потестить в эмуляторе)

Скрытый текст

local term = require("term")
local event = require("event")
local computer = require("computer")
local com = require("component")
local gpu = com.gpu

local info = {
  "чтобы играть коснитесь экрана",
  "обменяй железную руду на алмазы",
  "вы выиграете если выпадет три икса",
}

local frame_1 = [[
                    
  ██           ██   
    ██       ██     
      ██   ██       
        ███         
      ██   ██       
    ██       ██     
  ██           ██   
                    
]]

local frame_2 = [[
                    
        █████       
      ███   ███     
     ██       ██    
    ██         ██   
     ██       ██    
      ███   ███     
        █████       
                    
]]

local frame_3 = [[
████████████████████████████████████████████████
█   █ ███ ██   █ ███ █ ██ █   █   █   ██ ██ ██ █
█ █ █ ███ ██ █ █ ███ █ ██ █ ███ █ █ █ █ █ █ ██ █
█  ██   █ ██  ██   █ █ █  █ ███   █   █ █ █ █  █
█ █ █ █ █ ██ █ █ █ █ █  █ █ ███ ███ █ █ █ █  █ █
█   █   █ ██   █   █ █ ██ █ ███ ███ █ █ █ █ ██ █
████████████████████████████████████████████████
]]

local frame_4 = [[
██████████████████████████████████████████████████
█   █ ███ ██   █   █   █ ██ █   █   █   ██ ██ ██ █
█ █ █ ███ ██ █ █ █ █ █ █ ██ █ ███ █ █ █ █ █ █ ██ █
█  ██   █ ██ █ █   █ █ █ █  █ ███   █   █ █ █ █  █
█ █ █ █ █ ██ █ █ ███ █ █  █ █ ███ ███ █ █ █ █  █ █
█   █   █ ██ █ █ ███   █ ██ █ ███ ███ █ █ █ █ ██ █
██████████████████████████████████████████████████
]]

local frame_5 = [[
                                                           
 ███ █     ██  █████   █  █    █   ████ █  █  █ █   █  ███ 
 █   █    █  █   █     █  █    █   █    █  █  █ █   █  █   
 ██  █    █  █   █     █  █   █ █  █    █  █  █ ██  █  █   
  ██ █    █  █   █    ██████  █ █  █    ████  █ █ █ █  ███ 
   █ █    █  █   █    █ ██ █  ███  █    █  █  █ █  ██  █   
 █ █ █  █ █  █   █    █ ██ █ █   █ █  █ █  █  █ █   █  █   
 ███ ████  ██    █    █    █ █   █ ████ █  █  █ █   █  ███ 
                                                           
]]

local colors = {0xFF0066,0xFF9900,0xFFFF00,0x00FF00,0x3300FF,0x00FFFF,0xFF00FF}

local function draw(x,frame,y)
  local row = y or 0
  for txt in frame:gmatch( "([^\n]+)" ) do
    row = row + 1
    gpu.set(x, row, txt )
  end
end

local function game()
  term.clear()
  gpu.setForeground(0xFFFFFF)
  local a,b,c = 0,0,0
  for n,x in pairs({1,24,47}) do
    local r = math.random(1,2)
    os.sleep(0.2)
    if r == 1 then
      draw(x,frame_1)
    else
      draw(x,frame_2)
    end
    computer.beep(220)
    if n == 1 then a = r end
    if n == 2 then b = r end
    if n == 3 then c = r end
  end
  os.sleep(0.2)
  if a == 1 and b == 1 and c == 1 then
    gpu.setForeground(0x00DB00)
    draw(10,frame_3,12)
    computer.beep(300, 0.3)
    computer.beep(500, 0.1)
  else
    gpu.setForeground(0xFF0000)
    draw(10,frame_4,12)
    computer.beep(500, 0.1)
    computer.beep(300, 0.3)
  end
end

gpu.setResolution(67,20)
gpu.setBackground(0x000000)
gpu.setForeground(0xFFFFFF)
gpu.fill(1,1,67,20," ")
draw(4,frame_5)

while true do
  local e = {event.pull(2,"touch")}
  if e[1] == "touch" then
    game()
  else
    term.clear()
    gpu.setForeground(colors[math.random(1,#colors)])
    draw(4,frame_5)
    gpu.setForeground(0xFFFFFF)
    local y = 12
    for i = 1,#info do
      local e = {event.pull(1,"touch")}
      if e[1] == "touch" then
        game()
        break
      else
        gpu.set(38-string.len(info[i])/3,y,info[i])
        y = y + 1
      end
    end
  end
end

 

 

Код с выдачей призов(алмаз) и очисткой валюта приёмника от мусора

Скрытый текст

local term = require("term")
local event = require("event")
local computer = require("computer")
local com = require("component")
local gpu = com.gpu
local tr = com.transposer
local red = com.redstone

local whitelist = {"iron","diamond"}
-- низ:0, верх:1, тыл:2, перед:3, право:4, лево:5
local dropper_side_red = 1
local chest_for_scrap = 2

local info = {
  "чтобы играть коснитесь экрана",
  "обменяй железную руду на алмазы",
  "вы выиграете если выпадет три икса",
}

local frame_1 = [[
                    
  ██           ██   
    ██       ██     
      ██   ██       
        ███         
      ██   ██       
    ██       ██     
  ██           ██   
                    
]]

local frame_2 = [[
                    
        █████       
      ███   ███     
     ██       ██    
    ██         ██   
     ██       ██    
      ███   ███     
        █████       
                    
]]

local frame_3 = [[
████████████████████████████████████████████████
█   █ ███ ██   █ ███ █ ██ █   █   █   ██ ██ ██ █
█ █ █ ███ ██ █ █ ███ █ ██ █ ███ █ █ █ █ █ █ ██ █
█  ██   █ ██  ██   █ █ █  █ ███   █   █ █ █ █  █
█ █ █ █ █ ██ █ █ █ █ █  █ █ ███ ███ █ █ █ █  █ █
█   █   █ ██   █   █ █ ██ █ ███ ███ █ █ █ █ ██ █
████████████████████████████████████████████████
]]

local frame_4 = [[
██████████████████████████████████████████████████
█   █ ███ ██   █   █   █ ██ █   █   █   ██ ██ ██ █
█ █ █ ███ ██ █ █ █ █ █ █ ██ █ ███ █ █ █ █ █ █ ██ █
█  ██   █ ██ █ █   █ █ █ █  █ ███   █   █ █ █ █  █
█ █ █ █ █ ██ █ █ ███ █ █  █ █ ███ ███ █ █ █ █  █ █
█   █   █ ██ █ █ ███   █ ██ █ ███ ███ █ █ █ █ ██ █
██████████████████████████████████████████████████
]]

local frame_5 = [[
                                                            
  ███ █     ██  █████   █  █    █   ████ █  █  █ █   █  ███ 
  █   █    █  █   █     █  █    █   █    █  █  █ █   █  █   
  ██  █    █  █   █     █  █   █ █  █    █  █  █ ██  █  █   
   ██ █    █  █   █    ██████  █ █  █    ████  █ █ █ █  ███ 
    █ █    █  █   █    █ ██ █  ███  █    █  █  █ █  ██  █   
  █ █ █  █ █  █   █    █ ██ █ █   █ █  █ █  █  █ █   █  █   
  ███ ████  ██    █    █    █ █   █ ████ █  █  █ █   █  ███ 
                                                            
]]

local colors = {0xFF0066,0xFF9900,0xFFFF00,0x00FF00,0x3300FF,0x00FFFF,0xFF00FF}

local function draw(x,frame,y)
  local row = y or 0
  for txt in frame:gmatch( "([^\n]+)" ) do
    row = row + 1
    gpu.set(x, row, txt )
  end
end

local function drop(source,sink,count,name)
  local slots = tr.getInventorySize(source)
  local data = tr.getAllStacks(source).getAll()
  for i = 0,slots do
    if data[i] and data[i].name ~= nil then
      if count == "scrap" then
        for j,name in pairs(whitelist) do
          if string.find(data[i].name,name) then
            break
          end
          if j == #whitelist then
            tr.transferItem(source, chest_for_scrap, 64, i+1)
          end
        end
      elseif string.find(data[i].name,name) then
        tr.transferItem(source, sink, count, i+1)
        for i = 1,count do
          red.setOutput(dropper_side_red, 15)
          os.sleep(0.1)
          red.setOutput(dropper_side_red, 0)
          os.sleep(0.1)
        end
        break
      end
    end
  end
end

local function game()
  term.clear()
  gpu.setForeground(0xFFFFFF)
  local a,b,c = 0,0,0
  for n,x in pairs({1,24,47}) do
    local r = math.random(1,2)
    os.sleep(0.2)
    if r == 1 then
      draw(x,frame_1)
    else
      draw(x,frame_2)
    end
    computer.beep(220)
    if n == 1 then a = r end
    if n == 2 then b = r end
    if n == 3 then c = r end
  end
  os.sleep(0.2)
  if a == 1 and b == 1 and c == 1 then
    gpu.setForeground(0x00DB00)
    draw(10,frame_3,12)
    computer.beep(300, 0.3)
    computer.beep(500, 0.1)
    drop(0,1,1,"diamond")
  else
    gpu.setForeground(0xFF0000)
    draw(10,frame_4,12)
    computer.beep(500, 0.1)
    computer.beep(300, 0.3)
  end
end

gpu.setResolution(67,20)
gpu.setBackground(0x000000)
gpu.setForeground(0xFFFFFF)
gpu.fill(1,1,67,20," ")
draw(4,frame_5)

while true do
  local e = {event.pull(2,"touch")}
  if e[1] == "touch" then
    game()
  else
    term.clear()
    gpu.setForeground(colors[math.random(1,#colors)])
    draw(4,frame_5)
    drop(0,1,"scrap")
    gpu.setForeground(0xFFFFFF)
    local y = 12
    for i = 1,#info do
      local e = {event.pull(1,"touch")}
      if e[1] == "touch" then
        game()
        break
      else
        gpu.set(38-string.len(info[i])/3,y,info[i])
        y = y + 1
      end
    end
  end
end

 

 

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, serafim сказал:

Приходится от него как-то избавляться, поставил большой сундук сзади автомата, вдруг квант кто выкинет :)

Даже на ваниле делали вороночные фильтры.

Скрытый текст

 

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, BrightYC сказал:

Даже на ваниле делали вороночные фильтры.

а с помощу ОС ваше изи.

1) Ставиш воронку.

2) закидуеш в каждый слот по 1 предмету (валюта)

3) когда в слоте больше чем 1 валюта то что б транспоузер перемещал их в ме или другой сундук.

 

p.s я б не рекомендувал юзать транспоузер для таких мелких задач ибо он зачастую не может работать в приватах пока ты не добавиш в приват [opencomputers]

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


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

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

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

Гость
Ответить в тему...

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

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

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

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

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


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