Make a client to play TerraTower

Group

  1. You may work in groups of 2-4
  2. If you check out a phone you must have a group of 3 or 4

Game Mechanics

  1. TerraTower is a physical variant of a tower defense game (at least inspired by such games). It will be played during the final exam slot on Thu, Jun 12, 8:00-10:00am. Attendance is required for everyone in the class.
  2. The goal of the game is to capture as much territory as possible. The game board will be a rectangle centered in Aldrich park that extends to the ring path around the park. The ring path is circumscribed in the rectangular game board and oriented in a N/S E/W manner.
  3. The game is designed to last 50 minutes and we'll play two rounds. In the first round each team must be on foot, use one client and only wifi provided by the UCI campus. In the second game it's a free for all. You can try anything short of making physical contact with another team to gain an advantage.
  4. The basic action of the game is the placement of a tower. Players may place 1 tower every 5 minutes. Every minute that the tower is placed it claims territory in an increasing spread from where the tower was placed. Once territory is claimed it can only be taken back by clearing the territory first.
  5. Players may also place a bomb once every 5 minutes. A bomb has a 5 minute fuse before it blows up. A bomb that blows up destroys any towers around it and clears the claim on the territory in it's range of effect. Bombs do not blow up other bombs.
  6. When the territory spread of two towers meets, they form a boundary at that location and the spread halts until something else happens in the game
  7. When a tower is destroyed, the territory that it claimed remains in the possession of the original team that placed the tower, but the territory can now be taken over by competing towers as they spread. (i.e. once a tower is destroyed it can no longer maintain its boundary)
  8. Located in the park are 10 codes. The codes can be entered to increase the rate of tower placement, bomb placement and to decrease the bomb fuse time. Each code does one of these things and is described on the paper with the code. The code is a ten digit alpha-numeric case-sensitive string.
  9. Players can see who owns what territory, and where their bombs and towers are, but they cannot see opponent towers or bombs. The location must be inferred from game board effects and physical observation of other teams.
  10. Aldrich Park does not have wi-fi in the center, only on the edges. In order for the towers to be placed and bombs to be dropped, players must run in the park with their smartphone client, record the location of the spot where they wish to build a tower or drop a bomb then go to the edges of the park to find wifi to record their action with the game server. The action takes effect when the game server receives the message, not when the location is recorded in the park.

Programming Assignment

  1. Write an Unity application to play the game
  2. There are 4 functions to support
    1. Build tower
    2. Drop bomb
    3. Enter code
    4. Visualize the board
    5. View leaderboard
  3. Each of those functions requires a "World_Name" and a "World_Password". These are provided by the game master and are entered by the team on their client. They are the same for everyone playing a game.
  4. The first 4 functions also require a "Team_Name" and a "Team_Password". Those are provided by the game master and are entered by the team on their client. They are different for each team.
  5. Building a tower and placing a bomb require capturing the location of the smartphone, storing it and then uploading it to the server.
  6. Entering a code requires typing the code on your client, and then uploading it
  7. How to visualize the board is open to the players and may be done as an aerial view or an AR view (potentially).
  8. The leaderboard is a list of which team owns the most territory at a given moment
    1. Code is provided for a NetworkHelper here: code
    2. This is an C# library that you can import into your workspace and include in your project.
    3. Code is provided for json as well here: MiniJSON.cs. This just supports the NetworkHelper. You shouldn't need to call it.
    4. Code is provided for location here: MyLocation.cs. You'll need to walk through the logic and add the appropriate pieces to interact with your UI.
    5. Gyro Controller code here: GyroController.cs
    6. All the rest of the code can be found at github here
  9. You should support an "upload" function, which will send all the recorded build, drop commands and code entry commands to a server for execution
  10. The game server will be provided
  11. You should not expect to be able to see the state of the game anywhere except through your client
  12. We expect the coding will take about 8 hours

Tutorials

  1. Introduction:

  2. Location:

  3. Setting up a gyroscopic camera and making a world to view:


  4. Overview of the Network Helper

  5. Description of the GUI template

Play

  1. The game server will be up for testing. Use the world name "MiddleEarth" and the world password "Bilbo". The team names and passwords will be "a" - "z" and passwords will be the same. Please note other people may be play testing with your letter at any given time. The test game world will be wiped clean periodically.
  2. We will do an optional play test on Wednesday from 10am to noon and from 1:30 to 3:30pm

Document

  1. Submit your .apk, a 1 or more page .pdf description with your team name and ids and a narrative of how the experience went with building the game and/or playing the game. Submit the documents to a EEE drop box
  2. Evaluate your group using this quiz.
  3. Your grade will be adjusted based on how your group rate's your performance.
  4. Your grade will be adjusted if you win the game using minimal trickery.

Extra

  • Due date: 06/13 11:59pm

Rubric

  • 10% Description
  • 30% Does it run?
  • 25% Does it interact with the server?
  • 15% Place tower/Place bomb
  • 5% Upload tower/bomb/code
  • 5% Leaderboard funcationality
  • 10% World rendering
  • -5% if world rendering screwed up on load
  • -5% if lat/long capture is messed up
  • -5% if gui entry is messed up
  • -4% if parameters to network helper are screwed up