J2ME Games with MIDP 2

Similar documents
Foundations of JSP Design Patterns

Companion ebook Available Pro Android Includes Android 1.5 SOURCE CODE ONLINE US $44.99

Pro Perl Parsing. Christopher M. Frenz

JBoss 3.2 Deployment and Administration

Learn Programming with Flash MX

From Novice to Professional

Raven: Scripting Java Builds with Ruby MATTHIEU RIOU

Web Standards Creativity: Innovations in Web Design with XHTML, CSS, and DOM Scripting

Enterprise JavaBeans 2.1

.NET 2.0 Interoperability Recipes

A Programmer's Guide to

Building Spring 2 Enterprise Applications

Beginning C Third Edition

SQL Server Security Distilled Second Edition

Python 3 for Absolute Beginners

Pro Apache Beehive KUNAL MITTAL AND SRINIVAS KANCHANAVALLY

Learn How to Program Using Any Web Browser

CM0256 Pervasive Computing

Oracle JDeveloper log: Empowering J2EE Development. Oracle JDeveloper log: Empowering J2EE Development. ApreSS"' APress Media, LLC

ASP Web Development with Macromedia Dreamweaver MX 2004

Word Business Documents

Praise for Dive Into Python:

Enterprise Java. for SAP. APress Media, LLC AUSTIN SIN COCK

Summary of Contents. Chapter 3: Designing and Creating the Development Database. Chapter 5: SWl Server Ouery Analyzer

Pro.NET 4 Parallel Programming in C#

Silverlight and ASP.NET Revealed. Matthew MacDonald

Pro SQL Server 2008 Mirroring

Advanced Java Game. Prograrrming DAVID WALLACE CROFT. APress Media, LLC

Pro Excel 2007 VBA. Jim DeMarco

Date on Database. Writings C. J. Date

Web Development, Silverlight, and

ADO. Programmer's Reference. Dave Sussman. APress Media, LLC

Beginning Silverlight 3

Use Your PC to Build an Incredible Home Theater System

Who am I? Wireless Online Game Development for Mobile Device. What games can you make after this course? Are you take the right course?

Accelerated GWT. Building Enterprise Google Web Toolkit Applications. Vipul Gupta

Beginning Ubuntu Linux

MATLAB Programming for Numerical Analysis. César Pérez López

Beginning ASP.NET 1.1 Databases: From Novice to Professional

DAY 3 J2ME March 2007 Aalborg University, Mobile Device Group Mobile Phone Programming

Windows 10 Revealed. The Universal Windows Operating System for PC, Tablets, and Windows Phone. Kinnary Jangla

Functional Programming in R

RMAN Recipes for Oracle Database 11g

An Introduction to Object-Oriented Programming with Visual Basic.NET

Google, Amazon, and Beyond: Creating and Consuming Web Services

The Definitive Guide to Linux Network Programming

Pro Perl Parsing. Christopher M. Frenz

Beginning JSF 2 APIs and JBoss Seam. Kent Ka Iok Tong

C++ Quick Syntax Reference

Beginning. PHP and PostgreSQL. E-Commerce. Cristian Darie, Emilian Balanescu, and Mihai Bucica. From Novice to Professional

Beginning Web Development, Silverlight, and ASP.NET AJAX

Excel Pivot Tables Recipe Book

Mobile Application Development. Introduction. Dr. Christelle Scharff Pace University, USA

Acknowledgments Introduction p. 1 The Wireless Internet Revolution p. 1 Why Java Technology for Wireless Devices? p. 2 A Bit of History p.

Objective-C Quick Syntax Reference

J2ME ARCHITECTURE AND RELATED EMBEDDED TECHNOLOGIES

Dreamweaver Developer's Instant Troubleshooter

JavaScript Quick Syntax Reference

Programming Wireless Devices with the Java 2 Platform, Micro Edition

Java Quick Syntax Reference. Second Edition. Mikael Olsson

ColdFusion Web Development with Macromedia Dreamweaver MX 2004

Practical Ruby Gems. David Berube

Praise for Foundations of Python Network Programming:

Bluetooth for Java BRUCE HOPKINS AND RANJITH ANTONY

Project Overview. Readings and References. Initial project motivation. Opportunity. References. CSE 403, Winter 2003 Software Engineering

VISUAL QUICKSTART GUIDE QUICKTIME PRO 4. Judith Stern Robert Lettieri. Peachpit Press

C Quick Syntax Reference

Beginning Ubuntu Server Administration

Beginning Ubuntu Server Administration

Expert Shell Scripting

Software Development & Education Center. Java Platform, Micro Edition. (Mobile Java)

MATLAB Numerical Calculations. César Pérez López

Microsoft Computer Vision APIs Distilled

Pro MERN Stack. Full Stack Web App Development with Mongo, Express, React, and Node. Vasan Subramanian

Beginning ASP.NET in VB.NET: From Novice to Professional

The Windows 10 Productivity Handbook

Pro JavaScript Performance Monitoring and Visualization

Agile Swift. Swift Programming Using Agile Tools and Techniques. Godfrey Nolan

Beginning. Pivot Tables. in Excel Debra Dalgleish

JUGAT meeting. Roman Waitz Development. MATERNA Information & Communications

Joomla! Beginning. From Novice to Professional

Praise for Building Portals with the Java Portlet API:

Distributed Gaming using J2ME. By Rekha Vaddepalli

Beginning the Linux Command Line. Sander van Vugt

Excel 2010 Made Simple

Embedded Java Security

Java Persistence for Relational Databases

Project Overview. CSE 403, Spring 2003 Software Engineering.

Project Overview. Readings and References. Opportunity. Initial project motivation. References. CSE 403, Spring 2003 Software Engineering

Microsoft Content Management Server Field Guide

Essential Angular for ASP.NET Core MVC

Introduction to Visual Basic and Visual C++ Introduction to Java. JDK Editions. Overview. Lesson 13. Overview

Formal Methods of Software Design, Eric Hehner, segment 1 page 1 out of 5

JAVA. Java Micro Edition

Praise for Expert C# Business Objects:

Pro Data Backup and Recovery. Steven Nelson

Office 2003 XML for Power Users MATTHEW MACDONALD

C# Class Design Handbook: Coding Effective Classes

Ubuntu on a Dime. The Path to Low-Cost Computing. James Floyd Kelly

Linux Command Line and Shell Scripting Bible. Third Edtion

Transcription:

J2ME Games with MIDP 2 CAROL HAMER APress Media, LLC

J2ME Games with MIDP 2 Copyright ~ 2 0 0 4 by Carol Hamer Originally published by Apress in 2004 All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN 978-1-59059-382-0 ISBN 978-1-4302-0697-2 (ebook) DOl 10.1007/978-1-4302-0697-2 Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. Lead Editor: Steve Anglin Technical Reviewer: William Swaney Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Tony Davis, John Franklin, Chris Mills, Steve Rycroft, Dominic Shakeshaft, Jim Sumser, Karen Watterson, Gavin Wray, John Zukowski Project Manager: Kylie Johnston Copy Edit Manager: Nicole LeClerc Copy Editor: Kim Wrmpsett Production Manager: Kari Brooks Production Editor: Katie Stence Compositor: Kinetic Publishing Services, LLC Proofreader: Elizabeth Berry Indexers: Ron Strauss and Ann Rogers Artist: Kinetic Publishing Services, llc Cover Designer: Kurt Krames Manufacturing Manager: Tom Debolski The information in this book is distributed on an "as is" basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. The source code for this book is available to readers at http: //'IMW. a press. com in the Downloads section.

To my boys: Nicolas, Leo, and Emmanuel

Contents at a Glance About the Author... ix Acknowledgments... xi Introduction... xiii Chapter 1 Chapter 2 Chapter 3 Chapter 4 Chapter 5 Chapter 6 Chapter 7 Getting Started... 1 Using MIDlets... 19 Using the MIDP 2.0 Games API... 49 Using Threads and Tones... 93 Storing and Retrieving Data... 131 Communicating over a Network... 199 Securing Your Applications... 265 Index.... 281 v

Contents About the Author... ix Acknowledgments... xi Introduction... xiii Chapter 1 Getting Started... 1 Downloading and Installing the Toolkit... 1 Building an Application for MIDP... 1 Creating the "Hello, World" Application... 3 Using KToolbar... 7 Compiling and Running from the Command Line... 8 Running Your Game on an Actual Cell Phone... 12 Chapter 2 Using MIDlets... 19 Using the MIDlet Class... 19 Using the Form and Item Classes... 26 Using the Graphics and Canvas Classes... 30 Using the java.util Package... 41 Chapter 3 Using the MIDP 2. o Games API.... 49 Starting with the MID let Class... 49 Using the Thread Class... 54 Using the GameCanvas Class... 57 Using the LayerManager Class... 67 Using the Sprite Class... 74 Using the Tiled layer Class... 87 Chapter 4 Using Threads and Tones... 93 Using Threads... 93 Adding Music... 115 vii

Contents Chapter 5 Storing and Retrieving Data................ 131 Saving Simple Data... 131 Serializing More Complex Data Using Streams... 136 Using Data Types and Byte Arithmetic... 137 Applying Data Storage to a Game.... 143 Creating the Complete Example Game.... 160 Chapter 6 Communicating over a Network... 199 Understanding the Types of Network Communication in MIDP.... 199 Using HTTP... 201 Using Plain Sockets... 215 Chapter 1 Securing Your Applications... 265 Understanding How Security Works in MIDP... 265 Protecting the Client... 267 Setting Up Secure Connections... 270 Index.... 281 viii

About the Author Carol Hamer has a doctorate degree in mathematics from Rutgers University. She currently works as a software engineer at In-Fusio Mobile Game Connections. ix

Acknowledgments I'D UKE TO THANK my technical reviewer, William Swaney, for many helpful suggestions and corrections. Additionally, I'd like to recognize the contribution of my husband Emmanuel Kowalski, who acted as my systems and network administrator throughout this project. Not only did he keep my development environment running smoothly, but he also figured out how to write the scripts and perform the Web server configuration described in Chapter 1. xi

Introduction THE }AVA 2 MICRO EDITION (J2ME) is the version of the Java 2 platform that's designed for use with smaller, less-powerful devices such as mobile phones, Personal Digital Assistants (PDAs), 1V set-top boxes (for Web browsing and e-mail without a whole computer), and embedded devices. Since these devices vary quite a bit in their capabilities, the J2ME platform has two different configurations, each with its own choice of profiles. The Connected Limited Device Configuration (CLDC) is the configuration you'll be working with in this book. It's designed for mobile phones and low-level PDAs. More precisely, CIDC is intended for devices with a 16-bit or 32-bit processor, at least 160 kilobytes (I(B) of nonvolatile memory, at least 32KB of volatile memory, and some network connectivity, possibly wireless and intermittent. CIDC's unique profile is the Mobile Information Device Profile (MIDP). This book is specifically concerned with the 2.0 version ofmidp (although I'll explain what changes and restrictions you need to make to write a program that's compatible with the 1.0 version of MIDP). The other configuration associated with J2ME is the Connected Device Configuration (CDC), which isn't covered in this book. The configuration specifies the type of Java Vrrtual Machine (JVM) that's used and what will be in the minimal class libraries (the java.* packages and the javax.microedition.io package in the case ofcidc). CDC specifies a complete JVM, but the JVM of CIDC has some limitations compared to the standard JVM. A profile is added on top of the configuration to define a standard set of libraries (the other javax.microedition. *packages in this case). MIDP contains packages for a user interlace, media control, input/ output, data storage, and security. How the CLDC Differs from the Rest of the Java Universe The designers of the CIDC specification have made an effort to make CIDC resemble the standard platform as closely as possible, and they've done a pretty good job of it. Nothing critical to small applications appears to be missing. I'll give a general outline of the changes here, and I'll refer you to later chapters in this book for a more in-depth discussion of the aspects that have changed the most dramatically. Differences in the JVM The JVM specified in CIDC is mostly the same as the standard JVM. Unsurprisingly, a few of the costlier noncritical features have been eliminated. One example is the xi.ii

Introduction method Object. finalize(). According to the Javadoc, the Object. finalize() method is called on an object when the JVM determines that it's time to garbage collect that object The actions the object can take in its finalize () method aren't restricted, so in particular it can make itself available again to currently active threads! The garbage collection algorithm is already expensive, and this method clearly undermines its efficiency by obligating the JVM to recheck objects that had already been marked as garbage. It's no wonder this method was eliminated in CIDC since it's not hard at all to keep track of the objects that you're still using without requiring the JVM to check with you before throwing anything away. Some of the other areas where the JVM's set of features have been reduced are in security, threads, and exceptions/ errors. See the "Understanding the Differences Between MIDP Security and Security in Other Java Versions" section in Chapter 7 for a discussion of the differences in the security model. See the "Differences Between CLDC Threads and Threads in Standard Java'' section in Chapter 4 for information about threads. The changes in the error-handling system are that CLDC doesn't allow asynchronous exceptions and that the set of error classes has been greatly reduced. Instead of 22 possible errors, you now have only OutOfMemoryError, VirtualMachineError, and Error. On the other hand, almost all the exceptions in the java.lang.* package have been retained. You may not notice a few changes to the JVM just by looking at the Application Programming Interface (APD. In CLDC the JVM is allowed to perform some optimizations (such as prelinking classes) that were disallowed to the standard JVM. Such changes shouldn't concern the application programmer in general. The one exception is that an additional preverifi.cation stage has been added after compilation. The preverifi.cation process adds extra information to the classfile to make the bytecode verification algorithm easier at run time when the device checks that your classfile is valid before using it You easily accomplish the preverification step with standard tools (see the "Using KToolbar" section in Chapter l and the "Compiling and Running from the Command line" section in Chapter 1). Preverification isn't technically required 100 percent of the time, but it aids in compatibility, and there's no reason not to do it. One more general item to be aware of is that although a CLDC-compliant platform is required to support Unicode characters, it's required to support only the International Organization for Standardization (ISO) Latin 1 range of characters from the Unicode standard, version 3.0. For more information about character encoding in Java, see http: I /java.sun.com/products/jdk/1.3/docs/guide/intl/ encoding.doc.html. Differences in the Libraries xiv As you may guess, the standard libraries have been drastically reduced. It's unfortunate in many cases, but doing without some helpful tools is one of your challenges as a }2MB developer, just as you need to place more of a priority on writing tight, efficient code than a Java 2 Standard Edition (J2SE) or Java 2

Introduction Enterprise Edition (J2EE) developer would. The only java.* packages that you have available to you are java.lang. *, java.util. *,and java. io. * That means you have to do without java.lang.reflect. *, java.rnath. *, java.security. *,and many others. Many of the missing packages have been replaced by MIDP packages that are more appropriate for small devices, as you'll see throughout this book. Although the three remaining java.* packages have been greatly reduced, it's clear that the designers of the CLDC have tried to keep as much as possible and create familiar replacements for classes and methods that had to be removed. The java.lang. *package has been pared down to just the classes that correspond to data types (Integer, and so on) and a few necessary items: Math, Object, Runnable, String, StringBuffer, System, Thread, and Throwable (plus the exceptions and errors discussed previously). The java. util. * and java. io. * packages have been similarly reduced to their essentials. For examples of how to use the MIDP versions of the java. io. * classes, see the "Serializing More Complex Data Using Streams" section in Chapter 5. For a discussion of the changes to the java. util. * package, see the "Using the java.util Package" section in Chapter 2. What's New in MIDP 2.0 It's possible to write some fun basic games using the earlier (1.0) version of MIDP. I wrote the example game in Chapter 2 to be compatible with MIDP 1.0 so you can see what's available there. But MIDP 2.0 is loaded with additional features that allow you to create a much richer gaming environment. The most obvious new tool you get in MIDP 2.0 is the package javax.microedition.lcdui.game, which is a special package to help you optimize game graphics and controls (see Chapter 3). Also, now you can add music to your game (see the ' ~ d dmusic" i n g section in Chapter 4), which was impossible in MIDP 1.0. Plus, a MIDP 2.0 device is more likely than a MIDP 1.0 device to support socket connections in addition to the standard Hypertext Transfer Protocol (HTTP) I secure HTTP (HTTPS) connections (although socket connections are optional in both MIDP 1.0 and MIDP 2.0). Sockets can simplify programming multiplayer network games (see the "Using Plain Sockets" section in Chapter 6). Additionally, a security system has been added to allow the device to regulate which applications can have access to protected resources such as sockets (see Chapter 7). So many new, powerful features for games exist in the new MIDP 2.0 API that there's a good chance you won't even want to bother making special versions of your games for MIDP 1.0 devices. As I'm writing this (April2004), almost all the Java-enabled small devices on the market are capable of running only MIDP 1.0. But MIDP 2.0 devices are already appearing on the market, and small devices have fast turnover. The cost of a Java-enabled cell phone is generally reduced when the customer purchases it along with a yearlong phone-service contract. Consequently, a typical user will reason that since the phone wasn't too expensive to begin with, he might as well buy a new one the next year. It probably won't be long before the MIDP 1.0 devices are the ones that are rare. XV