Reference no: EM133698275
Professional Software Development
Programming Assignment 1- Implement a Zork-style text adventure
Part 1: The hero's journey
For this part of the assessment, you will:
- Generate a UML diagram describing your solution
- Make a "map" containing at least 10 rooms
The provided code, purely as an example, has a map with three rooms. You may use those rooms as-is or delete them, but your final game should consist of a minimum of 10 rooms.
- Implement "look" functionality
In ZOOrkEngine.cpp, there is a method handleLookCommand(arguments) which, at this point, just prints out that the functionality is unsupported when a user attempts to look. Looking at an object should print its description; looking without a specific target should print the description of the current room.
- Implement take/drop and an inventory system
Also in ZOOrkEngine.cpp, there are methods handleTakeCommand(arguments) and handleDropCommand(arguments) that should enable a user to move an Item from the Room's inventory to the Player's inventory and vice versa. Implementing this functionality will also involve changes to, at a minimum, Player.h/Player.cpp and Room.h/Room.cpp.
Part 2: Choose your own adventure
For this part of the assessment, you will extend the functionality of ZOOrk to enable more interesting gameplay. You may choose to extend the game in any way you see fit - as long as you document it in your reflection document, see Part 3 below - but if you're stuck for ideas you could try one or more of the following:
- Add one or more new commands to the ZOOrkEngine enabling the player to perform new and exciting actions.
- Add other types of Characters that the player can interact with (possibly through new ZOOrkEngine commands...).
- Add a class Door, deriving publicly from Passage, that requires the player to possess a specific Item to open it.
- Add a system of status effects/tags such that the user can only perform certain tasks or access certain locationswhen they possess a certain characteristic (i.e. "huge", "tiny", "flying", etc.)
Part 3: There and back again
You will submit, in addition to a ZIP file containing your code files, a short reflection document. This document should comment upon:
- What AI tool or tools you employed,
- What prompts you provided to those tools,
- How and where those tools provided helpful suggestions,
- How and where those tools provided unhelpful suggestions,
- What, if anything, you implemented to satisfy Part 2, and
- What you learned from this process.
Programming Assignment 2 - Design and implement a raytracer
Part 1: A clear vision
For this part of the assessment, you will:
- Generate a UML diagram describing your solution (20 marks)
- ImplementSphere and (infinite) Plane Objects (10 marks; 5 marks each)
Implement the code for determining whether a Ray hits a Sphere or an infinite Plane. (A Plane has no bounds, unlike, say, a Quadrilateral or a Triangle. These are more complicated to implement and would make sense as extensions for Part 2.)
- Implement Reflective and PureDiffuse Materials (10 marks; 5 marks each)
An Object (for example, a Sphere or a Plane) will have a material that determines the Color3 of a Ray that hits it. Reflective (mirror-like) Materials will simply generate a new Ray; PureDiffuse Materials will simply stop the ray and assign a Color3. (Actually Diffuse materials are a much harder case, they integrate an entire hemisphere of Rays to determine the color of the surface. This would make sense as an extension for Part 2.)
- Add antialiasing
The image on the left demonstrates "aliasing", also known as "jaggies". The image on the right is a bit blurrier, but smoother. This is the effect of antialiasing. Add the option to turn antialiasing on or off in your raytracer.
Part 2: Tracing your path
For this part of the assessment, you will extend the functionality of your raytracer to enable more interesting images, more flexibility, or better performance. You may choose to extend the game in any way you see fit - as long as you document it in your reflection document, see Part 3 below - but if you're stuck for ideas you could try one or more of the following:
- Implement bounding volumes to increase performance. (Axis-aligned bounding boxes, or AABBs, would be a good place to start.)
- Enable Iterating over pixels in an image, or rays in a pixel.
- Enable image textures on Objects.
- Enable procedural textures on Objects.
- Enable area lights.
- Enable "real" diffuse surfaces.
- Enable "glossy" surfaces.
- Enable "refractive" surfaces.
Part 3: Ray reflection
You will submit, in addition to a ZIP file containing your code files, a short reflection document. This document should comment upon:
- What AI tool or tools you employed,
- What prompts you provided to those tools,
- How and where those tools provided helpful suggestions,
- How and where those tools provided unhelpful suggestions,
- What, if anything, you implemented to satisfy Part 2, and
- What you learned from this process.