合肥生活安徽新聞合肥交通合肥房產生活服務合肥教育合肥招聘合肥旅游文化藝術合肥美食合肥地圖合肥社保合肥醫院企業服務合肥法律

        COMP2006代做、代寫GUI Framework

        時間:2024-05-03  來源:合肥網hfw.cc  作者:hfw.cc 我要糾錯



        COMP2006, 2023/2024, Coursework Requirements: GUI Framework
        Contents
        Overview........................................................................................................................................................... 2
        Getting started:................................................................................................................................................. 3
        General requirements (apply to both parts):.................................................................................................... 4
        Some clarifications (based on questions in previous years): ............................................................................ 6
        General marking criteria for both part 1 (CW1) and part 2 (CW2): .................................................................. 7
        Coursework Part 1 Functional Requirements................................................................................................... 8
        Coursework part 2 functional requirements .................................................................................................. 11
        Handling of program states (total max 6 marks, 2 are advanced).............................................................. 11
        Input/output features (total max 6 marks, 2 are advanced) ...................................................................... 11
        Displayable object features (total max 15 marks, 6 are advanced)............................................................ 12
        Collision detection (4 marks, 2 is advanced)............................................................................................... 14
        Animations, foreground scrolling and zooming (Max total 15 marks, 3 are advanced)............................. 15
        Tile manager usage (Max 4 marks, 2 are advanced)................................................................................... 17
        Other features (Max total 10 marks, 6 are advanced)................................................................................ 17
        Overall impact/impression (Max 20 marks, 20 are advanced) ................................................................... 18
        Overview
        This coursework has two parts – an initial ‘easier’ part to get you working on this earlier, and the final part
        which is more complex and lets you innovate more. Your part 2 coursework can be completely different
        and separate to your part 1 – you do not need to build on the part 1 submission to make part 2, although
        doing so may save some work.
        Part 1 aims to introduce you to a C++ framework for building GUI programs. You should be able to get full
        marks on that part if you work through the demos and spend time doing the coursework. Part 2 aims to
        give you the freedom to do more with the framework and potentially create something impressive. The aim
        is that your total mark for part 1 and part 2 should be representative of your ability with C++ (or the effort
        you put into the coursework).
        The coursework framework is a simplified cut-down framework covering just the essentials and aims to
        simplify the process of software development for you. It may seem large to you but in fact is very small
        compared with the sizes and complexities of class libraries you would usually be working with in C++. You
        will need to understand some C++ and OO concepts to be able to complete the coursework but will
        (deliberately) not need to understand many complex features initially, so that the coursework can be
        released earlier in the semester.
        There are two demo tutorials (labelled Demo A and Demo B) which you should work through to help you
        to understand the basics. Please complete these to understand how to do part 1. There are also some
        examples in the coursework code provides, to illustrate how you can do some things. Your submissions
        must be different enough from the demo tutorials and supplied examples that it is clear to the markers that
        you do understand the concepts rather than just copying them.
        Part 1 is designed to be easy to complete. (You should be able to check the marking criteria in advance and
        know what mark to expect – hopefully full marks for each of you.) A zip file of your project (including all
        source, project and resource files), as well as a demo video (up to 3 minutes) showing how you meet the
        marking criteria MUST be uploaded to Moodle.
        Part 2 is more advanced and is designed to be harder to complete. Part 2 is designed to be hard in some
        parts! You may not be able to do all parts. Please do what you can and make sure it compiles and runs etc.
        Submission of documentation, code and the demo video (up to 6 minutes) will be via Moodle.
        Failing to upload your project, documentation and the demo video will count as a failed submission and
        result in a mark of 0.
        You may complete and demo the coursework on Windows, Linux or Mac. As long as you can submit your
        code and do us a demo, we don’t mind what operating system you use.
        Getting    started:
        1. Download the zip file of the coursework framework. Unzip it and open it in Visual Studio – on
        your own computer or the windows virtual desktop. Compile and run the initial framework to
        ensure that it compiles and runs with no problems on your computer. Read the getting started
        document if you are stuck. You can also use the lab PCs or the windows virtual desktop.
        (Mac, Linux) Optionally: If you prefer then you can follow the instructions provided on Moodle to
        build on Mac or Linux. We are assuming that, if you wish to do this, it is because you are the expert
        on Mac or Linux so will be able to resolve any issues. This should ensure that those who are more
        comfortable on a different operating system are able to use it, but please be aware that we may
        not be able to support issues on these platforms.
        Whatever you run this on, you will need to be able to demonstrate your work for marking as well
        as to submit your source code files to Moodle. (It should be possible for you to demo on any
        platform you wish and/or demo on the windows virtual desktop, if necessary, by copying files back
        into the visual studio project.)
        2. Do the coursework tutorial demo A and ensure that you understand about the basic features of
        the BaseEngine class and drawing the background, including the tile manager and handling input.
        3. Do the coursework tutorial B and ensure that you understand about the basic features of simple
        displayable objects, moving them around and displaying them.
        4. Skim through the Frequently Asked Questions document to ensure that you know what is in it.
        This document has developed over the years to address questions which I often get asked. It will
        also give you clues to things you may not know of may not think of.
        5. Start on the requirements for part 1, using what you learned from demo tutorials A and B.
        Coursework part 1 should not be too bad using the walkthroughs for demo A and demo B and the
        samples. Try changing which object type is created in the mainfunction.cpp file (change which line
        is commented out to change which demo to run) and look at the provided demos.
        You may want to consider the ‘SimpleDemo’ demo, for things like string displaying, and potentially
        either the BouncingBall or Maze demos if you can’t work out things like the TileManager. Work on
        only the simple demos initially! You will not need the more advanced demos until you get to part 2.
        6. Once you have completed part 1, look at the part 2 requirements and decide on how you will
        develop a program to be able to do as many of these as you wish, considering what you learned
        from part 1. You should think about which requirements you will attempt at the start rather than
        trying to consider this later because some programs will make them more complex to achieve than
        others. Note: in some cases, you may find it impractical to integrate some requirements into your
        main program. In that case, don’t forget that you could use a fancy ‘intro’ or ‘ending’ screen (state)
        to demo things that may not fit into your main program (e.g. TileManager in past years has not
        always fitted for some students, and has been used on an intro screen). Think outside the box and
        remember that your aim is to get the best mark, not be exact in matching some existing program
        idea or to make the best game ever.
        General    requirements (apply    to    both    parts):
        You MUST meet the following general requirements for both part A and part B:
        1. All the code that you submit must be either your own work or copied from the supplied demos.
        Where you use code from demos it will not get your marks unless you have modified it enough to
        show your own understanding.
        You may NOT use work from anyone else.
        You may NOT work with other people to develop your coursework.
        You may NOT have someone else write any or all the code in your submission.
        You will be required to submit a simple documentation sheet making clear that you understand
        this.
        2. Create a program which runs without crashing or errors and meets the functional requirements
        listed below and on the following page. Look at the Hall of Fame page to see some examples of
        previous work and decide on a basic idea for your program. You don’t need to implement that
        much for part 1, but part 2 will involve finishing it.
        3. Avoid compilation warnings in your code. Usually these mean that there is a potential issue with
        your program. Try to avoid compilation warnings as any warnings may make us investigate whether
        they mean that there are C++ issues with your program.
        4. Your program features which are assessed must be different from all the demos and from
        exercises A and B. i.e. do not copy demo code or the lab exercises code too closely. You will not get
        marks for copying code but would get some marks for your own modifications which show your
        understanding of C++ if you did similar things to the demos. In other words, change the code at
        least enough to show that you understand what it is doing and haven’t just blindly copied it.
        5. You must not alter existing files in the framework without prior agreement with from the module
        convenor (which would require a good reason) – the aim of the coursework is to work with an
        existing framework not to improve it (even though there are many possible improvements).
        Note: subclassing existing classes and changing behaviour in that way is permitted, and is
        encouraged, as you don’t need to change the existing files to do that.
        I tried to make the classes flexible enough to allow behaviour to be modifiable by subclasses
        relatively easily.
        6. The aim of this coursework is the investigate your ability to understand existing C++ code and to
        extend it using sub-classing, rather than to use some alternative libraries:
        • Your program MUST use the supplied framework in the way in which it is intended. i.e. the
        way in which demo tutorials A and B use it to draw the background and moving objects is the
        way that you should use it.
        • You must not alter the supplied framework files. See comments above for point 5.
        • You should not use any external libraries other than standard C++ class libraries, and libraries
        which are already used by the framework code, unless a requirement specifically says you may
        do so. There are many useful libraries which you could use to improve your programs, but the
        point of this exercise is to show that you can understand and use the library I supply.
        7. There are 10 functional requirements in part 1, worth 2% of the module mark each, for a total of
        20% of the module mark for this part of the coursework.
        When you have completed the coursework part 1, submit a zip of your source code and a demo
        video to Moodle:
        • Clean your program (use the ‘Clean Solution’ option under the build menu – to delete the
        temporary files.
        • Delete the hidden .vs folder in the root of your project directory. This can become huge
        but is not needed and will make your zip file unnecessarily big.
        • Zip up the rest of your project directory and submit it to ‘part 1 coursework submission’ on
        Moodle.
        • Your submission should include all the supplied files (including demo files) as well as your
        new files in the zip file you submit.
        • Also include your completed documentation sheet(s) in your submission – as a separate
        file outside of the zip.
        • If you worked on Mac or Linux, please include your make files etc that you used, ideally in a
        format which we can use to build and test the code ourselves, along with summary
        instructions of how we can build and run the program ourselves if necessary.
        It should be possible when you have done this for someone to download the zip file, unzip it, do a
        ‘rebuild all’ to rebuild it, and run it, with no other changes. (Or for us to build/run it on Linux/Mac if
        appropriate.)
        It should also be possible for us to check your documentation file to see whether the mark matched
        what you expected or where any issues were.
        8. There are 80 marks available for part 2 requirements, for a total of 80% of the module mark.
        These are usually a lot harder than the part 1 requirements. Start with the easy ones! You may set
        a time limit so that you don’t overdo it.
        Read the requirements carefully!
        When you have completed part 2 upload the project file to the CW2 submission on Moodle, as you
        did for CW1 (i.e. clean it, delete the .vs directory and zip the folder).
        A demo video is required to show the program running and explain how you meet the criteria.
        You will need to upload a documentation file explaining which features you achieved.
        Some    clarifications (based    on    questions    in    previous    years):
        The key priority is that you understand the code. The assessment aim is to test your ability to understand
        C++ code and to write it – not to copy paste. Here are some examples of things which are and are not
        allowed as far as marking is concerned:
        • If you take a demo and just add some changes then you are assessed only on your changes.
        i.e. if maze demo already did something (e.g. background drawing, pause facility, etc) then it
        doesn’t count for a mark for you because you did not write it yourself.
        Similarly, it does not count as you creating a new subclass because you didn’t.
        Please start from a new class and add your own code to it.
        • If instead you write your own code and take from the demos the understanding of how they do it –
        possibly even copying some parts of the code, but showing your own understanding of it when you
        do, then that is OK. (This is partly why we ask you to demo it – so you can answer questions if
        necessary.) E.g. if you copy the way that pause works and implement it correctly then you would
        understand how it works and be able to explain it.
        • As another example, if you copy whole functions, such as a draw function, from a demo, that is also
        a case of something being the same as maze demo. If you do so and make a slight change to make
        it a different colour then it’s basically the same apart from that slight change, so it is not different
        enough. Don’t do that please as you won’t get the marks.
        • However, you CAN copy small parts into your own classes, showing your understanding of them. In
        which case you should be able to explain how they work if asked.
        General    marking    criteria for    both    part    1    (CW1) and    part    2    (CW2):
        You will lose marks if any of the following apply. In each case we will apply a percentage mark penalty to
        your mark.
        • Your program crashes on exit or has a memory leak. (Lose 10% of your mark.)
        • Your program crashes at least once during its operation. (Lose 20% of your mark.)
        • Your program crashes multiple times. (Lose 30% of your mark.)
        • Your program crashes frequently. (Lose 40% of your mark.)
        • Your program has some odd/unexpected behaviour/errors. (Lose at least 10% of your mark.)
        • Your program has a lot of unexpected behaviour/errors. (Lose at least 20% of your mark.)
        • You have changed framework files without prior agreement. (Lose at least 20% of your mark.)
        The mark sheet that will be used for marking for parts 1 and 2 has entries for the above and your marker
        will annotate it according to their experience of your demo (or their running) of your software.
        Coursework    Part    1 Functional    Requirements
        Functional requirements: (2 marks each).
        Note: the markers will use the literal text below (both the bold and non-bolded text) to determine
        whether a requirement was met or not. Please read the criteria carefully to ensure that you don’t miss
        anything. If I need to clarify any of these criteria I will do so and let you know that it was updated.
        To try to avoid you missing specific parts I have labelled key aspects of each requirement in a list.
        In general, the requirements below get progressively harder (in that they need more understanding of the
        framework and C++ to do the later ones) but please do check later ones even if you decide some earlier one
        is too hard for you to do.
        1. Create an appropriate sub-class of BaseEngine with an appropriate background which is different
        from the demos.
        a. Create an appropriate new sub-class of the base engine.
        b. Give it an appropriate background.
        c. Ensure that the background is different to the demos.
        d. Name your class using your capitalised username followed by the text Engine. e.g. if your
        username was psxabc then your class would be called PsxabcEngine.
        2. Show your ability to use the drawing functions:
        a. Draw your background ensuring that you use at least one of the shape drawing functions
        to draw on the background.
        b. and that you draw at least one image to the background,
        c. which is different from the demos and shows your understanding.
        A blank background will not get this mark – even if you change the colour – you MUST use one
        of the shape drawing functions (i.e. a drawBackground…() function other than
        drawBackgroundPixel() ) and at least one image, to show your understanding.
        3. Draw some text on the background.
        a. Draw some text onto the background (not foreground)
        b. and ensure that the text is not obliterated when moving objects move over it.
        c. Ensure that moving objects can/do move over at least part of this text, so that the object
        appears in front of the text, and demonstrate that it is redrawn after the object has moved.
        i.e. show that you understand how the background and foreground are drawn to and when to
        draw text.
        4. Have some changing text, refreshing/redrawing appropriately which is drawn to the foreground
        (not background), in front of moving objects.
        a. This text may change over time (e.g. showing the current time, or a counter) or could show
        a score which changes, for example.
        b. It could also be drawn to the foreground as a part of an object (e.g. a moving label) if you
        wish, but does not need to move around with objects if you don’t want it to.
        c. When the text changes, the old text should be appropriately removed from the screen.
        d. The text must be drawn such that moving objects would move under it rather than on top
        of it though. i.e. not to the background, and basically it means it’ll be drawn after at least
        some of the objects.
        e. For marking we will check the code where it is drawn if there is any doubt. E.g. whether the
        function which draws it is called before or after drawing objects. (Look at the different
        functions to see which to use – the point of this mark is to see whether you realised the
        difference between drawing changing text to foreground rather than background.
        5. Provide a user controlled moving object which is a sub-class of DisplayableObject and different to
        the demos:
        a. Have a moving object.
        b. that the user can move around,
        c. using either the keyboard OR the mouse (or both)
        d. and is different to the demos.
        Note: you could have an indirect subclass of DisplayableObject if you wish (i.e. a subclass of a
        subclass of DisplayableObject). The aim of this requirement is for you to show that you
        understand how to use EITHER the keyboard or mouse input functions (or both) as well as to
        show that you can create a moving object.
        6. Ensure that both keyboard and mouse input are handled in some way and do something. At least
        one of these input methods should influence one or more moving objects, from requirement 5. The
        starting point is probably to look at whether you used mouse or keyboard for the moving object
        above and just use the other one here. E.g. if you user-controlled object is mouse controlled then
        make it so that something happens when a key is pressed (e.g. a counter is incremented, which
        appears on the screen – see requirement 4). Or if your object is keyboard controlled, you need to
        handle mouse movement or button pressing. Both mouse and keyboard could influence the
        moving object if you prefer, or one could change something else.
        a. You handle both keyboard input AND mouse input and they both do something.
        b. Something(s) should visibly change for both – e.g. some position of something or value of
        something or displayed image, or…
        7. Provide an automated moving object which is a sub-class of DisplayableObject and different from
        the one in requirement 5.
        a. Provide a second moving object (separate to the user-controlled one, with a different
        class)
        b. whose movement is not directly controlled by the player,
        c. which moves around,
        d. which acts differently to the objects in the samples/demos/code that I provided,
        e. and which looks different to the objects in the demos and to your object in requirement 5.
        i.e. show that you understand something about how to make an object move on its own,
        without user input (changing its x and y coordinates and redrawing it appropriately). Your
        object must have some behaviour that is different to the demos (i.e. a copy-paste of the demo
        code is not sufficient) and you must be able to explain how it works and justify that it is
        different from the demos in some way. Your object must also have a different appearance to
        the object in requirement 5 and look different to the demos/samples as well.
        8. Include collision detection between a user-controlled (req. 5) and an automated (req. 7) moving
        object, so that they interact with each other.
        a. You need to check for a collision between the two objects.
        b. Something should happen when they collide, and something should visibly change – e.g.
        something moves, direction of travel changes, or something is shown.
        c. Collision detection should be at least as good as rectangle-rectangle interaction and should
        work properly.
        This means that at least two of your objects should react to each other when they collide. Hint:
        look at UtilCollisionDetection.h if you don’t want to do the maths for rectangle or circle intersection
        yourself – and see MazeDemoObject.cpp for an example of using these functions. Assessment of
        whether you achieved this or not will be on the basis that the intersection of two objects is
        correctly assessed and something happens in reaction to this (e.g. objects move, change direction,
        something else changes (e.g. a score) etc). Rectangle-rectangle or circle-circle interaction is fine for
        meeting this requirement.
        9. Create your own subclass of TileManager.
        a. Create a subclass of the tile manager which has different behaviour (at least a little) to the
        demos, is drawn to the background, and is visible to the user when the program is run.
        b. Name your class using your username followed by the text TileManager. e.g. if your
        username was psxabc then your class would be called PsxabcTileManager.
        c. Explain the difference(s) from the demo versions.
        Hint: Look at the existing demos, including the bouncing ball demo. Display the tile manager on
        the background, so that the tiles are visible. It must be different from the demos but can still be
        simple. You are just showing that you understand how to use the tile manager class. Use a
        different tile size and number of rows and columns to the demos (e.g. 13x13 tiles and 6 rows
        and 9 columns if you can’t think of some numbers yourself). Your TileManager must not be a
        copy of an existing one, or just an implementation of the demo tutorial example without
        change. i.e. you must show some understanding of how to do this, not just blindly repeat the
        steps of demo tutorial A.
        10. Have at least one moving object interacted correctly with the tile manager, changing a tile:
        a. Ensure that at least one of your moving objects visibly changes specific tiles when it passes
        over them – using the position checking appropriately.
        b. The tile must be changed and redrawn correctly so that the user sees the change.
        Consider the bouncing ball demo if you can’t work out how to do this from the information in
        demos A and B, but you need to have at least some difference in behaviour from that.
        Assessment will check that you correctly detected the specific tile that the moving object was
        over and handled it appropriately.
        Coursework    part    2 functional    requirements
        Again, key parts of requirements have been highlighted with letters to try to ensure that you don’t miss
        something – you need to meet ALL the lettered sub-requirements to get the mark.
        The following requirements apply, and have a variety of marks available:
        Handling    of    program    states    (total    max    6 marks,    2 are advanced)
        1. Add states to your program (max 6 marks). This means that your program correctly changes its
        behaviour depending upon what state it is in. Each stage should have a correctly drawn background
        which is different to the demos, and are NOT trivial (e.g. a blank background). This could use an
        image, a tile manager or be drawn using the fundamental drawing functions on the base engine.
        You can get a variety of marks for this:
        2 marks:
        a. a start-up state, a pause state and a running state,
        b. which differ in some way in both the appearance and behaviour.
        2 marks:
        c. at least five states
        d. including at least one win or lose state as well as those mentioned above. (Note: if you are
        not doing a game, then have a state which allows a reset, e.g. ‘load new document’ in a
        text editor.)
        e. There must be significant differences between the states in behaviour and/or appearance.
        The program must be able to correctly go back from the win/lost (or reset) state to the
        starting state to start a new game/document, correctly initialising any data.
        2 marks (advanced):
        f. implement the state model (design pattern) using subtype polymorphism rather than
        if/switch statements in each function. Note: You may still need some if statements etc to
        enter the states, but the current state object is used to determine how to act in each
        function.
        Look up the ‘State Pattern’ to see what this means and think about it. These are advanced
        marks, so we will not explain how to do this beyond the following: there will be a basic state
        base class and a subclass for each of the different states. Your BaseEngine sub-class will need to
        know which state object is currently valid and the different methods will call virtual methods
        on this object. The different behaviour will therefore occur due to having a different object
        being used for each state rather than having a switch in each of the methods. If you have if or
        switch statements specifying what to do in different states, then you won’t have done it
        properly, so you won’t get these marks. You should NOT have more than the one sub-class of
        BaseEngine if you do it correctly. If you had to create multiple sub-classes of BaseEngine then
        your implementation is wrong (and there will be other issues since you may have more than
        one window as well).
        Input/output    features    (total    max    6 marks,    2 are advanced)
        2. Save and load some non-trivial data (max 6 marks). You can use either C++ classes or the C
        functions to do this – your choice will not affect your mark.
        You can get a variety of marks for this:
        2 marks: most basic saving and loading, as follows:
        a. save AND load at least one value to/from a file, e.g. a high score to a file (e.g. a single
        number to a file)
        2 marks: completed the saving/loading above, and load some more complex, structured data, e.g.
        map data for levels, or formatted text documents where the formatting will be interpreted. The
        main criteria are:
        b. It must be multiple read/write operations, of multiple values with some kind of structure to
        the file, rather than just a string of 3 numbers, for example.
        c. Something must visibly change depending upon what is loaded (e.g. set tiles according to
        data read and/or set positions of moving objects according to the data).
        2 marks (advanced): completed the above but also save/load the non-trivial state of the program
        to a file.
        d. A user should be able to save where they are (e.g. the current document that they are
        working on or the state of a game – saving all relevant variables for all objects)
        e. and they should be able to reload this state later, with everything acting correctly and
        continuing from where it was.
        f. Note: this means saving/reloading the positions/states of all moving objects as well as
        anything like changeable tiles, etc.
        g. You will need to provide some way to reload from the state as well – e.g. when the
        program starts (e.g. choosing to load or start a new game) or in response to some
        command from the user (e.g. pressing S for save and L for load?).
        This is meant to be non-trivial and may need some thought and debugging to make it work
        properly.
        Displayable    object    features    (total    max    15 marks,    6 are    advanced)
        3. Use appropriate sub-classing with automated objects (max 2 marks):
        a. multiple displayable objects
        b. from at least three displayable object classes,
        c. with different appearances and behaviour from each other
        d. and you should have an intermediate class of your own between the framework class and
        your end class,
        e. the intermediate class adds some non-trivial behaviour.
        i.e. you are showing that you can create a subclass which adds some behaviour, and some other
        subclasses of that class which add more behaviour.
        Example: a complex example can be found in ExampleDragableObjects.h:
        DragableObject and DragableImageObject are both DragableBaseClassObjects, which is a
        DisplayableObject, so DragableBaseClassObjects is an intermediate class which adds some nontrivial behaviour.
        4. Create and destroy displayable objects during operation of a state (max 4 marks): for example,
        add an object which appears and moves for a while for the player to chase if a certain event
        happens, a bomb that can be dropped by a player, or a bullet that can be fired. Note that
        something like pressing a key to drop a bomb which then blows up later, while displaying a
        countdown on the bomb, and then changes the tiles in a tile manager would meet some
        requirements (i.e. marks) in one feature.
        2 marks: Objects appear to be created or destroyed over time, which means you:
        a. dynamically add one or more displayable objects to the program temporarily after a
        state has started (i.e. you add to the object list or make some object visible).
        b. and ensure that the object cannot interact with anything else before it is added or after
        it is ‘destroyed’. E.g. if you make the object invisible then it is not collision detecting
        with anything while it is not visible.
        c. You must not just re-create the entire object array contents to do this, although you
        could add to the end of it. (Please see the methods on DisplayableObjectContainer.)
        d. This requirement is not met by the re-creation of objects when you change states. The
        idea behind this requirement is that moving objects appear and disappear while using
        the program within the state.
        For the above criterion you can hide/show an object rather than actually creating/deleting
        them. Remember if you do though that you may also need to ensure that their own and other
        DoUpdate() functions ignore the objects. e.g. just because you don’t draw an enemy on the
        screen, the collision detection may still check for it if you don’t stop it doing so. If it is unclear,
        we may ask you to show us in your code how you avoid this problem.
        2 marks: as for the above 2 marks but also correctly create and destroy displayable objects during
        operation. This means meeting the requirements above but also:
        e. when making the object appear during the running of one state, create the object and
        add it to the DisplayableObjectContainer (rather than just making it visible),
        f. when making the object disappear, within the running of the state, remove it from the
        object list in the DisplayableObjectContainer.
        g. notify the program when you change the contents of the DisplayableObjectContainer.
        If you change the object array you need to tell anything using it that you did so, hence
        why this is in as a separate requirement – it can be trickier to get right. Please see the
        drawableObjectsChanged() method and investigate how it works to get this right.
        h. correctly delete the object at that time (not at some later point, such as when the state
        changes). Making sure that you destroy/delete the object at the right time is important
        for this – it is trying to get you to understand how to get objects to destroy themselves
        safely without causing issues with using the pointer after the object was destroyed.
        This is an important thing to understand in C++.
        5. Complex intelligence on an automated moving object (max 9 marks): this is harder criterion to
        assess since there are so many different ways you could do this. As a minimum this criterion would
        involve something more than moving randomly or homing in on a player, but you should consider
        the marking criteria below to work out what sort of mark you will get.
        2 marks: this could involve something like ‘If the player is on the same column, then home in.
        Otherwise move randomly’, or ‘Keep the same direction until I bump into something then change
        direction towards player and repeat’.
        Simple equations and decisions would get this mark rather than a higher mark.
        Note that this must be more than a single constant behaviour – e.g. the moving randomly or
        homing in behaviour, so that the behaviour changes somehow according to the situation.
        If your logic can be formulated as “if <condition> then do behaviour type 1, else do behaviour
        type 2” where behaviour types 1 and 2 are things which themselves involve a decision.
        e.g.:
        • “If player is within 200 pixels, go towards player, else move randomly”.
        • “If in this area of the screen, move using these rules, else use these rules…”
        2 marks: this means a good implementation of the intelligence of a moving object.
        There should be some level of calculation or multiple-decision-making element involved.
        This needs to be more complex than the previous two-mark criteria (i.e. it could not be expressed
        in the way that the two-mark criteria could) and could involve some more complex calculations or a
        series of decisions.
        E.g.:
        • calculating how to cut off a player, or intercept them, assuming that they maintain the
        same speed (predict where they will be and plan a path to get there)
        • Showing some apparent intelligence which is not obvious to the markers how to
        implement, and not just random.
        Note that the important thing for marking here is the skill you show in your C++ ability to write
        algorithms by implementing this – so something trivial will not count.
        2 marks (advanced): this means a good implementation of some more complex algorithm for the
        intelligence of a moving object,
        e.g.:
        • use a shortest path algorithm to find the shortest way through a maze to get to a player,
        • tracking a player’s decisions and predicting a player’s path (in some non-trivial way, such
        as understanding what player decisions have been so far and what they may imply for later
        behaviour) and moving towards that rather than the player itself.
        • showing some apparent intelligence, so that the markers are impressed at how intelligent
        the object(s) appear to be.
        Note that the important thing for marking here is the skill you show in your C++ ability by
        implementing this – so something trivial will not count.
        3 marks (advanced): this is an even more advanced version of the above criteria. This means:
        • An exceptional implementation
        • where the marker is impressed with the complexity of the problem you are solving,
        • and the elegance of the C++ code that you are using to implement it.
        Note that this talks about the complexity of the problem, rather than an overly complex algorithm.
        This is deliberately not easy to get and is designed to allow the most capable students to excel. For
        the most capable students, doing things like this will not take as long as many of us may think. For
        the rest of us, it is probably too time-consuming to be worth the time to do it.
        Please don’t be upset if you don’t get this mark.
        One key criterion to consider is:
        • “Does this show you to be one of the best C++ programmers in the year?”
        Collision    detection (4 marks,    2 is    advanced)
        6. Non-trivial pixel-perfect collision detection between objects (max 4 marks): this means to
        implement collision detection beyond the collision detection that I gave you examples of. These
        marks are for implementing some really complex collision detection, such as complex outline
        interactions (e.g. someone did bitmap-bitmap interaction in the past, checking for coloured pixels
        interacting, and someone else split complex shapes into triangles which could be collision detected
        and checked every triangle interaction) then you get this mark. Using the supplied collision
        detection class is not sufficient to get either mark. Collision detection for rectangles and/or ovals is
        not sufficient.
        2 marks: improved collision detection which will work on more complex shapes than the supplied
        collision detection methods, and which works well in your program. Particularly that will work with
        convex shapes. E.g.:
        • Putting a more convex polygon around the shape and accurately detecting collisions, or having
        collision detections between a range of polygonal shapes (triangles, squares, pentagons, etc),
        which goes beyond the square-square or circle-circle collision detection. As implied, this is likely
        to be most appropriate if your shapes are already polygons.
        2 marks (advanced): pixel-perfect collision detection on an arbitrarily complex irregular shape.
        Importantly, this should include dealing with concave shapes, so that one could be within a
        concavity of another but not count as a collision. (Think of a circle being able to move inside a C
        shape, and as long as it doesn’t touch the C then it is not a collision.)
        Note that this is hard to get, so if your implementation is not solving a really complex task and/or
        was trivial to code then you probably will not get this mark.
        Your method should work with concavities in object outline and your demo should show this.
        Examples would be automatic accurate triangularisation of shapes and collision detection on these,
        or pixel-perfect checking (if a coloured pixel in one image is in the same place as a coloured pixel in
        another image).
        Although it may not seem like it, the easiest way to get a good implementation of this requirement
        is to use images and to check every pixel in the overlap area to see whether the relevant position in
        both images is coloured. (If either is not coloured then there is no collision at that point.) If there is
        a collision for ANY pixel in the overlap area, then the objects have collided.
        In particular, for 2 marks:
        • Your approach should work even if the shapes of the objects colliding are modified (potentially
        with some minor changes to account for shape types or colours). i.e. it should use the object
        itself, not some hard-coded representation of the object, for instance of coordinates of the
        edges.
        • Your method should work with concavities in objects outlines and your demo should show this.
        (Note: checking for pixel collisions in images will do this automatically.)
        Animations,    foreground    scrolling    and    zooming    (Max    total    15 marks,    3 are advanced)
        7. Implement a scrolling background by manipulating the way that the background image is drawn
        (2 marks). This requirement basically requires you to look and understand the StarfieldDemo
        example, which manipulates the position at which the background is drawn.
        You do not need to have a constantly scrolling background – it could scroll in response to some
        activity, such as the player moving for example.
        You may want to implement this for a startup screen, high score screen or ending screen if it does
        not really fit with your main screen display, or to think about how it could be incorporated into
        your program.
        Using a background surface which is bigger than the displayable screen could give the illusion of
        having a view onto a larger background image, and moving around it.
        The main requirements are:
        a. Setup an appropriate background image to use (which may be bigger than the window).
        b. Modify copyAllBackgroundBuffer() appropriately to work with your background and ensure
        that it is redrawn as needed (redrawDisplay()).
        c. Demonstrate an apparent smooth scrolling of the background.
        d. Explain how you did it, showing your understanding.
        The aim is for you to work out for yourself by looking at the example code, so we will NOT explain
        to you how the code works – please don’t ask.
        8. Have an animated or changing background by utilising multiple images (2 marks). Having multiple
        drawing surfaces is an important concept which is widely used, and is easy to do using pointers.
        This requirement basically asks you to consider and understand the FlashingDemo sample. You
        need to:
        a. Have at least five drawing surfaces, set up with at least slightly different contents.
        b. switch the appropriate surface in to be used as the background (noting that
        m_pBackgroundSurface is accessible to subclasses and can be changed, deliberately for this
        purpose).
        c. Make it appear as if the background has been animated (at least slightly) using this process. E.g.
        students in the past made torches flicker, things change shape, etc. The changes should look
        smooth rather than the (deliberate) big changes used in the demo.
        d. Explain how you did it, showing your understanding.
        The aim is for you to work out for yourself by looking at the example code, so we will NOT explain
        to you how the code works – please don’t ask.
        9. Correctly implement scrolling and zooming of the foreground, allowing the user to scroll around
        using keys and/or mouse (max 4 marks). Hint: look at the FilterPoints class to see how this can be
        done relatively easily, and consider the ScrollingAndZooming demo. You do NOT need to scroll or
        zoom the background (although you could integrate this with requirements 8 and 9 if you wished
        to do so).
        One aim for these marks is for you to work out for yourself how to do this, or to work out from
        looking at the code which uses FilterPoints, so we will NOT explain to you how the existing code
        works – please don’t ask.
        2 marks: you wrote C++ code which works to:
        a. allow a user to scroll the screen.
        b. using keys or mouse.
        c. The user must be able to move the apparent view on the foreground objects up, down, left
        AND right (you can choose which keys/mouse operations do this).
        d. Note: there is no requirement to actually use the FilterPoints class to do this for the onemark criterion, although it will be simple to do if you already plan to do the 2-mark
        criterion. So, in theory you could manipulate the positions of all the objects manually if you
        wanted to, as long as it works properly, if you can’t understand FilterPoints.
        2 marks: you achieved the above but also:
        e. implemented both scrolling and zooming of foreground objects.
        f. using the supplied FilterPoints class by creating a FilterPoints subclass which works to allow
        a user to zoom in and out using keys or mouse.
        g. Your code should show your understanding of how to integrate your zooming with the
        framework provided – using the FilterPoints class that you create, and explain how it works
        in the documentation/demo video.
        10. Animate moving objects (max 5 marks): To get these marks you need to show your ability to
        create smooth animations for moving objects. Note: there are various advanced demos which show
        you how you could do some elements of this, but you should not just switch between two images
        (as one of the demos does), it should look smooth (e.g. having enough images to be smooth, or
        looking at how to make it smoothly animate in another way).
        This cannot just be a copy-paste of the demo code – even for one mark you need to show enough
        awareness of what you are doing to justify that you ‘showed understanding’.
        2 marks: for this you need to:
        a. show understanding of how to animate at least one object so that its appearance changes
        over time, however this could be a proof of concept instead of being smooth.
        3 marks (advanced):
        b. your objects should have animated rather than fixed appearances.
        c. the animation should be smooth.
        d. and visually impressive. Please do note the ‘impressive’. So please don’t just rotate objects
        using facilities from a demo as that would not get you the marks.
        e. Explain in the documentation/demo what you have done and how it works.
        11. Image rotation/manipulation using the ImagePixelMapping object (max 2 mark): you need to
        show that you understand how to create a new ImagePixelMapping class which acts differently to
        the existing ones and does something at least slightly differently to the existing examples, and that
        you use it appropriately.
        2 marks: show your understanding by:
        a. creating and using your own ImagePixelMapping class and object
        b. draw at least one object to the screen. Your class must do something different enough to
        the provided ones to allow the marker to see that you understand how to use it fully.
        Tile    manager    usage (Max    4 marks,    2 are advanced)
        12. Interesting and impressive tile manager usage (max 4 marks): To get this mark you must be using
        a tile manager, and must have multiple displayable objects.
        - Your tile manager must draw a number of appropriate and different pictures (either using images
        or the drawing primitives) for the different tile types, which are not just different colours.
        - You should have at least 5 different tile types (not just different sizes ovals/rectangles).
        - At least one tile must be drawn using an image. You should load the image only once and keep it
        in a relevant object, NOT keep reloading it each frame if you want these marks.
        Note: If you use multiple images then you could also potentially meet the animated appearance of
        automated objects criterion, and/or the animated background if you do it appropriately.
        2 marks: You meet the wording above in all requirements.
        2 marks (advanced): The marker is impressed by what you have done, it looks great, works well
        and has some interesting behaviour. Also, you particularly need a situation in which moving onto
        some tiles would have effects on tiles elsewhere, e.g. standing on a key tile visibly unlocks a door
        tile. This requires visibly changing one tile from a position where the displayable object which does
        so is NOT over that tile (i.e. you update a different part of the screen.)
        Other    features (Max    total    10 marks,    6    are advanced)
        13. Allow user to enter text which appears on the graphical display (max 2 marks): For example,
        when entering a name for a high score table, capture the letter key presses and pressing of delete
        key, and show the current string on the screen (implementing delete at well may be important).
        This needs thought but is useful to demonstrate your understanding of strings. I added this optional
        requirement because some people did it anyway last year for entering high score tables and I
        wanted the marking scheme to reflect that it was done by giving a mark for it. Entering text into the
        console window does not count for this.
        2 marks: Do the above, including meeting the following key requirements:
        • Capture the key presses for letters/characters.
        • Store the key presses somewhere.
        • Capture the DELETE key press and handle it appropriately.
        • Display the text on the screen.
        14. Show your understanding of templates, operator overloading OR smart pointers (max 2 marks).
        To get this mark you should use at least one of these features in an appropriate and useful manner
        in your program. Using one of these is sufficient.
        2 marks: for this mark you need to:
        a. have created and used a template class, template function, operator overload (other than =
        and ==) or smart pointer
        b. in a way which shows your understanding of how to use it
        c. and is different to any provided examples/demos.
        d. and uses it in an appropriate and non-trivial manner.
        e. to achieve something useful, for which it is the appropriate feature to use.
        Hints:
        • You may want to consider whether you can use operator overloading as a part of your
        loading/saving, since you can use global functions to overload << and >>.
        • If you use normal pointers, it may be an easy change to convert them to smart pointers
        once you understand what these are.
        • If you have something which can be applied to multiple classes, which cannot be resolved
        using sub-classing then consider whether a template is appropriate.
        15. Additional complexity (max 6 marks, advanced). The students who find C++ easiest often have
        great ideas for things that they would like to do, which display good knowledge of C++, are complex
        and interesting but don’t fit into these marking criteria. This mark is available for covering features
        where you show a good knowledge of C++, use some complexity, or create something that is
        exceptionally impressive. The mark aims to reward only the students who are the very best at C++
        and is an advanced mark.
        Explain in your documentation (demo video) if you think that you are doing something extremely
        impressive in some way which is not covered by the marking scheme as written.
        • Importantly it has to show exceptional ability in C++, and must cover some feature which is not
        covered by another criterion.
        • It may be possible to get these marks for a topic covered by one of the other marking criteria if
        your implementation was truly impressive, well beyond the scope of the existing mark scheme.
        • It is also possible to get the mark for something which demonstrates a useful extension to the
        framework which shows your significant understanding of C++.
        Important: You need to specify clearly what have done, why it is beyond the current criteria and
        how it demonstrates your considerable skill with C++!
        Overall    impact/impression    (Max    20 marks,    20 are    advanced)
        16. Impact/impression/WOW factor! (max 20 marks) These marks are awarded based on the overall
        impact/impression of the program, taking into account its comparative standing and uniqueness
        within the cohort. The assessment considers whether the program distinguishes itself in a way that
        would motivate people to pay for it, relative to other programs in the group. These marks will take
        some effort to attain and are designed to ensure that the people who are most capable with C++
        get higher marks. Be careful not to spend too long on this coursework if you are struggling! Many
        people will just do the minimum and will not get these marks (e.g., your program works well but
        only just meets the requirements rather than having a great impact or impression). These are
        meant to be advanced marks, so don’t be disappointed with this.
        5 marks (advanced): This is non-trivial to get. You made an effort to ensure that it is beyond the
        minimum to just tick boxes.
        As a minimum this means:
        • you made some effort with the graphical appearance.
        • the background is relevant and not plain or the same as any of the demos.
        • the background includes at least some use of relevant shapes (e.g. separating off a score by
        putting it in a box and labelling it) and/or images.
        • moving objects are not just plain circles or squares.
        • have at least three moving objects.
        • at least one is user controlled.
        • you accept both mouse and keyboard input in some way.
        • you use both images and drawing primitives appropriately.
        • you have appropriate states (at least 2).
        • have something beyond the minimum required for the other marks (please say what).
        • your program should work smoothly.
        • everything looks good with no problems.
        You need to include one or more screen shots in your documentation, along with an explanation
        of what you did that was beyond the minimum in order to get these marks.
        5 marks (advanced): Meets all above criteria and it is also very impressive for the markers. It needs
        to work very well, doing some complex tasks and you obviously made a significant effort on this
        coursework. If it’s a game then it’s fun and interesting to play, and has at least 2 different levels (to
        demonstrate your ability to do this). As a non-game (e.g. a drawing package or word processor?) it
        should be a complex program with different states (e.g. different page view layouts) performing a
        useful task and it should achieve its purpose well.
        It should be impressing the markers to get these marks.
        You need to provide information in your documentation about why this is so impressive, and
        include some screen shots, making an argument for getting these marks.
        10 marks (advanced): This is supposed to be even harder to get and basically means that your
        ‘impact’ of your program was even more than the above mentioned impact/impression, which will
        not be easy. This basically means that all the markers went ‘wow’ when they saw this and thought
        that people would easily pay money to buy this program.
        These marks are there so that we can differentiate the quality of coursework. In the same way that
        one would not always expect to be able to get 100% in an exam, not all students would be able to
        achieve this mark in a reasonable time, so should not be trying to do so.
        Note: this mark is to assess the C++ ability, not the length of time in level design or data entry. As
        long as we can see where this is going, you should not spend too much time designing lots of extra
        levels or entering a lot of data for use in the program. You shouldn’t need to be designing more
        than three levels as a proof of concept, if the levels you design illustrate your program well.
        Your program should be working really well, smoothly, look good and make a good demonstration
        and should be comparable in quality to the sort of programs available on an app store.
        I also note that in some cases it is possible that a program could be sellable while not implementing
        too many of the other features, since some app store programs are relatively simple but still
        sellable if presented well.
        To get these marks you need to provide the same level of documentation as for the 10 marks, but
        also a short introduction in the demo video of it running and the sort of sales pitch that one
        would see in an app store, to illustrate why it is so great and why people should buy it.
        * For all these marks you need to include in your submitted documentation a clear description of what
        you did and how you did it (justifications may also be required), including any screen shots or diagrams,
        and upload a video demonstrating it working. 

        請加QQ:99515681  郵箱:99515681@qq.com   WX:codinghelp














         

        掃一掃在手機打開當前頁
      1. 上一篇:CS 6290: High-Performance Computer Architecture
      2. 下一篇:EEEN3007J代寫、代做Embedded Systems
      3. 無相關信息
        合肥生活資訊

        合肥圖文信息
        挖掘機濾芯提升發動機性能
        挖掘機濾芯提升發動機性能
        戴納斯帝壁掛爐全國售后服務電話24小時官網400(全國服務熱線)
        戴納斯帝壁掛爐全國售后服務電話24小時官網
        菲斯曼壁掛爐全國統一400售后維修服務電話24小時服務熱線
        菲斯曼壁掛爐全國統一400售后維修服務電話2
        美的熱水器售后服務技術咨詢電話全國24小時客服熱線
        美的熱水器售后服務技術咨詢電話全國24小時
        海信羅馬假日洗衣機亮相AWE  復古美學與現代科技完美結合
        海信羅馬假日洗衣機亮相AWE 復古美學與現代
        合肥機場巴士4號線
        合肥機場巴士4號線
        合肥機場巴士3號線
        合肥機場巴士3號線
        合肥機場巴士2號線
        合肥機場巴士2號線
      4. 幣安app官網下載 短信驗證碼

        關于我們 | 打賞支持 | 廣告服務 | 聯系我們 | 網站地圖 | 免責聲明 | 幫助中心 | 友情鏈接 |

        Copyright © 2024 hfw.cc Inc. All Rights Reserved. 合肥網 版權所有
        ICP備06013414號-3 公安備 42010502001045

        主站蜘蛛池模板: 久久久久99人妻一区二区三区| 亚洲日韩AV无码一区二区三区人| 肉色超薄丝袜脚交一区二区| 国产午夜精品一区理论片| 国产一区二区免费视频| 91视频一区二区三区| 国产精品免费视频一区| 亚洲熟妇av一区二区三区漫画| 中文字幕aⅴ人妻一区二区| 亚洲bt加勒比一区二区| 精品亚洲福利一区二区| 国产一区二区女内射| 无码人妻aⅴ一区二区三区有奶水| 福利一区二区三区视频午夜观看| 亚洲一区二区三区无码中文字幕| 极品尤物一区二区三区| 精品无码人妻一区二区三区不卡 | 国产天堂在线一区二区三区| 精品国产一区二区三区AV性色 | 激情亚洲一区国产精品| 无码8090精品久久一区| 久久精品一区二区免费看| 国产麻豆剧果冻传媒一区 | 亚洲综合一区二区精品导航| 国产香蕉一区二区三区在线视频| 亚洲一区二区精品视频| 国产小仙女视频一区二区三区| 自慰无码一区二区三区| 日韩精品电影一区| 搡老熟女老女人一区二区| 久久无码精品一区二区三区 | 一区二区三区高清| 国产亚洲一区区二区在线 | 波多野结衣一区二区三区高清av | 精品国产一区二区二三区在线观看| 中文字幕Av一区乱码| 日韩毛片一区视频免费| 97久久精品无码一区二区天美| 另类免费视频一区二区在线观看| 国产伦一区二区三区高清| 精品国产一区二区三区香蕉事|