Assignment 1 is available here. The PNFG compiler is here, and the NFG interpreter is here.
To compiler a game foo.pnfg:
java -cp pnfg3.jar pnfg.Main -nfg foo.pnfg > foo.nfg
To run a compiled game:
java -cp nfg.jar nfg.Main foo.nfg
An example pnfg version of COD is here. For your amusement and to serve as examples, you can try a couple of games developed by previous students, here and here
To analyze the game foo.pnfg and print out the first winning solution use the following command-line:
java -cp pnfg3.jar pnfg.Main -dfa -thread -simplify -simplify_locals -simplify_timers -dfa_solveplaye3 -dfa_solve_winningset -dfa_w2 -dfa_time 10 -dfa_solve 50 -dfa_solve_stop -dfa_solve_rand_value 17 foo.pnfg
The "50" value associated with the -dfa_solve option is the maximum solution length it will find, and is the parameter you need to vary in the assignment. You can also play with the "10", which is a timeout in minutes for the entire search. Removing the "-dfa_solve_stop" option will result in all winning solutions being printed instead of just the first. The "-dfa_solve_rand_value" sets a specific random seed (17 here) to make the search process deterministic and repeatable. You can see full help on options by running
java -cp pnfg3.jar pnfg.Main
An example plot DAG can be seen here (as a "Puzzle Structure Chart").
Further documentation on PNFG can be found in Félix Martineau's MSc thesis, and this paper