TOC

This article has been localized into Czech by the community.

Tvoříme počítačovou hru: SnakeWPF:
Chapter introduction:

In this article series, we're building a complete Snake game from scratch. It makes sense to start with the Introduction and then work your way through the articles one by one, to get the full understanding.

If you want to get the complete source code for the game at once, to get started modifying and learning from it right now, consider downloading all our samples!

Přidání zvuku do hry SnakeWPF

Většina her bude mít zvukové efekty, které zlepšují zážitek, ale dosud je naše malá implementace hada úplně tichá. V tomto tutoriálu jsme se již bavili jak o zvuku, tak o videu, takže pokud jste tyto články četli, víte, že přehrání zvuku ve WPF je docela snadné. Ve skutečnosti, pokud vám stačí systémové zvuky, lze to udělat jedním řádkem kódu:

SystemSounds.Beep.Play();

Pokud potřebujete trochu více než to, můžete použít třídu MediaPlayer k přehrání vlastních zvukových souborů (např. MP3). O tom, jak na to, si můžete přečíst v tomto článku: Přehrávání zvuku ve WPF. Zajímavý malý projekt by mohl být nahrání zvuku, když kousnete do jablka, a poté jeho přehrání, když had sní jablko - je to docela snadno dosažitelné!

Nechme hada mluvit

Pro tento tutoriál jsem se rozhodl jít jinou cestou než jen přehrávat běžné zvukové ukázky - chci, aby Had mluvil! To může znít složitě, ale pouze pokud jste nečetli všechny články v tomto tutoriálu, protože pokud jste je četli, víte, že WPF má skvělou podporu pro syntézu řeči. S tím můžeme hada velmi snadno přimět mluvit!

Především musíte do svého projektu přidat odkaz na sestavení System.Speech. Pro konkrétní pokyny, jak přidat právě toto sestavení do vašeho projektu, se prosím podívejte na tento předchozí článek: Syntéza řeči (jak přimět WPF mluvit). Nahoře najdete podrobného průvodce, jak toho dosáhnout.

Rozhodl jsem se, že Had bude mluvit v několika situacích, takže vytvořím společnou instanci SpeechSynthesizer, kterou budu pokaždé znovu používat, ale začnu přidáním odkazu na jmenný prostor System.Speech.Synthesis nahoře:

using System.Speech.Synthesis;

Poté deklarujte a inicializujte instanci na začátku vašeho okna:

public partial class MainWindow : Window
{
private SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
.......

"Yummy!"

To je vše, co potřebujeme, aby had mluvil - ale kdy by měl mluvit a co by měl říkat? Rozhodl jsem se, že každému snědení jablka bude říkat "yummy". To se děje v metodě EatSnakeFood(), kterou jsme implementovali dříve, takže na její začátek stačí přidat jediný řádek:

private void EatSnakeFood()
{
    speechSynthesizer.SpeakAsync("yummy");
    ......

To je vše - spusťte hru a užijte si "yummy" pokaždé, když had sní jablko. Samozřejmě řetězec textu může být změněn na jiné slovo nebo dokonce větu, pokud máte chuť.

Ale ne - zemřel jsi! - "Oh no - you died!"

Říkat "yummy" je super jednoduché, jak vidíte, ale SpeechSynthesizer může dělat mnohem víc než to! Abych to demonstroval, rozhodl jsem se, že had bude mluvit o své vlastní smrti a konečném skóre hry - jinými slovy, musíme přidat nějaké promluvy do metody EndGame(). Bude tam docela hodně řádků extra kódu, protože chci několik vět s různými nastaveními řeči, takže jsem se rozhodl vložit kód pro konec hry do vlastní metody nazvané SpeakEndOfGameInfo(). Tato metoda je volána na konci metody EndGame(), kterou jsme dříve implementovali v tomto tutoriálu, takže stačí přidat volání na její konec:

private void EndGame()
{
    .......
    SpeakEndOfGameInfo(isNewHighscore);
}

Zde je, jak vypadá naše implementace tohoto:

private void SpeakEndOfGameInfo(bool isNewHighscore)  
{  
    PromptBuilder promptBuilder = new PromptBuilder();  

    promptBuilder.StartStyle(new PromptStyle()  
    {  
Emphasis = PromptEmphasis.Reduced,  
Rate = PromptRate.Slow,  
Volume = PromptVolume.ExtraLoud  
    });  
    promptBuilder.AppendText("oh no");  
    promptBuilder.AppendBreak(TimeSpan.FromMilliseconds(200));  
    promptBuilder.AppendText("you died");  
    promptBuilder.EndStyle();  

    if(isNewHighscore)  
    {  
promptBuilder.AppendBreak(TimeSpan.FromMilliseconds(500));  
promptBuilder.StartStyle(new PromptStyle()  
{  
    Emphasis = PromptEmphasis.Moderate,  
    Rate = PromptRate.Medium,  
    Volume = PromptVolume.Medium  
});  
promptBuilder.AppendText("new high score:");  
promptBuilder.AppendBreak(TimeSpan.FromMilliseconds(200));  
promptBuilder.AppendTextWithHint(currentScore.ToString(), SayAs.NumberCardinal);  
promptBuilder.EndStyle();  
    }  
    speechSynthesizer.SpeakAsync(promptBuilder);  
}

To je docela dost kódu, ale pokud se na něj podíváte blíže, uvidíte, že je tam spousta stejných věcí - v podstatě používáme instanci PromptBuilder k vytvoření delší věty s různými nastaveními výslovnosti. Nakonec to způsobí, že had řekne "Oh no – you died" pokaždé, když zemřete. Pokud se dostanete do žebříčku nejlepších výsledků, který byl přidán v jednom z předchozích článků, přidá "Nové nejlepší skóre:" a následuje skutečné skóre.

Každá část tohoto textu je vyslovována s vhodnými nastaveními pomocí instancí PromptStyle - například " Oh no – you died " je vyslovováno pomalu se zvýšenou hlasitostí. Také používáme metodu AppendBreak() k přidání přirozených pauz mezi jednotlivými částmi. Více informací o těchto technikách najdete v našem předchozím článku o syntéze řeči.

Shrnutí

Díky sestavení System.Speech a třídě SpeechSynthesizer se náš Had právě naučil mluvit! To hru dělá mnohem zábavnější, zatímco ukazuje, jak cool, výkonný a flexibilní je .NET framework.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!