winPileOneNW = [45,85]; winPileTwoNW = [225,85]; winPileThreeNW = [380,85]; /* This file sets up an interactive environment for playing Nim in the traditional way */ /* Some of the interface components are common to nimLeeke2008 but they are relocated on the display, and have simpler less contrained actions associated with them */ stoneSize=5; p0 is [winPileOneNW[1]+10, winPileOneNW[2]-40]; p4 is [winPileOneNW[1]+10,winPileOneNW[2]+0]; p3 is [winPileOneNW[1]-10, winPileOneNW[2]+0]; p2 is [winPileOneNW[1]+20, winPileOneNW[2]-20]; p5 is [winPileOneNW[1]+30,winPileOneNW[2]+0]; p6 is [winPileOneNW[1]-20,winPileOneNW[2]+20]; p1 is [winPileOneNW[1]+0,winPileOneNW[2]-20]; p7 is [winPileOneNW[1]+0, winPileOneNW[2]+20]; p8 is [winPileOneNW[1]+20,winPileOneNW[2]+20]; p9 is [winPileOneNW[1]+40,winPileOneNW[2]+20]; p10 is [winPileOneNW[1]-30, winPileOneNW[2]+40]; p11 is [winPileOneNW[1]-10, winPileOneNW[2]+40]; p12 is [winPileOneNW[1]+10, winPileOneNW[2]+40]; p13 is [winPileOneNW[1]+30, winPileOneNW[2]+40]; p14 is [winPileOneNW[1]+50, winPileOneNW[2]+40]; stone0 is Circle(p0[1],p0[2],stoneSize,colOne0,"yellow"); stone1 is Circle(p1[1],p1[2],stoneSize,colOne1,"yellow"); stone2 is Circle(p2[1],p2[2],stoneSize,colOne2,"yellow"); stone3 is Circle(p3[1],p3[2],stoneSize,colOne3,"yellow"); stone4 is Circle(p4[1],p4[2],stoneSize,colOne4,"yellow"); stone5 is Circle(p5[1],p5[2],stoneSize,colOne5,"yellow"); stone6 is Circle(p6[1],p6[2],stoneSize,colOne6,"yellow"); stone7 is Circle(p7[1],p7[2],stoneSize,colOne7,"yellow"); stone8 is Circle(p8[1],p8[2],stoneSize,colOne8,"yellow"); stone9 is Circle(p9[1],p9[2],stoneSize,colOne9,"yellow"); stone10 is Circle(p10[1],p10[2],stoneSize,colOne10,"yellow"); stone11 is Circle(p11[1],p11[2],stoneSize,colOne11,"yellow"); stone12 is Circle(p12[1],p12[2],stoneSize,colOne12,"yellow"); stone13 is Circle(p13[1],p13[2],stoneSize,colOne13,"yellow"); stone14 is Circle(p14[1],p14[2],stoneSize,colOne14,"yellow"); pp0 is [winPileTwoNW[1]+10, winPileTwoNW[2]-40]; pp4 is [winPileTwoNW[1]+10,winPileTwoNW[2]+0]; pp3 is [winPileTwoNW[1]-10, winPileTwoNW[2]+0]; pp2 is [winPileTwoNW[1]+20, winPileTwoNW[2]-20]; pp5 is [winPileTwoNW[1]+30,winPileTwoNW[2]+0]; pp6 is [winPileTwoNW[1]-20,winPileTwoNW[2]+20]; pp1 is [winPileTwoNW[1]+0,winPileTwoNW[2]-20]; pp7 is [winPileTwoNW[1]+0, winPileTwoNW[2]+20]; pp8 is [winPileTwoNW[1]+20,winPileTwoNW[2]+20]; pp9 is [winPileTwoNW[1]+40,winPileTwoNW[2]+20]; pp10 is [winPileTwoNW[1]-30, winPileTwoNW[2]+40]; pp11 is [winPileTwoNW[1]-10, winPileTwoNW[2]+40]; pp12 is [winPileTwoNW[1]+10, winPileTwoNW[2]+40]; pp13 is [winPileTwoNW[1]+30, winPileTwoNW[2]+40]; pp14 is [winPileTwoNW[1]+50, winPileTwoNW[2]+40]; p2stone0 is Circle(pp0[1],pp0[2],stoneSize,colTwo0,"yellow"); p2stone1 is Circle(pp1[1],pp1[2],stoneSize,colTwo1,"yellow"); p2stone2 is Circle(pp2[1],pp2[2],stoneSize,colTwo2,"yellow"); p2stone3 is Circle(pp3[1],pp3[2],stoneSize,colTwo3,"yellow"); p2stone4 is Circle(pp4[1],pp4[2],stoneSize,colTwo4,"yellow"); p2stone5 is Circle(pp5[1],pp5[2],stoneSize,colTwo5,"yellow"); p2stone6 is Circle(pp6[1],pp6[2],stoneSize,colTwo6,"yellow"); p2stone7 is Circle(pp7[1],pp7[2],stoneSize,colTwo7,"yellow"); p2stone8 is Circle(pp8[1],pp8[2],stoneSize,colTwo8,"yellow"); p2stone9 is Circle(pp9[1],pp9[2],stoneSize,colTwo9,"yellow"); p2stone10 is Circle(pp10[1],pp10[2],stoneSize,colTwo10,"yellow"); p2stone11 is Circle(pp11[1],pp11[2],stoneSize,colTwo11,"yellow"); p2stone12 is Circle(pp12[1],pp12[2],stoneSize,colTwo12,"yellow"); p2stone13 is Circle(pp13[1],pp13[2],stoneSize,colTwo13,"yellow"); p2stone14 is Circle(pp14[1],pp14[2],stoneSize,colTwo14,"yellow"); ppp0 is [winPileThreeNW[1]+10, winPileThreeNW[2]-40]; ppp4 is [winPileThreeNW[1]+10,winPileThreeNW[2]+0]; ppp3 is [winPileThreeNW[1]-10, winPileThreeNW[2]+0]; ppp2 is [winPileThreeNW[1]+20, winPileThreeNW[2]-20]; ppp5 is [winPileThreeNW[1]+30,winPileThreeNW[2]+0]; ppp6 is [winPileThreeNW[1]-20,winPileThreeNW[2]+20]; ppp1 is [winPileThreeNW[1]+0,winPileThreeNW[2]-20]; ppp7 is [winPileThreeNW[1]+0, winPileThreeNW[2]+20]; ppp8 is [winPileThreeNW[1]+20,winPileThreeNW[2]+20]; ppp9 is [winPileThreeNW[1]+40,winPileThreeNW[2]+20]; ppp10 is [winPileThreeNW[1]-30, winPileThreeNW[2]+40]; ppp11 is [winPileThreeNW[1]-10, winPileThreeNW[2]+40]; ppp12 is [winPileThreeNW[1]+10, winPileThreeNW[2]+40]; ppp13 is [winPileThreeNW[1]+30, winPileThreeNW[2]+40]; ppp14 is [winPileThreeNW[1]+50, winPileThreeNW[2]+40]; p3stone0 is Circle(ppp0[1],ppp0[2],stoneSize,colThree0,"yellow"); p3stone1 is Circle(ppp1[1],ppp1[2],stoneSize,colThree1,"yellow"); p3stone2 is Circle(ppp2[1],ppp2[2],stoneSize,colThree2,"yellow"); p3stone3 is Circle(ppp3[1],ppp3[2],stoneSize,colThree3,"yellow"); p3stone4 is Circle(ppp4[1],ppp4[2],stoneSize,colThree4,"yellow"); p3stone5 is Circle(ppp5[1],ppp5[2],stoneSize,colThree5,"yellow"); p3stone6 is Circle(ppp6[1],ppp6[2],stoneSize,colThree6,"yellow"); p3stone7 is Circle(ppp7[1],ppp7[2],stoneSize,colThree7,"yellow"); p3stone8 is Circle(ppp8[1],ppp8[2],stoneSize,colThree8,"yellow"); p3stone9 is Circle(ppp9[1],ppp9[2],stoneSize,colThree9,"yellow"); p3stone10 is Circle(ppp10[1],ppp10[2],stoneSize,colThree10,"yellow"); p3stone11 is Circle(ppp11[1],ppp11[2],stoneSize,colThree11,"yellow"); p3stone12 is Circle(ppp12[1],ppp12[2],stoneSize,colThree12,"yellow"); p3stone13 is Circle(ppp13[1],ppp13[2],stoneSize,colThree13,"yellow"); p3stone14 is Circle(ppp14[1],ppp14[2],stoneSize,colThree14,"yellow"); colOne0 is (pileSizeOne>14) ? "red" : "yellow"; colOne1 is (pileSizeOne>13) ? "red" : "yellow"; colOne2 is (pileSizeOne>12) ? "red" : "yellow"; colOne3 is (pileSizeOne>11) ? "red" : "yellow"; colOne4 is (pileSizeOne>10) ? "red" : "yellow"; colOne5 is (pileSizeOne>9) ? "red" : "yellow"; colOne6 is (pileSizeOne>8) ? "red" : "yellow"; colOne7 is (pileSizeOne>7) ? "red" : "yellow"; colOne8 is (pileSizeOne>6) ? "red" : "yellow"; colOne9 is (pileSizeOne>5) ? "red" : "yellow"; colOne10 is (pileSizeOne>4) ? "red" : "yellow"; colOne11 is (pileSizeOne>3) ? "red" : "yellow"; colOne12 is (pileSizeOne>2) ? "red" : "yellow"; colOne13 is (pileSizeOne>1) ? "red" : "yellow"; colOne14 is (pileSizeOne>0) ? "red" : "yellow"; colTwo0 is (pileSizeTwo>14) ? "red" : "yellow"; colTwo1 is (pileSizeTwo>13) ? "red" : "yellow"; colTwo2 is (pileSizeTwo>12) ? "red" : "yellow"; colTwo3 is (pileSizeTwo>11) ? "red" : "yellow"; colTwo4 is (pileSizeTwo>10) ? "red" : "yellow"; colTwo5 is (pileSizeTwo>9) ? "red" : "yellow"; colTwo6 is (pileSizeTwo>8) ? "red" : "yellow"; colTwo7 is (pileSizeTwo>7) ? "red" : "yellow"; colTwo8 is (pileSizeTwo>6) ? "red" : "yellow"; colTwo9 is (pileSizeTwo>5) ? "red" : "yellow"; colTwo10 is (pileSizeTwo>4) ? "red" : "yellow"; colTwo11 is (pileSizeTwo>3) ? "red" : "yellow"; colTwo12 is (pileSizeTwo>2) ? "red" : "yellow"; colTwo13 is (pileSizeTwo>1) ? "red" : "yellow"; colTwo14 is (pileSizeTwo>0) ? "red" : "yellow"; colThree0 is (pileSizeThree>14) ? "red" : "yellow"; colThree1 is (pileSizeThree>13) ? "red" : "yellow"; colThree2 is (pileSizeThree>12) ? "red" : "yellow"; colThree3 is (pileSizeThree>11) ? "red" : "yellow"; colThree4 is (pileSizeThree>10) ? "red" : "yellow"; colThree5 is (pileSizeThree>9) ? "red" : "yellow"; colThree6 is (pileSizeThree>8) ? "red" : "yellow"; colThree7 is (pileSizeThree>7) ? "red" : "yellow"; colThree8 is (pileSizeThree>6) ? "red" : "yellow"; colThree9 is (pileSizeThree>5) ? "red" : "yellow"; colThree10 is (pileSizeThree>4) ? "red" : "yellow"; colThree11 is (pileSizeThree>3) ? "red" : "yellow"; colThree12 is (pileSizeThree>2) ? "red" : "yellow"; colThree13 is (pileSizeThree>1) ? "red" : "yellow"; colThree14 is (pileSizeThree>0) ? "red" : "yellow"; pileLabelOne is Text(pileLabelOneTxt,70,140,"black"); pileLabelTwo is Text(pileLabelTwoTxt,230,140,"black"); pileLabelThree is Text(pileLabelThreeTxt,385,140,"black"); pileButtonOne is Button("pileButtonOne","Take from pile 1",20,160,pile1able); pileButtonTwo is Button("pileButtonTwo","Take from pile 2",180,160,pile2able); pileButtonThree is Button("pileButtonThree","Take from pile 3",340,160,pile3able); proc resetGame : resetButton_clicked { if (resetButton_clicked==1) { pileSizeOne = rnd(14)+1; pileSizeTwo = rnd(14)+1; pileSizeThree = rnd(14)+1; numberOfTurns = 0; activePile = 0; binarySumHistoryLabelTxt = ""; winnerLabelTxt = ""; } } proc takePile1 : pileButtonOne_clicked { if (pileButtonOne_clicked==1){ if (pileSizeOne>0) { if (activePile == 0) { activePile=1; pileSizeOne--; } else if (activePile == 1) { pileSizeOne--; } } } } /*The response to a player removing a token from pile number 2*/ proc takePile2 : pileButtonTwo_clicked { if (pileButtonTwo_clicked==1){ if (pileSizeTwo>0) { if (activePile == 0) { activePile=2; pileSizeTwo--; } else if (activePile == 2) { pileSizeTwo--; } } } } /*The response to a player removing a token from pile number 3*/ proc takePile3 : pileButtonThree_clicked{ if (pileButtonThree_clicked==1){ if (pileSizeThree>0) { if (activePile == 0) { activePile=3; pileSizeThree--; } else if (activePile == 3) { pileSizeThree--; } } } } picture is [stone0,stone1,stone2,stone3,stone4,stone5,stone6,stone7,stone8,stone9,stone10,stone11,stone12,stone13,stone14,p2stone0,p2stone1,p2stone2,p2stone3,p2stone4,p2stone5,p2stone6,p2stone7,p2stone8,p2stone9,p2stone10,p2stone11,p2stone12,p2stone13,p2stone14,p3stone0,p3stone1,p3stone2,p3stone3,p3stone4,p3stone5,p3stone6,p3stone7,p3stone8,p3stone9,p3stone10,p3stone11,p3stone12,p3stone13,p3stone14,pileLabelOne,pileLabelTwo,pileLabelThree,pileButtonOne,pileButtonTwo,pileButtonThree];