1 / 12

Blue: 2-D Multiplayer Tank Game using PLT Scheme

"Experience the thrill of a 2-D multiplayer tank game developed in PLT Scheme. Play with friends and compete to become the ultimate tank commander. Explore different movements, synchronize data, manage collisions, and enjoy added features like sprites, chat, animations, and menus. Developed as a senior project, this game offers a clean, expandable, and readable program for learning about multi-threading and TCP/IP sockets."

ddelgado
Download Presentation

Blue: 2-D Multiplayer Tank Game using PLT Scheme

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. blue A 2-D, multi-player tank game developed in PLT Scheme ~ ~ ~ Ben VandenBos, Tim Reeves, Justin Hall, and John Ericksen ~ ~ ~ Senior Project - CS496 Spring Quarter 2003

  2. The Goal: Our goal was to develop a basic 2-D multiplayer tank game using PLT Scheme within a group development environment. The main idea was to make the program as clean, expandable and as readable as possible so the CS211 and CS311 classes could use ‘blue’ as a tool to learn about multi-threading and TCP/IP sockets.

  3. Our Beginning Thoughts: • We needed to figure out how to do the following items: • How to determine where each tank is on the screen • How to control the tanks • How to synchronize each client’s data • How to draw to the screen • How to manage collisions (bullets and tanks, tanks and tanks) • How to increase playability of the game • We also wanted to elaborate on the game with additional features: • Sprites • Chat • Animations • Menus

  4. Movement: • The two things we needed to look at: • Keeping network traffic to a minimum • Everyone views the same movements Our Solution: To keep track of each player movement as a vector with the following elements: (x, y, r, m) x, y : initial coordinates of movement change r : initial angle of movement change m : type of movement We then had to use this vector to calculate where each tank is during a given movement based upon time.

  5. Types of Movement: • Up • Down • Left • Right • Up & Right • Up & Left • Down & Right • Down & Left • Stop x, y, r These movements are sent to the server along with x, y and r values of where the movement changed. This happens every time a button up or button down occurs on the up, down, right and left arrows. When a client receives a change in the movement of an object it uses the timestamp of when the change occurred to calculate the “current” x, y, and r values.

  6. Client / Server Architecture • The server and client: • Listens on the given port for S-expressions • Checks the validity of the input S-expressions against available functions • Evaluates S-expressions after checking command validity • The functions available to the server simply make it a synchronization agent of current objects for all of the clients. • The functions available to the client help update the list of current objects. New (x, y, r, m) Current Objects: ((0 tank) (1 tank) (2 bullet)…) Tell-all synchronize (x, y, r, m) Functions: add-object remove-object update-object Functions: tell-all-except Current Objects: ((0 tank) (1 tank) (2 bullet)…)

  7. Drawing to the Screen: • To begin we used simple wire frames with an angle indicator. These are simply drawn using draw-* functions in the MrEd graphics library for PLT Scheme. • To streamline screen updates each object on the screen is updated through a thread named *refresh-thread*. • To cut down on screen flickering we implemented double buffering.

  8. Collisions: • Each client’s tank (the tank the client controls) checks if it enters the boundaries of another object. Bullet collisions are simply checked by the tank being hit. • After a collision is detected the server is notified and all instances of the objects involved in the collision are destroyed. All the clients are then synchronized. • For playability the given tanks are then respawned in a new location. • The fact that every local object checks if it crosses the boundaries of another cuts down on the overhead of checking for collisions between every single object.

  9. Playability: • Screen follows the client’s tank by panning with bounding box: • Allows users to move around the tank universe and be able to see where and how the tank is moving at all times • Arrows show where other tanks off the screen are: • This makes sure that you cant loose track of where other tanks are in the universe (which can be annoying)

  10. Added Features: • Sprites: • Instead of drawing wire frames, functions were designed to accommodate sprites used to represent the tanks and the bullets. • Used a color mask to allow transparency to see the background • Chat: • Simply a call on the server that tells all the clients to add the given text from the given person to the command window to the side. • Animations: • A recursive call around a draw-bitmap-section function • Menus: • Before implementing the button up and button down events, the menu was catching the button up event. This event had to be forwarded in order to allow full control. • Menus were made for connecting, exiting, and switching between wire frame and sprites.

  11. Development Programs: • CVS: • Allows version synchronization during development • Puts a safety net in place, in the case that you need to roll-back the code to a previous version • Essentially allows multiple people to work on a project • Provides ability to show color-coded differences between two pieces of code • We also used a web-based interface to maximize usability • DrScheme: • Fully featured Scheme editor and interface to PLT Scheme • Mailman: • Most of our communication regarding this project occurred over e-mail through the bespin.org “cs396” mailing list via Mailman

  12. Limitations: • Real collisions where tanks stop and react appropriately is a very difficult problem and requires a fairly advanced algorithm • The main inconsistencies in ‘blue’ are caused by the time it takes to update the clients over a network connection (lag is an untamable beast) • Due to the limited number of available threads on the average desktop PC, the is theoretically limited to roughly 40 simultaneous players • Given more time and research these problems could be hammered out

More Related