(摘) 狼人杀角色自动安排?

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

小朋友们要玩狼人杀,总是让我给他们安排角色。来个小程序,让他们自己玩。
程序自动安排角色,小朋友们依次过来看系统随机给他们安排的角色。
代码能用就行。

package main

import (
	"fmt"
	"log"
	"math/rand"
	"os"
	"time"

	"github.com/faiface/beep/mp3"
	"github.com/faiface/beep/speaker"
)

func main() {
	rand.Seed(time.Now().UnixNano())
	uName := []string{
		"恶魔", "医生", "船员", "内鬼",
	}

	res := make([]string, len(uName))
	copy(res, uName)
	length := len(res)
	for i := 0; i < length; i++ {
		index := rand.Intn(length - i)
		res[i], res[index+i] = res[index+i], res[i]
	}

	for i, n := range res {
		fmt.Print("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", i+1, ". ", n)
		time.Sleep(5 * time.Second)
		fmt.Print("\b\b\b\b\b\b\b\b\b\b\b                ")
                // 播放一个提示音频:角色已就位,请下一角色...
		go func() {
			player := MusicEntry{Source: string("./say.mp3")}
			player.Open()
			player.Play()
		}()

		time.Sleep(5 * time.Second)
	}
}

// mp3播放 -------------

type MusicEntry struct {
	Id         string   //编号
	Name       string   //歌名
	Artist     string   //作者
	Source     string   //位置
	Type       string   //类型
	Filestream *os.File // 文件流
}

func (me *MusicEntry) Open() {
	var err error
	me.Filestream, err = os.Open(me.Source)
	if err != nil {
		log.Fatal(err)
	}
}

func (me *MusicEntry) Play() {
	streamer, format, err := mp3.Decode(me.Filestream)
	if err != nil {
		log.Fatal(err)
	}
	defer streamer.Close()

	speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
	//fmt.Println("music length :", streamer.Len())
	speaker.Play(streamer)
	select {}
}

相关文章