図書館行ったら前に悠仁おったわ。
昼間は物理の問題やってたけど、そろそろプログラミングの内容を忘れてしまいそうだから、続きをやっていこう。
この前乗っけてなかったけど、
pub fn energy_adjustment(
mut energy_adjustment_event_reader: EventReader<EnergyAdjustment>,
player1_szone: ResMut<Player1SZone>,
query: Query<(Entity, &Card), (With<Player1>, Without<FirstEnergy>)>,
mut commands: Commands,
) {
for event in energy_adjustment_event_reader.read() {
let mut selected_cards: Vec<Entity> = Vec::new();
let mut total_energy_for_penalty: u32 = 0;
let penalty_energy = event.penalty_energy;
// Sゾーンのカードを取得
let available_cards: Vec<(Entity, &Card)> = player1_szone
.cards
.filter_map(|&entity| query.get(entity).ok())
.collect();
let high_energy_cards: Vec<(Entity, &Card)> = available_cards
.filter(|(_, card)| card.energy >= penalty_energy)
.cloned()
.collect();
// ペナルティエナジー以上のカードがある場合
if !high_energy_cards.is_empty() {
}
// ユーザーにカードを選ばせる
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("Failed to read line");
if let Ok(selected_index) = input.trim().parse::<usize>() {
if selected_index > 0 && selected_index <= high_energy_cards.len() {
let selected_entity = high_energy_cards[selected_index - 1].0;
selected_cards.push(selected_entity);
total_energy_for_penalty += card.energy;
}
} else {
println!("無効な選択です。");
}
} else {
println!("有効な番号を入力してください。");
}
} else {
// ペナルティエナジー以上のカードがない場合
}
// ユーザーにカードを選ばせる
while total_energy_for_penalty <= penalty_energy {
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("Failed to read line");
if let Ok(selected_index) = input.trim().parse::<usize>() {
if selected_index > 0 && selected_index <= available_cards.len() {
let selected_entity = available_cards[selected_index - 1].0;
// 既に選択されたカードか確認
if !selected_cards.contains(&selected_entity) {
selected_cards.push(selected_entity);
total_energy_for_penalty += card.energy;
println!(
card.name, card.energy
);
}
} else {
println!("このカードは既に選択されています。");
}
} else {
println!("無効な選択です。");
}
} else {
println!("有効な番号を入力してください。");
}
println!(
total_energy_for_penalty, penalty_energy
);
if total_energy_for_penalty > penalty_energy {
}
// 再度ペナルティエナジー以上のカードがあるか確認
let high_energy_cards: Vec<(Entity, &Card)> = available_cards
.filter(|(_, card)| card.energy >= penalty_energy - total_energy_for_penalty)
.cloned()
.collect();
if !high_energy_cards.is_empty() {
}
}
}
}
// 最終的に選んだカードのリストを表示
println!("最終的に選ばれたカード:");
for entity in selected_cards {
println!(
card.name, card.energy
);
commands.entity(entity).insert(Location::XZone);
commands.entity(entity).insert(SpinCondition::ReSpin);
commands.entity(entity).insert(FaceCondition::Facedown);
}
}
}
}
この状態になっているので、最後イベントを追加して、タクティクスプレイに持っていきましょう。
println!("最終的に選ばれたカード:");
played_card_id: event.played_card_id,
spin_cards_list: event.spin_cards_list.clone(),
penalty_card_list: selected_cards.clone(),
});
for entity in selected_cards.clone() {
println!(
card.name, card.energy
);
commands.entity(entity).insert(Location::XZone);
commands.entity(entity).insert(SpinCondition::ReSpin);
commands.entity(entity).insert(FaceCondition::Facedown);
}
}
ペナルティを受けたときは沢山確認してるし、スピン状態と違ってペナルティを巻き戻すのは、難しいので、巻き戻し機能はつけなかった。
mut commands: Commands,
query: Query<(Entity, &Card), With<Player1>>,
) {
commands
.entity(event.played_card_id)
.insert(Location::SZone);
println!("{}を手札から発動しました", card.name);
played_card_id: event.played_card_id,
});
}
}
}


とりあえず、調整機能できたんじゃない???
ただ、調整には意思決定を挟んだ方がいいような気もした。


// 最終的に選んだカードのリストを表示
println!("最終的に選ばれたカード:");
for entity in selected_cards.clone() {
}
}
println!("ペナルティを受け入れますか?");
let choice = check_the_will_of_spinning_cards();
match choice {
1 => {
for entity in selected_cards.clone() {
commands.entity(entity).insert(Location::XZone);
commands.entity(entity).insert(SpinCondition::ReSpin);
commands.entity(entity).insert(FaceCondition::Facedown);
}
played_card_id: event.played_card_id,
spin_cards_list: event.spin_cards_list.clone(),
penalty_card_list: selected_cards.clone(),
});
}
2 => {
println!("やりなおします");
for target in &event.spin_cards_list {
commands.entity(*target).insert(SpinCondition::ReSpin);
}
println!("スピンしたカードを元に戻しました。");
select_hand_event_writer.send(SelectHand);
}
_ => {}
}
// 意思決定関数を入れた
play tactics spin szoneの文字表示も若干見直した。
一通りやりたいことが終わった気がするので、どんな機能が必要だったか見直してみる。