gpt4 book ai didi

C# 文本冒险音乐问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:22 25 4
gpt4 key购买 nike

为了上学,我必须进行文字冒险,而我刚刚创建了菜单。现在我想在菜单中播放背景音乐,我已经想出了办法。然而,问题是,例如,当我进入选项菜单时,音乐停止播放。我想让音乐持续播放,直到按下“开始”按钮。

这是我的菜单代码:

class Program
{
static string Playername = "";
static string CorrectIntro = "";
static ConsoleColor TextColor = ConsoleColor.White;

static System.Threading.Thread MusicPlayer;

private static SoundPlayer IntroMusic;
private static SoundPlayer MenuSelector;

public static void Main(string[] args)
{

MusicPlayer = new System.Threading.Thread(new System.Threading.ThreadStart(BackgroundMusic));

//Menu Selector Sound
MenuSelector = new System.Media.SoundPlayer();
MenuSelector.SoundLocation = @"C:\Users\stijn\Desktop\School\Programmeren\Periode 1\Text Adventure\Sounds\MenuSelector.wav";

Menu();
}

public static void BackgroundMusic()
{
IntroMusic.SoundLocation = @"C:\Users\stijn\Desktop\School\Programmeren\Periode 1\Text Adventure\Sounds\IntroMusic.wav";
IntroMusic.Play();
}

private static void Menu()
{
IntroMusic = new System.Media.SoundPlayer();
IntroMusic.SoundLocation = @"C:\Users\stijn\Desktop\School\Programmeren\Periode 1\Text Adventure\Sounds\IntroMusic.wav";
IntroMusic.Play();

Console.ForegroundColor = TextColor;

Zin("The story of Benedict Henderson");
Enter('\n');
Enter('\n');
Zin("[1] Start");
Enter('\n');
Zin("[2] Options");
Enter('\n');
Zin("[3] Credits");
Enter('\n');
Zin("[4] Quit");
Enter('\n');

ConsoleKeyInfo MenuSelector = Console.ReadKey(true);

switch (MenuSelector.Key)
{
case ConsoleKey.D1:
Intro();
break;
case ConsoleKey.D2:
Options();
break;
case ConsoleKey.D3:
Credits();
break;
case ConsoleKey.D4:
Quit();
break;
}

Console.ReadKey();

}

//Quit function
private static void Quit()
{
MenuSelector.Play();
Environment.Exit(0);
}

//Credits function
private static void Credits()
{
MenuSelector.Play();
Console.Clear();

Zin("This game is made and designed by Stijn van der Neut");
Enter('\n');
Enter('\n');
Zin("Press enter to return to the menu");

ConsoleKeyInfo ReturnToMenu = Console.ReadKey(true);

if (ReturnToMenu.Key == ConsoleKey.Enter)
{
Console.Clear();
Menu();
}

}

//Option function
private static void Options()
{
MenuSelector.Play();
Console.Clear();



Zin("Please select the desired text color");
Enter('\n');
Enter('\n');
Zin("[1] White");
Enter('\n');
Zin("[2] Red");
Enter('\n');
Zin("[3] Blue");
Enter('\n');
Zin("[4] Green");
Enter('\n');
Zin("[5] Magenta");
Enter('\n');
Zin("[6] Cyan");
Enter('\n');
Enter('\n');
Zin("Press enter to return to the menu");

ConsoleKeyInfo ColorSelector = Console.ReadKey(true);

//Get player input for ColorSelector
switch (ColorSelector.Key)
{
case ConsoleKey.D1:
MenuSelector.Play();
TextColor = ConsoleColor.White;
break;
case ConsoleKey.D2:
MenuSelector.Play();
TextColor = ConsoleColor.Red;
break;
case ConsoleKey.D3:
MenuSelector.Play();
TextColor = ConsoleColor.Blue;
break;
case ConsoleKey.D4:
MenuSelector.Play();
TextColor = ConsoleColor.Green;
break;
case ConsoleKey.D5:
MenuSelector.Play();
TextColor = ConsoleColor.Magenta;
break;
case ConsoleKey.D6:
MenuSelector.Play();
TextColor = ConsoleColor.Cyan;
break;
case ConsoleKey.Enter:
MenuSelector.Play();
Console.Clear();
Menu();
break;
default:
TextColor = ConsoleColor.Black;
break;
}

Console.ForegroundColor = TextColor;
Console.Clear();
Menu();

}

抱歉,代码太长了,顺便说一句,放轻松,我现在才开始我的编码教育 3 个月:)。

所以我要澄清一下。有 2 个 SoundPlayer 对象,一个播放背景音乐,另一个 (MenuSelector) 在您转到子菜单时播放一小段声音。

我将我的代码更改为这个,因为显然播放功能会自动为您创建一个新线程,而不必您自己创建。不过,音乐仍然不会在整个菜单中持续播放。

class Program
{
static string Playername = "";
static string CorrectIntro = "";
static ConsoleColor TextColor = ConsoleColor.White;

private static SoundPlayer IntroMusic;
private static SoundPlayer MenuSelector;


public static void Main(string[] args)
{
//Menu Selector Sound
MenuSelector = new System.Media.SoundPlayer();
MenuSelector.SoundLocation = @"C:\Users\stijn\Desktop\School\Programmeren\Periode 1\Text Adventure\Sounds\MenuSelector.wav";

Menu();
}

private static void Menu()
{
IntroMusic = new System.Media.SoundPlayer();
IntroMusic.SoundLocation = @"C:\Users\stijn\Desktop\School\Programmeren\Periode 1\Text Adventure\Sounds\IntroMusic.wav";
IntroMusic.Play();

Console.ForegroundColor = TextColor;

Zin("The story of Benedict Henderson");
Enter('\n');
Enter('\n');
Zin("[1] Start");
Enter('\n');
Zin("[2] Options");
Enter('\n');
Zin("[3] Credits");
Enter('\n');
Zin("[4] Quit");
Enter('\n');

ConsoleKeyInfo MenuSelector = Console.ReadKey(true);

switch (MenuSelector.Key)
{
case ConsoleKey.D1:
Intro();
break;
case ConsoleKey.D2:
Options();
break;
case ConsoleKey.D3:
Credits();
break;
case ConsoleKey.D4:
Quit();
break;
}

Console.ReadKey();

}

//Quit function
private static void Quit()
{
MenuSelector.Play();
Environment.Exit(0);
}

//Credits function
private static void Credits()
{
MenuSelector.Play();
Console.Clear();

Zin("This game is made and designed by Stijn van der Neut");
Enter('\n');
Enter('\n');
Zin("Press enter to return to the menu");

ConsoleKeyInfo ReturnToMenu = Console.ReadKey(true);

if (ReturnToMenu.Key == ConsoleKey.Enter)
{
Console.Clear();
Menu();
}

}

//Option function
private static void Options()
{
MenuSelector.Play();
Console.Clear();


Zin("Please select the desired text color");
Enter('\n');
Enter('\n');
Zin("[1] White");
Enter('\n');
Zin("[2] Red");
Enter('\n');
Zin("[3] Blue");
Enter('\n');
Zin("[4] Green");
Enter('\n');
Zin("[5] Magenta");
Enter('\n');
Zin("[6] Cyan");
Enter('\n');
Enter('\n');
Zin("Press enter to return to the menu");

ConsoleKeyInfo ColorSelector = Console.ReadKey(true);

//Get player input for ColorSelector
switch (ColorSelector.Key)
{
case ConsoleKey.D1:
MenuSelector.Play();
TextColor = ConsoleColor.White;
break;
case ConsoleKey.D2:
MenuSelector.Play();
TextColor = ConsoleColor.Red;
break;
case ConsoleKey.D3:
MenuSelector.Play();
TextColor = ConsoleColor.Blue;
break;
case ConsoleKey.D4:
MenuSelector.Play();
TextColor = ConsoleColor.Green;
break;
case ConsoleKey.D5:
MenuSelector.Play();
TextColor = ConsoleColor.Magenta;
break;
case ConsoleKey.D6:
MenuSelector.Play();
TextColor = ConsoleColor.Cyan;
break;
case ConsoleKey.Enter:
MenuSelector.Play();
Console.Clear();
Menu();
break;
default:
TextColor = ConsoleColor.Black;
break;
}

Console.ForegroundColor = TextColor;
Console.Clear();
Menu();

}

最佳答案

不确定您是否修复了它,但您应该查看 Windows Media Player 库“WMPlib”。您应该能够使用此代码:

Using WMPlib;

private WindowsMediaPlayer player;
private string filename = $"C:\[FILE LOCATION]";

public static void main(string[] args)
{
player = new WindowsMediaPlayer();
player.PlayStateChange += new _WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChanged);
player.URL = filename;
PlayBackgroundMusic();
}

private void PlayBackgroundMusic()
{
player.controls.play();
}

private void Player_PlayStateChanged(int newState)
{
if ((WMPPlayState)newState == WMPPlayState.wmppsStopped)
{
PlayBackgroundMusic();
}
}

希望这对这个项目有帮助,但对 future 也有帮助。Windows Media Player 的库可以在 COM 组件或 windows\system32 中找到,如果您需要手动添加它。

另外,请注意该库是为 .Net framework 4 编写的,因此请确保在属性中项目使用 framework 4 作为目标。

关于C# 文本冒险音乐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com