Book Image

TypeScript Blueprints

By : Ivo Gabe de Wolff
Book Image

TypeScript Blueprints

By: Ivo Gabe de Wolff

Overview of this book

TypeScript is the future of JavaScript. Having been designed for the development of large applications, it is now being widely incorporated in cutting-edge projects such as Angular 2. Adopting TypeScript results in more robust software - software that is more scalable and performant. It's scale and performance that lies at the heart of every project that features in this book. The lessons learned throughout this book will arm you with everything you need to build some truly amazing projects. You'll build a complete single page app with Angular 2, create a neat mobile app using NativeScript, and even build a Pac Man game with TypeScript. As if fun wasn't enough, you'll also find out how to migrate your legacy codebase from JavaScript to TypeScript. This book isn't just for developers who want to learn - it's for developers who want to develop. So dive in and get started on these TypeScript projects.
Table of Contents (16 chapters)
TypeScript Blueprints
Credits
About the Author
About the Reviewer
www.PacktPub.com
Preface

Adding a menu


To finish off the game, we will add some menus to it. In the main menu, the user can choose a difficulty. The user can select an option using the arrow keys and confirm using the spacebar. The menu will look like this:

To implement the menu, we must add it to the state. Then we can render the menu and update the menu state in the event handler. We start by updating the state.

Changing the model

In lib/game/model.ts, we will add the menus to the state. First, we will create a new type for the menu. The menu contains a title, a list of options, and the index of the selected button. Each option has a string and a function that applies the action by transforming the state:

export interface Menu { 
  title: string; 
  options: [string, (state: State) => State][]; 
  selected: number; 
} 

We add the menu to the State:

export interface State {
  menu: Menu | undefined;
  level: Level;
}

The main menu will contain three buttons; to start...