I shall put up links to working code at the beginning of each stage, obviously you will only learn if you attempt to do it by yourself before you look at the solution on the next page! Any of the stages may be attempted independently of the others.