Assignment 4: Restructure your Go program

Restructure your Go program

Assignment 4

Overview

In this assignment, you will restructure your Go program and add a simple Artificial Intelligence (AI) to make choices for the white (computer) player. The AI will use a technique named one-step lookahead, in which it considers each possible action, assigns a score to each, and then chooses the action with highest score. In our case, the actions are the places where the white player can place a stone for that move. The score used in the one-step lookahead will be the score for the game if it were to end immediately afterwards. After the AI has scored the possible moves, it will sort the moves by score and choose the highest one. If several moves are tied for the highest score, the AI will choose one at random.

You will also add the suicide rule to your game. This rule forbids players from placing a stone where it would be immediately removed again.

The purpose of this assignment is to give you more practice with classes, including composition and implementation inheritance. For Part A, you will refactor your program to move much of the functionality from main.cpp into a new Game module. For Part B, you will update your game to use the Game class. For Part C, you will create a Move module to represent a single possible move. For Part D, you will modify your Search module to search and sort moves. For Part E, you will develop an ArtificialIntelligence module. For Part F, you will update your Game module to use it. For Part G, you will document your ArtificialIntelligence module.

Requirements

Copy the code and data files of your Assignment 3. Do not just modify Assignment 3.

(If you are using Visual Studio, you must start by creating a new project for Assignment 4. Do NOT copy the whole folder including the .sln file or massive confusion will result!)

Part A: The Game Class [Marked with Part B]

Create a Game class to handle some of the functionality from main.cpp. It should be an encapsulated class, i.e., all its member variables should be private. Wherever possible, you should copy code from the existing main function into the functions of the Game class. Input handling will stay in main.cpp. The Game class will not store a list of the player’s moves.

By the end of Part A, your Game type class have the following public member functions:

  • Game ();
  • Game (const std::string& filename_in);
  • void printBoard () const;
  • void printWinner () const;
  • const Board& getBoard () const;
  • void blackPass ();
  • bool blackPlay (int row_in, int column_in);
  • bool whiteAi ();

The Game class will also have a private member function:

  • void printRemoved (const StonesRemoved& removed_in) const;

Perform the following steps:

  • Add a header file for your Game module. Add whatever #pragma, #include, and using

lines you need. You should have an #include for your Board module.

  • Declare the Game class, which has a Board as its only member variable. Add the function prototypes listed above.
    • Note: This class is using composition.
    • Reminder: In an encapsulated class, all member variables should be private.
  • Add a default constructor to the Game class. The function body will be empty.
  • Add the second constructor to the Game class, which takes a file name as a parameter. It has a precondition that the filename is not the empty string. After checking the precondition, the function should load the board from that file.
  • Add an implementation for the printBoard function. It should print the board.
    • Hint: In the implementation, you should call one function in the Board class.
  • Add an implementation for the printWinner function. It should calculate the player scores and print who won.
    • Hint: Copy and adapt your code from main.cpp.
    • Note: This function does not need to print the game board.
    • Reminder: The Game class does not store a list of the player’s moves. You do not have to print the analysis of them.
  • Add an implementation for the getBoard function. It will return a constant reference to the game board.
    • Note: You will use this function in Part E.
  • Add an implementation for the whiteAi function. For now, it will just print a message saying that white passed.  Then it should return whether or not white played a stone.
    • Note: You will expand the whiteAi function in part E.
  • Add an implementation for the blackPass function. It should print a message saying that black passed.
  • Add an implementation for the blackPlay function. If row_in and column_in specify a place outside the game board, print that that play is forbidden. Otherwise, if that place is not empty, print that it is forbidden. Otherwise, play the stone there, print a message saying the

stone was placed, and call the printRemoved function to print which stones were removed. If the player successfully placed a stone, the function should return true. Otherwise, it should return false.

  • Hint: You already have this functionality in main.cpp. You can copy the code in and adapt it.
  • Add an implementation for the printRemoved function. If stones were captured or lost to suicide, it should print how many.
    • Hint: You already have this functionality in main.cpp as well. It may already be a function there.
  • Improve your blackPlay function to implement the suicide rule. Do not simply place the stone on the board. Instead, create a copy of the board and place the stone on the copy. Then check if any stones are lost to suicide. If so, print “Forbidden: Suicide rule”. Otherwise, set your game board to the copy and print messages as before.
    • Hint: You can create a copy of a Board using the assignment operator:

Board copied = my_board;

Similarly, you can use the assignment operator to set one Board to another:

my_board = copied;

C++ will just copy the values of the member variables.

  • Reminder: This function should return false if the player did not place a stone. In particular, it should return false if the player did not place a stone due to the suicide rule.

Part B: Use the Game class [45% = 15% stability + 30% output, includes Part A and 5% for Part F]

In Part B, you will change your main function to use the refactored Game class. Perform the following steps:

  1. In main.cpp, update the program to use the Game class. Replace the Board variable with a Game variable. Remove the variables for storing player moves. Then update the main function to use the Game member functions from Part A.
    1. Hint: If you have any other functions in main.cpp, they are probably no longer needed.
    • Hint: You can copy a Game with the assignment operator, just like you can copy

Boards. To load a game, set your existing Game to a new one created from the file:

my_game = Game(filename);

  • When the user enters a “load” command, first print out the scores and winner for the current game. Then ask the player for the file name and load the game.
    • Hint: Use the same function as when printing the scores and winner at the game end.
  • When the black (human) player passes, check whether white also passed. If so, end the main loop just as if the player entered the “quit” command.
  • Reminder: The whiteAi function returns true if white played a stone and false

otherwise.

  • Add “new” as a new command to your game. When the user enters this command, print out the scores and winner and then replace the current Game with one created by the default constructor.
  • Test your program with the same tests as for Assignment 3. They should still work (example output).
    • Hint: g++ PlaceString.cpp BoardSize.cpp BoardValue.cpp Board.cpp Game.cpp main.cpp -o game
    • Note: Right now, you do not need to compile Search.cpp. However, you will need it again when compiling the game in Part F.

Part C: The Move Module [10% test program]

In Part C, you will create the types you will need to represent possible moves and choose between them. You will also add two overloaded operators. The Move type will represent a move. The SortableMove type will inherit from the Move type and also store the net score. The net score is the score for this player minus the score for the other player.

By the end of Part C, your Move module will have overloaded operators with the following prototypes:

  • bool operator== (const SortableMove& lhs_in,

const SortableMove& rhs_in);

  • bool operator< (const SortableMove& lhs_in,

const SortableMove& rhs_in);

Reminder: All overloaded operators are functions. They are declared like functions and can be used as functions in all cases. They are different because they can also be called using operator syntax (e.g. move1 < move2).

Perform the following steps:

  1. Create an appropriate header file for the for the Move module.
  2. Declare a record (struct) named Move to represent a move in the game. It should have a bool member field named is_played for whether the player placed a stone and int member fields named row and column for where the stone was placed.
  3. Declare another record (struct) named SortableMove that inherits from Move using public inheritance. A SortableMove should have all the fields of a Move and an additional float member named net_score.
    1. Hint: Since SortableMove mentions Move, it must be declared after Move.
    • Hint: Inheritance for records (structs) works exactly the same as inheritance for classes. Move has no member functions, but the member variables will be inherited into SortableMove as with classes.
  • Note: You must use the name net_score so the test program will work.
    • Note: By default, the member variables of a record (struct) have public access, which is what is wanted in this assignment. It is possible to make them protected or private, but doing so is generally a bad idea.
  • Add the function prototypes. They should be declared after the end of the Move type.
  • Add an appropriate source file.
  • Add an implementation for operator==. It should return true if the net_score fields of the two SortableMoves are equal. Otherwise it should return false.
  • Add an implementation for operator<. It should return true if the net_score field of lhs_in is strictly less than the net_score field of rhs_in. Otherwise it should return false.
    • Note: In this context, lhs_in and rhs_in refer to the terms on the left-hand side and right-hand side of the operator. Which side is which didn’t matter for operator==, but it does for operator<.
  • Test your Move module with the TestMove4.cpp program provided. You will need the TestHelper.h and TestHelper.cpp files. The resulting program should give you full marks (example output).
    • Hint: g++ Move.cpp TestMove4.cpp TestHelper.cpp -o partc

Part D: Modify the Search Module [5% test program]

In Part D, you will modify your Search module to search and sort an array of SortableMoves instead of an array of strings. The comparisons will be done using the overloaded operators from Part C.

By the end of Part D, your Search module will have functions with the following prototypes:

  • int linearSearch (const SortableMove data_in[],

int count_in,

const SortableMove& value_in);

  • int unsortedFindSmallest (const SortableMove data_in[],

int count_in);

  • int unsortedFindLargest (const SortableMove data_in[],

int count_in);

  • void mySort (SortableMove data_in[],

int count_in);

  • bool isSorted (const SortableMove data_in[],

int count_in);

  • int sortedFindSmallest (const SortableMove data_in[],

int count_in);

  • int sortedFindLargest (const SortableMove data_in[],

int count_in);

  • int binarySearch (const SortableMove data_in[],

int count_in,

const SortableMove& value_in);

  • int binarySearchFirst (const SortableMove data_in[],

int count_in,

const SortableMove& value_in);

Perform the following steps:

  1. Change the function prototypes to take a SortableMove parameter instead of a string. You will need a new #include.
  2. Change the function implementations to replace all of the strings with SortableMoves. There will be at least one local string variable in a function body that needs to be replaced.
  3. If you used any comparison operators on data other than == and <, your program will not compile. Either change your code to use only those operators, or add the necessary operators to the Move module.
    1. Hint: A greater than comparison (a > b) can be rewritten as (b < a). An inequality comparison such as (a != b) can be rewritten as (!(a == b)). Similarly, (a >= b) can be rewritten as (!(b < a)).
    • Note: Starting in C++20, if you write an equality comparison (a == b), the compiler will automatically generate an inequality comparison (a != b) for you. It just returns

!(a == b).

  • Test your BoardValue module with the TestSearch4.cpp program provided. You will need the TestHelper.h and TestHelper.cpp files. The resulting program should give you full marks (example output).
    • Hint: g++ Search.cpp Move.cpp TestSearch4.cpp TestHelper.cpp – o partd

Part E: The ArtificialIntelligence Class [30% = 28% test program + 2% output]

In Part E, you will write an ArtificialIntelligence class to contain the code that plays against the human player. The class will also store the colour of the stones that the AI plays. To use the AI, the client will repeatedly call a function in the class to choose the next move.

By the end of Part E, your ArtificialIntelligence class will have the following public

member functions:

  • ArtificialIntelligence (char us_value_in);
  • Move chooseMove (const Board& board_in) const;

Your ArtificialIntelligence class will have the following private member functions:

  • float calculateNetScore (const Board& board_in) const;
  • MoveResult getPlayResult (const Board& board_in,

int row_in, int column_in) const;

  • bool isInvariantTrue () const;

Perform the following steps:

  • Add an appropriate header file for your new module.  Do not put an #include for Game.h. Instead, put a forward declaration:

class Game;

This will allow you to refer to the Game type as a reference. It will not allow you to create a

Game or pass it by value.

  • Note: A forward declaration for a class is analogous to a prototype for a function.
    • Note: We are using a forward declaration here because Game.h will have to include ArtificialIntelligence.h in Part F. If ArtificialIntelligence also included Game.h, we would have circular includes, which is a Very Bad Thing. Circular includes typically cause a compiler to fail with obviously-incorrect error messages. E.g. saying a type is not declared on the exact line that declares it.
    • Note: You can use a forward declaration or an #include for Board. Both will work.
  • Add a record (struct) named MoveResult to store the result of a move. It should have two member variables: a boolean variable that tells whether the move was legal and a floating point value for the net score.
  • Add a class named ArtificialIntelligence. It should have one member variable, which will represent the board value for the stones it plays. The class should also have the function prototypes.
  • Add the constructor. It has one precondition, which is that the parameter is a player board value.
    • Reminder: You have a BoardValue function that will help you here.
  • Add the isInvariantTrue function, which should return true if the class invariant is true and false otherwise. The class invariant requires that the member variable holding the board value contains a player board value.
  • Use an assert to ensure the class invariant is true at the end of the constructor.
    • Reminder: Do not check the class invariant at the beginning of the constructor.
  • Add the calculateNetScore function. It should start by determining the board value for the other player besides the “us” player. Then the function should call a function to determine the score for the “us” player. When making the function call, the calculateNetScore function should use its parameter, which is of the Board type. Then it should determine the score for the other player in a similar manner. Finally, it should calculate the difference between the scores of the two players, convert the difference value to a float, and return it.
    • Reminder: You can use a function in the BoardValue module to find the board value for the other player.
  • Note: If you do not explicitly typecast the result to a float, you may get a warning on some compilers.
  • Add the getPlayResult function. It should return whether or not the proposed move is legal and, if so, what the board would look like after. First, check if the specified place is both on the board and empty. If not, the move is not legal. Next, make a copy of the board and play the stone at the specified place. If any stones are lost to suicide as a result, the move is not legal. Otherwise, the move is legal. In the case of a legal move, do the following: (i) calculate the net score for the board with the added stone, and (ii) return a value indicating that the move is legal and also return the net score.

Over steps 9-13, you will add an implementation for the chooseMove function. Overall, it will construct a list of all valid moves, sort them, and then choose one of the highest-scoring moves at random.

  • First, the chooseMove function should declare an array of the SortableMove type to hold all the possible moves that are valid. Declare a constant for the array size. The constant should be equal to the number of places on the game board plus 1 (for passing). This constant says the maximum number of moves that will ever be stored in the array. You will also need a variable to store how many moves are currently stored in the array.  It should start at 0.
    • Note: Normally, there will be fewer valid moves than the maximum because there will be stones on the board blocking some places. However, if black passes as the first move, the AI will need to store moves in every position in the whole array.
  • Secondly, the chooseMove function should add the legal moves to the array. Start by adding the “pass” move. Set is_played to false and calculate net_score based on the current game board. Then, for each place on the board, determine the MoveResult for playing there. If the move is legal, add it at that place to the next spot in the array. Set all the member variables for the SortableMove.
    • Hint: When you add a move to the array, use the number of valid moves as the index. Then increment the number of valid moves.
    • Note: If no stone was player, it doesn’t matter what you set the row and column to. Nothing will ever look at them.
  • Thirdly, the chooseMove function should sort the moves in the array.
  • Fourthly, the chooseMove function should determine the maximum net score. Then it should find the first element in the array with that score. The elements from there to the end are tied for highest net score.
    • Reminder: The array is sorted in ascending order, so the highest-scoring elements are at the end.
    • Hint: There is a function in the Search module that will help you.
  1. Finally, the chooseMove function should choose one of the highest-scoring moves at random and return it. You can generate a random number using the rand() function declared in the

<cstdlib> library.

  • Hint: You can convert the values returned by rand() into the range you want using the modulus (%) operator.  If you want a random value in the interval [0, n), you can use:

my_value = rand() % n;

For example, rand() % 4 can return 0, 1, 2, or 3.

  • Note: The array elements are SortableMoves, but the chooseMove function returns a Move. This works because SortableMove inherits from Move, so all SortableMoves are also Moves. When converting a SortableMove to a Move, the extra fields are sliced off and only the Move fields are returned. The same thing happens when passing parameters by value.
    • Note: Each time you run your program, you will get the same “random” numbers in the same order. This can be very useful for debugging. If you want your random numbers to be different each time, you can seed the random number generator with the current time. Do this by calling the srand function once at the start of your main function:

srand((unsigned int)(time(nullptr)));

You will need to #include <ctime>. You do not have to seed the random number generator for this assignment.

  • FYI: rand() returns numbers in the interval [0, RAND_MAX], where RAND_MAX is a constant with a value of at least 215-1 = 32767. On POSIX systems (including replit, Mac, and Linux), RAND_MAX is always 231-1 = 2147483647.
  • Test your ArtificialIntelligence module with the TestArtificialIntelligence4.cpp program provided. You will need the TestHelper.h and TestHelper.cpp files and the 19to5.txt data file. The resulting program should give you full marks (example output).
    • Hint: g++ BoardSize.cpp BoardValue.cpp Board.cpp Move.cpp Search.cpp ArtificialIntelligence.cpp TestArtificialIntelligence4.cpp TestHelper.cpp -o parte
    • Note: The remaining 2 marks for Part E are for whether the moves are chosen randomly.

Part F: Add AI to the Game [5%, marked with Part B]

In Part F, you will improve your Game class to play stones instead of always passing. Your Game type class will still have the following public member functions:

  • Game ();
  • Game (const std::string& filename_in);
  • void printBoard () const;
  • void printWinner () const;
  • const Board& getBoard () const;
  • void blackPass ();
  • bool blackPlay (int row_in, int column_in);
  • bool whiteAi ();

The Game class will also still have the same private member function:

  • void printRemoved (const StonesRemoved& removed_in) const;

Perform the following steps:

  • In the declaration of the Game class, add an ArtificialIntelligence member variable. You will need another #include.
    • Reminder: You must not have an #include for Game.h in

ArtificialIntelligence.h, or you will get circular includes. See Part E, Step 1.

  • In the implementation for the Game default constructor, initialize your new member variable using an initializer list. You must use an initializer list because ArtificialIntelligence does not have a default constructor.
    • Hint: An initializer list starts with a colon (‘:’) and goes between the first line of the function and the opening curly brace. For example:

MyClass::MyClass ()

: member_variable(argument1, argument2)

{

// constructor body stuff

}

  • Reminder: The Board member is automatically initialized using its default constructor. You can add it to the initializer list with no parameters, but that will have no effect.
  • In the other constructor, initialize the new member variable in an analogous manner.
  • Improve the implementation for the whiteAi function. It should start by choosing a move. If the move was to not play a stone, it should print that white passed and return false. Otherwise, it should print “White placed a stone at row RRR, column CCC“, where RRR is the row and CCC is the column. Then it should play a stone there, print the stones removed, and return true.
    • Reminder: The whiteAi function should return true if white played a stone and

false otherwise.

  • Test your program before handing it in. The white AI should be smart enough to choose moves that capture stones, surround territory, and invade the other player’s territory. It should be smart enough not to fill in its own eyes, but it will not be smart enough to deliberately construct them.
    • Hint: g++ PlaceString.cpp BoardSize.cpp BoardValue.cpp Board.cpp Move.cpp Search.cpp ArtificialIntelligence.cpp Game.cpp main.cpp -o game
  • Hint: Testing will be easier if you load the ear.txt or simple.txt board. The shapes.txt board will not work because some of the stones start surrounded and therefore the game will reject every move as violating the suicide rule.
    • Note: The ko rule is not yet implemented, so the AI can sometimes “undo” moves that capture a single stone by capturing it back. This will be fixed in Assignment 6.

Part G: Document Board functions [10% documentation]

In Part G, you will write documentation for your ArtificialIntelligence module in the style described in Section 4 of the online notes. You will write documentation for each public member function and for the class invariant. The format for function documentation is as follows (no bold-face in code):

//

// functionName

//

// Purpose: Explain why would you call this function.

// Parameter(s):

//    <1> parameter1: What it does

//    <2> parameter2: What it does

//    …

// Precondition(s):

//    <1> some precondition

//    <2> another precondition

//    …

// Returns: The meaning of the value the function returns.

// Side Effect: Anything the function does besides return

//               a value.

//

As in Part E, your ArtificialIntelligence class should have the following public member functions:

  • ArtificialIntelligence (char us_value_in);
  • Move chooseMove (const Game& game_in) const;

Perform the following steps:

  1. Document the constructor. Consider how many parameters and preconditions it has. All constructors have a side effect but no return value.
    1. Reminder: Documentation is written for programmers who want to call your functions. Assume the audience can see your header (.h) file but not your source (.cpp) file. Function documentation must be placed in the header file.
    1. Reminder: You do not have to document the data types for your parameters. Your audience can see the function prototype. Instead, describe the purpose of each parameter.
    1. Reminder: The preconditions are normally just the contents of your assert

statements. Copy-paste will be helpful.

  • Reminder: Don’t include the class invariant as a precondition. The class invariant is part of the module implementation, so it is hidden as part of data encapsulation.
  • Document the chooseMove function.
  • Immediately before the class definition, write general documentation for the class. Start with one or two sentences describing the purpose of the class (what it is used for). Then document the class invariant. If possible, use code instead of sentences to describe what the class invariant requires.
    • Hint: The documentation for you class could look something like the following:

//

// FruitTracker

//

// A FruitTracker compares the quality of different types

//    of fruits, such as apples to oranges. Client code

//    can query the best and worst types so far.

//

// Class Invariant:

//    <1> worst_score >= 0.0f

//    <2> best_score >= worst_score

//

  • Test that your program still compiles. It is easy to accidentally damage function prototypes while adding documentation around them.
    • Reminder: g++ PlaceString.cpp BoardSize.cpp BoardValue.cpp Board.cpp Move.cpp Search.cpp ArtificialIntelligence.cpp Game.cpp main.cpp -o game

Formatting [ 10% if not done]

  1. Neatly indent your program using a consistent indentation scheme.
  2. Put spaces around your arithmetic operators:

x = x + 3;

  • Use symbolic constants, such as BOARD_SIZE, when appropriate.
  • Include a comment at the top of main.cpp that states your name and student number.
  • Format your program so that it is easily readable. Things that make a program hard to read include:
    • Very many blank lines. If half or more of your lines are blank, you have too many. Put a blank line between logically distinct sections of your program.
    • Multiple commands on the same line. In general, do not do this. You can do it if it makes the program clearer than if the same commands were on separate lines.
    • Uninformative variable names. For a local variable that is only used for a few lines, the name does not really matter. However, if a variable is used over a larger area (including any global or member variable), it should have a name that documents its purpose.

Similarly, parameters should have self-documenting names because the function will be called from elsewhere in the program.

  • No variable names in function prototypes. Function parameters should have the same name in the prototype as in the implementation. Doing so makes calling the function much less confusing. (Contrary to some CS 110 training.)

Submission

  • If you are working with replit, download your project as a .zip file. Check that it contains all your .cpp and .h files.
  • Submit a complete copy of your source code to UR Courses. You should have the following files with exactly these names:
  • ArtificialIntelligence.h
  • ArtificialIntelligence.cpp
  • Board.h
  • Board.cpp
  • BoardSize.h
  • BoardSize.cpp
  • BoardValue.h
  • BoardValue.cpp
  • Game.h
  • Game.cpp
  • main.cpp
  • Move.h
  • Move.cpp
  • PlaceString.h
  • PlaceString.cpp
  • Search.h
  • Search.cpp
    • Note: A Visual Studio .sln file does NOT contain the source code; it is just a text file.

You do not need to submit it. Make sure you submit the .cpp files and .h files.

  • Note: You do not need to submit the test programs. The marker has those already.
  • If possible, convert all your files to a single archive (.zip file) before submitting them to UR Courses
  • Do NOT submit a compiled version
  • Do NOT submit Visual Studio intermediate files, such as:
    • Debug folder
    • Release folder
    • ipch folder
    • *.ncb, *.sdf, or *.db files
  • Do NOT submit a screenshot
Order Now

Get expert help for Restructure your Go program and many more. 24X7 help, plag free solution. Order online now!

Universal Assignment (June 21, 2025) Assignment 4: Restructure your Go program. Retrieved from https://universalassignment.com/assignment-4-restructure-your-go-program/.
"Assignment 4: Restructure your Go program." Universal Assignment - June 21, 2025, https://universalassignment.com/assignment-4-restructure-your-go-program/
Universal Assignment March 12, 2023 Assignment 4: Restructure your Go program., viewed June 21, 2025,<https://universalassignment.com/assignment-4-restructure-your-go-program/>
Universal Assignment - Assignment 4: Restructure your Go program. [Internet]. [Accessed June 21, 2025]. Available from: https://universalassignment.com/assignment-4-restructure-your-go-program/
"Assignment 4: Restructure your Go program." Universal Assignment - Accessed June 21, 2025. https://universalassignment.com/assignment-4-restructure-your-go-program/
"Assignment 4: Restructure your Go program." Universal Assignment [Online]. Available: https://universalassignment.com/assignment-4-restructure-your-go-program/. [Accessed: June 21, 2025]

Please note along with our service, we will provide you with the following deliverables:

Please do not hesitate to put forward any queries regarding the service provision.

We look forward to having you on board with us.

Most Frequent Questions & Answers

Universal Assignment Services is the best place to get help in your all kind of assignment help. We have 172+ experts available, who can help you to get HD+ grades. We also provide Free Plag report, Free Revisions,Best Price in the industry guaranteed.

We provide all kinds of assignmednt help, Report writing, Essay Writing, Dissertations, Thesis writing, Research Proposal, Research Report, Home work help, Question Answers help, Case studies, mathematical and Statistical tasks, Website development, Android application, Resume/CV writing, SOP(Statement of Purpose) Writing, Blog/Article, Poster making and so on.

We are available round the clock, 24X7, 365 days. You can appach us to our Whatsapp number +1 (613)778 8542 or email to info@universalassignment.com . We provide Free revision policy, if you need and revisions to be done on the task, we will do the same for you as soon as possible.

We provide services mainly to all major institutes and Universities in Australia, Canada, China, Malaysia, India, South Africa, New Zealand, Singapore, the United Arab Emirates, the United Kingdom, and the United States.

We provide lucrative discounts from 28% to 70% as per the wordcount, Technicality, Deadline and the number of your previous assignments done with us.

After your assignment request our team will check and update you the best suitable service for you alongwith the charges for the task. After confirmation and payment team will start the work and provide the task as per the deadline.

Yes, we will provide Plagirism free task and a free turnitin report along with the task without any extra cost.

No, if the main requirement is same, you don’t have to pay any additional amount. But it there is a additional requirement, then you have to pay the balance amount in order to get the revised solution.

The Fees are as minimum as $10 per page(1 page=250 words) and in case of a big task, we provide huge discounts.

We accept all the major Credit and Debit Cards for the payment. We do accept Paypal also.

Popular Assignments

Evidence to Inform Nursing Practice Assignment Help

Unit Code:   NURS12165 Unit Title:    Evidence to Inform Nursing Practice Assessment Three Type:                               Written Assessment Due date:                         Week 11: Wednesday, 28 May 2025 at 1600 (AEST) Extensions:                     Available as per policy Return date:                    Results for this assessment will be made available on Wednesday, 18 June 2025 Weighting:                       50% Length:                           

Read More »

NUR1120 | Burden of Disease and Health Equity

Assessment Item Task SheetCourse code andnameNUR1120 | Burden of Disease and Health Equity Assessment itemand nameAssessment Three | ReportDue date and time Week 11 | 22/04/2025 at 2359 hours AESTLength 1400 words (+/- 10% in each section) – includes in-text references, but not reference list.Marks out of:Weighting:80 Marks50%Assessed CourseLearning Outcomes(CLO)CLO1,

Read More »

PSY1040 Portfolio: Cultural Responsiveness & Self-Awareness

Course Code and NamePSY1040: An Introduction to Cultural Safety in PracticeAssessment Item Number and NameAssessment 2: PortfolioAssessment Item TypePortfolio PSY1040 Portfolio: Cultural Responsiveness & Self-AwarenessDue Date & TimeTuesday, 29 April 2025 (Week 12), 11:59pmLength2000 words – an average of 400 words per task.Marks and WeightingMarked out of: 100Weighting: 50%Assessed Course

Read More »

Innovative Digital App Development Report

OVERALL DESCRIPTION OF TYPE OF ASSIGNMENT Assessment 1- Type of Assignment Individual Written Report Details Individual Written Report 3,000 words (500 words of the Report is Contextualisation) Weighting of Assessment : 70% INDIVIDUAL MARK Learning outcomes assessed by Assessment: 1, 2, 3 and 4 – See Module Listings of Learning

Read More »

Tourism Trends and Investment Decisions: A Comparative Study

Assignment TaskYou are a strategist working for a major hospitality group based in Australia. The company is planninginternational expansion, and the board has asked you to compile a report to identify the most suitablelocation for the project. The board has shortlisted two international locations (which will be allocatedto you by

Read More »

EC502 Language and Literacy in the Early Years

EC502 Language and Literacy in the Early Years Unit Code/Description EC502 Language and Literacy in the Early Years Course/Subject Bachelor of Early Childhood Education Semester March 2025 Assessment Overview   Unit Learning Outcomes Addressed 1, 2, 3 Assessment Objective Assessment 1: Poster Including an Invigilated stage in Week 3. Due

Read More »

EC501 Early Childhood Learning and Development

Unit Code/Description EC501 Early Childhood Learning and Development Course/Subject Graduate Diploma in Education (early childhood) Semester S 1, 2025 Assessment Overview   Unit Learning Outcomes Addressed 1, 2, 3 Assessment Objective In this assessment, student are required to select one of the case studies provided and critically analyze the child’s

Read More »

JSB172: Professional Academic Skills

JSB172: Professional Academic SkillsAssessment: Workplace Report and Presentation Weight: 50%Due date: Friday 30th May 11:59pm Length: 1,750 words (+/- 10 %) / 5minutesPurpose/Learning Objectives:This assessment relates to Learning Outcomes 1, 2, 3, and 4: Task:Your task is to write a Workplace Report identifying how to address the topic/issue chosen or

Read More »

2015PSY Developmental Psychology Assignment

2015PSY Developmental Psychology Assignment 2025 2015PSY Developmental Psychology Assignment Assignment MaterialsAssignment Information Sheet & Marking Criteria.pdf (this document)Assignment Template.docx (template)Example Assignment.pdf (HD exemplar)Due Date: Friday 16 May, 11:59PM (Week 10)Weighting: Marked out of 100 (worth 30% of course grade)Word Count: 1,500 words maximum(inclusive of main text, headings, in-text citations; excluding

Read More »

Principles of Economics Federal Budget

Principles of Economics Short-answer Assignment V1 (20% of final mark) The assignment consists of four questions.  You should allocate at least half a page (or 250 words) to each answer or 1000 words for all four answers depending on the nature of and/or marks allocated for the question/s. You may

Read More »

LML6003 – AUSTRALIA’S VISA SYSTEM 1 (FAMILY AND OTHERVISAS)

Graduate Diploma in Migration Law LML6003 – AUSTRALIA’S VISA SYSTEM 1 (FAMILY AND OTHER VISAS) Assessment Task 2 – Semester 1, 2025 LML6003 – AUSTRALIA’S VISA SYSTEM 1 (FAMILY AND OTHERVISAS) Instructions: 1. Students must answer all questions as indicated. Make certain all answers are clearly labelled. 2. Make certain

Read More »

Construction Cadetships in the Australian Construction Industry

REPORT TOPICPrepare an Academic Report on the following:‘Construction Cadetships in the Australian Construction Industry’.The report should encompass the following: Your personal evaluation and critique of the key findings in your report including your evaluation of construction cadetships, yourfindings in relation to potential issues/problems with cadetships and your recommendations to improve

Read More »

Assessing Corporate Governance and its Significance

Assessing Corporate Governance and its Significance: A Case Study Analysis Overview: Accounting irregularities have cost investors millions of dollars and, most importantly, adversely impacted their confidence in the financial system. While there have been remarkable improvements in regulatory supervision, auditing framework and reporting transparency, young graduates must assess major corporate

Read More »

Master of Professional Accounting and Accounting Advanced

Assessment 2 – Business Case (CVP) AnalysisUnit Code/Description ACC901 Accounting for Managerial DecisionsCourse/Subject Master of Professional Accounting and Master of Professional Accounting AdvancedSemester S1 2025 Assessment Overview Unit Learning OutcomesAddressed1,2,3,4 and 5Assessment Objective The primary objective of this assessment is to assess the students’ ability to apply CVPanalysis and relevant

Read More »

Urban Design Theory Essay writing

Essays are a major form of assessment at university. Through essays, you develop your understanding of discipline-specific content, strengthen your critical thinking, and develop your ability to translate that thinking into a persuasive written form. This assignment assesses your understanding of the following Unit Learning Outcomes: 1) understand the historic

Read More »

Statutory Interpretation of Disability Discrimination in NSW Law

Foundations of Law 70102 – Assessment Task 3 – Autumn 2025Statutory Interpretation and Research ExerciseDue: Thursday 22 May 2025 by 23.59Length: 2000 words (excluding the headings Part A, Part B and Part C, footnotes andbibliography. Any additional headings that you decide to use will be included in the wordcount)Weighting: 40%Task

Read More »

Engineering Career Readiness: Sustainability & Reflection

Objectives: The purpose of this assignment is to: Apply your learning in this unit to your development as an engineering graduate and your future career.Develop the ability to communicate yourself professionally.Develop an ability to reflect on your professional development, and identify any gaps in your capabilities.Unit Learning Outcomes: This task

Read More »

Child Study Report: Saif’s Development Across Key Domains

Child Study Report: Saif’s Development Across Key Domains Introduction This Child Study Report focuses on Saif, a 4-year and 6-month-old boy attending our childcare centre. Saif is an active, curious, and sociable child who engages enthusiastically in various activities. Over three weeks, multiple observations were conducted in different settings—such as

Read More »

2500 Words Insurance Case Study Analysis

Assessing Corporate Governance and its Significance: A Case Study Analysis Overview: Accounting irregularities have cost investors millions of dollars and, most importantly, adversely impacted their confidence in the financial system. While there have been remarkable improvements in regulatory supervision, auditing framework and reporting transparency, young graduates must assess major corporate

Read More »

Critical Reflections: Arts, Play & Mental Health

Peer Learning and DiscussionTask type Discussion Contribution Task description Contribute constructively to the formal weekly online discussions under the guidance of your moderator, in peer-to-peer learning. The purpose of the discussions is for students to explore and share ideas linked to the material being studied that week, and develop skills

Read More »

Indo-Pacific Health Challenge: Community Practice in Kiribati

Task type Indo-Pacific health challenge scenario Task description You will be presented with a real-world case scenario of a health challenge confronting an Indo-Pacific community that directly relates to the current climate emergency. You will analyse the scenario, exploring how community practice principles are being applied. You will then provide

Read More »

Assessment Task 1– SQL Report – Individual Assessment

MIS202 –Managing Data and Information – Trimester 1 2025Assessment Task 1– SQL Report – Individual AssessmentDUE DATE: Friday, 4 April, by 8:00pm (Melbourne time)PERCENTAGE OF FINAL GRADE: 30%WORD COUNT: Maximum 2000 wordsDescriptionPurposeThis task provides you with opportunities to learn the knowledge (GLO1 & ULO1) and skills (GLO 3 & ULO2;GLO4

Read More »

Assessment Category Infographic

Assessment # Title Assessment 1Assessment Category InfographicWeight 50%Length / Duration 500 words (excluding reference list)Individual / Group IndividualLearning OutcomesThis assessment evaluates your achievement of the following Unit Learning Outcomes:

Read More »

STM1001: Assignment 3 for Science/Health Stream Students

STM1001: Assignment 3 Science/Health Stream Students Only Academic Integrity Information In submitting your work, you are consenting that it may be copied and transmitted by the University for the detection of plagiarism. If you are unsure of your academic integrity responsibilities, please check the information provided in the Assessment Overview

Read More »

ACCG1000 Accounting for Decision Making Xero Assignment

1ACCG1000Accounting for Decision MakingXero AssignmentInformation packSession 2 2024Due Date: Friday 18th October 2024 at 11.55pm2Xero AssignmentIntroductionThe Xero assignment is designed to provide introductory accounting students with an overview of the Xero Accounting Software by completing a one-month accounting cycle for a fictional business. This is an online assignment worth 20%

Read More »

WRIT1001 Assessment Notification 2

6Final Essay: Rhetorical analysisDue: Friday 18 October 2024 at 23:59 (Sydney time)Length: 1500 words, worth 40% of the overall grade for the unitSubmit: as a Word document or PDF, via Canvas AssignmentMain question:● Present a scholarly essay that analyses the rhetoric used in arguments about thecontentious topic you have been

Read More »

WRIT1000 Assessment Four

Title: Self-ReflectionDue: Friday October 18 by 11:59PM.Length: 500 words (+/- 10%)Weight: 10% of the total gradeFormat: Times New Roman, double-spaced, 12pt. Your project should have the title“WRIT1000 Assessment Four – Self Reflection for xxxxxxx” where “xxxxxxxx” is yourstudent number. Please only submit Word documents (.doc or .docx). Turnitin doesnot recognise

Read More »

Written Assessment – Psychosocial Research Perspectives

Written Assessment – Psychosocial Research Perspectives TRIGGER WARNING: This is a case study of a real person. Katherine Knight was the first woman in Australia to receive a life sentence without parole after she decapitated and cooked her lover. If you think that you will have problems reading about this

Read More »

Can't Find Your Assignment?