a) This you just have to list all the attributes for the program. i.e. unique id's for puzzle pieces, attributes for the puzzle like a data field for the number of edges, methods that you will use on the puzzle pieces like a rotate method, boolean attributes for tracking which pieces have been used/checked. we also had an array to store the edges in that match the current pieces edges
b) in here we talked about the notation to represent the puzzle piece. I see you have shapes with pictures of pigs on them You will need to have a notation that describes each side i.e. the orientation of the pig, the colour and whether it is a head or tail you could use - T, R, L (a Tail which is red and is pointed left) Therefore a shape could be described by combining 3 of these for a triangle or 8 for the octagon. there are several alternatives to this we figured out the total possible number of different edges i.e. how many different combinatiosn of colour, end/head and orientation there could be (think it was 16) and assigned numbers to them. so 1-8 was for all the heads of different colours and different orientations and then -1 to -8 was for the tails of the same colour and orientation. this was good because when two edges matched adding their number would equal 0 and we would know they matched. we also found it necessary to have a data structure for the pattern that the pieces would form we called this 'slot' and this was used to show connections between pieces that were required to form the final structure.
c) This is simply formalising the data structure you created in part b. using the data structure for a write a file that can represent a set of pieces. think about whether you want it to all be on one line or be seperated by piece. you need to write it out like you will feed it into the program d) Are you going to use brute force? or is there a more effectient way to do it? For ours we had an array where each index had a piece and that piece had to match with several other indexes piece by matching sides to make the shape. We did this by comparing sides to see if they matched, if they didnt we rotated the piece and checked again, we did this over and over until we found a solution or had checked every piece in every postion in every rotation
our total routine was to initialise variables, i.e. read in the file with piece info, construct a list of possible matches for each edge on each piece then the last step was to match these up and see if the fitted in the slot pattern