好友
阅读权限 10
听众
最后登录 1970-1-1
本帖最后由 Jocelyn123 于 2025-4-6 21:21 编辑
# 假期情侣间互动游戏(好感加倍)
## 场景描述
清明时节,窗外细雨绵绵,和对象窝在温暖的家中,享受着难得的假期。因为太无聊了,突发奇想用go写了一个随机动作互动游戏。游戏开始,系统用语音提示:“摸头发”,“摸耳朵”... 突然,系统提示:“抢!”,双方迅速伸手去夺抱枕,谁先拿到获胜。每当“抢”出现时,房间里就充满欢快的打闹声,连窗外的雨声都成了陪衬。三天假期,这个小游戏成了爱的互动,笑声驱散了阴雨的沉闷,也让彼此的陪伴更加甜蜜。
## 功能描述
Go语言实现的随机动作生成器程序,该程序通过权重机制实现不同动作的差异化概率触发。
## 技术实现要点
1. **跨平台文本转语音**:程序使用`exec.Command`调用不同平台的语音合成工具,包括macOS的`say`、Linux的`espeak`和Windows的PowerShell语音API。
2. **权重随机算法**:通过为每个动作分配不同权重值,实现了"抢"动作5倍于其他动作的触发概率,使用累计权重值计算实现随机选择。
3. **实时交互设计**:程序采用无限循环结构持续生成动作指令,当选中"抢"动作时,会暂停2秒并触发系统提示音(Windows平台)。
## 应用场景
​ 1.互动游戏中的随机事件触发
​ 2.教学演示中的随机提问系统
​ 3.行为训练中的随机指令生成
## 实现代码
```go
package main
import (
"fmt"
"math/rand"
"os"
"os/exec"
"runtime"
"time"
)
func textToSpeech(text string) error {
var cmd *exec.Cmd
switch runtime.GOOS {
case "darwin":
cmd = exec.Command("say", text)
case "linux":
cmd = exec.Command("espeak", text)
case "windows":
psScript := fmt.Sprintf(`Add-Type -AssemblyName System.speech; $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer;$speak.Volume = 100;$speak.Speak("%s")`, text)
cmd = exec.Command("powershell", "-Command", psScript)
default:
return fmt.Errorf("unsupported platform")
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func warnNotice() error {
cmd := exec.Command("powershell", "[console]::beep(800, 300)")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func main() {
for {
// 定义动作及其权重
actions := []struct {
name string
weight int // 权重 权重越高 命中率也高
}{
{"抢", 5},
{"摸鼻子", 1},
{"摸耳朵", 1},
{"摸眼睛", 1},
{"摸头发", 1},
{"摸嘴巴", 1},
{"摸下巴", 1},
{"摸眉毛", 1},
}
// 计算总权重
totalWeight := 0
for _, a := range actions {
totalWeight += a.weight
}
// 生成随机数
rand.Seed(time.Now().UnixNano())
r := rand.Intn(totalWeight)
// 根据权重选择动作
cumulative := 0
var selected string
for _, a := range actions {
cumulative += a.weight
if r < cumulative {
selected = a.name
break
}
}
err := textToSpeech(selected)
if err != nil {
fmt.Println("Error:", err)
}
if selected == "抢" {
time.Sleep(2 * time.Second)
// 报警声
//_ = warnNotice()
}
}
}
```
## 核心代码
## 运行结果
## 最后
实现逻辑很简单,通俗的话来说就是产生随机数,取数组元素。三天假期结束,牛马继续搬砖。期待下一个假期,五一节。。。