代写 C data structure algorithm Scheme game GUI html Java javaFx Spark compiler graph software network SCC110: Software Development Term 3. Programming Project.

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. It’s 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
You’ll need to do some research to learn the rules of operation of the game, and you’ll 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 – you’ll need to #include in your C file and compile using:
‘gcc -o .c -Incurses’
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 don’t 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. You’ll 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 graph’s 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, you’ve 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 doesn’t 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 user’s
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 you’ll 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 you’re working on your own computers or the lab machines, you may need to compile with the additional -cp flag set to the project’s root directory (which tells the compiler where to find additional classes). You’ll 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, you’ll 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 user’s 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.