Lord of the Rings Adventure Game



Similar documents
Make Your Own Game Tutorial I: Overview of Program Structure

Game Programming with DXFramework

Test Specification. Introduction

Abstractions from Multimedia Hardware. Libraries. Abstraction Levels

Board Games They are adaptations of classic board games. Examples of board games include Chess, Checkers, Backgammon, Scrabble and Monopoly.

How to Build a Simple Pac-Man Game

Investigator s Handbook

Level 11: Placing Treasure Chests

Develop Computer Animation

#include <Gamer.h> Gamer gamer; void setup() { gamer.begin(); } void loop() {

Interactive Cards A game system in Augmented Reality

Designing Games with Game Maker

Game Design Document and Production Timeline. John Laird and Sugih Jamin University of Michigan

The Basics of Robot Mazes Teacher Notes

Level 15: Creating a Puzzle

game development documentation game development documentation: concept document

SeeVogh Player manual

Classroom Setup... 2 PC... 2 Document Camera... 3 DVD... 4 Auxiliary Lecture Capture Setup... 6 Pause and Resume... 6 Considerations...

================================================================== CONTENTS ==================================================================

Creating Maze Games. Game Maker Tutorial. The Game Idea. A Simple Start. Written by Mark Overmars

Lesson 4. Temporal Management of Layers

Level 13: Creating Yes / No Player Options

STOP MOTION. Recommendations:

================================================================== CONTENTS ==================================================================

Content Author's Reference and Cookbook


Index. 2D arrays, 210

Computer Programming In QBasic

Visualization of 2D Domains

Dates count as one word. For example, December 2, 1935 would all count as one word.

So today we shall continue our discussion on the search engines and web crawlers. (Refer Slide Time: 01:02)

MAKE YOUR FIRST A-MAZE-ING GAME IN GAME MAKER 7

[Name of the game] Game Design Document. Created by [Name of the team]:

Designing Games with Game Maker

Silverlight for Windows Embedded Graphics and Rendering Pipeline 1

ImagineWorldClient Client Management Software. User s Manual. (Revision-2)

Lecture Notes, CEng 477

The Car Tutorial Part 1 Creating a Racing Game for Unity

A Client-Server Interactive Tool for Integrated Artificial Intelligence Curriculum

Voice Driven Animation System

The Classroom Computer: A Role-Playing Educational Activity *

Using Windows CE Applications in the Pathfinder

Generate Android App

a basic guide to video conversion using SUPER

Stock Market Challenge Maths, Business Studies and Key Skills Development. Dealing Room Game Teacher s Guide

MMGD0203 Multimedia Design MMGD0203 MULTIMEDIA DESIGN. Chapter 3 Graphics and Animations

Backing up with Windows 7

Creating 2D Drawings from 3D AutoCAD Models

Watch Your Garden Grow

CHAPTER 6 TEXTURE ANIMATION

Vocabulary Strategies Toolbox

Example Chapter 08-Number 09: This example demonstrates some simple uses of common canned effects found in popular photo editors to stylize photos.

SMART NOTEBOOK 10. Instructional Technology Enhancing ACHievement

Figure 3.5: Exporting SWF Files

I Newsletter Q1 WELCOME TO OUR FIRST NEWSLETTER EDITION FOR 2015!

Flash Tutorial Part I

USER S MANUAL. Tote & Go Laptop 2003 VTECH. Printed in China

Instructional Design Framework CSE: Unit 1 Lesson 1

Character Animation Tutorial

Copyright 2006 TechSmith Corporation. All Rights Reserved.

3D Animation Silent Movie Entitled The Seed : Research for Level of Understanding Compare between Male and Female

Action: Action: Teamwork rumor Injury rumor antarctica III antarctica III antarctica III

4D Interactive Model Animations

Using Kid Pix Deluxe 3 (Windows)

not think the same. So, the consumer, at the end, is the one that decides if a game is fun or not. Whether a game is a good game.

THE ADEPT (INITIATE, PART II)

Fusion's runtime does its best to match the animation with the movement of the character. It does this job at three different levels :

Graphic Design. Background: The part of an artwork that appears to be farthest from the viewer, or in the distance of the scene.

Flash MX 2004 Animation Lesson

CALL US Free Report on How To Choose a Personal Trainer. This is an educational service provided to you by The GYM

Collision Theory and Logic

Make your own Temple Run game

Ironclads: High Seas Game Manual v. 1.1

Chapter 13: Program Development and Programming Languages

DM810 Computer Game Programming II: AI. Lecture 11. Decision Making. Marco Chiarandini

4.1 Threads in the Server System

Midi Workshop. SAWStudio. From RML Labs. To order this product, or download a free demo, visit

Counselor Lesson Plan

Stu S Double Jeopardy Create Your Own Quizzes

Learning Time Cuckoo Clock TM

Software Project Plan

Student Quick Start Guide

Chapter 13: Program Development and Programming Languages

BlazeVideo HDTV Player v6.0r User s Manual. Table of Contents

Game Design From Concepts To Implementation

XBMC Architecture Overview

REFERENCE GUIDE 1. INTRODUCTION

SketchUp Instructions

Use fireworks and Bonfire night as a stimulus for programming

Dual core CPU 3.0 GHz 4 GB system memory Dedicated graphics card with 1024 MB memory (GeForce GTS 450-class equivalent or better)

Professional Surveillance System User s Manual

Project 2: Character Animation Due Date: Friday, March 10th, 11:59 PM

Foot Locker Web Conferencing Service Guide

Overview Image Acquisition of Microscopic Slides via Web Camera

Transcription:

Lord of the Rings Adventure Game Jim Kleckner 1 and Priscilla Ciaccio 2 1 jkleckne@nd.edu 1, pciaccio@nd.edu 2 2 University Of Notre Dame, Notre Dame IN 46556, USA Abstract. Video game programming is a field of computer science that is constantly growing, developing, and experiencing change. Microsoft DirectX is one of the more commonly used tools in modern video game design, and this project explores the impact that it can have on creating an effective and efficient game structure and display. The Lord of the Rings adventure game that we created uses many DirectX features to demonstrate the integral role DirectX can play in making video game programming manageable to any person who has a solid knowledge of C++ and object oriented programming. 1 Keywords DirectX, blitting, clipping, rasterization, Role Playing Game (RPG), Gamestates, sprites, BOBs, object oriented programming, Artificial Intelligence, random item generation, pathfinding 2 Introduction The Lord of the Rings adventure game that we created explores the possibilities that Microsoft DirectX introduces into the world of video game programming. DirectX uses an object-oriented approach, which was also incorporated into our game to provide maximum efficiency. A very structured approach of game states and substates was necessary to create a solid foundation for the game, and was established before any coding was actually implemented. The creation of our own data structures allowed for an implementation that provided clear and easy access to the many variables used throughout the program. This also helps to make the code reusable so that future developments and modifications to the game can be made as effectively as possible. Algorithms were used to make the game fun and replayable by establishing a basic artificial intelligence for monsters and providing a generator to create random items throughout the course of the game. 3 Microsoft DirectX Microsoft DirectX is a set of low-level application programming interfaces (also known as APIs), which are primarily used for creating games and

2 other high performance multimedia applications. DirectX includes support for many multimedia components, including both two-dimensional (2-D) and three-dimensional (3-D) graphics, sound effects and music, video (.avi) display, peripheral input reading, and multimedia network support. The specific aspects of DirectX that we used in our Lord of the Rings game can be found below, with basic descriptions of their implementations and the main functions that they perform. 3.1 DirectDraw The DirectDraw aspects of DirectX focus on the display of both 2-D and 3-D graphics to the primary output screen. DirectDraw serves as a software interface that provides direct access to display devices, (most commonly a standard monitor), while maintaining the necessary compatiblity with the Windows Graphic Device Interface (GDI). DirectDraw was updated in 2000 to also include the capability of 3D imaging, through the use of Direct3D. The DirectDraw libraries used from LaMothe focused on providing a slightly higher level implementation of the necessary DirectDraw functions. Using LaMothe s functions, we implemented the standard video game display method of double-buffering. The two buffers created are the primary and secondary buffers. The secondary buffer is constantly modified and updated by the program. Writing images to this buffer is known as blitting, and clipping is used to insure that the boundaries of the buffer match those of the output display. The primary buffer exists solely on the screen, and is only modified once during every game cycle, when the contents of the secondary buffer are flipped onto the primary display buffer. Through a process called rasterization, the pixel by pixel displaying of each pixel of the secondary buffer onto the primary buffer, game flow is insured by making sure that the primary buffer is not constantly modified. The process of flipping images creates animation within the program, and as long as the secondary (or back) buffer is being modified and flipped onto the primary surface, the game will continue to run. In the case of highly complex, graphics-intensive games, triple-buffering can be used to insure a smoothly running game, which can be difficult when extensive and continuous blitting of images onto the same buffer is occurring. 3.2 DirectSound and DirectMusic Playing sound effects (.WAV files) and music (.MID files) within a video game is an extremely complex process. DirectAudio functions (found in Direct- Sound and DirectMusic) simplify this process by loading the audio data into memory, streaming to the appropriate output device (usually the speakers), and freeing the used memory upon completion of the audio stream. LaMothe used these DirectX components to create a library which allowed for a much more extensive range of audio manipulation functions, which provided a clear functional interface for the modification of volume, balance, frequency, etc. within an audio file.

3 3.3 DirectInput DirectInput is a set of application programming interfaces (APIs), for input devices such as the keyboard, mouse, joystick, and other multimedia gamepads. The API s read the user input and interpret them into a form that can be accessed by the game, allowing the user to directly interact with the program. In 2000, DirectInput was updated so that force-feedback output support (such as rumble pad support) was also provided. 3.4 DirectShow The DirectShow aspects of DirectX focus on the ability to play and display streaming media such as.avi and.mpeg video files and.mp3 audio files within an application. DirectShow allows for both capture and playback of these types of media streams. A basic knowledge of Component Object Module (COM) programming is needed in order to allocate the necessary information and resources for the video and audio stream output. We implemented a very simple function (VideoPlay()) that utilizes DirectShow and allows us to play an opening video at the beginning of our game. 4 Game Structure The game structure is the most important aspect of any video game. It is the foundation that everything in the program is built on, and the framework within which everything in the game occurs. Before typing even a single line of code, we sat down and established a solid and efficient game structure, which can be most clearly seen in its graphical representation below (Figure 1). As can be seen in Figure 1, the entire game revolves around a central while loop. Update functions are frequently called to set information and variables appropriately, and game states and substates exist to represent the different actions that can occur within the game, as well as the different types of places that can be visited. In addition to the DirectX and Windows initialization functions, another necessary single-call function is the GameShutdown() function, since we must free up and reallocate the memory allocated and used by our program. 4.1 Main While Loop At the core of all modern video games is a while loop which iterates through once every game cycle. This while loop serves as a main function for the entire game. It contains very little coding in itself, but rather calls functions that will perform all necessary game actions. The secondary buffer is flipped to the primary buffer and then rasterized onto the screen once during every iteration of the while loop. It is this programming consideration that results in the need to synchronize the loop to a certain clock speed, so that images

4 Fig. 1. Graphical Representation of Video Game Framework and Foundation are displayed on the screen at constant intervals to insure smooth animation. In our program, we set this synchronization time to 30 picoseconds, and the resulting animation is very smooth and corresponds nicely to the user input. Exiting the main while loop will end the program, since the game foundation will be destroyed. 4.2 Game States Game states are another one of the most important aspects of a video game. A game state can be best described as the current map that a player is on, and the various properties that are associated with it. In certain game states battles can occur, while in others the character is able to talk to people to obtain information, buy items, and heal. The key game states of an RPG, all of which are included in our program design, are described below: Overworld In the same way that the main while loop serves as the base for the entire game program, the overworld serves as a base for all of the game states. The overworld consists of a map, which is an array of TILEs (specifically created data structures, discussed later in Section 7.2), as do the rest of the game states. What makes the overworld significant is that it is usually the largest of the game states, and it connects the other game states through a common world map. A change in game state is initialized by walking onto a specific tile (such as a city, castle, or cave), but typically the character must eventually return to the overworld in order to progress through the overall plot of the game. A screenshot of our overworld can be seen in Figure 2. The city tile can be seen towards the south, which marks a place where a transition in game state would occur. Cities and Castles Cites and castles are each unique game states which are usually important because of the role that they play in establishing and

5 Fig. 2. Overworld Screenshot developing the plot of the game. A defining characteristic of these two game states is that they contain Non-Player Characters, or NPCs. These NPCs are BOBs, similar to the player character (animated sprites - specifically created data structures, discussed later in Section 7.1). NPCs usually have the ability to talk to the player and will often provide clues as to the necessary actions of the player character. A screenshot of one of our cities can be seen in Figure 3. Note in the screenshot another key trait of the city and castle game states, multiple layering. If you look carefully, you can see that the player character appears to be in front of the background tiles and yet behind the tree. This is because all of our maps have 3 layers, which can be most clearly seen in the cities because more detail can be drawn. These three layers are the background layer, which consists of the tiles that are drawn first, the occlusion layer, which consists of any flowers, bushes, the player character, etc., and finally the foreground layer, which consists of the tops of trees and other such things that would block out anything drawn behind it. This creates the appearance of a three-dimensional world through the use of three two-dimensional maps. Caves and Dungeons Caves and dungeons are game states that are integral to an RPG game, because they are the main places that battles can occur. Battles are extremely significant in an RPG, because they provide the main action in the game as well as the means for the player character to develop and gain levels. Battles are discussed in detail in the next section. The dungeon game state also shows how sound transition can be used to create a mood appropriate to the game state that the player is in. By changing sound effects and music upon entering a new game state, the user is drawn further into

6 Fig. 3. City Screenshot - Multiple Layering the game to create a more intense and vivid gaming experience. See Figure 4 for a sample screenshot of one of our dungeons. 4.3 Menus Menus are a very important game substate that can exist within another substate. We used the method of creating a popup window (a BOB in fact, which will be discussed later, in Section 7.1), which is laid on top of a portion of the currently displayed map. This allows the player to realize that just because a menu is accessed, the game does not come to a stop. By creating a popup window that can be constantly viewed as the character moves, a sense of real-time gaming occurs which draws the player deeper into the game. For example, if a player is walking on lava and loses life, he/she cannot simply access the item menu to pause the game and use a healing potion. Rather, he/she must access the menu and use the potion as quickly as possible (and get out of the lava!) to prevent character death. See Figure 5 to view two of the popup menus in our game. Character Information The character information menu contains the important information and statistics of the player character - name, level, experience, gold, strength, dexterity, etc. These stats can help the user to see how strong his/her character is, where its statistical weaknesses lie, how many experience points it must earn to attain the next level, and other such character specific information. Character Inventory The inventory menu provides a list of all the items that the character is carrying or has equipped. When you bring up the menu,

7 Fig. 4. Dungeon Screenshot you can see exactly what your character is wearing, and you also have the ability to scroll through each of the items to see how many of each your character has in its inventory. You can also use an item, such as a healing potion or ether, from this menu. 5 Battles A battle is where a RPG becomes exciting - where the character attempts to defeat an evil enemy in an effort to become stronger, richer, and gain items. There is more to a battle than just attacking, however. By presenting the user with a variety of command options, the battle becomes more than just click and kill and turns into a challenge which can in some cases become a mental puzzle as a player tries to defeat an enemy substantially stronger than his character. Figure 6 shows a sample battle screen, and listed below are the actions that can be performed during a battle. 5.1 Battle Commands: Attack The surest way to damage an enemy is by performing a physical attack - the amount of damage, though, is based on the character s strength. Defend Sometimes you need a break from the action and need to protect yourself from the enemy s next attack. Item There are items that can heal your lost hit points, restore used magic points, or even damage the enemy. All of them can be very useful during a battle. This option will call the useitem() member function of the Item class.

8 Fig. 5. Screenshot of Popup Menu Display Magic Sometimes a magic spell can be used in an attempt to cause more damage than a physical attack would. This comes at the cost of magic points (MP) though, and the character only has a limited supply. This option will call the castspell() member function of the Spell class. Retreat If your character seems incredibly overmatched, or locked in a battle that seems too costly, sometimes it s best to run away from the enemy - be careful though, because it won t always work! Steal Most enemies carry with them items that they will use against your character during battle. The player can attempt to steal these from the enemy, but it doesn t always work! 5.2 Victory When a person is victorious in a battle, there are several things that must occur. First, the music is changed and a sound effect is played to let the user know that he/she has won the battle. Then, the amount of gold and experience earned from the victory is displayed, followed by the items (if any) that are found, followed by the weapons and armor (if any) that are found. Finally, a check is done to see if the character has gained a level, and if so another sound effect is played and the character s statistics, hit points, and magic points are modified appropriately. It is in the awarditems() function of the battle victory stage that the item generation algorithm described in detail below (Section 8.2) is performed.

9 Fig. 6. Battle Screenshot 6 Object Oriented Programming Object oriented programming is essential to creating a real-time video game. Without implementing classes and structures, it would be impossible for a game to execute at a rate that would make the game appear realistic. The importance of object oriented programming can especially be seen in the setup of Microsoft DirectX. The extreme level of object oriented programming found in DirectX indicates to the programmer using it how important it must be in creating a successful video game. In addition to creating a faster running game, it also provides for a reduction in memory cost and reusability of code in future developments. Two of our specific object oriented approaches are discussed below: 6.1 Global Structure: g.struct A global structure, which we named g.struct, is a necessary part of video game design. It is bad programming practice to create global variables, and yet there are many DirectX and Windows functions contained in multiple files that must be able to access the same variables. The g.struct serves as a home base for these variables, and also stores the variables needed to determine proper output display, player position, etc. 6.2 Classes: Items and Spells We created two main classes in our program, Item and Spell. There are numerous types of items that can be used, and numerous types of spells that can be cast, but each type shares identical properties that make it ideal to

10 use object oriented programming. While this can result in a slightly increased implementation, the efficiency that is gained by using this approach is very noticeable and makes a game that flows very smoothly. 7 Data Structures As we developed our game, we noticed that in order to acheive a comprehensible code combined with an efficiently running game, we would need to create our own data structures. The first, the BOB data type, is an extension of a data type known as a sprite, which has long existed in video game programming. The other, the TILE type was made completely of our own design, based in part on the properties assigned to tiles by our map editor (discussed in section 9). 7.1 BOB A sprite is simply an image that is placed on top of a background. Sprites have been used in video game programming for many years, however they are limited when it comes to the properties that they can have and the animations that they can perform, since sprites are usually single, unanimated objects. For our program, we decided to expand on this concept of a sprite and create our own data structure, which we called a BOB. This BOB draws upon the idea of an object drawn on top of the background, and also gives it properties that make it capable of animation. Instead of having a single image that represents it, as a sprite would, our BOB has several frames of animation, and several animation sequences that are used based on what direction the character is travelling or what action is being performed. By adding in variables, we are able to store the proper positions in the animation sequence so that animation frames are accessed in the correct order. Also included in the BOB data structure are properties needed to turn this animated image into a character. Each BOB contains statistics, hit point, magic points, a level, an inventory, spells, and other distinct properties that make it a unique character - something more than just a simple image on a background. The BOB data structure is one of the most important features of our game, because all of the player characters, monsters, and NPCs are BOBs. This data structure provides an efficient implementation that allows for the creation and personalization of an incredible number of different types of characters. 7.2 TILE Every map in our game consists of TILEs. These tiles contain many properties, assigned by the map editor, which allow the game to function realistically. By having a canwalk data member, we can assure that a player is unable to walk through walls. Our random encounter variable assigns a

11 random probability for a battle to occur on each tile, which can be modified to fit the situation. Also, each TILE contains three image variables, one for the background layer, occlusion layer, and foreground layer, to create the appropriate tile imaging. Some tiles also contain a flag that calls the changegamestate() function, such as when you step on a city tile. This TILE data member is very important because it allows for the exploration of different areas within the game. 8 Algorithms As is the case with all programs, we used many algorithms to create a game that is both interactive and provides a high replayability factor. While neither of the two algorithms described below were very complicated to implement, they each provide the game with a distinctly unique aspect that makes the game more fun to play. 8.1 Monster Artificial Intelligence Making the computer a smarter opponent has always been a goal of video game programmers. There isn t much excitement in a monster that always uses the same attack, or can always be killed in the same manner. In an attempt to make the game more enjoyable and challenging, we implemented a very simple monster artificial intelligence algorithm. Basically, it extends the possible actions that the player can perform to the monster also, meaning that the monster can steal from the player, run away during a heated battle, heal himself while injured, or attack and try to finish the player off. By simply checking the monster s hit points, looking at the character s stats, and analyzing the weakness of both, a semi-intelligent monster can be created through a straightforward algorithm that introduces both an element of basic intelligence and an element of random behavior into battles with monsters. 8.2 Random Item Generation One of the fun things about playing an RPG is gaining powerful items that make your character strong and fun to play with. Some games have a linearity to the items that you receive - meaning that you get progressively stronger items until you get the most powerful item right before taking on the big boss. However, the games that I have played and enjoyed the most have been the ones that introduce an element of random chance in the items that you can receive. Therefore, we followed this model in our game. By creating a table of 50 prefixes and a table of 50 suffixes that can be randomly assigned to each weapon, piece of armor, etc., we created innumerable possibilities for different types of items that could be generated. Each of these prefixes and suffixes were then tied to a property that would be given to the item that

12 they were attatched to. Naturally, in our algorithm, we assigned a weight to each of the prefixes and suffixes, meaning the more powerful it is, the less likely a character is to find it. This makes extremely rare and powerful combinations of prefix and suffix properties statistically improbable, but still possible, creating a desire to continue to play and try to find the item that will make your character strong enough to take on anything. 9 Map Editor The map editor was one of the most time-saving developments that we implemented in our program. It is a separate program that creates.map files, which are specifically generated to be read in by the readmap() function of our actual game. The.map files contain all the necessary information for each tile - the image to use for all three of the layers, whether or not a character can walk on that tile, and the random encounter percentage assigned to that tile. This is done through a straightforward and easy to understand DirectX interface which prevents us from having to manually create.map files using a text editor. Another very nice feature of the map editor is that we can see the map as it is being edited, which allows us to determine the changes we would like to make before actually using the map in the game. Fig. 7. Screenshot of Map Editor in Use 10 Future Developments It is hard to say that a video game is ever truly complete, because every day new video game programming techniques are discovered, developed, and

13 improved upon. What we have in our game right now could be called a very rudimentary beta version, in a sense a working skeleton of what we want the actual game to play like. To create a marketable game, which is our goal sometime in the future, several developments would be necessary. The first and foremost of these is developing a plot and integrating it successfully into the game. A main menu to provide a nice interface for the user to interact with would also be a desired improvement. Another aspect that can always be improved upon in a video game is graphics. Since the goal of the project was programming and not graphically oriented, we used images that were on the internet in the public domain, and therefore if we were to create our own game we would have to create graphics and animations of our own. Relating to graphics, we could also give our game a much more 3-dimensional feel by rotating the tile map 45 degrees so that instead of appearing as a rectangle, it would appear as a diamond. This is known as an isometric approach, and creates a background which, when used with Direct3D, can establish a strong sense of depth within a video game. A final improvement that we hope to add in the near future is a pathfinding algorithm. Using a depth-first search to calculate the shortest and quickest path between the player s current position and desired destination would allow the user to be able to direct character movement using the mouse, which is the goal of most modern video games. 11 Conclusions In summary, we have found DirectX to be a very beneficial and worthwhile tool that makes video game programming in Windows a very rewarding experience. DirectX handles many of the low level details that many computer programmers feel they should not have to worry about, and provides a very efficient way to take advantage of the benefits that Windows can offer when creating a real-time interactive video game. DirectX is constantly being updated, with a new and improved version coming out every year, and each revision brings new and exciting possibilities into the world of video game programming. We are looking forward to seeing these developments and working with them in the future. 12 Appendix 1: Files Below is a list of all of the files that we use in our program, 21 in all, and a brief description of their function:

14 Filename Description GameInit.cpp Initializes DirectX and game variables GameMain.cpp Contains the master while loop - the main function of the game GameShutdown.cpp Called on program exit - reallocates memory used by program WinMain.cpp Needed to initialize handles and instances used to display to Windows screen Globals.cpp Contains all the LaMothe functions that we used Globals.h Header file for the LaMothe functions, also contains the global struct Battle.cpp Contains all battle functions and information BOBTYP.cpp Contains all of the BOB (extended sprite) implementation BOBTYP.h Header file for the BOB class GameState.cpp Contains all functions regarding game state and their changes Input.cpp Contains all functions and information that analyze user keyboard input Items.cpp Contains all functions and information regarding items and their uses Items.h Header file for the Item class Map.cpp Reads in the map and the properties for each tile Output.cpp Blits the appropriate images and text to the secondary surface Player.cpp Contains functions for creation and animation of the player Sound.cpp Contains all sound functions and information Spells.cpp Contains all spell functions and information Spells.h Header file for the Spell class playwnd.cpp Contains all of the video playing functions playwnd.h Header file for the playwnd class 13 References 1. Microsoft DirectX SDK 8.0 Documentation. Visual C++ Version. 2000. 2. LaMothe, Andrew. Tricks of the Windows Game Programming Gurus. 1999. 3. Farrell, Joseph. Game Programming Genesis. 2000. 4. www.gamedev.net: Resources for Windows Game Programmers. 2001. 5. Stroustrup, Bjarne. The C++ Programming Language. 1997. 14 Biographies 14.1 Jim Kleckner Jim Kleckner is a junior Computer Engineering Major at the University of Notre Dame. He is originally from Madison, Wisconsin, and currently lives in St. Edward s Hall at Notre Dame. He is involved in intramural athletics and sings in the Notre Dame Liturgical Choir. He hopes to attend either MBA or graduate school at Notre Dame, and in the long term work as a computer game designer for a company such as Blizzard or Black Isle.

15

16 14.2 Priscilla Ciaccio Priscilla Ciaccio is a junior Math Major at the University of Notre Dame. She is originally from Staten Island, New York, and currently lives in McGlinn hall at Notre Dame. She is an avid Mets fan, and was glad that the Yankees choked against the Diamondbacks. She is involved in intramural athletics, and enjoys playing in the bookstore basketball tournament. She is also a selfproclaimed geek who has only missed two classes in her college career, and hopes to be able to apply math in her future job.