SCC110: Software Development Term 3. Programming Project.
Project Title:
Moodle Submission Deadline: Assessment Mode:
Aims
Programming Project
16:00 Friday Week 25
IN LAB ASSESSMENT IN YOUR OWN WEEK 25 LAB SESSION
In this final term of your first year, there is a single programming task a project that is designed to bring together many of the programming techniques that you have learned over the year. This project represents the final piece of practical coursework for SCC110.
You have a choice of which project to undertake, to be selected from the three choices below, and you need to pick just one of these projects. Read each of them carefully before choosing which project to undertake. Please note that the projects state which programming language you must use for that project (either C or Java).
SCC110: Software Development Term 3. Programming Project.
Assessment
This work will be assessed through a practical demonstration and code inspection of your work.
You will be asked to present your work in your Week 25 lab session. Be prepared to take the lead in demonstrating your project, and to answer questions about it posed by your markers.
You MUST submit your code to Moodle by the advertised deadline.
You MUST demonstrate your work IN YOUR OWN LAB SESSION.
The standard University regulation on permitting late submission of coursework DOES
NOT APPLY TO THIS COURSEWORK ASSIGMENT.
FAILURE TO ADHERE TO THE ABOVE WILL RESULT IN A FAIL MARK (F4) BEING RECORDED.
Marking Scheme
Your work will be marked based on the following four categories. Your final grade will be determined based on a weighted mean of these grades according to the weighting shown in the table below.
Project Functionality
See individual project descriptions below for indicative levels of the functionality required.
50%
Code Structure and Elegance
Modularity of code
Use of appropriate data types and libraries
Use of appropriate language constructs (arrays, loops, functions,
methods, classes)
20%
Code Style
Appropriate comments, code indentation
Appropriate name/scope of variables and functions / methods
10%
Project Presentation
Practical demonstration
Code review
Ability to answer questions
10%
Use of GIT version control
Clean and regular commits
Appropriate commit messages
10%
In all cases a grade descriptor (A, B, C, D, F) will be used to mark your work in each category. The following sections provide an indication of the level of functionality expected.
Markers can also recommend the award of a distinction (+) category overall if they feel a piece of work exhibits clearly outstanding practice. If you feel your work warrants a distinction category, it is your responsibility to ensure that the marker is made aware of why.
SCC110: Software Development Term 3. Programming Project.
Project Title: Project 1: Missile Command Language: C
Project Overview:
Computer games are excellent way to practice computational and algorithmic thinking, and stretch your programming ability, especially in C in this case. The aim of this project is to recreate your version of an arcade game classic: missile command!
Missile Command was developed in 1980 during the golden age of arcade games. The game logic is simple. The player must defend six cities from missiles raining down from the sky. The missiles can themselves sub-divide making it important to intercept the missiles early in their flight path. The player destroys the missiles by launching their own counter-missiles of which they have a limited number. Points are gained by reaching the end of a round with bonus points for intact cities and unused counter-missiles.
Figure 1: A Screenshot of the Atari version of Missile Command
If you are unfamiliar with the game, you can play a version of it here:
https://my.ign.com/atari/missile-command
Project Requirements:
Your task is to implement a working single player version of a game based on Missile Command. A fully featured implementation of the game is a lot to ask in the time available, so the game can and should be simplified to make the problem more tractable. Its wise to start conservatively with the basic functionality and add more features should the time be available. Minimally, you should aim to create a game that should:
Display a landscape at the bottom of the screen with six cities and one or more missile bases.
SCC110: Software Development Term 3. Programming Project.
One or more missiles are launched by the attackers and descend to the bottom the screen.
The player can control the a cursor that they use to aim their counter-missiles.
The player can launch a counter missile targetted at the cursor position.
Collisions between the counter missile and the incoming missile are detected and incoming
missile destroyed.
Keep score.
The game can be won/lost (all cities destroyed).
Advanced features (sub-dividing missiles, multiple missile bases, space-ships, increasing speed of
missiles etc.) can be added for more credit as time allows (see the marking scheme).
Getting Started
Youll need to do some research to learn the rules of operation of the game, and youll need to learn how to use a library of C functions that can assist you in drawing ASCII based graphics to the screen the ncurses library. To get started, we recommend that you:
Watch the YouTube video of the game to get an idea of how it works: https://www.youtube.com/watch?v=nokIGklnBGY
Make notes on the features of the game you can see what is displayed on the screen and how does it change as game play unfolds?
Read the introduction to the ncurses library (sections 1-1.3): http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/intro.html
Look back over term 1 and remind yourself of how use the Linux development tools, how to edit, compile & debug C programs.
Try the hello world example: http://tldp.org/HOWTO/NCURSES-Programming- HOWTO/helloworld.html youll need to #include
gcc -o
Now try to create a C program that uses the curses library to let you control the position of a symbol (e.g. *) on the screen using keyboard input. Tips: lookup mvprintw, getch and timeout in the man pages/online. See the example in the slides.
SCC110: Software Development Term 3. Programming Project.
Marking Scheme:
Marks will be awarded according to the marking scheme shown at the start of this document. Marks for the Functionality section will be awarded based on individual merit, but the following table gives an indicative overview of the level of functionality expected for each grade band:
A:
Working program that meets the criteria for a B, plus:
Richer game (demonstrating good design and algorithms) e.g. sub-dividing missiles, multiple missile bases, space-ships, increasing speed of missiles, high-score table etc.
B:
Working program that meets the criteria for a C, plus:
Missiles can be destroyed by counter-missiles
Scoring reflects counter-missiles left
Game resets at the end of a level
C:
Working program that meets the criteria for a D, plus:
Counter-missiles can be launched
Cities are destroyed when hit by a missile
Score updated when cities are destroyed
Score displayed on the screen
D:
Working program that:
Basic single player game including:
Display of landscape, cities etc.
Incoming missiles descend from the sky
F:
No working program demonstrated, or program does not meet any requirements listed above.
SCC110: Software Development Term 3. Programming Project.
Project Title: Project 2: Graph Modelling and Traversal Language: Java
Project Overview:
This project is based on the graphs discussed in SCC120 and will give you an excellent opportunity to explore building different data structures. The process of building these data structures will also aid in your understanding of both data structures and object orientation. However, it is not recommended if you dont take SCC120!
The aim of this project is to build a graph data structure and, using the GameArena classes, visualise your graphs. New Arrow, Line and Text classes have been added to GameArena for this purpose, so be sure to get the latest GameArena classes before you get started. Youll find the latest version in this git repository: https://github.com/finneyj/GameArena
Once completed, your program should enable users to create multiple different graphs, visualize them on screen, and traverse the graph.
SCC110: Software Development Term 3. Programming Project.
Project Requirements:
Your task is to implement and visualise a program that can represent a graph. Your program should both internally reflect the graphs nodes and arcs and visually display them using the GameArena classes you saw in Term 2. The design of the object structure for this project is quite important, so this would be best started with a design on paper. Feel free to discuss your ideas with TAs in the labs. You should then slowly build your program up. Initially, you will need to:
Create the classes relevant to representing a graph data structure
Use GameArena to visualise the relevant elements of the graph, with a Ball representing a
node and a Line representing an arc, and so on.
Link the visualisation in GameArena with the creation of the relevant graph elements and
ensure that the internal and visual structure are always identical
Create a textual output that is capable of printing the state of the graph and its components.
For example, each node should display its name and a list of other nodes it is connected to.
With these features in place, you can then progress to more complex elements of the graph representation. More advanced features include:
Self-arcs
Directed graphs, using arrows instead of lines and having a directional component between
nodes
Two-way arrows
The ability to visually traverse the graph breadth first, and to print the result
The ability to visually traverse the graph depth first, and to print the result
SCC110: Software Development Term 3. Programming Project.
Guidance:
To aid in the testing process, we have provided a number of graphs to build in your program, and ultimately to traverse. You should start by building graph1, which is easier, and slowly work your way through the others. The nodes do NOT need to match their placement in the diagram, but they should be equivalent and appropriately labelled.
Graph 1
Graph 2
Graph 3
Graph 4
Graph 5
SCC110: Software Development Term 3. Programming Project.
Marking Scheme:
Marks will be awarded according to the marking scheme shown at the start of this document. Marks for the Functionality section will be awarded based on individual merit, but the following table gives an indicative overview of the level of functionality expected for each grade band:
A:
Working program that meets the criteria for a B, plus:
Is able to undertake a depth first traversal of Graph 5.
Is able to undertake a breadth first traversal of Graph 5.
Can demonstrate the order in which nodes are visited, both visually and
textually to the command line.
B:
Working program that meets the criteria for a C, plus:
Can represent, and visualise a directed graph (example Graph 3)
Capable of visualising a self-arc on the graph (example Graph 4)
C:
Working program that meets the criteria for a D, plus:
Visual and internal representation of graph are properly linked
Capable of representing example Graph 2
Able to print out nodes and their connections
D:
Working program that:
Shows nodes and arcs on the screen and can visualise Graph 1
Has a sensibly chosen set of classes to represent the graph
F:
No working program demonstrated, or program does not meet any requirements listed above.
SCC110: Software Development Term 3. Programming Project.
Project Title: Project 3: Twooter Client Language: Java
Project Overview:
Following the global success of the Twitter social media platform, you have recently been recruited as a Software Engineer for a rival, object-oriented, social media platform called Twooter. The Twooter executives want you to build the end-user Twooter application. So that the application can be run on any platform, youve been asked to build this using Java and the Swing APIs for graphical components (or alternatively for the daring, JavaFX).
Once complete, your application will be able to send real messages between you and other students on the course. Moreover, a single Twoot can contain a lot of data, allowing the future possibility of rich messages, with fonts, emoji, and images! Exactly how you do this is up to you
SCC110: Software Development Term 3. Programming Project.
Project Requirements:
All the computer networking software necessary to send twoots has already been written by the Twooter team and has been made available to you as a set of Java classes. Your task is to develop Java software that uses these classes to create a working application capable of sending and receiving messages, and more advanced features to improve the user experience. You will find these classes and associated JavaDoc documentation alongside this specification document on the SCC110 moodle page. Remember to read the API documentation thoroughly!
The Twooter website http://twooter.johnvidler.co.uk/ provides a simple view of the Twooter service, including the last few messages in the system along with a list of known users. However, it doesnt have any way to register users or post messages. This must be down through the application you create, using the Java classes you have been given.
You have been given these specific requirements:
Your program should have a graphical user interface (GUI) built using either Java Swing or JavaFX technologies.
Account creation and sign-in should be done via his GUI. Ideally the user experience should be smooth for creating new users and continuing with a pre-existing user name.
Once signed up, unless the account expires, your application should re-use the same credentials even when the program is restarted.
Once an account has been created, it needs to be refreshed periodically to prevent it expiring. Your application should do this automatically.
The program should be able to both post and read messages.
There should be a way to retrieve the latest Twoot messages, retrieve the specific users
messages, and retrieve messages containing specific #tags.
Your application should connect to the live feed service and reflect the live data on the GUI
interactively.
Some mechanism should be provided to identify and search for messages via #hashtags..
Have some way to see if specific users have posted new things (following users)
Remember this is an individual project exercise, so you must not work in a group on this project. However, you may collaborate with others to agree on a format to post messages to the service. The way your application handles the messages and shows them to the user must be your own work.
SCC110: Software Development Term 3. Programming Project.
Advanced Features:
You are free to implement any advanced GUI features, but just to spark some ideas, here are some ideas you might want to consider if you want to stretch yourself:
Take advantage of the large message size of Twoots to create a rich media experience. Twooter supports up to 1MB of text in each message (1048576 bytes!). Consider how this relatively large amount of data could be used to enable additional features (even non-text) in your posts.
Perhaps implement some way of replying to a Twoot. The service has no existing way of doing this, but as messages have a unique ID, it is possible to do this in the messages themselves. Consider, for example, how having [reply:some-other-message-id] in your messages might work. Naturally, having a user-friendly way to show this in your GUI is also important here.
Provide an icon (or icons) in the system taskbar that allows the user to get to the application even after closing all the windows, or notifications on the desktop for new messages from people the user follows.
Guidance:
The Twooter classes that you have been provided with deal with the network connectivity, and the JavaDoc for this can be found alongside these classes in the zip file on moodle. The classes are part of a twooter package, so youll need to keep the given .class files in a folder called twooter (must be lowercase) in the same place as your own .java files. The file structure should look something like the following:
SCC110: Software Development Term 3. Programming Project.
Depending on if youre working on your own computers or the lab machines, you may need to compile with the additional -cp flag set to the projects root directory (which tells the compiler where to find additional classes). Youll know if you need this if the Java compiler complains about not being able to find any of the twooter classes. An example of how to use the -cp flag is shown below. This should be executed in the folder containing your .java files as normal (the TwooterProject folder in example above):
javac *.java -cp .
In your own Java classes, youll also need to state that you want to be able to use the classes from the twooter package, so be sure to add the matching import statement to the start of your java files:
import twooter.*;
The Oracle Java SDK documentation includes many examples of Swing usage and describes in detail how the components work. You might want to pay particular attention to classes such as JList and ScrollArea for live updates: https://docs.oracle.com/javase/9/docs/api/index.html?overview- summary.html
If you want to use the more sophisticated JavaFX library, you might want to view the documentation for the JavaFX classes here: http://www.oracle.com/technetwork/java/javase/overview/javafx- overview-2158620.html
SCC110: Software Development Term 3. Programming Project.
Marking Scheme:
Marks will be awarded according to the marking scheme shown at the start of this document. Marks for the Functionality section will be awarded based on individual merit, but the following table gives an indicative overview of the level of functionality expected for each grade band:
A:
Working program that meets the criteria for a B, plus:
Additional GUI features (scrolling, animation, desktop interactions, etc.)
Handles all live feed messages, updating the GUI or data structures as
appropriate
A working implementation of one or more of the `Advanced Features
B:
Working program that meets the criteria for a C, plus:
Have some way to see if specific users have posted new things (following users)
Connects to the live feed service and reflects the live data on the GUI interactively
Provides some mechanism for identifying and searching for #hashtags
C:
Working program that meets the criteria for a D, plus:
Maintains a user token across program restarts
Refreshes the users token as required
Can post multiple messages, and retrieve them by ID
Maintains a list of known or saved users
D:
Working program that:
Connects to the web service and creates a user
Is able to post messages
Is able to read the latest messages
Has some form of graphical interface
F:
No working program demonstrated, or program does not meet any requirements listed above.
Reviews
There are no reviews yet.