♦️ Estou sendo eu mesmo e só respondo quem for educado. ♦️ Às vezes eu posto um pensamento que surgiu na mente sem muito embasamento e às vezes eu deleto o post (não sou dono de nenhuma verdade absoluta). ♦️ Se está incomodado com o que eu posto e não sabe fazer críticas construtivas, você pode parar de me seguir e ir embora, não me faz falta. ♦️ Tentando seguir a filosofia taoísta (tem dias que não dá). ♦️ Posto imagens que eu encontro na internet e acho legal. ♦️ Estou apenas no NOSTR e no simpleX (esse eu quase nem uso). ♦️ Vou mutar qualquer pessoa que vier com link de site onion ou que pareça um bot nas minhas postagens. ♦️ Lolicon ético.
Public Key
npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Profile Code
nprofile1qqs8f6n8ucafl9v0hetmdtevadd0cat8ujh2mhe82h5s8uluyga95ngpz3mhxue69uhhyetvv9ujuerpd46hxtnfduq3gamnwvaz7tmwdaehgu3wdau8gu3wv3jhvqgdwaehxw309ahx7uewd3hkcqgcwaehxw309aex2mrp0yh8xmn0wf6zuum0vd5kzmqtrdtum
Show more details
Published at
2026-03-07T22:22:24Z Event JSON
{
"id": "3940f8a249f3772c311ee8e438c2c050b49249128d9ab129da5be2411432b156" ,
"pubkey": "74ea67e63a9f958fbe57b6af2ceb5afc7567e4aeaddf2755e903f3fc223a5a4d" ,
"created_at": 1772922144 ,
"kind": 0 ,
"tags": [
[
"alt",
"User profile for Venoxo"
]
],
"content": "{\"name\":\"Venoxo\",\"display_name\":\"Venoxo\",\"picture\":\"https://image.nostr.build/881a73a87ad9641a6c25204288056f5a3b1fffd8dc83a60b966748cfe2636c3e.jpg\",\"banner\":\"https://image.nostr.build/0ce5129d2f6a1f53a21373329d2dd959f5ed9ef75fcc37734117c2fdcaac94d3.jpg\",\"lud16\":\"[email protected] \",\"displayName\":\"Venoxo\",\"about\":\"♦️ Estou sendo eu mesmo e só respondo quem for educado.\\n♦️ Às vezes eu posto um pensamento que surgiu na mente sem muito embasamento e às vezes eu deleto o post (não sou dono de nenhuma verdade absoluta).\\n♦️ Se está incomodado com o que eu posto e não sabe fazer críticas construtivas, você pode parar de me seguir e ir embora, não me faz falta.\\n♦️ Tentando seguir a filosofia taoísta (tem dias que não dá).\\n♦️ Posto imagens que eu encontro na internet e acho legal.\\n♦️ Estou apenas no NOSTR e no simpleX (esse eu quase nem uso).\\n♦️ Vou mutar qualquer pessoa que vier com link de site onion ou que pareça um bot nas minhas postagens.\\n♦️ Lolicon ético.\",\"website\":\"\",\"nip05\":\"\"}" ,
"sig": "b6212568d38b75fa80f58ef10d8e1a042e476e23b358859deab49a448333bcbf6489b2d0612533a9bc3cc84f086b2b4028bcc3560a065c28597b96b2c197850d"
}
Last Notes npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/48e1dbc9231077fe7b905123df290523b3cbc85d3efb9ea9f964b367a80daa9e.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu escrevia "ter" ou "war" na pesquisa e o app caia, juro que por um momento eu achei que isso seria uma "trava de segurança" contra conteúdo problemático. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/11b61c1e53cca1a573893cf9a3c81136d40745c6dd1c92985461b251787faf2e.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Sulista só se alimenta de charque e chimarrão, qualquer coisa fora disso é toxina mortal. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Se tem uma coisa que eu detesto no progressista médio, é o fato de que ele sabe que a lei não é uma régua moral decente, porém ele diz que deve ser obedecida mesmo que ela seja absurda para manter uma suposta ordem ou guardar supostos direitos. Por outro lado, se a lei se volta contra seu grupo, ele quer pagar de revolucionário rebelde. Ou seja, a visão de mundo deles quando vai pra prática é um maquiavelismo extremo. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo A partir do momento que você deduz que alguém é mais ou menos homem, você já aderiu uma visão pós-moderna e deturpada. O homem é o que é por essência, não por quantidade. A partir do momento que você atribui quantidade ao "ser homem", você está implicitamente dizendo que alguém pode ser metade homem e metade mulher, ou pior, daria pra dizer que um homem é 0% homem, portanto, completamente mulher ou algo sem nenhuma determinação nos polos (coisa que vai contra muitas tradições antigas). E se ser homem for uma questão quantitativa, isso também deixa implícito que para ser homem você precisa reforçar esse título, reduzindo a essência de ser homem a um mero processo mecânico que pode "enferrujar", ou se reverter, caso você não realize o "processo de ficar homem" regularmente. O que existem são comportamentos tipicamente masculinos e femininos, que podem ser predominantes no homem ou na mulher por vários fatores ou em determinado momento, mas eles não alteram a essência do ser. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/73f3757017fa2d580fc13b3955c0720a59d8727e629dd7916f673d64a71e7f50.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Sendo sincero, por enquanto eu estou vendo tutoriais no youtube e pesquisando esses conceitos individualmente. Depois eu leio algum manual (o que estiver mais atualizado) e já parto pra fazer alguma coisa. Mas esse livro eu já ouvi falar em conversas do reddit. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo +++ Eu estudo isso mais por ser um entusiasta mesmo, eu sei que eu poderia programar em GO, talvez eu já teria o dobro de projetos finalizados. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Mas isso acontece por causa do tempo do programador, que precisa entregar projetos a todo vapor, não porque o hardware tanka tudo (e às vezes nem tanka). (aliás, o hardware pode ser bom por usar um firmware programado em baixo nível). Em sistemas críticos, como o próprio kernel do linux, sistemas embarcados e IOT, é obrigatório o uso de linguagens de baixo nível em partes críticas ou no sistema todo, não apenas pelo desempenho, mas também pelo baixo consumo de energia. Sem falar dos jogos, principalmente os fps. Lógico, nem todo mundo vai precisar usar linguagens como C, C++ e Rust (a que fecha a tríade). Muitas vezes vão usar o Python para fazer automação ou Ruby para fazer sites na web com o rails, são fáceis e muito eficientes pro serviço que se propõem a fazer, dá pra entregar projetos com agilidade sem custos extremos para a máquina. Mas a maioria das bibliotecas destas linguagens são feitas em baixo nível, às vezes até a própria linguagem de alto nível foi feita inteira por outra linguagem de baixo nível. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Correção: escopo da função main... npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Uma coisa interessante que eu vi nos códigos em rust são os tipos primitivos, como o :f64. Isso indica que o números atribuídos às variáveis X e Y, ambas do escopo main, vão ser pontos flutuantes de 64 bits na memória do pc ao iniciar o código que vai dar o resultado da soma dos dois. Caso eu trocasse para o tipo primitivo :i8, um inteiro de 8 bits, o código não executa por porque os números somados não são inteiros e o rust não faz uma conversão automática. Além do fato de que casas decimais em números flutuantes são representadas a partir de 32 bits. Isso é UMA das coisas que fazem a linguagem ser rápida porque os tipos já são definidos dentro do código antes de sua execução, dando instrução à máquina, sem a necessidade de serem interpretados durante a execução, o que geraria um custo na performance. https://image.nostr.build/d4fbf2c208633648a648c53687afc58bf31cbb269e80c5e57abe502ea7d13405.png npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/11359b0376a8dfc96a55b8ba97377362ae69522f28fe6e6492eff1c6c995a756.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/3dfb74aa25cf6d75788e3c04d5609e16f97cb7f837178075f0c86b29f278e177.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/a0bf9a69731e333f23bd9bde2c19d955c03aec68890da48d8b474ea6268eb74e.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo +++ Assasinato e roubo, no caso, é impor a sua vontade violenta sobre alguém que não deseja sofrer isso, dai precisa de uma lei vinda de um comum acordo naquela sociedade para garantir segurança do pessoal. Um lugar sem nenhuma regra também vai contra a lei do cosmos. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo +++ Mas, lógico, deve haver leis básicas para que outras pessoas não quebrem a ordem natural, impedindo coisas como assasinato e roubo. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo +++ O excesso de leis vai contra um princípio chamado Wu Wei, que é a ação natural do cosmos. A ordem não pode ser forçada nas pessoas e quando isso acontece desequilibra o Ying e o Yang, a bipolaridade dos cosmos que garante a verdadeira harmonia, tanto na sociedade quanto no indivíduo. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Lao Tsé, no livro Tao Te Ching, que é a base pro pensamento taoísta. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Os sábios chineses já diziam que quando você criar um excesso de leis, acaba criando mais pessoas cometendo crimes ao invés do controle que esperava. #nevent1q…qenr npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo A lei felca pode acabar derrubando distros linux no brasil. Já aviso que eu to pouco me fudendo pra essa lei e acho que até a PF não liga, eles tem coisas mais importantes pra cuidar, tipo pegar criminosos reais. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Noite de expurgo tá on? npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu nunca minerei nenhuma criptomoeda, mas acredito que seja um investimento de um cara que já tem muito pra gastar a curto e médio prazo. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo É a mascara do mistério tv, o cara que botou o king em cana. https://image.nostr.build/b0ab0e6e2f25197d40fe8c7a9a873ceaadb0f909676807321d284dd3ad5d9426.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/58e07683e15ec4bc0c9e0e0b6a0b1378e2a1c5dd42aea16b090c2fefa6c59517.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Vai se fuder, fui trolado por um bot kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk. #nevent1q…d4yp npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Cara, é um trocadilho. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Toda Arasaka tem que ter uma Militech pra rivalizar. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Se você aderiu o esteriótipo de "gay estérico e barulhento", entenda uma coisa: todo mundo sabe que você força a voz e fica simulando um carisma que não tem, ninguém fala nada pra não incomodar. Se você for mais sincero e conversar com as pessoas na moralzona, provavelmente, muitos dos problemas da sua vida vão sumir. Esse arquétipo não difere muito de uma barraqueira da favela, mas no caso de um homem, o dano na imagem é em dobro. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/cf52c14b2617ca986b29e115da0c2ec3770c16ade386590d0a3fb2f3e91eddcb.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu voltei a usar o VScodium mais rápido do que eu imaginava. Com o Ruby não era muito problemático, mas com o Rust a necessidade de verificar o código é maior e pra quem é iniciante ou está fazendo um projeto enorme, a necessidade de extensões como o Rust-analyzer se torna mais necessária. Nessa linguagem tem uma ferramenta chamada cargo, que pode criar uma pasta do projeto com um arquivo chamado Cargo.toml, ele serve pra colocar as bibliotecas que o projeto vai precisar sem usar uma instalação global, estilo Gems do Ruby. Isso é bom porque se alguém instala um script pelo cargo, já vem com as dependências junto, a pessoa só precisa do cargo instalado na máquina pra usar (até onde eu sei). Eu também percebi que a melhoria de desempenho do Rust não é exagero. Eu pedi pro gemini refazer o meu jogo da cobrinha em Rust e o resultado me surpreendeu, até em um jogo símples de terminal (que já é bem leve) conseguiu ficar mais leve ainda, além da suavidade no movimento do jogo. A dificuldade da linguagem é notável (porque é baixo nível) mas tem tutorial no youtube, livros de graça que dá pra pegar na internet e a ajuda com explicações de IA. Não falta recurso pra facilitar a minha vida. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Pior que no inicío eu achei que o BRICS ia pra frente. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo A lenda. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Felca? npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Dificuldade não é o problema, a guestão é ficar dias parado no mesmo serviço, tendo que refinar e atualizar ele milhares de vezes quando eu poderia estar fazendo outra coisa (e quanto maior o serviço fica, mais tempo você tem que se dedicar. Se eu crio dois sites, é problema em dobro pra resolver). npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Infelizmente não e vou ter que voltar do zero porque vou usar outra linguagem. Nos meus primeiros dias aprendendo Ruby eu finalizei um bloco da notas e um gerador de senhas, recentemente eu fiz um jogo da cobrinha que segue regras bem únicas e ele funciona no terminal (nele eu usei as gems Curses, para dar mais estética ao terminal, e Set, pra ajustar a localização das armadilhas sem ficar por cima dos pontos). Se quiser ver, o código é esse: require 'curses' require 'set' class SnakeGame include Curses FIXED_HEIGHT = 40 FIXED_WIDTH = 120 TRAP_CLEANUP_TIME = 10 POINTS_FOOD = 20 POINTS_TRAP = -5 PENALTY_NO_FOOD = -30 X_POINTS_CLEANER = 10 X_CLEANER_BASE_CHANCE = 0.0003 TRAP_WEIGHT = 0.0003 MAX_CLEANER_CHANCE = 0.02 X_CLEANER_PERCENT = 0.35 MIN_SNAKE_SIZE = 10 ADD_SNAKE_SIZE = 2 GAME_SPEED = 40 LOGO = [ " ____ _ _ _ ____ _ ", " / ___|| |__ ___| | |/ ___| _ __ __ _| | _____ ", " \\___ \\| '_ \\ / _ \\ | |\\___ \\| '_ \\ / _` | |/ / _ \\", " ___) | | | | __/ | | ___) | | | | (_| | < __/", " |____/|_| |_|\\___|_|_||____/|_| |_|\\__,_|_|\\_\\___|", " " ] def initialize init_screen start_color if has_colors? check_terminal_resolution! cbreak noecho stdscr.keypad(true) curs_set(0) if has_colors? init_pair(1, COLOR_GREEN, COLOR_BLACK) init_pair(2, COLOR_YELLOW, COLOR_BLACK) init_pair(3, COLOR_CYAN, COLOR_BLACK) init_pair(4, COLOR_RED, COLOR_BLACK) init_pair(5, COLOR_WHITE, COLOR_BLACK) end @game_win = Window.new(FIXED_HEIGHT, FIXED_WIDTH, (lines - FIXED_HEIGHT) / 2, (cols - FIXED_WIDTH) / 2) @game_win.keypad(true) @max_y, @max_x = FIXED_HEIGHT - 1, FIXED_WIDTH - 1 stdscr.refresh end def check_terminal_resolution! if lines < FIXED_HEIGHT || cols < FIXED_WIDTH clear msg = "Terminal too small (Requirement: 120x40). Press any key to exit and resize the terminal." setpos(lines / 2, [0, (cols - msg.length) / 2].max) addstr(msg) refresh getch close_screen exit end end def reset_game @snake = 12.times.map { |i| [FIXED_HEIGHT/ 2, FIXED_WIDTH / 2 - i] } @direction = :right @growth_pending = 0 @score = 0 @traps_eaten = 0 @cleanups_since_food = 0 @cleaners_collected = 0 @total_cleanups = 0 @start_time = Time.now @last_cleanup = Time.now @cleaner = nil @traps = Set.new @death_reason = "" @last_shrink_score = 0 spawn_food end def spawn_food loop do @food = [rand(2..@max_y - 2), rand(2..@max_x - 2)] break unless @snake.include?(@food) || @traps.include?(@food) end end def shrink_snake!(amount = 1) if @snake.size - amount < MIN_SNAKE_SIZE @death_reason = "VERY SMALL SIZE (starvation)" return false end amount.times { @snake.pop if @snake.size > 1 } true end def spawn_cleaner loop do pos = [rand(2..@max_y - 2), rand(2..@max_x - 2)] unless @snake.include?(pos) || @traps.include?(pos) || pos == @food @cleaner = pos break end end end def run loop do reset_game return unless show_start_screen game_loop return unless show_game_over_screen end ensure close_screen end private def game_loop loop do render input = stdscr.getch break unless update(input) end end def render @game_win.clear @game_win.box('|', '-') now = Time.now total_time = (now - @start_time).to_i time_left = [0, (TRAP_CLEANUP_TIME - (now - @last_cleanup)).to_i].max # Barra de Status (Interface) @game_win.attron(color_pair(3)) @game_win.setpos(0, 2) status = [ "Score: #{@score}", "X: #{@cleaners_collected}", "Time: #{total_time}s", "Size: #{@snake.size} /+=10" ].join(" | ") @game_win.addstr(" #{status} ") @game_win.attroff(color_pair(3)) # Comida @game_win.attron(color_pair(2) | A_BOLD) @game_win.setpos(@food[0], @food[1]); @game_win.addch('0') @game_win.attroff(color_pair(2) | A_BOLD) # Armadilhas @game_win.attron(color_pair(4) | A_BOLD) @traps.each { |y, x| @game_win.setpos(y, x); @game_win.addch('-') if y < @max_y } @game_win.attroff(color_pair(4) | A_BOLD) # Limpador (X) if @cleaner @game_win.attron(color_pair(5) | A_BOLD) @game_win.setpos(@cleaner[0], @cleaner[1]); @game_win.addch('X') @game_win.attroff(color_pair(5) | A_BOLD) end # Cobra @game_win.attron(color_pair(1) | A_BOLD) @snake.each_with_index do |(y, x), i| next if y >= @max_y || x >= @max_x @game_win.setpos(y, x) @game_win.addch(i == 0 ? '$' : '=') end @game_win.attroff(color_pair(1) | A_BOLD) stdscr.timeout = GAME_SPEED @game_win.refresh end def update(input) # 1. Processamento de Input case input when KEY_UP, 'w', 'W' then @direction = :up unless @direction == :down when KEY_DOWN, 's', 'S' then @direction = :down unless @direction == :up when KEY_LEFT, 'a', 'A' then @direction = :left unless @direction == :right when KEY_RIGHT, 'd', 'D' then @direction = :right unless @direction == :left when 'q', 'Q' then return false end # Aqui fecha o CASE # 2. Cálculo da Nova Cabeça head_y, head_x = @snake.first case @direction when :up then head_y -= 1 when :down then head_y += 1 when :left then head_x -= 1 when :right then head_x += 1 end new_head = [head_y, head_x] # 3. Verificação de Colisões (Parede e Corpo) if head_y <= 0 || head_y >= @max_y || head_x <= 0 || head_x >= @max_x @death_reason = "WALL COLLISION" return false end if @snake[0...-1].include?(new_head) @death_reason = "BIT YOURSELF" return false end @snake.unshift(new_head) # 4. Lógica de Interação com Objetos if new_head == @food @score += POINTS_FOOD @cleanups_since_food = 0 @growth_pending += ADD_SNAKE_SIZE spawn_food # Lógica de Auto-Shrink if @score >= @last_shrink_score + 1000 shrink_amount = (@snake.size * 0.30).to_i if @snake.size > MIN_SNAKE_SIZE actual_reduction = [shrink_amount, @snake.size - MIN_SNAKE_SIZE].min actual_reduction.times { @snake.pop } end @last_shrink_score = (@score / 1000) * 1000 end # Spawna armadilhas ao comer 8.times do pos = [rand(2..@max_y - 2), rand(2..@max_x - 2)] @traps << pos unless @snake.include?(pos) || pos == @food end elsif @cleaner && new_head == @cleaner remove_count = (@traps.size * X_CLEANER_PERCENT).ceil @traps.to_a.sample(remove_count).each { |t| @traps.delete(t) } @cleaner = nil @score += X_POINTS_CLEANER @cleaners_collected += 1 elsif @traps.include?(new_head) @score += POINTS_TRAP @traps.delete(new_head) @traps_eaten += 1 return false unless shrink_snake!(1) if @traps_eaten >= 2 return false unless shrink_snake!(1) @traps_eaten = 0 end end # 5. Crescimento/Movimento da Cauda if @growth_pending > 0 @growth_pending -= 1 else @snake.pop unless new_head == @food end # 6. Penalidade por Tempo e Limpeza Automática if Time.now - @last_cleanup >= TRAP_CLEANUP_TIME @traps.to_a.first(4).each { |t| @traps.delete(t) } @last_cleanup = Time.now @total_cleanups += 1 @cleanups_since_food += 1 if @cleanups_since_food >= 2 @score += PENALTY_NO_FOOD @cleanups_since_food = 0 return false unless shrink_snake!(2) end end # 7. Spawn Dinâmico do Cleaner (X) if @cleaner.nil? dynamic_chance = X_CLEANER_BASE_CHANCE + (@traps.size * TRAP_WEIGHT) current_spawn_probability = [dynamic_chance, MAX_CLEANER_CHANCE].min spawn_cleaner if rand < current_spawn_probability end true end def show_start_screen @game_win.clear @game_win.box('|', '-') start_y = (@max_y / 2) - (LOGO.size / 2) - 3 LOGO.each_with_index do |line, index| if index < 6 @game_win.attron(color_pair(2) | A_BOLD) end x_pos = [0, (@max_x / 2) - (line.length / 2)].max @game_win.setpos(start_y + index, x_pos) @game_win.addstr(line) end @game_win.attron(A_DIM) draw_centered(8, "Press ENTER to start | Press Q to exit.") @game_win.attroff(A_DIM) @game_win.refresh @game_win.timeout = -1 loop do case @game_win.getch when 10, 13, KEY_ENTER, "\n" then return true when 'q', 'Q' then return false end end end def show_game_over_screen @game_win.clear @game_win.box('|', '-') final_time = (Time.now - @start_time).to_i @game_win.attron(color_pair(4) | A_BOLD) draw_centered(-2, "GAME OVER") @game_win.attron(color_pair(4) | A_BOLD) draw_centered(-1, "Cause of Death: #{@death_reason}") @game_win.attroff(color_pair(4) | A_BOLD) draw_centered(0, "Score: #{@score} | X Collected: #{@cleaners_collected} | Time: #{final_time}s") draw_centered(1, "R to Start Over or Q to Exit") @game_win.refresh stdscr.timeout = -1 loop do case stdscr.getch when 'r', 'R' then return true when 'q', 'Q' then return false end end end def draw_centered(y_offset, text) @game_win.setpos(@max_y / 2 + y_offset, [0, (@max_x / 2) - (text.length / 2)].max) @game_win.addstr(text) end end SnakeGame.new.run npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo +++ Até existe a possibilidade de eu usar ruby pra algo do tipo, mas o Ruby sem Rails é como um farialimer sem herança do pai. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Pelo que eu andei pesquisando, Rust e GO parecem os ideais pra isso. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/f3e4293a44628cfb9595e9db0fa5a953073900599594768f8cb4b14e4ef5086a.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Acho que eu vou continuar tentando fazer ferramentas de terminal. Eu estava testando o Rails mas eu percebi que criar sites na web requer um compromisso em manter o serviço de pé contra quebras durante o uso ou tentativas de invasão, se quiser que o site dure muitos anos. Como eu não ganho dinheiro fazendo isso, não compensa pra mim dedicar esse tempo. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/79f08fe188c5679a393cea17436f9429a6185391fdcbf8b9c2843cf65f893b7e.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/3c9570caf79b0c39d1bec4a9244d1efd87348db7b30c0a0999d861a0389abb46.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo A base da ideia redpill até tem sentido, o problema da bolha deles é levar a ideia pra um lado esquizo ou extremo. Os caras começam falando dos problemas jurídicos dos relacionamentos e terminam falando que "mulheres deveriam ser propriedades". npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Ela tá explanando antes da hora. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/425638358008ee0702a23a9cf521f6a1b1d3938147280a1ba451a440a42beee0.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Você tomou 2 copos de vodka com energético no baile depois desmaiou e alcansou a gnose, agora está diante de Cria-latotep, o grave rastejante. Você tem direito a 2 pedidos. https://image.nostr.build/4221cb53378a241e17baca290af481936e8e0c54ef0cb02a98d6a977890770b1.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu não sei se a pergunta é ultra-invasiva, mas esse pessoal que vende arma de impressora aqui no Brasil sabe se o cliente é traficante ou não? Porque se a pessoa tá vendendo arma e ganha muito, ela tem uma rede de contatos pra fazer ligações, a vitrine da deepweb é nada comparado a conhecer os caras que compram em lotes enormes, ainda mais com as guerras no norte. (lembrando que eu não tenho envolvimento com nada, não sei de polícia e nem de organizações criminosas, também não estou dando opinião, é apenas uma pergunta). npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://video.nostr.build/3932d88c140ded189dbd9c6255d28cde7042de0ac33594c0e3a02b51ed276810.mp4 npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/e758eacafef2faf87a4141eefafebc7629e9d5a3cbb03d4cbb79c460efd0f4c9.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Os caras querem enfrentar tanques de corsinha rebaixado? npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo E pensar numa rota de fuga caso os milicos tentem te recrutar na força. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu li o mangá porque fiquei inconformado com o final do anime, depois ela tem uma espécie de amizade/harém com um monte de mina. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/9c748ceb0b2e3188f48dedeb03bb1b8447716bc8afd7582c584b4e82acf33c75.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo O seu produto não precisa ser bom ou útil pra vender no capitalismo, basta fazer as pessoas pensarem que precisam dele ou forçar elas a ter que usar o produto de qualquer jeito. E o que faz você crescer (sem os limites dos concorrentes honestos) é saber vender sua imagem e afundar o negócio dos outros, a Microsoft é a prova viva disso. A idealização do nerd universitário que cria um produto foda no galpão de casa e fica bilionário aos 25, se é que um dia se tornou realidade, está morta. Não adianta você ter ideias boas se não tem bons contatos pra dar suporte ao projeto, ninguém sobe sozinho, o jogo é em equipe. Projetos comunitários seguem uma lógica totalmente diferente, nem adianta usar de exemplo. Seria comparar LOL com DOTA (atualmente). Mas eu não estou dizendo pra você desistir dos seus sonhos, muito menos falar de uma "revolução proletária", porque isso é idiotice. Eu estou falando sobre como o "topo do ranking" joga o jogo, talvez seja sua futura concorrência quando você subir na vida (seja por mérito ou por sorte, tanto faz no final das contas). npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/d12d795590f2116b05598b20a5b9cf4e541ea67e6453da918be49a7f6f884626.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Android agora é o novo IOS. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eles tão tipo assim: https://image.nostr.build/3b1c5f98d2f8a1939db9f11da9e7af2c1550d3353c366683b8288b27dcfc52c0.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Agora tem redpill reclamando que no Irã vai ter misandria por causa influência ocidental. Como se isso fosse um problemão comparado ao fato de que o país vive em uma das maiores tiranias da era moderna, que o país se colocou como alvo de potências econômicas e nucleares ou que as mulheres de lá vivem como bichos em cativeiro. Mas pro redpill, o problema é a putaria (coisa que ele apoia porque tem vídeos de putas ou hentais no próprio perfil). npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu praticamente não estou editando código com o VScodium desde que eu comecei a usar o Rails. Como agora eu estou mexendo em mais de um arquivo, está mais rápido usar o LF no terminal (ou usar comandos) pra olhar cada arquivo ou colocar os recursos auxiliares do Rails na pasta, além de rodar o programa. Estou editando o código usando o micro porque ele é simples e direto ao ponto. Mas eu vou deixar o VScodium guardado caso eu precise futuramente. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/2fb0209347fd8d688f330bf426494fa9631b43668f6c118a7711d5d7f2310e6d.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Estamos na segunda guerra fria. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu não vi nenhum vídeo de um Iraniano apoiando o governo de lá. Esse pessoal só existe no ocidente. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Obvio que o trump atacou o Irã junto com Israel pra ajudar a limpar sua própria imagem, assim como ele fez capturando o Maduro. É pra fazer as pessoas esquecerem que ele é participante do maior esquema de tráfico humano da história. Quando um homem mal entra em desespero, até o bem ele é capaz de fazer pra se livrar dos problemas. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu nasci longe demais pra ver humanidade conquistar a galáxia, mas nasci perto o suficiente pra ver um vídeo de um exército de sapos pepe cruzando uma trincheira pra enfrentar um cara da binance que manda flechas no céu (e ele é careca). npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Sobrou nada pro beta khamenei. Foi estudado pelos jujubas do povo prometido. https://image.nostr.build/528c9ee653104fc329a34e9acff7fb851a6b995625ff4b553f5fb445c66df98d.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo O bagulho vai ser tenso. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Em minha defesa, eu não faço vídeos de anime sobre algum tema político do twitter, esse B.O ai é dos outros. Parecem vídeos de comédia pastelão da sessão da tarde, mas com personagens falando em japonês. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/6b626de6ecf9527c135e3787ce36a46b82e67ecc627f31caf1ac61ee8cd8c1be.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Contexto: Eu não estou dizendo que Rails é padrão de mercado hoje em dia, eu estou citando um caso específico para o ruby. (Não pode faltar a explicação porque eu sei que a interpretação de texto não anda forte no Brasil). npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo É tipo um "evento canônico" que todo mundo que trabalha com front-end vai ter que usar React do JS? O Rails tem o hotwire, mas parece ser focado mais em agilidade e facilidade de produção web. Até onde eu pesquisei, parece melhor o Rails (back-end) combinado com o React (Front-end) pra sites de front mais complexo. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu tenho a opção de permanecer calado. https://image.nostr.build/fe99d13a5e084ae8fe52dc5e6a9cbf6507674dd2815022bc0fe987c4819bffe2.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Talvez porque o Grok vê as personagens que eu quero e ele acha que eu pretendo zerar o código penal, daí ele começa a enrolar até sentir a confiança. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Achei bem esquisito os resultados. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo gm npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo O Twitter atual é o substituto da anarquia que eram os fóruns e chans, mas que se misturam com a cultura normie da internet. Porém tem o limite da legislação americana. Tem extremista católico, tem comunista, tem lgbt, tem fascista, tem feminista, tem troll, tem lolicon, tem famoso, tem filósofo de plantão, tem a galera das tretas infinitas, é bem disforme. O Reddit é a nata de dois nichos que eu não levo a sério, o liberal engomadinho e o playboy progressita. Apesar de serem "moderadinhos", qualquer frase mal interpretada (às vezes de propósito) pode te dar um ban permanente, não tem fuga, uma hora você vai passar por isso. Recomendo não entrar em discuções políticas, foca em conversas sobre outras coisas porque existem subreddits pra diversos assuntos isolados, o problema é que alguns deles estão mortos ou foram subvertidos em outros assuntos que fogem do foco (isso não vai te livrar de ser banido de um subreddit ou perder a conta). npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/958139f1c7b4696533e36b07ebcc80b68064b5362b2316d4f0acd6339fd561d6.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/b7fdbaf64a44dbb6891396ca6ebb75557c61d44af4cf2e97a7a8bdd2f859780c.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Como eu nunca trabalhei em escritório e nunca precisei automatizar tarefas, eu adoraria saber em que tipo de atividades as pessoas aplicam automação, alguns programam esse tipo de coisa (geralmente em python) para algo específico das suas atividades diárias. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/8efd60fddb83df87707a49fb8562cef374c2ca8690d62b05211b3ae12885ec7c.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo humildi npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Recebi o aviso celestial agora e tenho que dizer pra você parar de fingir que sua vida é um anime porque a realidade não é muito emocionante. Foi decisão unânime no paraíso: se você continuar com isso até os 25 anos, um arcanjo de nome impronunciável (cujo apelido é Maicão) vai descer os céus pra te amassar na porrada, numa trocação sincera de soco sem direito a pedir ajuda divina ou usar magia negra. Não vai ter pra onde fugir e você foi avisado. https://image.nostr.build/2529bb1c6d4fa0300d4366818a2b922ae7dd22d14649707743c6d48dc9a97de0.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/81d7230ef0ece0e9d609725b2058d2c711ba95d3530c2d48571ff6804e48c223.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo require 'curses' require 'set' class SnakeGame include Curses FIXED_HEIGHT = 40 FIXED_WIDTH = 120 TRAP_CLEANUP_TIME = 10 POINTS_FOOD = 20 POINTS_TRAP = -10 PENALTY_NO_FOOD = -30 X_POINTS_CLEANER = 10 X_CLEANER_BASE_CHANCE = 0.0003 TRAP_WEIGHT = 0.0003 MAX_CLEANER_CHANCE = 0.02 X_CLEANER_PERCENT = 0.35 MIN_SNAKE_SIZE = 10 ADD_SNAKE_SIZE = 2 GAME_SPEED = 40 LOGO = [ " ____ _ _ _ ____ _ ", " / ___|| |__ ___| | |/ ___| _ __ __ _| | _____ ", " \\___ \\| '_ \\ / _ \\ | |\\___ \\| '_ \\ / _` | |/ / _ \\", " ___) | | | | __/ | | ___) | | | | (_| | < __/", " |____/|_| |_|\\___|_|_||____/|_| |_|\\__,_|_|\\_\\___|", " " ] def initialize init_screen start_color if has_colors? check_terminal_resolution! cbreak noecho stdscr.keypad(true) curs_set(0) if has_colors? init_pair(1, COLOR_GREEN, COLOR_BLACK) init_pair(2, COLOR_YELLOW, COLOR_BLACK) init_pair(3, COLOR_CYAN, COLOR_BLACK) init_pair(4, COLOR_RED, COLOR_BLACK) init_pair(5, COLOR_WHITE, COLOR_BLACK) end @game_win = Window.new(FIXED_HEIGHT, FIXED_WIDTH, (lines - FIXED_HEIGHT) / 2, (cols - FIXED_WIDTH) / 2) @game_win.keypad(true) @max_y, @max_x = FIXED_HEIGHT - 1, FIXED_WIDTH - 1 stdscr.refresh end def check_terminal_resolution! if lines < FIXED_HEIGHT || cols < FIXED_WIDTH clear msg = "Terminal too small (Requirement: 120x40). Press any key to exit and resize the terminal." setpos(lines / 2, [0, (cols - msg.length) / 2].max) addstr(msg) refresh getch close_screen exit end end def reset_game @snake = 12.times.map { |i| [FIXED_HEIGHT/ 2, FIXED_WIDTH / 2 - i] } @direction = :right @growth_pending = 0 @score = 0 @traps_eaten = 0 @cleanups_since_food = 0 @cleaners_collected = 0 @total_cleanups = 0 @start_time = Time.now @last_cleanup = Time.now @cleaner = nil @traps = Set.new @death_reason = "" @last_shrink_score = 0 spawn_food end def spawn_food loop do @food = [rand(2..@max_y - 2), rand(2..@max_x - 2)] break unless @snake.include?(@food) || @traps.include?(@food) end end def shrink_snake!(amount = 1) if @snake.size - amount < MIN_SNAKE_SIZE @death_reason = "VERY SMALL SIZE (starvation)" return false end amount.times { @snake.pop if @snake.size > 1 } true end def spawn_cleaner loop do pos = [rand(2..@max_y - 2), rand(2..@max_x - 2)] unless @snake.include?(pos) || @traps.include?(pos) || pos == @food @cleaner = pos break end end end def run loop do reset_game return unless show_start_screen game_loop return unless show_game_over_screen end ensure close_screen end private def game_loop loop do render input = stdscr.getch break unless update(input) end end def render @game_win.clear @game_win.box('|', '-') now = Time.now total_time = (now - @start_time).to_i time_left = [0, (TRAP_CLEANUP_TIME - (now - @last_cleanup)).to_i].max # Barra de Status (Interface) @game_win.attron(color_pair(3)) @game_win.setpos(0, 2) status = [ "Score: #{@score}", "X: #{@cleaners_collected}", "Time: #{total_time}s", "Size: #{@snake.size} /+=10" ].join(" | ") @game_win.addstr(" #{status} ") @game_win.attroff(color_pair(3)) # Comida @game_win.attron(color_pair(2) | A_BOLD) @game_win.setpos(@food[0], @food[1]); @game_win.addch('0') @game_win.attroff(color_pair(2) | A_BOLD) # Armadilhas @game_win.attron(color_pair(4) | A_BOLD) @traps.each { |y, x| @game_win.setpos(y, x); @game_win.addch('-') if y < @max_y } @game_win.attroff(color_pair(4) | A_BOLD) # Limpador (X) if @cleaner @game_win.attron(color_pair(5) | A_BOLD) @game_win.setpos(@cleaner[0], @cleaner[1]); @game_win.addch('X') @game_win.attroff(color_pair(5) | A_BOLD) end # Cobra @game_win.attron(color_pair(1) | A_BOLD) @snake.each_with_index do |(y, x), i| next if y >= @max_y || x >= @max_x @game_win.setpos(y, x) @game_win.addch(i == 0 ? '$' : '=') end @game_win.attroff(color_pair(1) | A_BOLD) stdscr.timeout = GAME_SPEED @game_win.refresh end def update(input) # 1. Processamento de Input case input when KEY_UP, 'w', 'W' then @direction = :up unless @direction == :down when KEY_DOWN, 's', 'S' then @direction = :down unless @direction == :up when KEY_LEFT, 'a', 'A' then @direction = :left unless @direction == :right when KEY_RIGHT, 'd', 'D' then @direction = :right unless @direction == :left when 'q', 'Q' then return false end # Aqui fecha o CASE # 2. Cálculo da Nova Cabeça head_y, head_x = @snake.first case @direction when :up then head_y -= 1 when :down then head_y += 1 when :left then head_x -= 1 when :right then head_x += 1 end new_head = [head_y, head_x] # 3. Verificação de Colisões (Parede e Corpo) if head_y <= 0 || head_y >= @max_y || head_x <= 0 || head_x >= @max_x @death_reason = "WALL COLLISION" return false end if @snake[0...-1].include?(new_head) @death_reason = "BIT YOURSELF" return false end @snake.unshift(new_head) # 4. Lógica de Interação com Objetos if new_head == @food @score += POINTS_FOOD @cleanups_since_food = 0 @growth_pending += ADD_SNAKE_SIZE spawn_food # Lógica de Auto-Shrink if @score >= @last_shrink_score + 1000 shrink_amount = (@snake.size * 0.30).to_i if @snake.size > MIN_SNAKE_SIZE actual_reduction = [shrink_amount, @snake.size - MIN_SNAKE_SIZE].min actual_reduction.times { @snake.pop } end @last_shrink_score = (@score / 1000) * 1000 end # Spawna armadilhas ao comer 8.times do pos = [rand(2..@max_y - 2), rand(2..@max_x - 2)] @traps << pos unless @snake.include?(pos) || pos == @food end elsif @cleaner && new_head == @cleaner remove_count = (@traps.size * X_CLEANER_PERCENT).ceil @traps.to_a.sample(remove_count).each { |t| @traps.delete(t) } @cleaner = nil @score += X_POINTS_CLEANER @cleaners_collected += 1 elsif @traps.include?(new_head) @score += POINTS_TRAP @traps.delete(new_head) @traps_eaten += 1 return false unless shrink_snake!(1) if @traps_eaten >= 2 return false unless shrink_snake!(1) @traps_eaten = 0 end end # 5. Crescimento/Movimento da Cauda if @growth_pending > 0 @growth_pending -= 1 else @snake.pop unless new_head == @food end # 6. Penalidade por Tempo e Limpeza Automática if Time.now - @last_cleanup >= TRAP_CLEANUP_TIME @traps.to_a.first(4).each { |t| @traps.delete(t) } @last_cleanup = Time.now @total_cleanups += 1 @cleanups_since_food += 1 if @cleanups_since_food >= 2 @score += PENALTY_NO_FOOD @cleanups_since_food = 0 return false unless shrink_snake!(2) end end # 7. Spawn Dinâmico do Cleaner (X) if @cleaner.nil? dynamic_chance = X_CLEANER_BASE_CHANCE + (@traps.size * TRAP_WEIGHT) current_spawn_probability = [dynamic_chance, MAX_CLEANER_CHANCE].min spawn_cleaner if rand < current_spawn_probability end true end def show_start_screen @game_win.clear @game_win.box('|', '-') start_y = (@max_y / 2) - (LOGO.size / 2) - 3 LOGO.each_with_index do |line, index| if index < 6 @game_win.attron(color_pair(2) | A_BOLD) end x_pos = [0, (@max_x / 2) - (line.length / 2)].max @game_win.setpos(start_y + index, x_pos) @game_win.addstr(line) end @game_win.attron(A_DIM) draw_centered(8, "Press ENTER to start | Press Q to exit.") @game_win.attroff(A_DIM) @game_win.refresh @game_win.timeout = -1 loop do case @game_win.getch when 10, 13, KEY_ENTER, "\n" then return true when 'q', 'Q' then return false end end end def show_game_over_screen @game_win.clear @game_win.box('|', '-') final_time = (Time.now - @start_time).to_i @game_win.attron(color_pair(4) | A_BOLD) draw_centered(-2, "GAME OVER") @game_win.attron(color_pair(4) | A_BOLD) draw_centered(-1, "Cause of Death: #{@death_reason}") @game_win.attroff(color_pair(4) | A_BOLD) draw_centered(0, "Score: #{@score} | X Collected: #{@cleaners_collected} | Time: #{final_time}s") draw_centered(1, "R to Start Over or Q to Exit") @game_win.refresh stdscr.timeout = -1 loop do case stdscr.getch when 'r', 'R' then return true when 'q', 'Q' then return false end end end def draw_centered(y_offset, text) @game_win.setpos(@max_y / 2 + y_offset, [0, (@max_x / 2) - (text.length / 2)].max) @game_win.addstr(text) end end SnakeGame.new.run npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo O jogo da cobrinha pra terminal que eu estava fazendo vai ser copiado e colado neste post, eu quero partir pra outras ideias e não quero ficar pensando demais nisso por causa de perfeccionismo. Se quiser, você pode pegar, melhorar e assumir a autoria do código. Já aviso que o código exige a gem curses e set (que já deve vir nativa na instalação do ruby), curses dá a aparência do programa no terminal e set ajusta o posicionamento dos objetos no mapa pra um não ficar dentro do outro. Eu não tive paciência pra consertar o bug que pisca tela (específicos para o terminal kitty e foot), mas o bug não é persistente e não interfere tanto no jogo, o terminal konsole não apresenta bugs do tipo. (Código abaixo nos comentários) npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo O MBL já ocupou esse cargo de "clube do jovem revoltado". npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Se você segue alguma ideologia autoritária ou que tenha a violência como um pilar, eu tenho que te dizer uma coisa: Você não quer controlar a sociedade, você quer ter controle sobre a própria vida e não sabe ainda. A sua mente nem tem capacidade de contemplar o "universo" que existe no seu bairro, quem dirá o país e o mundo inteiro pra você dominar em totalidade. Talvez a raiva intensa que você tem contra um grupo seja, na verdade, a raiva que você tem contra algo na própria vida e não acha respostas claras do que te incomoda. Se você é adolescente ou jovem adulto (como eu), a probabilidade disso aumenta mais ainda. A sua vontade de expurgar seus inimigos provavelmente vai ter tornar tão sujo, ou até pior que eles. Nada produtivo vem do rancor e da raiva (falo isso sendo alguém que já sentiu muita raiva constante). Provavelmente você vai ler esse texto e soltar risada de deboche ou ficar puto com o mensageiro (eu) mais do que a própria mensagem. Mas daqui a 4 ou 5 anos você vai lembrar disso e vai ver que eu tenho razão. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Ando percebendo que já faz bastante tempo que a minha mãe não tem uma crise depressiva. Se tudo acontecer como o planejado, ela nunca mais vai pisar numa fábrica e vai poder ocupar a mente trabalhando pra si mesma. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Acho que daqui a uns 5 ou 10 anos vou lançar um carrão de respeito, mas primeiro vou reformar a casa. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo EAE. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Treta política é o BBB pra nós, o povo pseudo-intelectual. ✍ npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Esses dias vão ser corridos pra mim, eu diria que a minha vida entrou numa próxima etapa e o que tava bom era melhor do que eu imaginei. Vejo vocês daqui a alguns dias, provavelmente na próxima semana. https://image.nostr.build/54115993bf31e99833b50f46d4cf1ebbe0e6eaffa9ed320c50d98a7ba9ea3ac5.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/ea20b0ec9d8d434233dc5b858e30caddabf444d67c22e6b282490d366f0819e1.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo *fica... npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Acho que eu ia manter o que eu estou fazendo (tentando entender Ruby até masterizar). Eu já tentei ter várias atividades ao mesmo tempo, é impossível por causa da exaustão mental e quando você começa a trabalhar ficar pior. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo A ideia de serviço militar obrigatório é bizarra. Porque eu morreria pela amazônia se ela não é minha e eu não ganho nada protegendo ela dos estrangeiros? Não tem documentação confirmando que eu seja dono dela, ou que eu possa reinvindicar minha parte. Se a propriedade é da elite vigente, ela que reúna sua casta guerreira pra defender sua herança (e seria melhor ainda se um representante da elite entrasse na porradaria junto com seus guerreiros). Lógico que isso hoje é impossível, porque a covardia virou lei e a honra virou loucura. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eae, cara. Eu lembro de tu. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/e6d468b54d83e095a70883eb5832750b1e56bee32fdf37a40220a5377b6647b7.jpg npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Sim, aconteceu comigo e eu vim pro nostr perguntar sobre. npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo Eu uso Jumble. (demorei pra responder porque parece qua as notificações atrasam usando a rede tor) npub1wn4x0e36n72cl0jhk6hje666l36k0e9w4h0jw40fq0elcg36tfxs4ddgtt Venoxo https://image.nostr.build/52cb26b90aa3c598701a825a425ea3be75d05c8993e068a561eef5e1cfc551a3.jpg