Final Project Description

About the game programming project:

  1. The completed project does not have to be a full-blown game. Actually, it does not have to be a "game"--it is a programming project. Making it a game project may make the project more fun to program, but it does not have to be a game. The key criteria are problem-solving and programming challenges.
     
  2. The project will be graded based on (i) the programming challenges of the project, (ii) how you tackle the challenges, (iii) the extent of completed work, and (iv) use of best practices and good coding styles.
    Thus,
    • Choosing an extremely challenging project but not being able to get any part of your code working will mean a very low grade.
    • Completing an easy project does not mean a high grade either.
       
  3. What I mean "programming challenges" of the project are the analytical thinking and problem-solving required for the programming task, not just direct copying and pasting the code from the existing labs and homeworks.
     
    A game that is fun to play does NOT necessary mean it has enough programming challenges as a project for this course.
     
  4. Programming criteria:
    1. Have to use OOP (Object-oirented Programming). This means you need to create classes and objects. Even better if you can apply inheritance and polymorphism.
       
    2. Have to use good coding styles--you know...the naming convention, the semi-colon, indentation, space or no space,...
       
    3. Best practices in coding and working with Flash
       
  5. Your project can be based on any of the labs and extent it. But again, it needs to have some new programming challenges and problem-solving, not just copying and pasting the code from the labs with simple modifications. "New" here means something that has not already been done exactly in the labs or programming assignments in this course.
     
    For examples:
    • Extending the tic-tac-toe lab:
      • Just turning it into a Connect Four is NOT what I have in mind.
      • But what you may think about is to add the feature of the computer player that has some levels of artificial intelligence to prevent the player from winning or actually try to win.
         
    • Extending the 3d fly-through lab: what you may think about:
      • add code to make something move (across, towards you and away from you) in addition to static trees, and you can interact with them
      • add code to make a hunting game. For example, there may be animals in the wood. If you are close to an animal, say a duck, and move too fast towards it, it will fly away.
      • add code to turn it into a 3d shooting game so that pressing a key makes a movieclip instance representing a bullet fly forward into the 3d space, and also add code to do 3d collision detection between the bullet and the target (this won't be just hitTestObject() or hitTestPoint() anymore, but it is not as hard as you may think)
      • combine 3d fly-through with the 2d side-scrolling platform game (similar to the concepts in the soon-to-be-released Mario game for Wii, called Super Paper Mario; look up on the Web to see how it looks with the 3d and 2d are combined in this game)
      • turn it into a racing game by adding timer, opponents, traps, hoops, and even add collectible items.
        This is a situation where OOP with inheritance and polymorphism works well.
         
    • Extending the platform game lab:
      • Just adding levels with different platform and item design is NOT what I have in mind.
      • But what you may think about:
        • add different characters (such as villains) that can do similar things as the hero (such as walk and jump) and different things (benefit or damage) to the hero
          This is a situation where OOP with inheritance and polymorphism works well.
        • add more than 2 designs of platform, and make each shorter than the stage width, so that at any moment, the platform you see on stage is made up with 2 different designs.
          This will change the code you wrap (or "recycle") the two platforms in the endless scrolling in the lab. But you can use the similar thought-process to analyze the different scenarios and figure out the code.
           
  6. Possible project ideas or games that you can draw ideas from:
    • Show sorting a deck of cards
      You have learned three sorting algorithms. You can trace out the sorting process of an array in quizzes. So, now, how about programming to show the sorting algorithms visually using a deck of cards?
       
    • Breakout
      This can be based on the Pong game. The OOP will work well with creating those many bricks.
       
    • Battleship
      You will need to use 2d arrays.
       
    • The old arcade of Donkey Kong
      Very much like the platform game lab, but you need to have barrels rolling down onto each platform level.
       
    • Space Invader
       
    • Frogger
       
    • The early versions of Zelda games that use the top-down view, have exit and entrance from one room to another
      (A good situation to apply OOP: Each room is an object instantiated from the Room class.)
       
    • Tic-tac-toe with a conputer player (see above suggestions about extending the labs)
       
    • 3d first-person shooting game (see suggestions above about extending the labs)
       
    • 3d first-person racing game (see suggestions above about extending the labs)
       
    • Super Paper Mario (see suggestions above about extending the labs)
       
  7. Choose a project that you truly want to program. You will have more fun programming it and will get more satisfaction at the end. Don't choose something only because you think it will be easy. No matter how easy or how difficult the project is, there will be moments that you (anyone too, not just you) get stuck due to logical errors or silly typos. These moments will be especially frustrating if you don't really like the project.
     
    If you have project ideas that you are interested in but don't know how to go about programming it now, don't drop your ideas--one of the purposes of doing the project is to learn something new anyway. Talk to me. I can tell you if it is doable as a class project and I can give you pointers. Besides, the project does not have to be a "full-blown" game. I will give you feedback about the key programming challenges you need to have tackled by the time you turn in the project.
     
    That's why we will have individual meetings to discuss and decide your project idea. Have several ideas ready when you come talk to me.