space_adventure_3d.rb
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 15/100
Hướng nghiên cứu
Bắt đầu bằng cách kiểm tra xem space_adventure_3d.rb có tồn tại trong repository hay không và xem lại nội dung issue để tìm thay đổi cụ thể được yêu cầu. Không có test hoặc entry point nào được đề cập, vì vậy cần làm rõ hành vi mong muốn và tiêu chí hoàn thành trước khi chỉnh sửa.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Полный исправленный и доработанный код симулятора space_adventure_3d.rb
#!/usr/bin/env ruby
# encoding: utf-8
require 'json'
class SpaceAdventure3D
SAVE_FILE = 'savegame.json'
# Константы меню и сообщений
MAIN_MENU = {
'1' => 'Проверить курс (показать координаты)',
'2' => 'Переместиться в сектор (X Y Z)',
'3' => 'Исследовать текущий сектор',
'4' => 'Поговорить с ИИ‑помощником «Эхо‑3D»',
'5' => 'Проверить инвентарь',
'6' => 'Сохранить игру',
'7' => 'Посетить космический рынок',
'8' => 'Выйти из игры',
'give_credits' => '[ОТЛАДКА] Начислить 8 888 888 888 CR'
}
def initialize
load_game || reset_game
end
def reset_game
@position = { x: 0, y: 0, z: 0 }
@health = 100
@fuel = 100
@credits = 50
@crystals = 0
@inventory = []
@game_over = false
@sector_map = {}
@level = 1
@target = { x: 5, y: -3, z: 2 }
@ship = :phoenix
@shield_active = false
end
def load_game
if File.exist?(SAVE_FILE)
data = JSON.parse(File.read(SAVE_FILE))
@position = data['position']
@health = data['health']
@fuel = data['fuel']
@credits = data['credits']
@crystals = data['crystals'] || 0
@inventory = data['inventory']
@sector_map = data['sector_map']
@level = data['level']
@target = data['target']
@ship = data['ship'] || :phoenix
@shield_active = data['shield_active'] || false
puts "✅ Игра загружена!"
return true
end
false
end
def save_game
data = {
position: @position,
health: @health,
fuel: @fuel,
credits: @credits,
crystals: @crystals,
inventory: @inventory,
sector_map: @sector_map,
level: @level,
target: @target,
ship: @ship,
shield_active: @shield_active
}
File.write(SAVE_FILE, JSON.generate(data))
puts "💾 Игра сохранена!"
end
def show_status
puts "\n! + "≪! * 40
puts "СОСТОЯНИЕ КОРАБЛЯ (3D) | Уровень: #{@level} | Корабль: #{ship_name(@ship)}"
puts "Позиция: X=#{@position[:x]}, Y=#{@position[:y]}, Z=#{@position[:z]}"
puts "Цель: X=#{@target[:x]}, Y=#{@target[:y]}, Z=#{@target[:z]}"
puts "Здоровье: #{@health}%"
puts "Топливо: #{@fuel} ед."
puts "Кредиты: #{@credits} CR"
puts "Кристаллы: #{@crystals} 🔮"
puts "Инвентарь: #{@inventory.empty? ? 'пусто' : @inventory.join(', ')}"
puts "Куполообразная защита: #{@shield_active ? 'активна' : 'не активна'}"
puts "Исследовано секторов: #{@sector_map.size}"
distance = calc_distance(@position, @target)
puts "До цели: #{distance.round(1)} ед."
puts "≫! * 40
end
def ship_name(symbol)
{ phoenix: 'Феникс‑3D', warrior: 'Воин‑X', scout: 'Скаут‑Z' }[symbol] || 'Неизвестный'
end
def calc_distance(a, b)
Math.sqrt((a[:x] - b[:x])**2 + (a[:y] - b[:y])**2 + (a[:z] - b[:z])**2)
end
def prompt
print "\n▸ "
gets.chomp.downcase
end
def display_menu
puts "\nЧто вы хотите сделать?"
MAIN_MENU.each { |key, label| puts "#{key}. #{label}" }
end
def show_mini_map
# Простая мини‑карта: показываем соседние сектора (±1 по каждой оси)
puts "\n🗺 МИНИ‑КАРТА (видимая область: ±1 от текущей позиции)"
(-1..1).each do |dz|
(-1..1).each do |dy|
line = []
(-1..1).each do |dx|
abs_x = @position[:x] + dx
abs_y = @position[:y] + dy
abs_z = @position[:z] + dz
key = "#{abs_x}-#{abs_y}-#{abs_z}"
if abs_x == @position[:x] && abs_y == @position[:y] && abs_z == @position[:z]
line << "[*]" # текущая позиция
elsif @sector_map[key]
line << "[.]" # исследованный сектор
else
line << "[...]" # неисследованный
end
end
puts line.join(" ")
end
end
end
def explore_sector(pos)
key = "#{pos[:x]}-#{pos[:y]}-#{pos[:z]}"
if @sector_map[key]
puts "Этот сектор уже исследован. Ничего нового."
return
end
puts "\n🔍 Вы активируете 3D‑сенсоры для сканирования сектора…"
sleep 0.5
event = rand(1..7)
case event
when 1
credits_gain = rand(20..50)
@credits += credits_gain
puts "✓ Найден контейнер с данными! +#{credits_gain} CR."
when 2
if @inventory.include?('щит‑прототип')
puts "Вы использовали «щит‑прототип» — атака отражена!"
else
damage = rand(15..30)
@health -= damage
puts "⚠️ Пиратский корабль атаковал! -#{damage}% здоровья."
check_game_over
end
when 3
puts "Вы обнаружили древний артефакт! Добавляете в инвентарь: «гипер‑компас»."
@inventory << 'гипер‑компас'
when 4
puts "В глубинах сектора мерцает энергетический кристалл! +25 ед. топлива."
@fuel += 25
when 5
puts "Сектор пуст. Тишина космоса…"
when 6
super_bonus = 888_888
@credits += super_bonus
puts "🌟 РЕДКИЙ НАХОД! Вы обнаружили заброшенный торговый хаб! +#{super_bonus} CR!"
when 7
crystals_gain = rand(5..15)
@crystals += crystals_gain
puts "🔮 В секторе мерцают загадочные кристаллы! +#{crystals_gain} 🔮 кристаллов."
end
@sector_map[key] = true
end
def check_game_over
if @health <= 0
puts "💀 Ваше судно повреждено! Игра окончена."
@game_over = true
end
end
def ai_dialog_3d
responses = [
"Эхо‑3D: Капитан, я фиксирую аномалии в секторе #{@position[:x]},#{@position[:y]},#{@position[:z]}. Будьте бдительны.",
"Эхо‑3D: Топливо на уровне #{@fuel} ед. Рекомендую пополнить запасы.",
"Эхо‑3D: До цели осталось #{calc_distance(@position, @target).round(1)} единиц. Курс верный.",
"Эхо‑3D: В вашем инвентаре #{@inventory.size} предметов. Проверьте их состояние.",
"Эхо‑3D: Кредиты: #{@credits
- Ngôn ngữ chính
- Ruby
- Star
- 4.5k
- Fork
- 804
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của github/gemoji
-
QR- vpnĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 20/100
-
[email protected]Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 10/100
-
Is this project dead?Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 25/100
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 10/100
Tất cả issue của github/gemoji
Issue tương tự
-
Update leinigen to 2.13.1Đang mở
Độ khó 2/5 Dưới một giờ Mức phù hợp với người mới 70/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Mend: dependency security vulnerability
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Mend: dependency security vulnerability
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
-
Mend: dependency security vulnerability
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
ManageIQ/manageiq-rpm_build#737 ·