Android: Game Programming
By John Horton and Raul Portales
()
About this ebook
Extend your game development skills by harnessing the power of Android SDK
About This Book- Gain the knowledge to design and build highly interactive and amazing games for your phone and tablet from scratch
- Create games that run at super-smooth 60 frames per second with the help of these easy-to-follow projects
- Understand the internals of a game engine by building one and seeing the reasoning behind each of the components
If you are completely new to Java, Android, or game programming, this book is for you. If you want to publish Android games for fun or for business and are not sure where to start, then this book will show you what to do, step by step, from the start.
What You Will Learn- Set up an efficient, professional game development environment in Android Studio
- Explore object-oriented programming (OOP) and design scalable, reliable, and well-written Java games or apps on almost any Android device
- Build simple to advanced game engines for different types of game, with cool features such as sprite sheet character animation and scrolling parallax backgrounds
- Implement basic and advanced collision detection mechanics
- Process multitouch screen input effectively and efficiently
- Implement a flexible and advanced game engine that uses OpenGL ES 2 to ensure fast, smooth frame rates
- Use animations and particle systems to provide a rich experience
- Create beautiful, responsive, and reusable UIs by taking advantage of the Android SDK
- Integrate Google Play Services to provide achievements and leaderboards to the players
Gaming has historically been a strong driver of technology, whether we're talking about hardware or software performance, the variety of input methods, or graphics support, and the Android game platform is no different. Android is a mature, yet still growing, platform that many game developers have embraced as it provides tools, APIs, and services to help bootstrap Android projects and ensure their success, many of which are specially designed to help game developers.
Since Android uses one of the most popular programming languages, Java, as the primary language to build apps of all types, you will start this course by first obtaining a solid grasp of the Java language and its foundation APIs. This will improve your chances of succeeding as an Android app developer. We will show you how to get your Android development environment set up and you will soon have your first working game.
The course covers all the aspects of game development through various engrossing and insightful game projects. You will learn all about frame-by-frame animations and resource animations using a space shooter game, create beautiful and responsive menus and dialogs, and explore the different options to play sound effects and music in Android. You will also learn the basics of creating a particle system and will see how to use the Leonids library.
By the end of the course, you will be able to configure and use Google Play Services on the developer console and port your game to the big screen.
This Learning Path combines some of the best that Packt has to offer in one complete, curated package. It includes content from the following Packt products:
- Learning Java by Building Android Games by John Horton
- Android Game Programming by Example by John Horton
- Mastering Android Game Development by Raul Portales
This course is a step-by-step guide where you will learn to build Android games from scratch. It takes a practical approach where each project is a game. It starts off with simple arcade games, and then gradually the complexity of the games keep on increasing as you uncover the new and advanced tools that Android offers.
Read more from John Horton
Beginning C++ Game Programming: Learn C++ from scratch by building fun games Rating: 0 out of 5 stars0 ratingsBeginning C++ Game Programming Rating: 5 out of 5 stars5/5Android Programming for Beginners Rating: 3 out of 5 stars3/5The Inner Game of Stress: Outsmart Life's Challenges and Fulfill Your Potential Rating: 3 out of 5 stars3/5Learning Java by Building Android Games Rating: 0 out of 5 stars0 ratingsPrestaShop 1.5 Beginners Guide Rating: 0 out of 5 stars0 ratingsBuilding E-commerce Sites with VirtueMart Cookbook Rating: 5 out of 5 stars5/5Android Programming for Beginners: Build in-depth, full-featured Android apps starting from zero programming experience Rating: 0 out of 5 stars0 ratingsLearning Java by Building Android Games: Learn Java and Android from scratch by building five exciting games Rating: 0 out of 5 stars0 ratingsLearning Java by Building Android Games: Learn Java and Android from scratch by building six exciting games Rating: 0 out of 5 stars0 ratingsAndroid Game Programming by Example Rating: 0 out of 5 stars0 ratingsPrestaShop 1.3 Beginner's Guide Rating: 5 out of 5 stars5/5Android: Programming for Developers Rating: 0 out of 5 stars0 ratingsBeginning C++ Game Programming: Learn to program with C++ by building fun games Rating: 0 out of 5 stars0 ratingsThe Politics of Diversity: Immigration, Resistance, and Change in Monterey Park, California Rating: 0 out of 5 stars0 ratings
Related to Android
Related ebooks
Android: Game Programming Rating: 0 out of 5 stars0 ratingsLearning Java by Building Android Games: Learn Java and Android from scratch by building six exciting games Rating: 0 out of 5 stars0 ratingsLearning Java by Building Android Games: Learn Java and Android from scratch by building five exciting games Rating: 0 out of 5 stars0 ratingsAndroid: Programming for Developers Rating: 0 out of 5 stars0 ratingsOUYA Game Development by Example Rating: 0 out of 5 stars0 ratingsGetting Started with Unity 5.x 2D Game Development: Enter the world of 2D Game development with Unity 5.x Rating: 0 out of 5 stars0 ratingsSwift Game Development: Learn iOS 12 game development using SpriteKit, SceneKit and ARKit 2.0, 3rd Edition Rating: 0 out of 5 stars0 ratingsCorona SDK Mobile Game Development Beginner's Guide Rating: 5 out of 5 stars5/5Corona SDK Mobile Game Development: Beginner's Guide - Second Edition Rating: 0 out of 5 stars0 ratingsMastering Game Development with PyGame: From Basics to Advanced Techniques Rating: 0 out of 5 stars0 ratingsOpenSceneGraph 3.0: Beginner's Guide: This book is a concise introduction to the main features of OpenSceneGraph which then leads you into the fundamentals of developing virtual reality applications. Practical instructions and explanations accompany you every step of the way. Rating: 0 out of 5 stars0 ratingsObject-Oriented Python: Master OOP through Game Development and GUI Applications Rating: 0 out of 5 stars0 ratingsGamification with Unity 5.x Rating: 0 out of 5 stars0 ratingsMastering Unity 2D Game Development Rating: 5 out of 5 stars5/5LiveCode Mobile Development: Beginner's Guide - Second Edition Rating: 4 out of 5 stars4/5jQuery 1.4 Plugin Development Beginner's Guide Rating: 0 out of 5 stars0 ratingsVaadin 7 UI Design By Example: Beginners Guide Rating: 0 out of 5 stars0 ratingsLearning iPhone Game Development with Cocos2D 3.0 Rating: 0 out of 5 stars0 ratingsSwift: Developing iOS Applications Rating: 0 out of 5 stars0 ratingsMastering Cocos2d Game Development Rating: 0 out of 5 stars0 ratingsFirst Steps in Unreal: Building Your First Game: Mastering Unreal Engine: From Novice to Pro Rating: 0 out of 5 stars0 ratingsMastering Unity 2D Game Development - Second Edition Rating: 0 out of 5 stars0 ratingsUnity Certified Programmer Exam Guide: Pass the Unity certification exam with the help of expert tips and techniques Rating: 0 out of 5 stars0 ratingsSparrow iOS Game Framework Beginner’s Guide Rating: 0 out of 5 stars0 ratingsLearning LibGDX Game Development - Second Edition Rating: 0 out of 5 stars0 ratingsLearn C# Programming by Creating Games with Unity Rating: 0 out of 5 stars0 ratings
Programming For You
Learn PowerShell in a Month of Lunches, Fourth Edition: Covers Windows, Linux, and macOS Rating: 5 out of 5 stars5/5Python Programming : How to Code Python Fast In Just 24 Hours With 7 Simple Steps Rating: 4 out of 5 stars4/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5SQL All-in-One For Dummies Rating: 3 out of 5 stars3/5Excel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5Linux: Learn in 24 Hours Rating: 5 out of 5 stars5/5Excel 101: A Beginner's & Intermediate's Guide for Mastering the Quintessence of Microsoft Excel (2010-2019 & 365) in no time! Rating: 0 out of 5 stars0 ratingsJavaScript All-in-One For Dummies Rating: 5 out of 5 stars5/5HTML & CSS: Learn the Fundaments in 7 Days Rating: 4 out of 5 stars4/5Python Data Structures and Algorithms Rating: 5 out of 5 stars5/5C Programming For Beginners: The Simple Guide to Learning C Programming Language Fast! Rating: 5 out of 5 stars5/5HTML in 30 Pages Rating: 5 out of 5 stars5/5Python: Learn Python in 24 Hours Rating: 4 out of 5 stars4/5Narrative Design for Indies: Getting Started Rating: 4 out of 5 stars4/5C All-in-One Desk Reference For Dummies Rating: 5 out of 5 stars5/5Python: For Beginners A Crash Course Guide To Learn Python in 1 Week Rating: 4 out of 5 stars4/5Coding with JavaScript For Dummies Rating: 0 out of 5 stars0 ratingsBeginning Programming with C++ For Dummies Rating: 4 out of 5 stars4/5Lua Game Development Cookbook Rating: 0 out of 5 stars0 ratings
Reviews for Android
0 ratings0 reviews
Book preview
Android - John Horton
Table of Contents
Android: Game Programming
Android: Game Programming
Credits
Preface
What this learning path covers
What you need for this learning path
Who this learning path is for
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Module 1
1. Why Java, Android, and Games?
Is this book for me?
If you just want to learn pure Java
If Android is your focus
Where this book will take you
Why build games to learn to program?
Why Android and Java?
Android is the fastest evolving and growing OS ever
Android developers have great prospects
Android is open source
Java is here to stay
Java is not just for Android
Java is fast and easy to use
A summary of Java and Android
Setting up our development environment
Installing the JDK
Android Studio
Installing Android Studio
Summary
2. Getting Started with Android
Our first game project
Preparing Android Studio
Building the project
Exploring Android Studio
Using the Android Studio visual designer
Android UI types
TextView
Layout elements
ImageView widgets
ButtonView
Using the sample code
Making our game menu
Structuring our code for Android
Life cycle phases – what we need to know
Life cycle phases – what we need to do
Dividing our game into activities
Our first look at Java
Cleaning up our code
Building and installing our game
Emulators and devices
Creating an emulator
Running the emulator
Running our game on the emulator
Building our game
Installing the setup to a device
Future projects
Self-test questions
Summary
3. Speaking Java – Your First Game
Java syntax
The compiler
Making code clear with comments
Storing data and using it with variables
Types of variables
Reference types
Declaration
Initialization
Changing variables with operators
Expressing yourself in Java
Math game – asking a question
Creating the new game activity
Laying out the game screen UI
Coding a question in Java
Linking our game from the main menu
Decisions in Java
More operators
Decision 1 – If they come over the bridge, shoot them
Decision 2 – Else, do this
Switching to make decisions
Math game – getting and checking the answer
Self-test questions
Summary
4. Discovering Loops and Methods
Looping with loops
While loops
Breaking out of a loop
The continue keyword
Do-while loops
For loops
Random numbers in Java
Methods
The structure of a method
Modifier
Return type
Name of a method
Parameters
Getting things done in the method body
Using methods
A working method
Exploring method overloading
Enhancing our math game
Enhancing the UI
The new Java code
Amending GameActivity
The methods
The setQuestion method
The updateScoreAndLevel method
The isCorrect method
Calling our new methods
Finishing touches
Going full screen and locking orientation
Adding a custom image (instead of the Android icon)
Self-test questions
Summary
5. Gaming and Java Essentials
Java arrays – an array of variables
Arrays are objects
A simple example of an array
Getting dynamic with arrays
Dynamic array example
Entering the nth dimension with arrays
An example of a multidimensional array
Array-out-of-bounds exceptions
Timing with threads
A simple thread timer example with the Handler class
Beeps n buzzes – Android sound
Creating sound FX
Playing sounds in Android
Life after destruction – persistence
An example of persistence
The memory game
Phase 1 – the UI and the basics
Phase 2 – preparing our variables and presenting the pattern
Phase 3 – the player's response
Phase 4 – preserving the high score
Animating our game
UI animation in Android
Phase 5 – animating the UI
Self-test questions
Summary
6. OOP – Using Other People's Hard Work
What is OOP?
Why do it like this?
Our first class and first object
Basic classes
More things we can do with our first class
Encapsulation
Controlling the use of classes with access modifiers
Class access in a nutshell
Controlling the use of variables with access modifiers
Variable access in a nutshell
Methods have access modifiers too
Method access in a nutshell
Accessing private variables with the getter and setter methods
Setting up our objects with constructors
Variables revisited
The stack and the heap
A quick break to throw out the trash
Access, scope, this, static, and constructors demo
A quick summary on stack and heap
Inheritance
An example of inheritance
Polymorphism
Abstract classes
Interfaces
More about OOP and classes
Inner classes
Self-test questions
Summary
7. Retro Squash Game
Drawing with Android Canvas
The Android coordinate system
Animating our pixels
Getting started with Canvas and Paint
Android Canvas demo app
Detecting touches on the screen
Preparing to make the retro squash game
The design of the game
The UI
Physics
The structure of the code
The four implementation phases in detail
Phase 1 – MainActivity and onCreate
Phase 1 code explained
Phase 2 – SquashCourtView part 1
Phase 2 code explained
Phase 3 – SquashCourtView part 2
Phase 3 code explained
Phase 4 – Remaining lifecycle methods
Good object-oriented design
Self-test questions
Summary
8. The Snake Game
Game design
The coordinate system
Keeping track of the snake segments
Detecting collisions
Drawing the snake
The code structure
MainActivity
GameActivity
Tidying up onCreate
Animation, sprite sheets, and the Snake home screen
Animating with sprite sheets
Implementing the Snake home screen
Implementing the Snake game activity
Enhancing the game
Self-test questions
Summary
9. Making Your Game the Next Big Thing
How to publish your app
Marketing your app
Adding leaderboards and achievements
Planning the Snake achievements
Step-by-step leaderboards and achievements
Installing the Google Play Services API on your PC
Configuring the Google Play developer console
Implementing the leaderboard in the Google Play developer console
Implementing the achievements in the Google Play developer console
Setting up the Snake project ready for implementation
Implementing the player's sign-in, achievements, and leaderboard buttons
Implementing the leaderboards in code
Implementing the achievements in code
Uploading the updated Snake game to Google Play
What next?
Getting a programmer's job
Building bigger and better games
Self-test questions
Summary
A. Self-test Questions and Answers
Chapter 2
Chapter 3
Chapter 4
Chapter 5
Chapter 6
Chapter 7
Chapter 8
Chapter 9
2. Module 2
1. Player 1 UP
A closer look at the games
Tappy Defender
Tough retro platformer
Asteroids simulator
Setting up your development environment
Installing the JDK
Installing Android Studio
Summary
2. Tappy Defender – First Step
Planning the first game
Backstory
The game mechanics
Rules for the game
The design
Control
Model
View
Design pattern reality check
The game code structure
The Android Activity lifecycle
The Android Studio file structure
Building the home screen
Creating the project
What we did
Building the home screen UI
What we did
Coding the functionality
Creating GameActivity
What we did
Configuring the AndroidManifest.xml file
What we did
Coding the game loop
Building the view
Creating a new class for the view
What we did
Structuring the class code
The game activity
The PlayerShip object
Drawing the scene
Plotting and drawing
Drawing PlayerShip
The Canvas and Paint objects
Controlling the frame rate
Deploying the game
Debugging on an Android device
Summary
3. Tappy Defender – Taking Flight
Controlling the spaceship
Detecting touches
Adding boosters to the spaceship
Detecting the screen resolution
Building the enemies
Designing the enemy
Spawning the enemy
Making the enemy think
The thrill of flight – scrolling the background
Things that go bump – collision detection
Collision detection options
Rectangle intersection
Radius overlapping
The crossing number algorithm
Optimizations
Multiple hitboxes
Neighbor checking
Best options for Tappy Defender
Summary
4. Tappy Defender – Going Home
Displaying a HUD
Implementing the rules
Ending the game
Restarting the game
Adding sound FX
Generating the FX
The SoundPool class
Coding the sound FX
Adding persistence
Iteration
Multiple different enemy graphics
An exercise in balance
Format time
Handle the back button
The finished game
Summary
5. Platformer – Upgrading the Game Engine
The game
The backstory
The game mechanics
Rules for the game
Upgrading the game engine
The platform activity
Locking the layout to landscape
The PlatformView class
The basic structure of PlatformView
The GameObject class
The view through a viewport
Creating the levels
The enhanced update method
The enhanced draw method
Summary
6. Platformer – Bob, Beeps, and Bumps
The SoundManager class
Introducing Bob
Multiphase collision detection
Player input
Animating Bob
Summary
7. Platformer – Guns, Life, Money, and the Enemy
Ready aim fire
Pickups
The drone
The guard
Summary
8. Platformer – Putting It All Together
Bullet collision detection
Adding some fire tiles
Eye candy
The new platform tiles
The new scenery objects
Scrolling parallax backgrounds
Pause menu with moveable viewport
Levels and game rules
Traveling between levels
The level designs
The cave
The city
The forest
The mountains
The HUD
Summary
9. Asteroids at 60 FPS with OpenGL ES 2
Asteroids simulator
The game controls
Rules for the game
Introducing OpenGL ES 2
Why use it and how does it work?
What is neat about Version 2?
How we will use OpenGL ES 2?
Preparing OpenGL ES 2
Locking the layout to landscape
Activity
The view
A class to manage our game
Managing simple shaders
The game's main loop – the renderer
Building an OpenGL-friendly, GameObject super class
The spaceship
Drawing at 60 + FPS
Summary
10. Move and Draw with OpenGL ES 2
Drawing a static game border
Twinkling stars
Bringing the spaceship to life
Rapid fire bullets
Reusing existing classes
Adding the SoundManager class
Adding the InputController class
Drawing and moving the asteroids
Scores and the HUD
Adding control buttons
Tally icons
Life icons
Declaring, initializing, and drawing the HUD objects
Summary
11. Things That Go Bump – Part II
Planning for collision detection
Colliding with the border
The first phase of border collision detection
Colliding with an asteroid
The crossing number
The first phase and overview of asteroid collision detection
The CollisionPackage class
Adding collision packages to the objects and making them accessible
Adding a collision package to the Bullet class
Adding a collision package to the SpaceShip class
Adding a collision package to the Asteroid class
The CD class outline
Implementing radius overlapping for asteroids and ships
Implementing rectangle intersection for the border
Performing the checks
Helper methods
Destroying a ship
Destroying an asteroid
Testing for collisions in update()
Precise collision detection with the border
Precise collision detection with an asteroid
Finishing touches
Summary
3. Module 3
1. Setting Up the Project
The right tool for the right game
Do you want to use 3D?
Do you want to use physics?
Do you want to use Java?
Pros of building games with the Android SDK
Cons of building games with the Android SDK
I want the Android SDK!
The project – YASS (Yet Another Space Shooter)
Activities and Fragments
Project setup
Creating the stub project
Cleaning up
Choosing an orientation
Dealing with aspect ratios
Game architecture
GameEngine and GameObjects
Starting a game
Stopping a game
Managing game objects
UpdateThread
DrawThread
User input
Putting everything together
Moving forward with the example
Handling the back key
Honoring the lifecycle
Using as much screen as we can
Before Android 4.4 – almost fullscreen
Android 4.4 and beyond – immersive mode
Putting fullscreen together
Good practices for game developers
Object pools
Avoiding enhanced loop syntax in lists
Precreating objects
Accessing variables directly
Being careful with floating points
Performance myths – avoid interfaces
Summary
2. Managing User Input
The InputController base class
The Player object
Displaying a spaceship
Firing bullets
The Bullet game object
The most basic virtual keypad
Limitations and problems
Creating a virtual joystick
General considerations and improvements
Physical controllers
Handling MotionEvents
Handling KeyEvents
Detecting gamepads
Sensors and InputControllers
Selecting control modes
Summary
3. Into the Draw Thread
Using GameView
The GameView interface
StandardGameView
SurfaceGameView
Updating GameEngine
Updating the game layout
Improving DrawThread
Sprites
Updating the spaceship and bullets
Adding a frames-per-second (fps) counter
Spawning enemies – the GameController
Procedural/random
Deterministic/static
Hybrid approach
Our approach
The asteroids
More on the transformation matrix
Occlusion culling
Parallax backgrounds
Multiple backgrounds
Layers
Summary
4. Collision Detection
Detecting collisions
Who can collide?
Updating GameEngine
Handling collisions
Rectangular bodies
Adding visual feedback
Pros and cons
Circular bodies
Adding visual feedback
Pros and cons
Mixed collision detection
Adding visual feedback
Other options for shapes
Optimization
Spatial partitioning and QuadTree
Duplicated collisions
Summary
5. Particle Systems
General concepts
Particles
ParticleSystem
Initializers
Modifiers
Composite GameObjects and GameEngine
Making good particle systems
One shot
Asteroid explosions
Spaceship explosions
Emitters
Asteroid trails
The spaceship's engine
Summary
6. Sound FX and Music
SoundManager
Sound FX
How to create sound FXs
GameEvents
Using SoundPool
Playing music
Obtaining music
MediaPlayer
Music and Activity life cycle
Enabling and disabling music and sound FX
Updating MainMenuFragment
Updating SoundManager
Disabling system sounds
Summary
7. Menus and Dialogs
Custom fonts
Working with backgrounds
The power of XML drawables
State list drawables
State lists colors
Shape drawables
The GameFragment
Adding a score
Adding lives
Custom dialogs
BaseCustomDialog
Quit dialog
Pause dialog
Game Over dialog
Other dialogs
Designing for multiple screen sizes
Summary
8. The Animation Framework
Updating BaseFragment
AnimationDrawable
Animated sprites
Animating views
XML versus code
Interpolators
View animation
Animating dialogs
Delaying the action in the dialogs to onDismissed
Pulsating buttons
Property animation
ViewPropertyAnimator
Moving a spaceship around
Animating the main menu
Summary
9. Integrating Google Play Services
Setting up the developer console
Setting up the code
Achievements
Architecture
Unlocking achievements
Leaderboards
Opening the Play Games UI
Other features of Google Play services
Events
Quests
Gifts
Saved games
Multiplayer games
Summary
10. To the Big Screen
Project configuration
Testing for Android TV
Declaring a TV Activity
Providing a home screen banner
Declaring it as a game
Declaring Leanback support
Declaring touchscreen capability as not required
Reviewing the manifest
Showing controller instructions
Dealing with overscan
Controller-based navigation
Dialogs and controllers
Beyond this book
Summary
A. API Levels for Android Versions
A. Bibliography
Index
Android: Game Programming
Android: Game Programming
Extend your game development skills by harnessing the power of Android SDK
A course in three modules
Android: Game ProgrammingBIRMINGHAM - MUMBAI
Android: Game Programming
Copyright © 2016 Packt Publishing
All rights reserved. No part of this course may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this course to ensure the accuracy of the information presented. However, the information contained in this course is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this course.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this course by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
Published on: September 2016
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78712-858-3
www.packtpub.com
Credits
Authors
John Horton
Raul Portales
Reviewers
Tony Atkins
Thorsten Harbig
Boon Hian Tek
Håvard Kindem
José Rodriguez-Rivas
Sergio Viudes Carbonell
Antonio Hernández Niñirola
Content Development Editor
Arun Nadar
Production Coordinator
Melwyn Dsa
Preface
Android is the fastest growing operating system, and Android devices can empower, entertain, and educate the planet. Android uses one of the most popular programming languages—Java, which is a high-performance, secure, and object-oriented language.
It is the most widespread Operating System and games are what people spend most time using on their phones. Video games have never been easier to make and distribute. Who would not want to make games for Android? And on top of this, making games is fun, addictive, and very rewarding; it can be hard to stop once you get started.
The problem comes when we reach a stumbling block because we don't know how to implement a feature, or perhaps integrate it into our game. This course will help you build simple as well as complex games from scratch using the Android SDK and all your queries and obstacles will be addressed in this journey.
Let's get rolling!
What this learning path covers
Module 1, Learning Java by Building Android Games, starts off with the Java fundamentals and their use in an Android environment to make a simple math quiz game. You will be building your very own Android UI using easy to-use tools in Android Studio. You will learn to add real-time interaction with Java threads and implement locking/handling screen rotation, pixel graphics, clicks, animation, sound FX, and many other features in your games. It also covers the advanced OOP concepts for building and deploying a graphical pong-style game. This module ends with exploring different APIs and implement advanced features such as online leaderboards and achievements using Google game services
Module 2, Android Game Programming by Example, is a whirlwind tour of as many Android 2D gaming features that can possibly be squeezed into 11 chapters. Every line of the code used to build three games of increasing difficulty is shown in the text of this module and explained in a straightforward manner. It is steadily built up to implement a flexible and advanced game engine that uses OpenGL ES 2 for fast smooth frame rates. This is achieved by starting with a simple game and gradually increasing the complexity of the three complete games built step by step. You will implementing cool features like sprite sheet character animation and scrolling parallax backgrounds and be designing and implementing genuinely challenging and playable platform game levels. You will then learn to code both basic and advanced collision detection and make the math behind 2D rotation, velocity, and collision simple. Later on you will learn how to run your game designs at 60 frames per second or better and also process multi-touch screen input. By the end of this module, you will be implementing a multitude of other game features like pickups, firing weapons, HUDs, generating and playing sound FX, scenery, level transition, high scores, and more.
Module 3, Mastering Android Game Development, will help you build a real-time game from scratch using the Android SDK. This module will make you understand the internals of a game engine and each of its components. You will learn to decide when to use each of the different ways of drawing on Android. Moving forward, you will learn to handle user inputs, from virtual joysticks to gamepads, collision detection using different techniques and discover how to optimize it for complex games. You will also learn about animations and particle system and how to implement it in your game before you finally move on to tackle the challenges faced while making it available on Google play for Android TV.
What you need for this learning path
Any recent and free version of Eclipse or Android Studio running on any of the major operating systems can use the code in this course.
Android Studio is the recommended development tool, and at time of publication, the minimum system requirements are:
For Windows:
Microsoft Windows 8/7/Vista/2003 (32 or 64-bit)
GB RAM minimum, 4 GB RAM recommended
400 MB hard disk space
At least 1 GB for Android SDK, emulator system images, and caches
1280 x 800 minimum screen resolution
Java Development Kit (JDK) 7
Optional for accelerated emulator: Intel processor with support for Intel VTx, Intel EM64T (Intel 64), and Execute Disable (XD) Bit functionality
For Mac OS X:
Mac OS X 10.8.5 or higher, up to 10.9 (Mavericks)
2 GB RAM minimum, 4 GB RAM recommended
400 MB hard disk space
At least 1 GB for Android SDK, emulator system images, and caches
1280 x 800 minimum screen resolution
Java Runtime Environment (JRE) 6
Java Development Kit (JDK) 7
Optional for accelerated emulator: Intel processor with support for Intel VTx, Intel EM64T (Intel 64), and Execute Disable (XD) Bit functionality
On Mac OS, run Android Studio with Java Runtime Environment (JRE) 6 for optimized font rendering. You can then configure your project to use JDK 6 or JDK 7.
For Linux:
GNOME or KDE desktop
GNU C Library (glibc) 2.15 or later
2 GB RAM minimum, 4 GB RAM recommended
400 MB hard disk space
At least 1 GB for Android SDK, emulator system images, and caches
1280 x 800 minimum screen resolution
Oracle Java Development Kit (JDK) 7
Tested on Ubuntu 14.04, Trusty Tahr (64-bit distribution capable of running 32-bit applications).
Who this learning path is for
If you are completely new to any one of Java, Android, or game programming, this book is for you. If you want to publish Android games for fun or for business and are not sure where to start, then this book will show you what to do, step by step from the start.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or disliked. Reader feedback is important for us as it helps us develop titles that you will really get the most out of.
To send us general feedback, simply e-mail <[email protected]>, and mention the book's title in the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide at www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Downloading the example code
You can download the example code files for this book from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
You can download the code files by following these steps:
Log in or register to our website using your e-mail address and password.
Hover the mouse pointer on the SUPPORT tab at the top.
Click on Code Downloads & Errata.
Enter the name of the book in the Search box.
Select the book for which you're looking to download the code files.
Choose from the drop-down menu where you purchased this book from.
Click on Code Download.
You can also download the code files by clicking on the Code Files button on the book's webpage at the Packt Publishing website. This page can be accessed by entering the book's name in the Search box. Please note that you need to be logged in to your Packt account.
Once the file is downloaded, please make sure that you unzip or extract the folder using the latest version of:
WinRAR / 7-Zip for Windows
Zipeg / iZip / UnRarX for Mac
7-Zip / PeaZip for Linux
The code bundle for the book is also hosted on GitHub at https://github.com/PacktPublishing/Android-Game-Programming. We also have other code bundles from our rich catalog of books and videos available at https://github.com/PacktPublishing/. Check them out!
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you could report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the Errata Submission Form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded to our website or added to any list of existing errata under the Errata section of that title.
To view the previously submitted errata, go to https://www.packtpub.com/books/content/support and enter the name of the book in the search field. The required information will appear under the Errata section.
Piracy
Piracy of copyrighted material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works in any form on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.
Please contact us at <[email protected]> with a link to the suspected pirated material.
We appreciate your help in protecting our authors and our ability to bring you valuable content.
Questions
If you have a problem with any aspect of this book, you can contact us at <[email protected]>, and we will do our best to address the problem.
Part 1. Module 1
Learning Java by Building Android Games
Get ready for a fun-filled experience of learning Java by developing games for the Android platform
Chapter 1. Why Java, Android, and Games?
Welcome to Learning Java by Building Android Games, which I hope is just the beginning of your exciting journey into designing and writing games. By the end of this book, we will have made four complete games: a math quiz with dynamically increasing difficulty, a memory game in the style of the classic Simon toy, a pong-style squash game, and a clone of the classic Snake game.
Besides these games, we will build more than a dozen working apps to practice and demonstrate individual concepts to aid our learning of Java, Android, and games. Our games and apps will feature sound FX, graphics, and animations. We will learn everything from using the standard Android User Interface (UI) designer to creating smooth animations by plotting individual pixels.
Although I will encourage you to work with me and implement the specific projects that are detailed step by step throughout the book, I fully expect that once you grasp the different concepts, you will want to use them in your own unique creations without delay. This is exactly what I hope you will be inspired to do.
The game projects themselves are not the objective of the book but the means to a much loftier goal. By the end of the book, you will be able to design and implement your own 2D Android games, to sell or just to give away, on Google Play.
Tip
There is a bit of ground work to cover first, but I promise it won't take long and it won't be complicated either. Anyone can learn to program.
However, there are so many differing opinions among experts, which breeds confusion among beginners concerning the best ways of learning to program. So it is a good idea to look at why learning Java, Android, and games is an ideal pathway for beginners. This will be the first thing we will discuss in this book.
Here is what we will learn in this chapter:
Is this book for me?
Why should I use games to learn to program?
Why should I learn Java and Android?
Setting up our development environment
Is this book for me?
If you have already decided that Java, Android, or games are what you want to learn, then the next question might be, Is this specific book for me?
.
There are plenty of Java books for beginners and books by much more accomplished authors and programmers than myself. I have read many of them and admire the authors. However, when these books drift away—which they all do—to topics such as Java-native interfaces, web browser applets, or server-side remote communication, I sometimes find myself questioning their immediate relevance to me.
At this point, at least subconsciously, my commitment would wane and the learning process would slow or stop.
If you just want to learn pure Java
If you just want to learn Java on its own, this book will be a solid start. Although the Android stuff might be considered overhead to your pure Java learning, this is much less than the multitude of potentially unnecessary topics that would be introduced in any other Java book. The only caveat with this book is that the necessary overhead is all at the beginning. But once this minimal overhead is cleared, we can focus quite intently on Java.
With regard to the amount of overhead:
It will take about six pages to set up our programming environment in this chapter
It will take Chapter 2, Getting Started with Android, to get familiar with the Android tools, create your first working project, and glimpse your first real Java code
From then on, it will be nearly pure Java and building games
You will soon see that the tiny amount of overhead is not excessive and is well worthwhile.
If Android is your focus
If it was Android itself that made you look at this book, then I am proud to say this is the first book that will teach you Android without assuming you have any prior Java or programming knowledge whatsoever.
Where this book will take you
By the end of this book, you will be able to easily take one of many paths including these:
Learning Java at a higher level for any platform
Intermediate level Android learning including pure game frameworks (which will be covered in more detail in Chapter 9, Making Your Game the Next Big Thing)
A higher level of games development
Much easier tackling of any modern object-oriented language for things such as iOS, Windows, or web development
So if you know you want to learn Android or Java, hopefully, I have gone some way to make you commit to the way this book will help you. But why games, Android, or Java at all?
Why build games to learn to program?
Fun, of course! But there are other reasons too. Successfully running any program we have written is immensely satisfying, even more so when it involves using some code that we previously didn't understand.
But making our own games, as you will soon realize, creates a feeling of pleasure that is not easy to describe—it has to be experienced. Then there are added bonuses of sharing our creations with friends on a phone or tablet or even sharing them publicly on the Google Play Store, and you might realize that once you start making games, you can't stop.
As we create more complex games steadily, you'll realize that all techniques and pieces of code can be rehashed to create other games, and you can then start planning your very own unique masterpieces. This is exhilarating to say the least.
And as with many subjects, the more we practice the better we get. So games are a perfect way to start learning to program Java. However, most beginners' books for Android games require a fairly high level of Java knowledge. But as we will see, it is perfectly possible to keep the practical examples as fun game projects and still start with the very basics of Java.
There is a slight trade-off in doing things this way. We will not always approach the working game examples in a by-the-book
manner. This is to avoid the problem of doing cartwheels before mastering the forward roll.
The learning outcome priority will always be the Java programming concept, followed by understanding the Android environment and game design principles. Having said that, we will closely examine and practice plenty of Android and game programming fundamentals.
Of course, from what we have just discussed, you can probably surmise that it would have been possible to teach a bit more Java in the same number of pages if we hadn't been making games.
This is true, but then we lose all the benefits that come with using games as the subject matter. Making games really can be a joy, and when our brains are open and eager for information, we will learn much faster. The minimal overhead of learning this way is negated a hundred times over. If games don't interest you in the slightest, then there are plenty of Java beginners' guides out there that take the traditional approach. Just don't expect quite the same thrill as when you publish your first game with online leaderboards and achievements.
Why Android and Java?
A part of successful learning is the commitment by the student, not just to do the work, but in their belief that they are doing the right thing in the right way. So many technology-based courses and books don't get that commitment from the reader, not subconsciously anyway.
The problem is the students' belief that they might be, partly at least, wasting their time with something that is or will soon become outdated or perhaps is not quite right for them. This can be true to a large extent with programming. So why should you spend your finite time learning Java, on Android?
Android is the fastest evolving and growing OS ever
At one time, Android updates emerged almost every two months. Even now, they emerge about once in six months. By comparison, Windows takes years between versions and even iOS updates come only yearly and usually change relatively little between versions. Android is obviously evolving and improving at an unprecedented rate.
Tip
Look at the history of Android versions since Version 1 at http://www.cnet.com/news/history-of-android/.
The first humble version of Android was released in 2008, around the same time when consumers were already quite excited about the then much flashier iPhone. News stories were also reporting that developers were getting rich by selling apps in the iTunes app store.
But in the last full year before this book was written, Samsung alone shipped more Android units than Apple sold all iOS devices combined. I am not joining the war on whose devices are best. I enjoy aspects of both Android and Apple, but purely in terms of picking a platform to learn on, you are probably in the right place at the right time with Android.
Android developers have great prospects
Now you might have picked up this book just for the fun and satisfaction that comes with learning to program games. But if you decide to develop your learning further, you will find that the demand for Android programmers is enormous and therefore very lucrative too.
Tip
Some data suggests salaries in excess of 100,000 US dollars. For more information, go to http://www.indeed.com/salary?q1=Android+Developer&l1=United+States.
Android is open source
What open source means is that although Google develops all the flavors of Android that are used on the newest devices, once the code is released, anybody can do whatever they like with it. Google only exerts control for a limited amount of time.
In practice, most Android users have the pure Google OS or the modified versions turned out by big manufacturers such as Samsung and HTC, but there is nothing to stop anybody taking the OS and changing, adapting, or converting it into whatever they like. In short, Android could never be taken away from the programming community.
Java is here to stay
Okay, so we see Android isn't likely to disappear but could Java become redundant? And will your significant time investment be wasted? On Android, as with most platforms, you can use many languages and tools. Android, however, was designed from the ground up to facilitate Java development. All other languages and tools are not invalid but tend to serve a fairly specific purpose, rather than be a real alternative to Java. In fact, as far as games are concerned, many of the alternatives to a pure Java development environment are also Java-based and require a good level of skill in Java to use. For example, the popular LibGDX game development library, which allows you to simultaneously make games for Android, iOS, Windows, Linux, Mac and even the Web, still uses Java! We will talk more about this in Chapter 9, Making Your Game the Next Big Thing. The point is that Java and Android are tied together and will likely thrive together.
Java is not just for Android
Java has been around a lot longer than Android, since the beginning of the 1990s in fact. Although what Java has been used for has evolved and diversified over more than two decades, the originally implemented strengths of the language itself remain the same today.
Java was designed to be platform- or computer-independent. This is achieved by the use of a virtual machine (VM). This is a program written in another language that decodes the Java program that we write and interacts with the computer platform it is running on. So as long as there is a VM for the computer you want to run your Java program on, with a few caveats, your Java program will work. So if you learn Java, you are learning a language that is used everywhere from the smart fridge to the Web and most places in between.
It is true, however, that the VM on each platform can and usually does implement features to specifically suit the uses it is likely to be put to. A clear example of this would be mobile-device-specific features such as sensors, GPS, or the built-in camera on many Android devices. Using Java with Android, you can take photos, detect the air pressure, and work out exactly where in the world you are. Most fridge VMs probably will not do this. So you can't always just run a Java program designed for device x on device y, but the language and syntax is the same. Learning Java on Android prepares you in a large part for Java in any situation. So rest assured that Java isn't going away any time soon.
Java is fast and easy to use
There is a decades-long debate over which language is the best overall or which language is the best to learn programming. Critics of Java will likely say things about Java's speed. It is true that the Java memory management along with the VM interpretation process does have some speed cost. However, these things have benefits; they significantly improve our productivity and the way that the Android VM interacts with a device largely negates the minor speed penalty. And since Android 4.4, it does so completely with Android Run Time (ART), which installs apps written in Java as fully native applications. Now Java programmers can build games in a friendly, interpreted language and have them run as if they were written in a more challenging natively compiled language.
A summary of Java and Android
In a rapidly changing world, if you are worried about where to invest your precious learning time, it is hard to have more confidence. Here we have a language (Java) whose fundamentals have remained almost the same for nearly a quarter of a century, and a platform (Android) that is backed by the biggest names in hardware, software, and retail, and though it's admittedly hugely influenced, it's not actually owned by anyone.
I am not an evangelist of any technology over another although it is true that I love doing stuff on Android. But you can be sure in your mind that if you are considering the best path to begin learning programming, there is a very strong argument that Java and Android are the best choice.
If you want to learn Java for any of its numerous uses, then this is a very good place to start. If you want to develop for Android or get into Android development of any sort, then Java is the absolute fundamental way to start, and making games has the enormous benefits we have already discussed.
By the end of the book, you will be able to write Java code for almost any Java-supported platform. You will be able use almost everything you learn in this book, away from the Android environment.
If you are planning to pursue a career or business by making Android games or any Android apps, then this book is possibly the only place to start for beginners.
If you are completely new to Java and want the easiest possible path to mastering it—the fastest growing platform on the planet—then Learning Java by Building Android Games will probably be just right for you.
So hopefully you are assured that the path this book will take to learn Java is as easy, fun, and thorough as learning Java can be. Let's get set up so we can start building games.
Setting up our development environment
The first thing we need to do is prepare our PC to develop for Android using Java. Fortunately, this is made quite simple for us.
Tip
If you are learning on Mac or Linux, everything in this book will still work. The next two tutorials have Windows-specific instructions and screenshots. However, it shouldn't be too difficult to vary the steps slightly to suit Mac or Linux.
All we need to do is:
Install a software package called the Java Development Kit (JDK), which allows us to develop in Java.
Install Android Studio, a program designed to make Android development fast and easy. Android Studio uses the JDK and some other Android-specific tools that automatically get installed when we install Android Studio.
Installing the JDK
The first thing we need to do is get the latest version of the JDK. To complete this guide, perform the following steps:
You need to be on the Java website, so visit http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Find the three buttons shown in the following screenshot and click on the one that says JDK (highlighted). They are on the right-hand side of the web page. Click on the DOWNLOAD button under the JDK option:
Installing the JDKYou will be taken to a page that has multiple options to download the JDK. In the Product/File description column, you need to click on the option that matches your operating system. Windows, Mac, Linux and some other less common options are all listed.
A common question here is, do I have 32- or 64-bit windows?
. To find out, right-click on your My Computer (This PC on Windows 8) icon, click on the Properties option, and look under the System heading in the System type entry, as shown in the following screenshot:
Click on the somewhat hidden AcceptLicense Agreement checkbox:
Installing the JDKNow click on the download option for your OS and system type as previously determined. Wait for the download to finish.
In your Downloads folder, double-click on the file you just downloaded. The latest version at time of writing this for a 64-bit Windows PC was jdk-8u5-windows-x64. If you are using Mac/Linux or have a 32-bit OS, your filename will vary accordingly.
In the first of several install dialogs, click on the Next button and you will see the next dialog box:
Installing the JDKAccept the defaults shown in the previous screenshot by clicking on Next. In the next dialog box, you can accept the default install location by clicking on Next.
Next is the last dialog of the Java installer. Click on Close.
The JDK is now installed. Next we will make sure that Android Studio is able to use the JDK.
Right-click on your My Computer (This PC on Windows 8) icon and navigate to Properties | Advanced system settings | Environment variables | New (under System variables, not under User variables). Now you can see the New System Variable dialog, as shown in the following screenshot:
Installing the JDKType JAVA_HOME for Variable name and enter C:\Program Files\Java\jdk1.8.0_05 for the Variable value field. If you installed the JDK somewhere else, then the file path you enter in the Variable value: field will need to point to wherever you put it. Your exact file path will likely have a different ending to match the latest version of Java at the time you downloaded it.
Click on OK to save your new settings. Now click on OK again to clear the Advanced system settings dialog.
Now we have the JDK installed on our PC. We are about half way towards starting to learn Java programming, but we need a friendly way to interact with the JDK and to help us make Android games in Java.
Android Studio
We learned that Android Studio is a tool that simplifies Android development and uses the JDK to allow us to write and build Java programs. There are other tools you can use instead of Android Studio. There are pros and cons in them all. For example, another extremely popular option is Eclipse. And as with so many things in programming, a strong argument can be made as to why you should use Eclipse instead of Android Studio. I use both, but what I hope you will love about Android Studio are the following elements:
It is a very neat and, despite still being under development, a very refined and clean interface.
It is much easier to get started compared to Eclipse because several Android tools that would otherwise need to be installed separately are already included in the package.
Android Studio is being developed by Google, based on another product called IntelliJ IDEA. There is a chance it will be the standard way to develop Android in the not-too-distant future.
Tip
If you want to use Eclipse, that's fine; all of the code in this book will work. However, some the keyboard shortcuts and user interface buttons will obviously be different. If you do not have Eclipse installed already and have no prior experience with Eclipse, then I even more strongly recommend you to go ahead with Android Studio.
Installing Android Studio
So without any delay, let's get Android Studio installed and then we can begin our first game project. To do this, let's visit https://developer.android.com/sdk/installing/studio.html.
Click on the button labeled Download Android Studio to start the Android studio download. This will take you to another web page with a very similar-looking button to the one you just clicked on.
Accept the license by checking in the checkbox, commence the download by clicking on the button labeled Download Android Studio for Windows, and wait for the download to complete. The exact text on the button will probably vary depending on the current latest version.
In the folder in which you just downloaded Android Studio, right-click on the android-studio-bundle-135.12465-windows.exe file and click on Run as administrator. The end of your filename will vary depending upon the version of Android Studio and your operating system.
When asked if you want to Allow the following program from an unknown publisher to make changes to your computer, click on Yes. On the next screen, click on Next.
On the screen shown in the following screenshot, you can choose which users of your PC can use Android Studio. Choose whatever is right for you as all options will work, and then click on Next:
Installing Android StudioIn the next dialog, leave the default settings and then click on Next.
Then on the Choose start menu folder dialog box, leave the defaults and click on Install.
On the Installation complete dialog, click on Finish to run Android Studio for the first time.
The next dialog is for users who have already used Android Studio, so assuming you are a first time user, select the I do not have a previous version of Android Studio or I do not want to import my settings checkbox, and then click on OK:
Installing Android StudioThat was the last piece of software we needed. The simple nine-step process we just went through has actually set up a whole range of Android tools that we will begin to use in the next chapter.
Summary
We discussed why games, Java, and Android are not only extremely exciting but also arguably the best way to learn to program. This is because games can be an extremely motivating subject matter and Java and Android have enormous strengths with regards to popularity and longevity, and are open to all of us to use for free.
We also set up the Java development kit and installed Android Studio, getting ready for the next chapter where we will actually create a part of a working game and take our first look at some Java code.
Chapter 2. Getting Started with Android
In this chapter, we will take a roller coaster ride through all the Android topics that you need to learn in order to get started with Java. It won't just be theoretical though. We will be designing a user interface (UI) of a game menu and we will see and edit our first Java code as well.
In addition, we will see how we can run our apps in either an Android emulator on our PC/Mac or on a real Android device if we have one.
Some of what we will cover in this chapter will be the tip of the iceberg. That is, there is a lot more below the surface to some of the topics we discuss than would be appropriate for the second chapter of a learning Java book. Sometimes, we might need to take a bit of information on faith.
This will then enable us to actually design and run our very own Android app by the end of this chapter. Then we can start learning Java for real at the beginning of the next chapter.
If this chapter seems a little tough, then don't worry; keep going because each subsequent chapter lifts the lid a bit more from some of the less clear topics.
For this chapter and the next two, we will be building a math game. We will start simply and by the end of Chapter 4, Discovering Loops and Methods, we will scale to game features that use significant Java skills.
In this chapter, we will:
Start our first game project
Explore Android Studio
Use the Android Studio visual designer to make our game UI
Learn about structuring our code for Android
Take our first look at some Java code
Build and install our game on an emulator and a real device
Our first game project
Now we will get straight down to actually doing something with Android Studio. Run Android Studio by double-clicking on the Android Studio icon either on your desktop's start menu or in the folder where you installed it.
Note
If you get any errors in a dialog box mentioning Privilege elevation, then try running Android Studio with administrator privileges. To do this, find the Android Studio icon by clicking on the Windows Start button and searching for Android Studio. Now right-click on the icon and click on Run as administrator. Do this every time you run Android Studio.
Preparing Android Studio
So with Android Studio and Java installed, we just need to add the latest versions of the Android API that we will use to make our first game. Here is what to do to install the API:
From the menu bar at the top of the Android Studio UI, navigate to Tools | Android | SDK Manager. Scroll down in the Android SDK Manager window and select the checkbox for Android 4.4.2 (API 19).
Note
Note that because Android is evolving so quickly, by the time you read this chapter, there might be APIs newer than 19—20, 21, and so on. If this is the case for you, select the newer (higher numbered) API instead.
Preparing Android StudioClick on Install Packages.
On the next screen, click on the Accept license checkbox and then click on the Install button. Android Studio will download and install the appropriate packages.
What we just did was setting up Android Studio to make available the latest, prewritten code called an API that we will interact with throughout the book.
Building the project
Click on New Project... as indicated in the following screenshot:
Building the projectThe Create New Project configuration window will appear. Fill in the Application name field with Math Game Chapter 2 and Company Domain with packtpub.com (or you could use your own company website name here), as shown in the following screenshot:
Building the projectNow click on the Next button. On the next screen, check that the Phone and Tablet checkbox has a tick in it. Now we have to choose the earliest version of Android we want to build our app for. Go ahead and play with a few options in the drop-down selector. You will see that the earlier the version we select, the greater is the percentage of devices our app can support. However, the trade-off here is that the earlier the version we select, the fewer are the cutting-edge Android features available in our apps. A good balance is to select API 8: Android 2.2 (Froyo). Go ahead and do that now as shown in the next screenshot:
Building the projectClick on Next. Now select Blank Activity as shown in the next screenshot and click on Next again:
Building the projectOn the next screen, simply change Activity Name to MainActivity and click on Finish.
Tip
By default, Android Studio shows a Tip of the day dialog every time it starts. Some of the tips might not make sense while you are still learning Java but many of them are really useful and reveal great shortcuts and other time savers. It is well worth taking a few seconds to read them when they show up. As already discussed, Android Studio is built from IntelliJ IDEA, and you can find a complete list of keyboard shortcuts at http://www.jetbrains.com/idea/webhelp/keyboard-shortcuts-you-cannot-miss.html.
ClearTip of the day by clicking on Close.
If you are completely new to programming, then the code, options, and files might seem a bit daunting. Don't worry; stick to them as we don't need to concern ourselves with most of them in order to learn Java. When the time does come to interact with the finer details, we will do things one step at a time.
It might be hard to believe that at this stage, but we have just created our first working app. We could build and run it on an Android device, and soon we will.
Let's take a deeper look at Android Studio before we progress with our game.
Exploring Android Studio
Android Studio is a very deep tool, but it is only necessary to learn one part at a time in order to get started. What might be useful for us is naming a few parts of the UI so that we can refer to them easily as we progress through the book.
Take a look at this numbered diagram and a quick explanation of some of the key parts of Android Studio. If you can, try and memorize the parts to make future discussions of them easier for you.
Exploring Android StudioHere is a handy table that you can quickly refer to and remember which part of Android Studio we are referring to. What follows is a more detailed explanation of each area.
Project Explorer (1): This is shown as 1 in the screenshot and is a bit like Windows Explorer. It shows us all the files and folders that have been generated for our project. We will do a number of things from here as the book continues. Actually, if you delve into the files and folders that Android Studio creates, the Project Explorer is not an exact mapping. It is slightly simplified and highlighted to make managing and exploring our project easier.
The Editor (2): As the name suggests, we will edit our Java code files here in the editor. However, as we will soon see, the Editor window changes depending on the type of file we are editing. We will also be viewing and editing UI designs here.
Menu bar (3): Like most programs, the Menu bar gives us access to the full functionality of Android Studio.
Tool bar (4): This contains lots of really useful one-click options to do things such as deploying and debugging our games. Hover the mouse cursor over an icon to get a pop-up tip and gain greater insight into each toolbar icon.
Navigation bar (5): Like a file path, this shows exactly where the file that is currently in the editor is located within the project.
Important tool windows (6): These are a number of tabs that can be popped up and popped down again by clicking on them. If you like, try some of them now to see how they work.
Let's talk a bit more about the parts of the Android Studio UI and how the editor window can transform itself into a visual UI designer. After that, when we are familiar enough, we will look at building a simple menu screen for our math game.
Using the Android Studio visual designer
The Android Studio editor window is a very dynamic area. It presents different file types in the most useful way possible. A little earlier, when we created our project, it also made a basic UI for us. UIs in Android can be built-in Java code or, as we will see, in a visual designer without the need for a single line of Java. However, as we will investigate after we have built the UI of our game menu, to get the UI to do anything useful, we need to interact with it. This interaction is always done with Java code. The visual designer also generates the UI code for us. We will take a very quick look at that too.
As the book progresses, we will mainly shy away from Android UI development, as that is a staple of more non-game apps. We will instead spend more time looking at directly drawing pixels and images to make our games. Nonetheless, the regular Android UI has its uses, and the Android Studio visual designer is the quickest way to get started.
Let's have a look at that now:
In the Android Studio Project Explorer, double-click on the layout folder to reveal the activity_main.xml file within it. This should be easy to see unless you have collapsed the directories. If you can't see the layout folder, navigate to it using the Project Explorer. It can be found at Math Game Chapter2/src/main/res/layout via the Android Studio Project Explorer, as shown in the following screenshot:
Using the Android Studio visual designerNow double-click on activity_main.xml to open it in the editor window. After a brief loading time, you will see something very similar to the next screenshot. The following screenshot shows the entire contents of what previously contained just our code. As you can see, what was just a text window now has multiple parts. Let's take a closer look at this screenshot:
Using the Android Studio visual designerIn the preceding screenshot labeled (1), called Palette, you can choose from the available Android UI elements and simply click and drag them onto your UI design. Area (2) is the visual view of the UI you are building, where you will click and drag elements from the palette. To the right of the visual UI view, you will see the Component Tree area (3). The component tree allows you to examine the structure of the complex UI and select specific elements more easily. Under this tree is the Properties panel (4). Here you can adjust the properties of the currently selected UI