space_adventure_3d.rb
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 15/100
Rechercherichtung
Beginne damit zu prüfen, ob space_adventure_3d.rb im Repository vorhanden ist, und den Issue-Text auf eine konkrete angeforderte Änderung zu überprüfen. Es wird weder ein Test noch ein Einstiegspunkt erwähnt, daher müssen das gewünschte Verhalten und die Kriterien für den Abschluss vor dem Bearbeiten geklärt werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Полный исправленный и доработанный код симулятора 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
- Vorherrschende Sprache
- Ruby
- Sterne
- 4.5k
- Forks
- 804
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus github/gemoji
-
QR- vpnOffen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 20/100
-
[email protected]Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 10/100
-
Is this project dead?Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 20/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 25/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 10/100
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
TheOdinProject/curriculum#31531 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 70/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag
-
Mend: dependency security vulnerability
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
ManageIQ/kubeclient#748 ·
-
Mend: dependency security vulnerability
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag