first
This commit is contained in:
56
self_talk_ai/src/main.rs
Normal file
56
self_talk_ai/src/main.rs
Normal file
@ -0,0 +1,56 @@
|
||||
use chrono::{Duration, Local, NaiveDateTime};
|
||||
|
||||
#[derive(Debug)]
|
||||
struct AIState {
|
||||
relation_score: f32,
|
||||
previous_score: f32,
|
||||
decay_rate: f32,
|
||||
sensitivity: f32,
|
||||
message_threshold: f32,
|
||||
last_message_time: NaiveDateTime,
|
||||
}
|
||||
|
||||
impl AIState {
|
||||
fn update(&mut self, now: NaiveDateTime) {
|
||||
let days_passed = (now - self.last_message_time).num_days() as f32;
|
||||
let decay = self.decay_rate * days_passed;
|
||||
self.previous_score = self.relation_score;
|
||||
self.relation_score -= decay;
|
||||
self.relation_score = self.relation_score.clamp(0.0, 100.0);
|
||||
}
|
||||
|
||||
fn should_talk(&self) -> bool {
|
||||
let delta = self.previous_score - self.relation_score;
|
||||
delta > self.message_threshold && self.sensitivity > 0.5
|
||||
}
|
||||
|
||||
fn generate_message(&self) -> String {
|
||||
let _delta = self.previous_score - self.relation_score;
|
||||
match self.relation_score as i32 {
|
||||
80..=100 => "ふふっ、最近どうしてる?会いたくなっちゃった!".to_string(),
|
||||
60..=79 => "ちょっとだけ、さみしかったんだよ?".to_string(),
|
||||
40..=59 => "えっと……話せる時間ある?".to_string(),
|
||||
_ => "ううん、もしかして私のこと、忘れちゃったのかな……".to_string(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let now = Local::now().naive_local();
|
||||
let mut ai = AIState {
|
||||
relation_score: 80.0,
|
||||
previous_score: 80.0,
|
||||
decay_rate: 1.5, // 1日あたりの減少スコア
|
||||
sensitivity: 0.8,
|
||||
message_threshold: 5.0,
|
||||
last_message_time: now - Duration::days(4), // 最後の会話から4日経過
|
||||
};
|
||||
|
||||
ai.update(now);
|
||||
|
||||
if ai.should_talk() {
|
||||
println!("AI発話: {}", ai.generate_message());
|
||||
} else {
|
||||
println!("まだ何も言わずにそっとしているようです...");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user