diff --git a/.gitignore b/.gitignore index 5d382a75..04ab97c3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,10 @@ bin .metadata +.recommenders .DS_Store # Package Files # *.war *.ear +TeachingKidsProgramming/.virtual_proctor.txt diff --git a/Graphics/Tortoise.ai b/Graphics/Tortoise.ai new file mode 100644 index 00000000..0ef852eb --- /dev/null +++ b/Graphics/Tortoise.ai @@ -0,0 +1,497 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[6 0 R 25 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + 2014-03-08T04:13:40-08:00 + Adobe Illustrator CS5.1 + 2014-03-08T04:16:22-08:00 + 2014-03-08T04:16:22-08:00 + + + + 184 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAC4AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYqt kkjijaWVgkaAs7sQFVQKkknoBir528+/85U3M+tP5Y/K3ST5g1UkxDUSjywlwDy+rwx0aXj/ADsQ u3RhviqWRfkz/wA5H+eE+sedPOb6Ra3G0umwyt9gDatva+lb/ea+O+Kqzf8AOEmkyitx5vvJXqTy Nsnf5yNiqCuf+cSvP+gyi98leeJI7tFY1cz2Uh/yVeB5evvtiqVD84P+ci/ypuYbbz3pp1rSAQiz 3IUllBqRHfQAgvT/AH6HPtir3f8ALD89fIf5hxrDpdybTWQvKXR7uiT7LVjFQlZVFDuprTdgMVeh 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 2KuxV2KuxV2KuxV2KuxV2KuxV2Kv/9k= + + + + + + + + + application/pdf + + + 1 + False + False + + 612.240234 + 792.000000 + Points + + + + + MyriadPro-Regular + Myriad Pro + Regular + Open Type + Version 2.062;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895 + False + MyriadPro-Regular.otf + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + + + Document + + + xmp.did:06630616BBA6E311B3CCFFD860DE1EE3 + uuid:c83b2b23-218d-41fb-9db0-400630351060 + xmp.did:06630616BBA6E311B3CCFFD860DE1EE3 + proof:pdf + + + + + saved + xmp.iid:06630616BBA6E311B3CCFFD860DE1EE3 + 2014-03-08T04:13:40-08:00 + Adobe Illustrator CS5.1 + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 30 0 R/TrimBox[0.0 0.0 612.24 792.0]/Type/Page>> endobj 27 0 obj <>stream +Hˊʌo%0il #h~}' +uwU%"9qy7ջ7)Ûp|0-Z /_|пWoH/!J+̴BKJ%?5Y8K\{q$ ™jxGYᬑGK18v`=1ۆvtJh>g #slެ{mqǒK8đsh3N9 _WWbyZ-ٵM6u)snqť֊9&kܕ-1ƀ<9*i؀s&V˷bxݙ+XLYByXYՖYNI xnRÆWJemC!6DIBuEi꿋ɼP8# 1%U[tښT\\mm>K{ :M-e/BrG &a+0B.O ҾOEVz&pMPATtUbG -(YXyCA:y#\d6>bEǨèdS,>`h&}T2OYԙ5#jxZ~ RB7ɧM]Ҧ45<g伓ߌUDo~VeFO,sxR(_6h}S]]S :##LaQA⃣ȬN @UI0؝+ +X'!x;hXlpiXeWC_o@ hozLkcR>~Kqn :8˷h|^M+csBh +XD,0|R$K}"2M.n%cr3םwj/y|#I~h\($ +ç٧,I= ȥn{7{'Ko&O_j\Ux~SW~~IzC +9^=鴇c8Mz>~<|k~geVez+=xuv9Gx`f*@M{BNly$k*H֐fh+c{8{&` +endstream endobj 30 0 obj <>stream +8;Z]!d11dO$q9Vdo'?7F3G$hQN7(A)/@jq4`,JaMM_c#5#U+lr0*&(0@?IZq37+Pb@oY?41pTDo4nP;ih +i!8kVO;>;-R4@N.kb]H6][H0hiA))Tfh8j13FDJ2oa_\<[k*b.j4\&!@8XYA;@o:e +MG44;m*?i9f;A@igUO[ +Y7G-5bIBmf:d"rgf_j"$ag-VB.9iY^63n`fp]7Q!!:f'E(B~> +endstream endobj 31 0 obj [/Indexed/DeviceRGB 255 32 0 R] endobj 32 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 25 0 obj <> endobj 33 0 obj [/View/Design] endobj 34 0 obj <>>> endobj 24 0 obj <> endobj 35 0 obj <> endobj 36 0 obj <>stream +H|PoL[u}(e 0#+l!u RҲ5*cl9 ,E+cBXê3q_m?{r9$%!HL//.;uV7:J)gl2U3JK4*6X>UGHHrI1tj4&=9JF驩DGX[*kڸ+*4XF`q>tdB +8+'4Bq!$н&X AZ?Q7:iìZZ̦\,K&u_JAىF@,WK$$%D"A\'21N&9rR!1-wx=dxQ# :(pYE) a RUrqS$p)^qKO +h3` tnPGPsxϒp&ήNJ) +@E8u-XSEw(~uR +|Rl +7G9*HYqn})W>[&㵅PQ$|2Z,ͮ/bҿƦ.k8JUR:#@~Z'{|?{v@7Uܛ,wR1NSp nw|"n$|RQPx2yƐ +]?Q;4 ײ~ab_PYqc G.Jq~sۀ+>ts5яoz&}$%A_8'co ^bT3V7[*kp4 ۏm1ҬSgVS !wi)d^jt,Oz44={t~;Qػ/nH.P]+h5%WWkۮ<0RxGq +endstream endobj 29 0 obj <> endobj 28 0 obj <> endobj 37 0 obj <> endobj 38 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 15.0 +%%AI8_CreatorVersion: 15.1.0 +%%For: (llewellyn) () +%%Title: (Tortoise.ai) +%%CreationDate: 3/8/2014 4:16 AM +%%Canvassize: 16383 +%%BoundingBox: 194 238 418 554 +%%HiResBoundingBox: 194.6587 238.9404 417.582 553.0591 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 11.0 +%AI12_BuildNumber: 39 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registration]) +%AI3_Cropmarks: 0 0 612.2402 792 +%AI3_TemplateBox: 305.5 396.5 305.5 396.5 +%AI3_TileBox: 12.1201 12 600.1201 780 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 2 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI9_OpenToView: -456 799 1.6 2438 1268 26 0 0 73 119 0 0 0 1 1 0 1 1 0 1 +%AI5_OpenViewLayers: 7 +%%PageOrigin:0 0 +%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 39 0 obj <>stream +%%BoundingBox: 194 238 418 554 +%%HiResBoundingBox: 194.6587 238.9404 417.582 553.0591 +%AI7_Thumbnail: 92 128 8 +%%BeginData: 8384 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FD25FF7D7D2727FD05F82752A8FD4DFFA852FD05F8272727F827F8 +%F8F82752A8FD49FF52F8F82752A8A8FD05FFA8A85227F8F8F852A8FD46FF +%27F8F87DA8FD0CFFA827F8F8F852FD44FF27F827FD11FF7D27F8F827FD42 +%FF27F827FD14FF52F8F8F8A8FD3FFF52F827FD16FF7DF8F8F87DFD3DFF7D +%F8F8A8FD17FFA8F8F8F852FD3BFFA827F8A8FD1AFFF8F8F87DFD3AFF52F8 +%52FD1BFFA8F8F8F87DFD38FFA8F8F8A8FD1CFFA8F8F8F87DFD37FF27F827 +%FD1EFFA8F8F8F8A8FD35FFA8F8F8A8FD1FFFA8F8F8F8A8FD34FF52F852FD +%21FF7DF8F8F8FD34FFF8F87DFD22FF52F8F827FD32FF7DF827FD24FF27F8 +%F852FD31FF52F87DFD23FFA8FD04F8A8FD30FFF8F8A8FD23FF27FD04F827 +%FD2FFFA8F8F852FD23FF27FD05F87DFD2EFF7DF8F8F827A8FD20FFA8FD06 +%F827FD2EFF52FD04F827A8FD1FFF7DFD07F8A8FD2DFF27FD05F852FD1FFF +%7DFD07F852FD2DFFFD06F827FD1FFF7DFD07F827FD2CFFA8FD07F87DFD1E +%FF7DFD05F852F8F8A8FD2BFFA8FD07F87DFD1EFF7DFD05F85227F8A8FD2B +%FF7DFD07F827FD1EFFA8FD05F87D27F87DFD2BFF7DFD07F827FD1EFFA827 +%FD04F85227F87DFD2BFF52FD08F8FD1FFFFD05F82727F87DFD2BFF7DFD07 +%F827FD1FFF7DFD04F82752F8A8FD2BFF52FD08F8FD1FFF7DFD04F85227F8 +%7DFD2BFF7DFD07F852FD20FF27F8F827A827F87DFD2BFF7DFD07F87DFD20 +%FFA8F8F852FF27F87DFD2BFFA8FD06F827FD22FF7DF852FF27F8FD2CFFA8 +%FD06F8FD24FF7D7DFFF8F8FD2DFFFD04F827A8FD26FFA8F8F8FD2DFF27F8 +%F827FD28FF7DF852FD2DFF27F827FD29FF52F87DFD2CFFA8F8F852FD29FF +%27F8A8FD2DFF7DF8F8FD28FFA8F827FD2FFF27F852FD07FF7D7D52522727 +%F827F827F827F827527D7DA8FD0EFF27F87DFD2FFF7DF8F8A8FFFFA85252 +%FD05F827F8FD0727FD05F827527DA8FD09FFA8F8F8FD30FFA8F8F8275227 +%F8F8F827277D7DA8FD0AFFA8A87D52FD05F87DA8FD06FF52F87DFD08FF7D +%7D5252527DA8FD22FF52FD04F8277DA8FD14FFA87D27F8F8F827A8FD04FF +%F827FD07FFA827FD07F87DFD0EFFA8FD11FF27F8F82752A8FD1AFFA87DF8 +%F8F8277DFF27F87DFD06FFA8F8F8F87D7DA87D27F8F8A8FD0AFFA852F827 +%F82752FD0CFF7DF8F8277DFD20FFA852F8F827F87DFD07FFF8F852FD06FF +%52F827FD09FF52FD04F827F8F8F8A8FD08FF7D27F8277DFD24FFA827F8F8 +%7DFD06FF52F827FD08FF27F87DFD07FF7DF8F852A8FFFFA852F8F8A8FD06 +%FF52F8F87DFD28FF7D27F852FD04FFA8F827FD09FFA8F8F8FD06FFA8F8F8 +%7DFD06FF7DF8F87DFFFFFF7DF8F8F8A8FD2AFFA852F827A8FFFF52F8A8FD +%0AFF52F852FD05FF7DF852FD08FF7DF8F8527D27F8F852FD2EFFA8F8F8A8 +%A8F87DFD0CFF27F8A8FD04FF27F8A8FD09FFA852FD04F87DFD30FFA8FD04 +%F8A8FD0CFFA8F852FD04FFF852FD0BFF7D27F827A8FD33FF27F827FD0EFF +%52F8A8FFFFFFF87DFD0AFFF8F8F827A8FD35FF27F8A8FD0DFFA8F8F8FFFF +%FFF87DFD0AFF27F852FD38FF2727A8FD0DFF52F87DFFFFF87DFD09FF52F8 +%27A8FD39FFF827A8FD0CFFA8F827FFFFF87DFD08FF7DF827A8FD3BFFF852 +%FD0DFF27F8FFFFF852FD07FFA8F8F87DFD3CFFA8F852FD0CFF27F8A8FF52 +%27FD07FFF8F87DFD21FFA8FD1CFF7DF8A8FD0BFF27F8FFFF52F8A8FD05FF +%27F852FD21FFA8A8FD1DFF27F8FD0AFF7DF852FFFFA8F8A8FD04FF7DF8F8 +%FD22FFA8A8FD1DFFA8F852FD08FFA8F8F87DFFFFA8F852FFFFFFA827F8A8 +%FD22FFA8A8FD1EFF52F87DFD06FF7DF8F827FD04FF2727FFFFFF7DF852FD +%24FFA8FD1FFFF827FD04FFA852F8F852FD05FF7DF8A8FFFFF8F8A8FD23FF +%A8A8FD1FFF7DF852FFFF52F8F8F87DFD07FFF827FF52F852FD25FFA8FD20 +%FF27F87D52F8F87DFD09FF52F8A827F8A8FD24FFA8A8FD12FFA8FD0DFF7D +%F8F82752FD0CFFF827F852FD12FF52A8FD12FFA8FD11FF7D7DFD0EFFF8F8 +%A8FD0DFF7DF8F8A8FD11FFA852277DFD10FFA8A8FD10FF7D527DFD0EFF7D +%F852FD0DFFA8F827FD13FFA8A852A8FD0FFFA8A8FD10FF5252FD0FFFA8F8 +%F8FD0DFF52F87DFD16FF7DFD0FFFA8A8FD0FFF7DA8FD11FF52F87DFD0CFF +%F8F8A8FD17FF7DFD0FFFA8FD0EFF7DA8FD12FFA8F87DFD0BFF7DF827FD19 +%FF7DFD0DFFA8A8FD0DFF7DA8FD14FF27F8FD0BFF7DF87DFD1AFF7DFD0DFF +%A8FD0CFF7DA8FD15FF52F8A8FD0AFF27F87DFD1AFFA87DFD0BFFA8A8FD0A +%FFA87DA8FD16FF7DF87DFD0AFF27F8FD1DFF7DFD0BFFA8FD0AFF7DA8FD17 +%FFA8F852FD09FFA8F827FD1EFF7DFD09FFA8A8FD09FF7DA8FD19FFF827FD +%09FF7DF852FD1FFF7DFD08FFA8A8FD08FF7DA8FD1AFF27F8FD09FF7DF87D +%FD20FF7DFD07FFA8A8FD07FF7DA8FD1BFF27F8A8FD08FF27F87DFD21FF7D +%FD07FFA8FD06FF7DA8FD1CFF7DF8A8FD08FF27F8A8FD22FF7DFD05FFA8A8 +%FD05FF7DA8FD1DFF7DF87DFD08FFF827A8FD23FF7DFD05FFA8FD04FF7DA8 +%FD1EFF7DF87DFD07FFA8F8F8FD24FFA87DFFFFFFA8A8FFFFA87DA8FD1FFF +%7DF852FD08FFF827FD26FF7DFFFFFFA8FFFF7DA8FD20FFA8F87DFD07FFA8 +%27F8FD27FF7DFFA8A8FF7DA8FD21FF7DF827FD08FFF827FD28FF7DFD04A8 +%FD22FFA8F852FD07FFA8F8F8FD0AFF7D275252FFA8FFA8FFA8FFA8FFA8FF +%A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A852527DFFA8FFA8FFA8FFA8FFA8FF +%A8FFA8FFA8FFA8FFA8FFA8FFA8FFFF7D275252A8FD04FF7DF852FD08FFF8 +%27FD0AFF7D5252FFFD1BA85252FD1AA8FF7D5252FD06FFA8F87DFD08FF27 +%F8FD28FFA87DA87DFD1BFFA8FD07FF7DF852FD08FF27F8A8FD26FF7DA8FF +%A8FF7DFD22FF7DF87DFD08FF52F8A8FD24FFA87DA8FFA8A8FFA87DFD21FF +%27F87DFD08FF7DF87DFD24FF7DA8FFFFFFA8FFFFFF7DFD20FF27F8FD09FF +%7DF87DFD23FF7DA8FFFFFFA8A8FD04FF7DFD1FFFF8F8A8FD08FFA8F852FD +%22FF7DA8FD04FFA8A8FD05FF7DFD1DFFA8F827FD0AFFF827FD21FF7DA8FD +%05FFA8A8FD06FF7DFD1CFF7DF87DFD0AFF52F8A8FD1FFF7DA8FD07FFA8FD +%07FF7DFD1BFF52F8A8FD0AFF7DF87DFD1EFF7DA8FD07FFA8A8FD08FF7DFD +%1AFF2727FD0CFFF852FD1DFF7DA8FD09FFA8FD09FF7DFD18FFA8F852FD0C +%FF52F8FD1BFFA87DA8FD09FFA8A8FD09FFA87DFD17FF52F827FD0CFF7DF8 +%7DFD1AFF7DA8FD0BFFA8FD0BFF7DFD15FF7D27F8277DFD0CFFF827FD19FF +%7DA8FD0BFFA8A8FD0CFF7DFD14FF27FD04F827A8FD0AFF7DF8A8FD17FF7D +%A8FD0CFFA8A8FD0DFF7DFD12FFA8F8F827A8F8F8F87DFD09FFA8F827FD16 +%FF7DA8FD0DFFA8A8FD0EFF7DFD11FF52F8F8A8FFFF27F8F87DFD09FF52F8 +%A8FD13FFA87DA8FD0FFFA8FD0FFF7DFD0FFFA827F852FD04FF52F8F87DFD +%09FFF852FD12FF7D7DA8FD0FFFA8A8FD10FF7D7DFD0DFF7DF8F8A8FD05FF +%52F8F8A8FD08FF7DF8A8FD10FF7D527DFD11FFA8FD10FFA827A8FD0CFFF8 +%F852FD07FF52F827FD09FFF8F8FD0FFFA87D52A8FD10FFA8A8FD10FFA87D +%2752A8FD09FF52F8F8FD09FFF8F8A8FD08FFA8F852FD0EFF7D7DFD13FFA8 +%FD11FFA8A8A8FD09FFA8F8F8A8FD09FF7DF87DFD07FFA87D27F87DFD21FF +%A8A8FD1DFF27F852FD0AFFA8F827FD07FF27F87DF827FD21FFA8A8FD1CFF +%7DF827FD0CFFF827FD06FF7DF8F87DA8F827FD20FFA8A8FD1BFFA8F8F8A8 +%FD0CFF27F8FD05FFA8F8277DFFFF7DF87DFD20FFA8FD1BFFF8F87DFD0DFF +%2727FD05FF27F87DFD04FF52F87DFD1EFFA8A8FD1AFF27F852FD0EFF2727 +%FD04FF52F852FD06FF27F8A8FD1EFFA8FD19FF27F852FD0FFFF87DFFFFFF +%A8F8F8FD07FFA8F8F8A8FD1CFFA8A8FD18FF27F827FD0FFF7DF87DFFFFFF +%52F87DFD08FFA8F8F8A8FD34FF27F827FD10FF52F8FFFFFFA8F8F8A8FD09 +%FFA8F8F8A8FD31FFA8F8F827FD10FFA8F87DFFFFFF27F852FD0BFFA8F8F8 +%A8FD2FFFA8F8F852FD10FF7DF8F8A8FFFFA8F8F8A8FD0CFF7DF8F87DFD2D +%FF52F8F87DFD0FFF7DF8F8F87DFFFFFFA8F827FD0EFFA827F87DFD2AFFA8 +%27F827A8FD0FFF7DF8F8F87DFD04FF7DF827FD0FFF52F8F8527D27A8FD24 +%FFA827F8F852FFFF2752A8FD0BFF52F8F8F87DFD05FF7DF87DFD0EFF52F8 +%7D52FD04F8277D7DA8A8FD1DFFA852F8F827A8FFFF52F8F8277DFD08FFA8 +%27F8F852FD07FF52F852FD0DFF52F8F8FFFF7D277DFD06F827A8FD18FFA8 +%A827F8F8277DFD05FF52FD04F87D7DFFA8A85227F8F8F87DFD08FFA8F852 +%FD0CFF52F8F852FD06FF5227F827F8F8F8527DA8FD13FFA85227F8F827A8 +%FD08FFA87DFD05F827FD04F827FD0AFFA8F8F8FD0BFF52F8F827FD0BFF52 +%FD05F827277D7DA8A8FD07FFA8A87D7D2727F8F8F8527DFD0DFF5227FD05 +%F8277DFD0CFF27F87DFD09FF52F8F8F8A8FD0DFF7D7D2727FD05F827F8FD +%0727FD05F8527DFD11FFA87D52527DA8FD0EFFA8F8F8A8FD07FF27F8F8F8 +%A8FD11FFA8A87D7D2727FD07F827F827527DA8FD29FF52F827A8FD04FF7D +%F8F8F827A8FD4EFFA827F8F8277D52FD04F852A8FD50FFA827FD07F87DFD +%53FFA852F8F8F82752FD50FFFF +%%EndData + +endstream endobj 40 0 obj <>stream +%AI12_CompressedDataxܽgw80z>k?ЋMB $@ +bJa澞o?dFy׬X֖vҝpƛ!{ehjбkui3;d{_A[J>ײM|g$4߷-rgmnI 3` ׁN=_xN?1ٯ4/5#2r b<`$ [z Þ`^FI^v3گNoFd6 Į3<\w6_'Y@ۧ?|0_~965-S`??_Rd*~z?_!0쏢}4 ? +Ԡv; k!O }s`%|f m"}_]>EZm`D +g)> {"s8BpDSͩcϛ5š%E,Z!VEY'MnzݛC/^r9۪Ă(amJBn}FA75B {Ǝ&/w,!M ؗ[-.9ЀZ( ׀<3B')wJ|tE Vs1PkmǴ^pM{= i/^xx?+ +~j>4h5z`{Bh(GoX|k|k~"W!ϵ~@&صPCq˽D@G#K(JGI4 u(C7`@z7 ~hJ chK6p97n a>t ]z>ы#yWO9B +z}W%(6 LA36{A8Xl3 fEK~z4 ;x +isf>/?`Gek'j<߯ŔUHHZtk.W NS ƖJm0h \i!̣tJS뇂AP1y=\8ݦtу5SkF$;2H\>Qu,[Wބ $~Jxv=ꁡS(zތlnHEjHnR]݀a)duS꺾vH(L94LuM\Ob*4QK,*%7C("BN=#M%\2ZOe !2rNT= ;C~0R0KFyO.d`^"@B(ɠj{4v0>hL#ѐppi=NAH(z8p67[|GXP|OdWkiQ)5u$R5L1SHQ;}PXkuۊt-[h0!B>R )N H6"WFNdĤ*CN_^aKyɄ +#Ary +@%tHҠF5O +h!@Ez| L5L!KBQ%Y-7Q]38 |4ӛ|IPj[ AS*G 1ա@jS) l5`5b~av/0]i9˹Bj;cZ:mStAцScA_{7;s{#}נךhހ.!=m荃_KEl%k:VxS9&Caвț Xy `HYo@,p"@>L*o0bliYZY;<-qG%|dM(L܂h 3։{@ؗ kr4WU%7Bxu,ƪa>&&p<5?x0@X{Gh&niEAј [11~2&o;l& ۲`l|=s%`-J2%,V(a\A.g^=lG{\#>O}t5|jѠhh4Rt00PpI Vjj{yK(6bCan~%`g Rk00Gixߨ!P+V_o/AW[ 7 K wTi:"0f Q l&Ϟ뙆_yZ )4| ·v U h\0$rb4P.;X hmhԠ2h,I\W\*u*]$(:j#'1EmH(-2xݒ7-x"d'D 1ZKzWS_喞l$΢2V!΄#xCX=XI׌bJD2=%)'fC.s, ^qg`5h}fJHUm ?<^U-l0Q|i02҃1sۭ] j'%08Ȍ:Tll'{JXD&ʰf<*_1̧k=G dI-hw8`qQ*˸8ch-1qҐMomA6` +n}_jY 5[Vgsa{l ؚx*% ݭJlQ1A5z +=׳>c٬hKcd֥hgЦrJ3hHWt}N׀NK ys8"?!XrQvB܊Qydל);PwslK*#@qfeC攖w'=Л6{zT^RC|0C#/<Ҵ5g;װnhkNe^3q9Ϩ53 .`u Iz2l^H\%+f { bfko05nQs\/`J`2J,b7,5)f7ޯbcA#z$˕*l=-vtZ}`j^Vn"lޔdfη("WǠ4@K Jb=%yaLlpl<}dJD>>Es 1&~ιƌX, jz0_!On7Ey 7j 00|k~߳퇒 2=j^ 2:`*| h H2 TѣVϧb.*N L 7Q_WcK<)IkR~>rҗ'Gԇf͊R6u4)^94Иst L?ύI~(Q*8 P]w{U ih꫸`>>hN>#X<^E[mCdA1fx]c~SL f)(ifp$]Xbӵ7l|anCb.d%[S1V>%("wd `&&}H][&T|^&y_5|.=-Tc`8 W:vV**5v3g"d糁۷d'Dym8: _>>S͌oJdY>o+' W[8L.;Iz#ߖ숬&7#0h&ӛ67[Liw6p :؜(bxoq]dg#.g`?͝IuƂ& Loc^y^=Zݴs6,p}y ݷȺr><{ëχy8e&=*EeL`.lo~bgӃp}Ρ[KfJq[ C9lzx{ _L)r|B/kDza9me~zqK|!|C& 1)g">r}ƕf{u}%@™H\!~?yF <*]%=VT4}n`=BQqf'on0ަCK~ijt=;i_1xj:mY>lT-yg?!du7g&07"HwUIժJ>kWXfYnyq> yݤpr2bCj{M},LĿ,˙D{"_\~1Xy1{'8Uj!/nw6xRDH _Tf3"z">niƐPV09=3 +P/.ےo +9kUZ肪dTi&ͦ݅xQS]_!tH>z^_w3QgVSMl0km${^ mu p݂ns7QȞBS0@q /1 G`/?Rr{M}'Ō4nyP}?7S4*IbvpFv㏵: Dy$*U +9N݇(II7rFo@0xf6oOh}{v̓vOm5r`VxG*+Fy1raGz@`ؙ._cIj5a{A#±zI ,J߭|/\FZ{bVB3x|r?<$aۉ_YAABm6F́w=|F<4hT%!F _t2x`5Ci򉃗8B`N#! +cv,߈K&]Z}K=@p _|*í lp,uaN4aŗX~fN"F,܄Y! M NSj:RveOZ&&>\DSk=S779*↳>#5̻- B8o&vA'^soO)80h@[>~bsAԙ΋υ7BuɱC-D&EnZw lQ%vm*~f+@/GkLe\ +]DPœ-"-Aj] f֪lҨ85Ei"r|PH/C0{p8T-,(g/qO]a{3FgiU&nM!X&/9z}-Ssg +k #y {H/QOĠK/|&@DlZpO:sp0s=dO]tauGr37}.hCм~X'[ϲ(ZgOK`'iz +Ğ{:b͔kt1ا bLu襢Ss%r1ﰻ@t5^u?ɷ%6s6@Fc Qtg˴㛣C1lS%cc_(eA*l8/) dc-n&93ߌKP<BDMbd [ߥ*]r̮Cy.m7$UN)al!-bݛ^z^Iicl܊|0)6@Fu47ϥ Txu + Ӷ!lpܟrڰ,{({&I| o>c˒-`I8kә|sW + V3k,EJIl7K|<Æ&{ȖP@h>3:W/,VDP+HC/F~,:OuNƞ4C7uۺ7[Ї%.3ͣ +)baa>޵EvӫZ"xH4/7@-ޑuOڀ N4 +c]˛*Ie'ڣ@QGv9g&~xZ aeMmgNY QJ7~BiRt$NG=߀TIȴx㏋d<5L[G؋!`\D+Kݕ(2H0j/k**|ucW5n<:tMjbS_aF1=9@6-&C,+~nm@;u=_i}Qf/ص^B7Dۏ|(15^6DCpg"CsO0W +rkW3_p]î~߲)#9I= +iE,oCoص=aTn.?U0՛$ 1t֖`RDyRx3{GqWNE\%؟egV԰/g倍j"wv!&|1]A}6?~fuf- {]ߡV6jy~>K/N/x[U߾4x1\T38BmRB/7!51r:B?A+>/YrΖ7@^>y[%kSwm0H"!AF̡ (&%ߡ1QH7Ly X?T۾|)>eӄwݗjPPyvɍ2x?3Z +Fܓ3 +drDtղlomt=i0"{zl?+O[EGcWaIx䌭365a0k? ֱrJ3;C/u>~/1E40) +a|x LvZaTL,&{&S'krO>е!AS`| b"XNAOb/4x\reb͓߼9ȾCaDć79dstjJ&w19GW3>_,M]z'g'pOi0H"Z u8+eD +Gs24}ϴeBx "wf`!&.q$=jdLLq1浱Vڣ 0H;P{Ԣy9+C>sp`M2e%Q 5d6ߟ2 t&]JPdTTj9=莉B*5eCωZZT ~!29~_vBT+P2 HPCĽY EȎ2?Pa1oy5Gߚ|Wwֳ"ԛ K[yI@  +noM*t-.>XԬi6yu}.湁.!cMq0bųlx+Z-=qPnl.BO=MTW/ae}E֖TQ*Sn] |8Fw UG"fi^µnrt]E!z7 p8%KRYJ? +P.>y͓1xXK +% άc''LE*)CBB ԞBOQ{=GFW}YdO1E4f|= -ӯGiD@ٛ\CU$-TqihOݏjOm4% 3e^=Ő&~&.?DuW{$~TizQ 4IL-Yy)#m!c;X{}|4S7Yedkـc+JI yS\ UЯPl$)u痎:Thb&;6ݗ5\|#v;$l |VvPnA5$'I8#q5 CVy?IZK ghp-X5%  I\FAMqjˆл̣V<#*3dE@?d)p1nؠ;i"x,aFCiA|$Jɕs8X(sqY f\wM Yy0I+#)!ְGn7|eKYV5DAv#N.YWb0EijӗH\A1!ozd Qa'Pϯ>Rȳ9B]VA?9bErp"a)d TeϮk:"n$@ԣ?PV}϶=q9̞g0GR509vmI&6kOC=*P_AVE?R^ślLFAHg+{bJ^7}u gCZ^f ކjo]JZʀ_V>GFƂV`>񤸷}mSʪ?!J塤+Wچ:؜c#&χ4k/J֙Ҥ=XEVzRH:R&eS /@nEFfrJ[_Q61! ˗~%yjtLf-)ePմ6z:kdڠߺLoCbޤ +F`Cq>B}Fр-؛QZЛ6Аysp6Y/*;9;yyY Kօ7jU@ongy&l@o2d&52Sͱgd'rx%\]&o1m 08ﵤJAqIAގn* hϖp_q )pPNi'ڽF$p?r7"a +Sv hHY:Eybʀg%Սl[-J\A{' zӗbSO趍&T(IQ +[mۀVN0.lt;R5U{iOs*^[{#_#9MBf*?N r[..8qpS5ެSy!#MWRj[ۉ?M"jmpt::_Og''G$vQ[9* }~P1ǘH'C%0F:Ybj<]VMĞrTĉFh>Wbr"-]\M ,hۈ ;͘zƞژ0:Lɍ;]LMɒ1 šUݸSLSȎ ݙ#G14f3xt'X{ӡ#)tr!Ot sF{Sa!鋁)C7I=,g2~md#=fx|_u@u{ڬlYxGo|3QϡZ>2|NZ+hr>Z+tr> B-|V9v-^xN9v-Ԁ:O +/]Z>n6ǕI5 +gׁ1^Fr]o?RwNn=*]c#+ H*0Mij)j2ÃE|gx:}UvLX~ư]clc;=xG0N;s< Ph~g>Ͳ)_ewGGt痨NDF Ō$x%̬@+BLckS ׽n7Xz G`ҧ DTTmX#4]҈J"&'K9FN]q";=㘚BAT3zZ#72 ZW!"W\M^BŤ+"BYS"$ t*|[GOSczS8i:?G"Nox1{X$-)1db%퍕i I]Y=-*J9ݣNhW{Ҩ}H:H09.2WXn5쩬n6V45ղ?EI]DF +=M0KUiزR~UzI-L7ujtzYArvOIE. RFi?bAl] @A:ЯѓJ8TqXGEo4Ƅ,.CUZћ+1c:.z#wq㇝1#=]RU8V̼7b CΏό6A=[!9b<+ 2M5kUT(eKMn u:; Lj::Z"VUxƠzu0SL$,ߎvq0:WEo-}PdedAG)_$ {H,,?Z;ZFE(XCKt(+O VwvRQDNӨw<=(tH8i[HGvv)MW~ĕj<,3u0^jqecg.% %.WاhaRz +&/Uا y>}]s +VilZا{>K=>,_S^=OI9) PaRU,}Jk( +7/XاTէTrfaH;Oi*S;i +T*(SIU)LI_Oi=/Z'Xا+'h T|OUX؇C1 N-Svr +u Ę![V*TSB>"F^}+7d&%n39.t_B +?EtH B_[o Pzw:-L]*'k]wWSFఌ01^QaFeF^TLM򘙊)91̬gc^7xOiKplC?5}8"0;M?R*CȨ.1w%\j-8v\yZ& bCTudzn"@`k@t9N36,#z{4Zn8yR\pO"Kx9svFn90)rmlu r8#l|vDAP.ZszDukz^MN3XMJoގ&|-VKzS= iqUKx %RTGR8㈒D dIYhW>Z]4vDI;GTr؏(IW5jG$Qf@[h=oJtTN=']k) +q)^VQP/p +EE/?θP. +P"Jg/+3 +pXⵣȮfw~ۡw<*vxlꅇju…ĩVⅇg@PZ /p {}ᡈ AtaBC8# NPN`NP{rW{qm.<Ԟk_Cd\x})'οPS]^u셇ښOn|$CE 󲰴.<4PJr o;͹yOJ{vx >Ct5e.<ޏdjVǰꗪVSκP{P;[5r{셇jhVę%71":%օGHs.<MÃͩjrzO%m畒T=tn^j^ xڅ'Ǚ +_Wxђ  ȴK\x}:wʱ\xhŽ|/Z;C+ +5 jz|r*py2ͨ{uᡶe?wᡈpc_{҅Xb ORR+B %xp! Uuʷr2 Xj{<.Vx|N){uᡚC4EAȳ.<<Ų9CD@ҭot.<4yںTn7u]4![6Ĥ#7 y/-dKI0B^`QHik >Aܬ3JAW><)2Y7YVu6}:-&52Y{řr'~kٜ/6D.%r?"oUus&SfD%yh1 &vK{oxwFz oJ|?^hyissOu-NxjS{>.֊I>59,wm~7 +elqws>])Ԇ?l%m- *`L|yGRcs}(NA%  \&w.nXeBȂH+#_;޳)N`{[D>]IɨLj+ a19"77]/D orɌ0)I2(-69Q1km26\dV69_na-3|hrcS49~`G>'#C0K©U(=EƖtM »Վ l/ +%C9E; pbu|Strln}>64?ƒX%-<8o ^ȸ8Bpr/ge_IAَyl&8FN5F]H-ԯ] o}j,&9nOgExU7o7Xл;-sL~ҵy[q5"KtɋX4D{9I+̖&S<7}άnK%}7sDp"K.|my9vrX- ?H"{DۀO?i@}pxE]F_;^47s1cz&?߷T|Owl1tzIfˈ9u)bvJܑ6^G8@&mӀ?}b;_ w?plf];'mS.7HCOh}3'*m,_ m:@)餗>O~P8U6bzY9?,X^qF툝V@Lf,dS3!n>0` iCH| ;,_#˜+`ҍᡬ|VW/g ( :?I/FC?`LŎxAA;') Hқ Q8J_EzyΓ^Fp&b{4/cv@Oyì!Y Th٠j. 4_=mқ-7FӅ$vJM?"10Y&ʅ|,znaNM,B{~TXqeTW)|Y=YV*S˳A"&3 NPjQK7Bj|1O]42H [(;ygc0rW wcEG;E#ʋR(j.p ȥN +Zx5t(3J2:-pzM7!|C0mhNJ_CǮ"lRފZIdr@/FȄ/#A) ?8l$k, Gk2bq*<9 ́)N#VdNi]Znh +/nJ/l,2`$X'u'.lɤ=sʵ%s> SMҞo>b9v\dѽXNg !SP*N4WԐ|߉ډZ&df2uN"؛fk57X= ȏ'+#HP9V}Mr<^rLli5g%@v{Z3t2nd4CgPxXYQyH2@Ɵ⽅x Y~9YQow_dxUºF) >a9qϠ4ǔ9H=3+{ w nV2[HidZ=ߩ-[hM2Lt!bD)-8?D S+ D\?qg4f)X!Fe*ËlIs{rػEmKnϾF>j&D3~?MҞV 6vyhr^[ g?cLjfzHlXK& ʜ 0s;\uCg:Wљ(qD$ظ?Vcf\P02C'Lل)biBǴҊu6oFI@{I]+gݖ49W+2 ;_nMfn[&/߀sӴ2}[ah>"UpB鎕=/ +sKfy l[;M9Uƫ7yEernF6?EYc9oM]|1 wPgԗIJ5C?G#,xMK-LJFfR^H8A}UiJ"ߜ KUY?bE\01*5:4nYp yu78-cr[G_V.d?G2Axf:8T'UPTyLr$pqVJryqߦC bӔfڪmo. CVsPܠ͑+ |6?8|#y9g=tfoY]ɏgl>(Hs8 sdBJYv`QeSeڑLƖ+ R ;3yA= ǾOT1;x:l~FDsܓ[QMzwT1dJcM65C`q{'pL OȬē6farޥq' Z/"|2v%֊iFnyJ)x\,F1VqW$<7?-V + &_耼q +'2\:bOX3>o"ՀGNn+tB$aEAl"ᇣtkQ9#s#lHW)G!]UKqx PVd,A/QoD&"] !ݷ%o +4AQkZHڹQ]9S >/F>B332E.V-2I =,-tӖg5wqfNX)0M+wn$X nz-$94)'pVA3@މ\*fϵJ8L>f+ӳ\96aFN";IlO@ꤴ GkIKVQ<P/8o /< 9 +ݰ`]qJ;)]XPJtҔ{! Tz0@^D}$؃\HxXeҗ}gRA + |dZ~*.Faڃ7 +2C-?9X[LD;/Tt|63*A+F cbXMs%CaɱC=8X):C ˵à8 $Ggߏ3\xԚV QwNxH9^`PB %u@\ܒu3'#бȼ՘tItυD SJNjNg WH]:RҚq2օAf_D݈Z80Yx:qL׌F,xPAѽL⺿2削mZ:%Ibҷ +RN_8f8W#A>MlAX7 ) ,,'Js~~9ݹƷ"xײ9J-_/r>^91;2fhNܳ(Fk~Zf)kgsP*|=/ȕ;b/|lqr"$31fU]@ѭ|Ґ qc|% ^O _߰H)m$63Y=>|csm]eJn*;?c55Ts +vc6WnNuɃlPb/ycq;bB? Y$cS1NVL~}-{s8Fbji}vīlWϋ/ 7 +uZSaZ,}@JJFk+Pl,E)xCEt<8,S'^\7=_NuNhcj,LX/ƇK9PDZ巟>`}Re1Ћ[! aF]/#q*v`wJinR7E?b[yuv9yqzhxYtxstmL~si o·ڸ S(AP<<۫[u=d> +yR}{!9t6i'7IrwõaŪVnO ydiu,=XfܛÉ;tcڔ>2Y- `+oonqO>i1;7n^Ίc]OǣD]~/udu>\]osuแn{e#n(-SYQ4YMw 4 V'F5j7MRFel8~1^Xh_P7>6x||]v+o'h[j_?~hZ婚oy޽83m$Y\R _1֥>/Mɦfv6X^n5˹Ȫ\9^}5rY/~eP凣Sw~X8ZI'۠@'(`KM&o/ 7ꢧW߷_ pnIeMjVV4!P)x_׎]Gf [Qu\8h\JhT74݈Ľt4t鞕je9|p`CW~nHNÚOvN{6C?~vt@<8Y9&gTԬěnPQcURF X*.l\ o;)z}z'UWSz|>#ߧwS>}~5N<}z'ݸ|>גc3_9ߧwO&m']Kϕ~,ߧGS^OU~"ߧwشUVÕ}z',ߧX\ +k>}*y|}> +>C=}.$rOdDks^Үm;٧g۾[K}z&LQ|y6rOdL:|O:|'}> \Od.ㆍ*|v_wehl -T FNhxٴB\xeJXa:_5 E"SYuHTs6}1ͦXz3is{;%^1=8E71ammLXz_C0DC6Pes$r*BFx9R/>'^i6OE,_|4~Eߍ_ů  tvZܛx}v{fmw.K+ [l5Z^Vo)ڊtrEWJ+1l}R3s\k{;ƛkhM7Ff'?߮׋wr+ ݭrq;7)?Wo7V:pa]GVlϱ]2߬NMٙgobs_jQܜ9m&M;g_9?ZC[ EK2gvߍ[ \899?>:5*mo-,OF[M\}51M\SɑnP y',xe0,E(c  +s'c [O կ8' ֟-zzZ}8~h9g2m1d2l̬yln3u@|sYa[4pc06J1d1We|^Xﳼ-EV"S.Nѣ6ְdiLќ)b.d:8Px^δ°3os)ϔC o:3.фpV@u|61Up6=1f&F00`p`"(HDˆ4BTr#I!`yiHy#PsXa -A`u1eS# .)CEthU᩠z̟4Uʞ[4x aт"UXJIXkpƁV'?hqhEyzʊp +Ҕ Y@>}t4zXXc.1=nłڈށt/>9dOb ГLYHF'D sCPam9Ԋs9!I"isgS -z>zRr%L 6/`=)φ4W#xg x4DP'Pcąv*:B ԀRs+WO>O(jk D]WOWY}0m (g+~ .@a*?:=p5q`חy@e`ф]H[X(DtO;Q1H :>2[o4ЅՍd,rs': V/4e:t\"w>Qѷ6rNڤ9y)3zD)yz"y1Pt29$X\cdH,O,DG>t 4FZ&0~ѣKMɽbKXA:7ɪ}G7(dhmmS`&TCBFE6T%Nq;IoOKu.'YZZ`.XCp:dQ@vOCp08Kkآ7S +X{: F)Q$.vAe73FBU DZ{pC!$`?<H&$Oc9M76~GA a]<; %De'A)"[ɜ'!¨@KJt&At6@kM-)o?p +}%(LpA'D6 3t1{OK)݁*nWymSFnn¡B% cⵀ0!1h`L!a]Ȣ%}t|-%421v +/3GU8$K 'G`ӍPb*! W%)B\V$0ID; 72 Lrx53(poiӜ\cЉpgx +)<\K M5O8Ii\ IK ъ/DR?(L&!m!҂̅ 6IpFpCD.Rx1m 8hŬxc Vʍ#t|^Hkk%-ZbPr&FHk-DhZߪAn@@'~S9`LJ9Fb4U-1Dp<Ռz rFJ%'ĵ&%^@AdjJ< +TЪ+*X +2 G2KC) C2 \14bC*w7*gf<pxpirT\5K7: u^{xKZd&PƖ=>n0;qtuKNH')>!UY,[+?9} Sh36Ula\ @K7#Xk2p/0b> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 26 0 obj [25 0 R] endobj 41 0 obj <> endobj xref +0 42 +0000000004 65535 f +0000000016 00000 n +0000000159 00000 n +0000022501 00000 n +0000000000 00000 f +0000000000 00000 f +0000068089 00000 n +0000000000 00000 f +0000022552 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000068159 00000 n +0000068190 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000026525 00000 n +0000026338 00000 n +0000068275 00000 n +0000022931 00000 n +0000028418 00000 n +0000028305 00000 n +0000025321 00000 n +0000025776 00000 n +0000025824 00000 n +0000026409 00000 n +0000026440 00000 n +0000026957 00000 n +0000027264 00000 n +0000028492 00000 n +0000028666 00000 n +0000029703 00000 n +0000038293 00000 n +0000068300 00000 n +trailer +<<4CFE35EE2C1C02469001420496E09BA9>]>> +startxref +68437 +%%EOF diff --git a/Graphics/Tortoise.png b/Graphics/Tortoise.png new file mode 100644 index 00000000..fd0af9ff Binary files /dev/null and b/Graphics/Tortoise.png differ diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..fed464b1 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,217 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2011 Teaching Kids Programming (http://www.teachingkidsprogramming.org). All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +## Contributors: +* Lynn Langit +* Samantha Langit +* James Counts +* Genevieve L'Esperance +* Jessica Ellis +* Matt Ballin +* Llewellyn Falco +* Katrina Owen +* June Clarke +* Brick Ellis +* David Coopersmith +* Edgar Melendrez +* Alex Puente +* 8th Grade students from PALM STEM Academy - Moreno Valley, CA - class of 2015-2016 diff --git a/Lesson Plans/Lesson Plan 01-ObjectsMethodsForLoops.docx b/Lesson Plans/Lesson Plan 01-ObjectsMethodsForLoops.docx deleted file mode 100644 index 4a35bad9..00000000 Binary files a/Lesson Plans/Lesson Plan 01-ObjectsMethodsForLoops.docx and /dev/null differ diff --git a/Lesson Plans/Lesson Plan 02-Methods.docx b/Lesson Plans/Lesson Plan 02-Methods.docx deleted file mode 100644 index 8c276c33..00000000 Binary files a/Lesson Plans/Lesson Plan 02-Methods.docx and /dev/null differ diff --git a/Lesson Plans/Lesson Plan 03-Ifs.docx b/Lesson Plans/Lesson Plan 03-Ifs.docx deleted file mode 100644 index 49cce901..00000000 Binary files a/Lesson Plans/Lesson Plan 03-Ifs.docx and /dev/null differ diff --git a/Lesson Plans/Lesson Plan 04-Mastery.docx b/Lesson Plans/Lesson Plan 04-Mastery.docx deleted file mode 100644 index 52ce0132..00000000 Binary files a/Lesson Plans/Lesson Plan 04-Mastery.docx and /dev/null differ diff --git a/Lesson Plans/Lesson Plan 05-Recursion.docx b/Lesson Plans/Lesson Plan 05-Recursion.docx deleted file mode 100644 index 95fb3b25..00000000 Binary files a/Lesson Plans/Lesson Plan 05-Recursion.docx and /dev/null differ diff --git a/Lesson Plans/Lesson Plan 06-ModelViewController.docx b/Lesson Plans/Lesson Plan 06-ModelViewController.docx deleted file mode 100644 index 610df3e7..00000000 Binary files a/Lesson Plans/Lesson Plan 06-ModelViewController.docx and /dev/null differ diff --git a/Lesson Plans/Lesson Plan 07- Events.docx b/Lesson Plans/Lesson Plan 07- Events.docx deleted file mode 100644 index 848d2bbc..00000000 Binary files a/Lesson Plans/Lesson Plan 07- Events.docx and /dev/null differ diff --git a/Lesson Plans/Lesson Plan 08- Test Driven Development.docx b/Lesson Plans/Lesson Plan 08- Test Driven Development.docx deleted file mode 100644 index de09382d..00000000 Binary files a/Lesson Plans/Lesson Plan 08- Test Driven Development.docx and /dev/null differ diff --git a/Lesson Plans/Lesson Plan Overview.docx b/Lesson Plans/Lesson Plan Overview.docx deleted file mode 100644 index 997590f6..00000000 Binary files a/Lesson Plans/Lesson Plan Overview.docx and /dev/null differ diff --git a/Ninite Eclipse Installer.exe b/Ninite Eclipse Installer.exe index 9f821b25..de31d0d5 100644 Binary files a/Ninite Eclipse Installer.exe and b/Ninite Eclipse Installer.exe differ diff --git a/Ninite JDK Installer.exe b/Ninite JDK Installer.exe deleted file mode 100644 index 7749d331..00000000 Binary files a/Ninite JDK Installer.exe and /dev/null differ diff --git a/Ninite JDK x64 8 Installer.exe b/Ninite JDK x64 8 Installer.exe new file mode 100644 index 00000000..032fb41a Binary files /dev/null and b/Ninite JDK x64 8 Installer.exe differ diff --git a/README.md b/README.md index c55b6029..73a47af1 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,205 @@ -TeachingKidsProgramming.Java -============================ +# Get Started With TKP -## To Install ## +Setup your computer for TKP based on its operating system: -1) Run the TKP_Launcher.jar file +* [Windows](#windows) +* [Mac](#mac) +* [Linux](#linux) -2) After the install is complete, Eclipse should open with the TKP courseware loaded. The courseware is a series of *.java files +### Windows -The result should look like this: ![screenshot of Eclipse](http://teachingkidsprogramming.org/blog/wp-content/uploads/2012/04/Screen-shot-TKP-Java1.png) +1. **Create** a new folder named `TKPSource` (no spaces in the folder name) at the top level of your `C:` drive. Example: `C:\TKPSource`. -============================= -### If Standard Install Doesn't Work ### + ![Create C:\TKPSource](/images/01CreateFolder.png?raw=true) -If the standard install doesn't work, then there are a couple of possible reasons: +1. **Download** the TKP zip file from this site by clicking the green `Clone or Download` button on the middle right side of this page, and then click the blue download zip button (or use the link directly below this line). Wait for the download to complete. + + [![download](/images/download_zip.png?raw=true)](https://github.com/TeachingKidsProgramming/TeachingKidsProgramming.Java/archive/master.zip) + +1. **Move** the zip file from your **Downloads** folder to the **C:\TKPSource** folder. The name of the downloaded file is `TeachingkidsProgramming.Java-master.zip` + + ![Move zip to C:\TKPSource](/images/02MoveZip.png?raw=true) + +1. **Unzip** the downloaded file. Right-click on the zip file, and choose `Extract All...`. Next click `Extract` to create the TKP folder. + + ![Extract Zip](/images/03ExtractAll.png?raw=true) + +1. **Open** the unzipped TKP folders and find the **'TKP_Launcher.jar'** file. + + ![TKP Launcher](/images/04TKPLauncher.png?raw=true) + +1. **Run** the `TKP_Launcher.jar` file by double-clicking it. Wait for it to run. *Tip* if the jar won't run, double-check that you are double-clicking it from the extracted **folder** and not inside the **zip**. + + If the jar file runs ok, then Eclipse will launch with the TKP workspace open. A successful install should look like the screenshot below: (you can test with two lines of code below) + + ```java + Tortoise.show(); + Tortoise.move(50); + ``` + + ![screenshot of Eclipse](/images/20Success.png?raw=true) + + If an error MessageBox pops up, you probably just need a little more setup, keep reading. + + + ![Java Missing](/images/05NoJava.png?raw=true) + +1. **Run** the "Ninite" installer for Java. There are two, but only one is appropriate for your computer. Look in the `C:\` folder. Do you have a folder called `Program Files (x86)`? + + ![64-bit](/images/06_64bit.png?raw=true) + + If so, then double-click `Ninite JDK x64 8 Installer.exe`. Otherwise, double-click `Ninite JDK 8 Installer.exe`. (If you see a `Security Warning` click `Run`. If you see a `User Account Control` prompt click `Yes`). When the Ninite Java install finishes, try double-clicking the `TKP_Launcher.jar` again. + + If it works, great! Otherwise, you might see a message like the one below. Keep reading for more setup. + + ![Eclipse Missing](/images/07NoEclipse.png?raw=true) + +1. **Run** the "Ninite" installer for Eclipse. There is only one installer for eclipse, called `Ninite Eclipse Installer.exe`. Double-click the eclipse installer (If you see a `Security Warning` click `Run`. If you see a `User Account Control` prompt click `Yes`). When the Ninite Java install finishes, try double-clicking the `TKP_Launcher.jar` again. + + If it works, great! Otherwise, visit the [Fixing Installation Errors](#troubleshooting) section below for more tips. - a) You do not have Java installed, if this is the case and you have Windows, then run the 'Ninite JDK Installer', if you have Mac, then you should be prompted to install Java automatically +### Mac + +1. **Create** a new folder named `TKPSource` (no spaces in the folder name) in your `Documents` folder. Example: `/Users/james/Documents/TKPSource`. + + ![Create ~/TKPSource](/images/08CreateFolder.png?raw=true) + +1. **Download** the TKP zip file from this site by clicking the `Download ZIP` button on the middle right side of this page (or use the link directly below this line). Wait for the download to complete. + + [![download zip button][2]][1] + +1. **Move** the zip file from your **Downloads** folder to the **TKPSource** folder. The name of the downloaded file is `TeachingkidsProgramming.Java-master.zip` + + ![Move zip to TKPSource](/images/09MoveZip.png?raw=true) + +1. **Unzip** the downloaded file. Right-click on the zip file, and choose `Open` to create the TKP folder. + + ![Extract Zip](/images/10Open.png?raw=true) + +1. **Open** the unzipped TKP folders and find the **TKP_Launcher.jar** file. + + ![TKP Launcher](/images/11TKPLauncher.png?raw=true) + +1. **Run** the `TKP_Launcher.jar` file by double-clicking it. Wait for it to run. *Tip* if the jar won't run, double-check that you are double-clicking it from the extracted **folder** and not inside the **zip**. + + If the jar file runs ok, then Eclipse will launch with the TKP workspace open. A successful install should look like the screenshot below: (you can test with two lines of code below) + + ```java + Tortoise.show(); + Tortoise.move(50); + ``` + + ![screenshot of Eclipse](/images/20Success.png?raw=true) + + If an error MessageBox pops up, you probably just need a little more setup, keep reading. + + ![Not Trusted](/images/12Untrusted.png?raw=true) + +1. **Open** the Mac `System Preferences` and choose `Security & Privacy`. + + ![Settings](/images/13Settings.png?raw=true) + + Click `Open Anyway`, then `Open`. This will allow the TKP launcher to run in the future, and Mac will immediately try to run the launcher again. + + ![Open Anyway](/images/14OpenAnyway.png?raw=true) + + If it works, great! Otherwise, you might see a message like the one below. Keep reading for more setup. + + ![Java Missing](/images/15NoJava.png?raw=true) + +1. **Download** Java 8. Click the `More Info...` button (shown above) to go to Oracle's download page. There are several download options, choose `JDK` (indicated below). + + ![Choose JDK](/images/16JDK.png?raw=true) + + On the next page, there is a table of files you can download. First, accept the Java license by choosing `Accept License Agreement`. Now, find `Mac OS X x64` in the table and download the `dmg` file from the same row. + + ![Choose Mac DMG](/images/17JDK2.png?raw=true) + + Wait for it to download, then double-click the dmg to open it. Double click the `pkg` file inside the `dmg`, then click `Continue` then `Install` in the wizard that appears. Enter your password if prompted, and wait for the installation to complete. + + Next, try launching the `TKP_Launcher.jar` by double-clicking it. If it works, great! Otherwise, you might see a message like the one below. Keep reading for more setup. + + ![Eclipse Missing](/images/18NoEclipse.png?raw=true) + +1. **Download** [Eclipse Luna][3]. To extract the eclipse files, right-click on the `eclipse-java-luna-SR2-macosx-cocoa-x86_64.tar.gz` file and choose `Open`. Next, drag the `eclipse` folder to `Applications` for your username, i.e. //Applications. + + ![Move Eclipse](/images/19Eclipse.png?raw=true) + + When you have put `eclipse` into `Applications` try launching TKP again by double-clicking `TKP_Launcher.jar`. If it works, great! Otherwise, visit the [Fixing Installation Errors](#troubleshooting) section below for more tips. + +### Linux + +1. **Ubuntu** + + To install on Ubuntu, open a terminal window and run the following command: + + ```bash + source <(curl -L -s http://tinyurl.com/hzvqvck) + ``` + + This command will download everything needed for TKP and create a shortcut on your desktop. + +Eclipse should run automatically and the first lesson from TKP will open. + +If you are having trouble reading the text inside the "JavaDoc" panel, you might need to change your system colors. This can be done by using the "color chooser" app. Just type: + +```bash +sudo apt install gnome-color-chooser +gnome-color-chooser +``` + +You will need to go to the "Specific" tab and change your tooltip colors. + + +## Fixing Installation Errors + +We're sorry that you are having trouble getting started with TKP. Below you will find a few more troubleshooting tips that we have used to resolve issues in the past. - b) You do not have Eclipse installed, if this is the case and you have Windows, then run the 'Ninite Eclipse Installer', if you have Mac, then you will have to install Eclipse manually +### Correct version of Java (7 or higher) not installed + +We test the standard installation steps using "clean" computers with no software installed except what comes with Windows or OSX. However, your computer might have an older version of Java on it that we don't support. + +To validate the version of Java that is installed, go to [this website](http://java.com/en/download/installed8.jsp) and click the 'validate' button. **Note** this website will not work in Google's Chrome browser, so you may need to visit it in another browser (Safari/Firefox/Internet Explorer/etc). + +If the reported version of your Java installation is less than 7, then update Java to the version that Oracle recommends. + +### Correct version of Eclipse (Luna) not installed + +We test the standard installation steps using "clean" computers with no software installed except what comes with Windows or OSX. However, your computer might have an older version of eclipse on it that we don't support. + +Eclipse installations have friendly names (examples: Indigo, Kepler, Luna) that indicate their version. You can see this name when eclipse starts. + +![Eclipse Luna](/images/21Luna.png?raw=true) + +We test TKP with `Luna`. The friendly names are in alphabetical order, so if your version starts with a letter that comes before `L`, then you are using an older version of eclipse and should update to Luna. If you are using a version of eclipse that comes after `L`, then it _should_ work, but we haven't yet tested that version, you may want to try Luna. + +We recommend that you delete your current version of eclipse. (Advanced users can rename it, but we won't cover that here). On **Windows**, delete `C:\eclipse`. On **Mac** delete `eclipse` from `Applications`. Next, go back to the installation instructions for [Windows](#wineclipse) or [Mac](#maceclipse) to setup Luna. + +### Customized TKP workspace did not open in Eclipse. + +Open Eclipse and change the default workspace directory, by clicking on `File` then choosing `Switch Workspace` and then `Open...`. Navigate to the `\TeachingKidsProgramming.Java\TeachingKidsProgramming` folder (under `C:\TKPSource` on **Windows**, or `Documents\TKPSource` on **Mac**). After you do this, then your `TeachingKidsProgramming.Java` should include the following folders: -When done your dir should include +* `\.metadata` +* `\TeachingKidsProgramming` + +### Unable to write to file system location(s) +This general installation failure can occur if your school has "locked down" permissions to student lab computers. - `.git - .metadata - TeachingKidsProgramming` +Try to `run as administrator` for **Windows**, or `run as root` for **Mac** and this may allow the downloaded TKP files to unzip. -3) Install Eclipse (unzip it) -We are using a specific version of eclipse, you can find it here +Some schools create a virtual (sometimes shared) `C:\` drive. If the drive is shared, eclipse should still be installed to `C:\`, but `TKPSource` should be created in each student's `C:\temp` directory. -[Eclipse 4.3](http://eclipse.org/downloads/packages/eclipse-standard-43/keplerr) +### Still Stuck? -4) Open Eclipse and point it at the this directory, by going to File>Switch Workspace>Open +Please consider writing a description of the errors/problems you are seeing and sharing it with us by opening a GitHub issue. You can be as detailed as you like, and your story will help us make TKP better. -\TeachingKidsProgramming.Java +You can create an issue by following this link (GitHub account required): [Create An Issue][4] +Or you can [email us from this page](http://teachingkidsprogramming.org/contact/) and we will create the issue for you (no account required). + [1]: https://github.com/TeachingKidsProgramming/TeachingKidsProgramming.Java/archive/master.zip + [2]: https://dl.dropboxusercontent.com/u/41301272/downloadZip.png + [3]: https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-java-luna-SR2-macosx-cocoa-x86_64.tar.gz + [4]: https://github.com/TeachingKidsProgramming/TeachingKidsProgramming.Java/issues/new diff --git a/TKP_Launcher.jar b/TKP_Launcher.jar index 1171ab6a..ddd75712 100644 Binary files a/TKP_Launcher.jar and b/TKP_Launcher.jar differ diff --git a/TeachingKidsProgramming/.classpath b/TeachingKidsProgramming/.classpath index 4afb75cb..f253a67e 100644 --- a/TeachingKidsProgramming/.classpath +++ b/TeachingKidsProgramming/.classpath @@ -4,5 +4,9 @@ + + + + diff --git a/TeachingKidsProgramming/.gitignore b/TeachingKidsProgramming/.gitignore new file mode 100644 index 00000000..ae3c1726 --- /dev/null +++ b/TeachingKidsProgramming/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/TeachingKidsProgramming/.settings/org.eclipse.jdt.core.prefs b/TeachingKidsProgramming/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..d17b6724 --- /dev/null +++ b/TeachingKidsProgramming/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/TeachingKidsProgramming/LICENSE.md b/TeachingKidsProgramming/LICENSE.md new file mode 100644 index 00000000..fed464b1 --- /dev/null +++ b/TeachingKidsProgramming/LICENSE.md @@ -0,0 +1,217 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2011 Teaching Kids Programming (http://www.teachingkidsprogramming.org). All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +## Contributors: +* Lynn Langit +* Samantha Langit +* James Counts +* Genevieve L'Esperance +* Jessica Ellis +* Matt Ballin +* Llewellyn Falco +* Katrina Owen +* June Clarke +* Brick Ellis +* David Coopersmith +* Edgar Melendrez +* Alex Puente +* 8th Grade students from PALM STEM Academy - Moreno Valley, CA - class of 2015-2016 diff --git a/TeachingKidsProgramming/Spiral.jar b/TeachingKidsProgramming/Spiral.jar new file mode 100644 index 00000000..6170b45f Binary files /dev/null and b/TeachingKidsProgramming/Spiral.jar differ diff --git a/TeachingKidsProgramming/for_loop.xml b/TeachingKidsProgramming/for_loop.xml deleted file mode 100644 index 0ea618cf..00000000 --- a/TeachingKidsProgramming/for_loop.xml +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/TeachingKidsProgramming/src/jars/TeachingKidsProgramming.jar b/TeachingKidsProgramming/src/jars/TeachingKidsProgramming.jar index 463221ed..8b593772 100644 Binary files a/TeachingKidsProgramming/src/jars/TeachingKidsProgramming.jar and b/TeachingKidsProgramming/src/jars/TeachingKidsProgramming.jar differ diff --git a/TeachingKidsProgramming/src/jars/commons-logging-1.2.jar b/TeachingKidsProgramming/src/jars/commons-logging-1.2.jar new file mode 100644 index 00000000..93a3b9f6 Binary files /dev/null and b/TeachingKidsProgramming/src/jars/commons-logging-1.2.jar differ diff --git a/TeachingKidsProgramming/src/jars/httpclient-4.3.5.jar b/TeachingKidsProgramming/src/jars/httpclient-4.3.5.jar new file mode 100644 index 00000000..1db1225f Binary files /dev/null and b/TeachingKidsProgramming/src/jars/httpclient-4.3.5.jar differ diff --git a/TeachingKidsProgramming/src/jars/httpcore-4.4.1.jar b/TeachingKidsProgramming/src/jars/httpcore-4.4.1.jar new file mode 100644 index 00000000..99715b6a Binary files /dev/null and b/TeachingKidsProgramming/src/jars/httpcore-4.4.1.jar differ diff --git a/TeachingKidsProgramming/src/jars/httpmime-4.4.1.jar b/TeachingKidsProgramming/src/jars/httpmime-4.4.1.jar new file mode 100644 index 00000000..e748cbde Binary files /dev/null and b/TeachingKidsProgramming/src/jars/httpmime-4.4.1.jar differ diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/AdLibs.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/AdLibs.java deleted file mode 100644 index 7dadcc82..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/AdLibs.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.teachingkidsprogramming.recipes; - - -public class AdLibs -{ - public static void main(String[] args) - { - //Ask the user to enter an adverb, save it as currentAdverb --#2 - //Ask the user to enter a verb ending in '-ed', save it as currentEdVerb --#4 - //Ask the user to enter a body part, save it as currentBodyPart --#6 - //Set the value of the currentStory to the word "Today " --#1.2 - //Add the words "I woke " + currentAdverb + ". " to the currentStory --#3 - //Add the words '"Then I " + currentEdVerb + " " to the currentStory --#5 - //Add the words "my " + currentBodyPart + ". " to the current story --#7 - //Show the currentStory in a message box as a message --#1.1 - } -} \ No newline at end of file diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/ConnectTheDots.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/ConnectTheDots.java deleted file mode 100644 index 1fc5d41a..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/ConnectTheDots.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -import org.teachingextensions.windows.MouseLeftClickListener; -import org.teachingextensions.windows.MouseRightClickListener; - -public class ConnectTheDots implements MouseRightClickListener, MouseLeftClickListener -{ - public static void main(String[] args) - { - //Create a Connect The Dots window. --#1.1 - } - public ConnectTheDots() - { - // Listen for right clicks on the window for the tortoise --#20.2 - // Listen for left clicks on the window for the tortoise --#1.2 - //Make the Tortoise go as fast as possible. --#4 - // clearTheScreen (recipe below) --#19 - // ------------- Recipe for clearTheScreen --#19 - // Clear the Tortoise --#20.1 - // Write "Right click to clear" on the screen at position 100, 100 --#18 - // ------------- End of clearTheScreen Recipe --#19 - // prepareColorPalette (recipe below) --#17 - // ------------- Recipe for prepareColorPalette --#17 - // Add red to the color wheel --#6 - // Add green to the color wheel --#12 - // Add blue to the color wheel --#13 - // Add purple to the color wheel --#14 - // Add pink to the color wheel --#15 - // Add teal to the color wheel --#16 - // ------------- End of prepareColorPalette Recipe --#17 - } - @Override - public void onRightMouseClick(int x, int y) - { - // clearTheScreen (recipe below) --#20.3 - } - @Override - public void onLeftMouseClick(int x, int y) - { - // addDot (recipe below) --#11 - // ------------- Recipe for addDot --#11 - // addACircle (recipe below) --#10 - // ------------- Recipe for addACircle --#10 - // Create a circle with a radius of 7 which is the same color as the next color on the colorwheel --#5 - // Change the circle to be 40% opaque --#9 - // Move the circle so that it's center is at the current position of the mouse --#8 - //Place the circle on the tortoise's window. --#7 - // ------------- End of addACircle Recipe --#10 - // Move the tortoise to the current position of the mouse --#2 - // ------------- End of addDot Recipe --#11 - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/DigiFlower.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/DigiFlower.java deleted file mode 100644 index 5571c887..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/DigiFlower.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class DigiFlower -{ - public static void main(String[] args) - { - // Show the tortoise --#1 - // Make the tortoise move as fast as possible --#7 - // Make the background silver --#8 - // Make the line the tortoise draws 3 pixels wide --#20 - // createColorPalette (recipe below) --#9 - // Do the following 15 times --#19 - // drawOctogon (recipe below) --#10 - // Turn the tortoise 1/15th of 360 degrees to the right --#18 - // Repeat - // ------------- Recipe for createColorPalette --#9 - // Color 1 is red --#3 - // Color 2 is dark orange --#11 - // Color 3 is gold --#12 - // Color 4 is yellow --#13 - // Add color 1 to the color wheel --#3.1 - // Add color 2 to the color wheel --#11.1 - // Add color 3 to the color wheel --#12.1 - // Add color 4 to the color wheel --#13.1 - // Add color 4 to the color wheel --#14 - // Add color 3 to the color wheel --#15 - // Add color 2 to the color wheel --#16 - // Add color 1 to the color wheel --#17 - // ------------- Recipe for drawOctogon --#10 - // Do the following 8 times --#6 - // Change the color of the line the tortoise draws to the next color on the color wheel --#4 - // Move the tortoise 50 pixels --#2 - // Turn the tortoise 1/8th of 360 degrees to the right --#5 - // Repeat - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/FourSquare.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/FourSquare.java deleted file mode 100644 index f410da68..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/FourSquare.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class FourSquare -{ - public static void main(String[] args) - { - // Show the tortoise --#1 - // Make the tortoise move as fast as possible --#8 - // Do the following 4 times --#9 - // drawSquare (recipe below) --#7 - // ------------- Recipe for drawSquare --#6 - // Do the following 4 times --#5 - // Change the color of the line the tortoise draws to a random color --#3 - // Move the tortoise 50 pixels --#2 - // Turn the tortoise 90 degrees to the right --#4 - // Repeat - // ------------- End of drawSquare recipe --#6 - // Turn the tortoise 90 degrees to the right --#10 - // Repeat - } - // Related Videos: - // Sub recipe-> Method : http://youtu.be/C6fnqjceVcs -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/HiLow.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/HiLow.java deleted file mode 100644 index 77e2a75b..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/HiLow.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class HiLow -{ - public static void main(String[] args) - { - // Choose a random number between 1 and 100 --#4.1 (fake!) & --#13 - // Do the following 8 times --#9 - // Ask the user for a guess --#1 - // If the guess is correct --#4 - // Play a bell --#2 - // Tell the user that they won the game --#3 - // and exit --#10 - // Otherwise, if the guess is too high --#6 - // Tell the end user that it is too high --#5 - // Otherwise, if the guess is too low --#8 - // Tell the end user that it is too low --#7 - // If after 8 times they haven't guessed correctly then --#12 - // Tell them they've lost the game --#11 - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/Houses.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/Houses.java deleted file mode 100644 index 197c760c..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/Houses.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class Houses -{ - public static void main(String[] args) - { - // Make the tortoise move as fast as possible --#11 - // Have the tortoise start at 200 pixels in on the X axis --#14 - // The current height is 40 --#1.2 - // drawHouse (recipe below) --#9 - // ------------- Recipe for drawHouse --#9 - // Change the color of the line the tortoise draws to lightGray --#15 - // Move the tortoise the height of a house --#1.1 - // Turn the tortoise 90 degrees to the right --#2 - // Move the tortoise 30 pixels --#3 - // Turn the tortoise 90 degrees to the right --#4 - // Move the tortoise the height of a house --#5 - // Turn the tortoise 90 degrees to the left --#6 - // Move the tortoise 20 pixels --#7 - // Turn the tortoise 90 degrees to the left --#8 - // ------------- End of drawHouse recipe - // DrawHouse with height 120 (recipe below) --#10 - // DrawHouse with height 90 (recipe below) --#12 - // DrawHouse with height 20 (recipe below) --#13 - } - // Related Videos: - // Sub recipe-> Method : http://youtu.be/C6fnqjceVcs -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/KnottedRing.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/KnottedRing.java deleted file mode 100644 index 95ac06e4..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/KnottedRing.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class KnottedRing -{ - public static void main(String[] args) - { - // Make the tortoise move as fast as possible --#4 - // createColorPalette (recipe below) --#6 - // ------------- Recipe for createColorPalette --#6 - // Add hot pink to the color wheel --#6 - // Add red to the color wheel --#12 - // Add fuchsia to the color wheel --#13 - // Add orange red to the color wheel --#14 - // Add deep pink to the color wheel --#15 - // Add medium violet red to the color wheel --#16 - // Add crimson to the color wheel --#17 - // Add tomato to the color wheel --#18 - // ------------- End of createColorPalette recipe --#6 - // Do the following 30 times --#10 - // Change the color of the line the tortoise draws to a random color from the color wheel --#5 - // drawOctagonWithOverlap (recipe below) --#8 - // ------------- Recipe for drawOctagonWithOverlap --#7 - // Do the following 8 + 1 times --#3 - // Move the tortoise 110 pixels --#1 - // Turn the tortoise 1/8th of 360 degrees to the right --#2 - // Repeat - // ------------- End of drawOctagonWithOverlap recipe --#7 - // Turn the tortoise 1/30th of 360 degrees to the right --#9 - // Turn the tortoise 5 more degrees to the right --#11 - // Repeat - } - // Related Videos: - // Sub recipe-> Method : http://youtu.be/C6fnqjceVcs -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/PentagonCrazy.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/PentagonCrazy.java deleted file mode 100644 index 541ed165..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/PentagonCrazy.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class PentagonCrazy -{ - public static void main(String[] args) - { - // Make the tortoise move as fast as possible --#3 - // createColorPalette (recipe below) --#8 - // ------------- Recipe for createColorPalette --#8 - // Add steel blue to the color wheel --#7 - // Add dark orchid to the color wheel --#11 - // Add dark slate blue to the color wheel --#12 - // Add teal to the color wheel --#13 - // Add indigo to the color wheel --#14 - // ------------- End of createColorPalette recipe - // drawPentagon (recipe below) --#10 - // ------------- Recipe for drawPentagon --#10 - // Do the following 200 times --#2 - // adjustPen (recipe below) --#9 - // ------------- Recipe for adjustPen --#9 - // Change the color of the line the tortoise draws to the next color on the color wheel --#6 - // Increase the tortoises pen width by 1 --#15 - // If the tortoises pen width is greater than 4, then --#17 - // Reset it to 1 --#16 - // ------------- End of adjustPen recipe - // The current length of a side is the same as the number of the side you are about to draw ( 1st side = 1 pixel, 2nd side = 2 pixels, etc) --#4.2 - // Move the tortoise the length of a side --#4.1 - // Turn the tortoise 1/5th of 360 degrees --#1 - // Turn the tortoise 1 more degree --#5 - // Repeat - // ------------- End of drawPentagon recipe - } - // Related Videos: - // Sub recipe-> Method : http://youtu.be/C6fnqjceVcs -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SimpleBubble.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SimpleBubble.java deleted file mode 100644 index 4e6260c5..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SimpleBubble.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class SimpleBubble -{ - //Hint: you will need to use the ProgramWindow & ShapeMaker objects. - //PrepareColorPalette (recipe below) --#10 - //Set the CreateBubble recipe (below) to be called when the mouse is clicked --#3 - //------------- Recipe for PrepareColorPalette --#9 - // Add alice blue to the color wheel --#5 - // Add blue to the color wheel --#6 - // Add dark blue to the color wheel --#7 - // Add purple to the color wheel --#8 - //------------- End of PrepareColorPalette recipe --#9 - //------------- Recipe for CreateBubble --#2 - // Remove the current bubble --#11 - // Change the color for the next circle to the next color from the color wheel --#4 - // Set the radius for the circle to a random number between 10 and 50 --#1.2 - // Create the bubble --#1.1 - // Move the center of the bubble to the current position of the mouse on the window --#1.0 (Fake at 20,20) &# - //------------- End of CreateBubble recipe --#2 -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SpiderWeb.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SpiderWeb.java deleted file mode 100644 index e4e28921..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SpiderWeb.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class SpiderWeb -{ - public static void main(String[] args) - { - // Make the tortoise go as fast as possible --#6 - // Change the width of the line the tortoise draws to 1 pixel --#12 - // Change the Tortoise to a Spider --#14 - // Change the color of the line the tortoise draws to silver --#13 - // The current length of a line is 10 pixels --#1.2 - // The current zoom is 1.1 --#8.2 - // Do the following 10 times --#10 - // weaveOneLayer (recipe below) --#9 - // ------------- Recipe for weaveOneLayer --#9 - // Do the following 6 times --#5 - // drawTriangle (recipe below) --#4.2 - // ------------- Recipe for drawTriangle --#4 - // Do the following 3 times --#3 - // Move the tortoise the length of a line --#1.1 - // Turn the tortoise 1/3rd of 360 degrees --#2 - // Repeat - // ------------- End of drawTriangle recipe --#4 - // Turn the tortoise 1/6th of 360 degrees to the right --#7 - // Increase the length of the line by the current zoom --#8.1 - // Repeat - // ------------- End of weaveOneLayer recipe --#9 - // Change the zoom so it is multiplied by 1.3 --#11 - // Repeat - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/Spiral.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/Spiral.java deleted file mode 100644 index f8c82522..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/Spiral.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class Spiral -{ - public static void main(String[] args) - { - // Show the tortoise --#1 - // Make the tortoise go as fast as possible --#4 - // Add Purple to the Color Wheel --#7 - // Add Violet to the Color Wheel --#8 - // Add Blue Violet to the Color Wheel --#9 - // Do the following 75 times --#3 - // Change the color of the line the tortoise draws the next color on the Color Wheel --#6 - // Move the tortoise 5 times the current line number you are drawing --#5 - // Turn the tortoise 1/3 of 360 degrees to the right --#2 - // Repeat --#3 - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/TriangleShell.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/TriangleShell.java deleted file mode 100644 index 572afbe7..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/TriangleShell.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.teachingkidsprogramming.recipes; - -public class TriangleShell -{ - private static int length; - public static void main(String[] args) - { - // Show the tortoise --#1 - // Make the tortoise go as fast as possible --#7 - // Do the following 60 times --#8 - // Change the color of the line the tortoise draws to a random color --#10 - // Increase the current length of the side by 4 pixels --#9 - // drawTriangle (recipe below) --#6 - // ------------- Recipe for drawTriangle --#5 - // Do the following 3 times --#3 - // Move the tortoise the current length of a side --#4 - // Turn the tortoise 1/3rd of 360 degrees --#2 - // Repeat - // ------------- End of drawTriangle recipe --#5 - // Turn the tortoise 1/60th of 360 degrees to the right --#11 - // Repeat - } - // Related Videos: - // Sub recipe-> Method : http://youtu.be/C6fnqjceVcs -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/TurtleTree.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/TurtleTree.java deleted file mode 100644 index 953ce4d8..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/TurtleTree.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.teachingkidsprogramming.recipes; - - -public class TurtleTree -{ - public static void main(String[] args) - { - // Make the tortoise go as fast as possible --#11 - // Turn the background black --#22 - // The current branch length = 60 --#1.2 - // drawBranch(recipe below) --#2 - // ------------- Recipe for drawBranch --#2 - // If the current branch length is greater than zero, do the rest of this recipe --#6 - // adjustColor --#16 - // ------------- Recipe for adjustColor --#16 - // A 10 pixel long branch is lime --#21 - // A 20 pixel long branch is forest green --#20 - // A 30 pixel long branch is dark green --#19 - // A 40 pixel long branch is olive --#18 - // A 50 pixel long branch is sienna --#15 - // A 60 pixel long branch is saddle brown --#14 - // ------------- End of adjustColor --#16 - // Move the tortoise the length of the current branch --#1.1 - // drawLowerBranches (recipe below) --#7 - // ------------- Recipe for drawLowerBranches --#7 - // Turn the Tortoise 30 degrees to the right --#3 - // drawShorterBranch (recipe below) --#9 - // ------------- Recipe for drawShorterBranch --#9 - // drawBranch (10 pixels shorter) --#4 - // ------------- End of drawShorterBranch recipe --#9 - // Turn the Tortoise 60 degrees to the left --#8 - // drawShorterBranch --#10 - // Turn the Tortoise 30 degrees to the right --#13 - // adjustColor --#17 - // Move the tortoise backward the length of the current branch --#12 - // ------------- End of drawLowerBranches recipe --#7 - // ------------- End of drawBranch recipe --#2 - } -} \ No newline at end of file diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/WaterMark.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/WaterMark.java deleted file mode 100644 index c1a08816..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/WaterMark.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.teachingkidsprogramming.recipes; - - -public class WaterMark -{ - public static void main(String[] args) - { - // Make the tortoise go as fast as possible --#3 - // Get a picture of sand from Flickr --#7.1 - // A side is 1 pixel long --#4.1 - // Do the following 200 times --#2 - // Get the color of the pixel the tortoise is currently on --#8.1 - // Use that color for the line the tortoise draws --#8 - // Increase the length of a side by 1 pixel --#5 - // Move the tortoise the length of the current side --#4 - // Turn the tortoise 1/3rd of 360 degrees to the right --#1 - // Turn the tortoise 1 more degree --#6 - // Repeat - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/HolidayCard.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/HolidayCard.java new file mode 100644 index 00000000..80ecd5ea --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/HolidayCard.java @@ -0,0 +1,118 @@ +package org.teachingkidsprogramming.recipes.inDevelopment; + +public class HolidayCard +{ + //**needs to be translated from the SmallBasic + // Holiday Recipe - Enjoy! + // Set the background to the color to Snow + // + // Make the tortoise move as fast as possible + // + // Tell the program window to call Click (recipe below) when the mouse is clicked + // + // + // ------------- Recipe for Click + // + // If the left mouse button is down + // + // DrawTree(recipe below) + // + // Otherwise, + // + // DrawHappyHolidays(recipe below) + // + // ------------- End of Click recipe + // + // + // ------------- Recipe for DrawHappyHolidays + // + // Play the music for Jingle Bells (Hint:"EEEP4EEEP4EGCDL1E") + // + // Set the font to be 48pt + // + // Set the font color to red + // + // Write the text "Happy Holidays" on the screen at position 150, 150 + // + // ------------- End of DrawMerryChristmas recipe + // + // ------------- Recipe for DrawTree + // + // DrawTreeTop(recipe below) + // + // DrawTreeBody(recipe below) + // + // DrawTreeTrunk(recipe below) + // + // ------------- End of DrawTree recipe + // + // + // ------------- Recipe for DrawTreeTop + // + // The current distance is distance of the mouse from the center of the window + // + // The current length is a 20th of the current distance + // + // Change the X position of tortoise to where the mouse is + // + // Change the Y position of tortoise to where the mouse is + // + // Change the tortoise so that it is pointing straight down + // + // Change the color of the line the tortoise draws to forest green + // + // Change the width of the line to the current length divided by 5 + // + // Move the tortoise half the current length + // + // Hide the tortoise + // + // Turn the tortoise 90 degrees to the left + // + // Move the tortoise half of the current length + // + // ------------- End of DrawTreeTop recipe + // + // + // ------------- Recipe for DrawTreeBody + // + // The current turn amount is 175 + // + // The current scale is 1.1 + // + // Do the following 11 times + // + // Turn the tortoise the current turn amount to the right + // + // Set the current length to the current length times the current scale + // + // Move the tortoise the current length + // + // Turn the tortoise the current turn amount to the left + // + // Set the current length to the current length times the current scale + // + // Move the tortoise the current length + // + // Decrease the current turn amount by 1 + // + // Repeat + // ------------- End of DrawTreeBody recipe + // + // + // ------------- Recipe for DrawTreeTrunk + // + // Turn the tortoise 180 degrees to the right + // + // Move the tortoise half of the current length + // + // Change the tortoise so that it is pointing straight down + // + // Change the width of the line to the current length divided by 10 + // + // Change the color of the line the tortoise draws to brown + // + // Move the tortoise a quarter the current length + // + // ------------- End of DrawTreeTrunk recipe +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/TicTacToe.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/TicTacToe.java new file mode 100644 index 00000000..9a998371 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/TicTacToe.java @@ -0,0 +1,22 @@ +package org.teachingkidsprogramming.recipes.inDevelopment; + +public class TicTacToe +{ + //**need to create the TicTacToe board (object) and Player objects** + // + // Tell TicTacToe to call PlayInFirstEmptySpot (recipe below) when its Xs turn + // + // Start TicTacToe + // + // Recipe for PlayInFirstEmptySpot + // + // Do the following 9 times + // + // if the tictactoe board is empty for current square you trying + // + // Play your piece on that square on the TicTacToe board + // + // and set the current value of i to 10 + // + // Repeat +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/forLoopUpdate.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/forLoopUpdate.java new file mode 100644 index 00000000..4a48795a --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/inDevelopment/forLoopUpdate.java @@ -0,0 +1,12 @@ +package org.teachingkidsprogramming.recipes.inDevelopment; + +public class forLoopUpdate +{ + public static void main(String[] args) throws Exception + { + // Input from Brick Ellis + // Update 'for loop English syntax' + // End of loop s/b 'end repeat' -- DONE + // Refer to 'for loop ' as 'this ' with a noun + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/HiLowQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/HiLowQuiz.java deleted file mode 100644 index 00ff0bf6..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/HiLowQuiz.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.teachingkidsprogramming.recipes.quizzes; - -import org.teachingkidsprogramming.recipes.quizzes.graders.HiLowQuizGrader; - -public class HiLowQuiz extends org.teachingkidsprogramming.recipes.quizzes.graders.HiLowQuiz -{ - public void question1() - { - // if the Y position of the tortoise is 115 - // - // turn the tortoise to the right 63 degrees - } - public void question2() - { - // if the X position of tortoise is less than Y position of tortoise - // - // turn the tortoise 54 degrees to the left - // - // otherwise turn the tortoise 22 degrees to the right - } - public void question3() - { - // display the message "elcomeway omehay!" - } - public void question4() - { - // if the Y position of tortoise is greater than 50 - // - // turn the tortoise 177 degrees to the left - } - public static void main(String[] args) - { - new HiLowQuizGrader().grade(new HiLowQuiz()); - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/HousesQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/HousesQuiz.java deleted file mode 100644 index 5939a3b5..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/HousesQuiz.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.teachingkidsprogramming.recipes.quizzes; - -import org.teachingkidsprogramming.recipes.quizzes.graders.HousesQuizGrader; - -public class HousesQuiz extends org.teachingkidsprogramming.recipes.quizzes.graders.HousesQuiz -{ - public void question1() - { - // The current length is 7 - } - // - // Question2 - // Create a method called medium - // that sets the current length to 21 - // - // - // Question3 - // Create a method called large - // that sets the current length to 63 - // - // - // Question4 - // Create a method called moveTheLength - // that moves the Tortoise the current length - // - // - // Question5 - // Create a method called turnTheCorner - // that turns the Tortoise 1/3 of 360 degrees to the left - // - // - // Question6 - // Create a method called drawASide - // that calls moveTheLength and turnTheCorner - // - public static void main(String[] args) - { - new HousesQuizGrader().grade(new HousesQuiz()); - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/PentagonCrazyQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/PentagonCrazyQuiz.java deleted file mode 100644 index 27ce8abd..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/PentagonCrazyQuiz.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.teachingkidsprogramming.recipes.quizzes; - -import org.teachingkidsprogramming.recipes.quizzes.graders.PentagonCrazyQuizGrader; -import org.teachingkidsprogramming.recipes.quizzes.graders.PentagonQuiz; - -public class PentagonCrazyQuiz extends PentagonQuiz -{ - // Question1 - // Create a method called thread - // that moves the tortoise 6 pixels - public void question2() - { - // Do the following 76 times - // call stitch - // Repeat - } - public void question3() - { - // Add lime to the color wheel - } - public void question4() - { - // Add red to the color wheel - } - public static void main(String[] args) - { - new PentagonCrazyQuizGrader().grade(new PentagonCrazyQuiz()); - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SimpleBubbleQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SimpleBubbleQuiz.java deleted file mode 100644 index 4b16ad88..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SimpleBubbleQuiz.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.teachingkidsprogramming.recipes.quizzes; - -public class SimpleBubbleQuiz -{ - //Variables needed for Quiz - // action[1] = 15 - // ball = 1 - // BubbleQuiz.StartQuizAt = Question2 - //--------------------Begin Quiz -------------------- - //Question1 - Is At the bottom of this quiz. But do it 1st! - // Sub Question2 - // Set the 1st action to 5 - // EndSub - // Sub Question3 - //Have the timer call Move every 100 milliseconds - // EndSub - // Sub Question4 - // Set the 2nd action to -6 - // EndSub - // Sub Question5 - //Change the color for the next circle to be yellow - //Make the current ball be a circle with a 11 pixel radius - // EndSub - //Question1 - //Create a subroutine called Move - // that calls Quiz.DoMovement() -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SpiderWebQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SpiderWebQuiz.java deleted file mode 100644 index 73696d98..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SpiderWebQuiz.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.teachingkidsprogramming.recipes.quizzes; - -import org.teachingkidsprogramming.recipes.quizzes.graders.SpiderQuiz; -import org.teachingkidsprogramming.recipes.quizzes.graders.SpiderWebQuizGrader; - -public class SpiderWebQuiz extends SpiderQuiz -{ - public void question1() - { - // Do the following the current number of times - // Call circle() - // Repeat - } - // - // Question2 - // Create a subroutine called circleAround which - // Does the following 3 times - // Call adjust() - // Call question1 - // Repeat - // - // - // Question3 - // Create a subroutine called grow which - // Changes the current length so it is multiplied by 2.5 - // - // - // Question4 - // Create a subroutine called shrink which - // Decreases the current length by 9 pixels - // - // - // Question5 - // Create a subroutine called expand which - // Increases the current number by 12 - // - public static void main(String[] args) - { - new SpiderWebQuizGrader().grade(new SpiderWebQuiz()); - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/TreeQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/TreeQuiz.java deleted file mode 100644 index a5918381..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/TreeQuiz.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.teachingkidsprogramming.recipes.quizzes; - -public class TreeQuiz -{ - // Quiz.StartTreeQuizAt = question1 - //variables for the quiz - // angles[1] = 90 - // length = 1 - // turn = 1 - //--------------------Begin Quiz -------------------- - // Sub question1 - // make the current length twice what it is - // EndSub - //Question2 - // create a sub called DecreaseTurn which - // decrease the current turn by 1 - //Question3 - //create a sub called SetNinety which - // sets the angle of the current turn to 90 - //Question4 - //create a sub called AngleFive which - // sets the 5th angle to 36 degrees -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/AdLibsQuizAdapter.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/AdLibsQuizAdapter.java new file mode 100644 index 00000000..3238f3f2 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/AdLibsQuizAdapter.java @@ -0,0 +1,28 @@ +package org.teachingkidsprogramming.recipes.quizzes.graders; + + +public class AdLibsQuizAdapter +{ + public static class Pieces + { + public String beginning; + public String middle; + public String end; + } + public String word1; + public String word2; + public String word3; + public String template4; + public void question1(String letter1, String letter3) + { + } + public void question2(String letter1) + { + } + public void question3(String templateText, Object model) + { + } + public void question4(Pieces pieces) + { + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/AdLibsQuizGrader.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/AdLibsQuizGrader.java new file mode 100644 index 00000000..5f0e862c --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/AdLibsQuizGrader.java @@ -0,0 +1,131 @@ +package org.teachingkidsprogramming.recipes.quizzes.graders; + +import java.awt.Font; +import java.awt.Graphics2D; + +import javax.swing.JPanel; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; +import org.teachingextensions.logo.utils.MVCUtils.Parser; +import org.teachingkidsprogramming.recipes.quizzes.graders.AdLibsQuizAdapter.Pieces; + +public class AdLibsQuizGrader implements Paintable +{ + private static class Model + { + @SuppressWarnings("unused") + public String three; + public Model(String three) + { + this.three = three; + } + } + private boolean[] answers; + public static int TURTLE_SPEED = 9; + private AdLibsQuizAdapter quiz; + private void displayScreen() + { + QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED); + } + public void grade(AdLibsQuizAdapter quiz) + { + this.quiz = quiz; + answers = new boolean[]{grade1You(), grade2Won(), grade3The(), grade4Game()}; + displayScreen(); + } + @Override + public void paint(Graphics2D g, JPanel caller) + { + QuizUtils.displayScores(g, 300, answers); + Tortoise.hide(); + drawRewardShape(g); + } + public void drawRewardShape(Graphics2D g) + { + drawYou(g); + drawWin(g); + drawThe(g); + drawGame(g); + } + private void drawGame(Graphics2D g) + { + quiz.template4 = ""; + Pieces pieces = new Pieces(); + quiz.question4(pieces); + pieces.middle = "am"; + String word = Parser.parse(quiz.template4, pieces); + drawWord(g, word, 0, 4, true); + } + private void drawThe(Graphics2D g) + { + quiz.word3 = ""; + Pieces model = new Pieces(); + model.middle = "H"; + quiz.question3("T{middle}E", model); + drawWord(g, quiz.word3, 3, 2, false); + } + private void drawWin(Graphics2D g) + { + quiz.word2 = "WO"; + quiz.question2("n"); + drawWord(g, quiz.word2, 1, 0, false); + } + private void drawWord(Graphics2D g, String word, int x, int y, boolean horizontal) + { + char[] letters = word.toUpperCase().toCharArray(); + int dx = horizontal ? 1 : 0; + int dy = horizontal ? 0 : 1; + for (int i = 0; i < letters.length; i++) + { + char c = letters[i]; + drawLetter(getPosition(x + dx * i), getPosition(y + dy * i), c, g); + } + } + private int getPosition(int i) + { + return 100 + i * 53; + } + private void drawYou(Graphics2D g) + { + quiz.word1 = "NOT"; + quiz.question1("y", "u"); + drawWord(g, quiz.word1, 0, 1, true); + } + private void drawLetter(int x, int y, char c, Graphics2D g) + { + g.setColor(PenColors.Browns.BurlyWood); + g.drawRect(x, y, 50, 50); + g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 36)); + int charWidth = g.getFontMetrics().charWidth(c); + int charHeight = g.getFontMetrics().getAscent(); + int textY = y + (40 - charHeight) / 2 + charHeight; + int textX = x + (50 - charWidth) / 2; + g.drawString("" + c, textX, textY); + } + private boolean grade1You() + { + quiz.word1 = "fake"; + quiz.question1("f", "o"); + return "foo".equals(quiz.word1); + } + private boolean grade2Won() + { + quiz.word2 = "passe"; + quiz.question2("d"); + return "passed".equals(quiz.word2); + } + private boolean grade3The() + { + quiz.word3 = "fake"; + quiz.question3("12{three}4", new Model("3")); + return "1234".equals(quiz.word3); + } + private boolean grade4Game() + { + quiz.template4 = "fake"; + quiz.question4(new Pieces()); + return "g{middle}e".equals(quiz.template4); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HiLowQuizGrader.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HiLowQuizGrader.java index 92bd9e31..a90dc908 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HiLowQuizGrader.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HiLowQuizGrader.java @@ -2,12 +2,14 @@ import java.awt.Graphics2D; -import org.teachingextensions.logo.Colors; -import org.teachingextensions.logo.Paintable; +import javax.swing.JPanel; + import org.teachingextensions.logo.Tortoise; import org.teachingextensions.logo.utils.TortoiseUtils; -import org.teachingextensions.windows.MessageBox; -import org.teachingextensions.windows.MessageBox.MessageBoxInstance; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.EventUtils.MessageBox; +import org.teachingextensions.logo.utils.EventUtils.MessageBox.MessageBoxInstance; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; public class HiLowQuizGrader implements Paintable { @@ -20,20 +22,71 @@ private void displayScreen() QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED); drawRewardShape(); } - public void paint(Graphics2D g) + @Override + public void paint(Graphics2D g, JPanel caller) { QuizUtils.displayScores(g, 300, answers); } private void drawRewardShape() { - int[] angles = { - 90, -90, -90, 135, -45, 90, 90, -135, 90, 135, -90, 90, 90, 90, -90, -90, -90, -90, -90, 90, 90, 90, -90, - 90, 90, -90, -90, -90}; - int[] lengths = { - 70, 85, 25, 43, 40, 18, 26, 50, 113, 25, 85, 40, 30, 30, 20, 20, 20, 10, 20, 10, 10, 20, 10, 10, 30, 30, - 60, 183}; + int[] angles = {90, + -90, + -90, + 135, + -45, + 90, + 90, + -135, + 90, + 135, + -90, + 90, + 90, + 90, + -90, + -90, + -90, + -90, + -90, + 90, + 90, + 90, + -90, + 90, + 90, + -90, + -90, + -90}; + int[] lengths = {70, + 85, + 25, + 43, + 40, + 18, + 26, + 50, + 113, + 25, + 85, + 40, + 30, + 30, + 20, + 20, + 20, + 10, + 20, + 10, + 10, + 20, + 10, + 10, + 30, + 30, + 60, + 183}; Tortoise.setX(20); - Tortoise.setPenColor(Colors.Greens.LawnGreen); + Tortoise.setPenColor(PenColors.Greens.LawnGreen); for (int i = 0; i < lengths.length; i++) { Tortoise.turn(angles[i]); diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuiz.java deleted file mode 100644 index 639d57ac..00000000 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuiz.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.teachingkidsprogramming.recipes.quizzes.graders; - -public class HousesQuiz -{ - public int length = 0; - public void medium() - { - } - public void large() - { - } - public void turnTheCorner() - { - } - public void moveTheLength() - { - } - public void question1() - { - } - public void drawASide() - { - } -} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuizAdapter.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuizAdapter.java new file mode 100644 index 00000000..64ac7982 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuizAdapter.java @@ -0,0 +1,45 @@ +package org.teachingkidsprogramming.recipes.quizzes.graders; + +import java.lang.reflect.Method; + +public class HousesQuizAdapter +{ + public int length = 0; + public static void call(Object that, String methodName) + { + try + { + Method method = that.getClass().getDeclaredMethod(methodName); + method.setAccessible(true); + method.invoke(that); + } + catch (Throwable e) + { + // ignore this + } + } + public void question1() + { + call(this, "small"); + } + public void question2() + { + call(this, "medium"); + } + public void question3() + { + call(this, "large"); + } + public void question4() + { + call(this, "moveTheLength"); + } + public void question5() + { + call(this, "turnTheCorner"); + } + public void question6() + { + call(this, "drawASide"); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuizGrader.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuizGrader.java index 6251a3f0..5be5b29a 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuizGrader.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/HousesQuizGrader.java @@ -2,25 +2,26 @@ import java.awt.Graphics2D; -import org.teachingextensions.logo.Colors; -import org.teachingextensions.logo.Paintable; +import javax.swing.JPanel; + +import org.teachingextensions.approvals.lite.util.NumberUtils; import org.teachingextensions.logo.Tortoise; import org.teachingextensions.logo.Turtle; import org.teachingextensions.logo.utils.TortoiseUtils; - -import com.spun.util.NumberUtils; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; public class HousesQuizGrader implements Paintable { - private boolean[] answers; - public static int TURTLE_SPEED = 9; - private HousesQuiz quiz; + private boolean[] answers; + public static int TURTLE_SPEED = 9; + private HousesQuizAdapter quiz; private void displayScreen() { QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED); drawRewardShape(); } - public void grade(HousesQuiz quiz) + public void grade(HousesQuizAdapter quiz) { this.quiz = quiz; answers = new boolean[]{grade1Small(), @@ -31,7 +32,8 @@ public void grade(HousesQuiz quiz) grade6drawASide()}; displayScreen(); } - public void paint(Graphics2D g) + @Override + public void paint(Graphics2D g, JPanel caller) { QuizUtils.displayScores(g, 300, answers); } @@ -50,12 +52,12 @@ private boolean grade1Small() } private boolean grade2Medium() { - quiz.medium(); + quiz.question2(); return 21 == quiz.length; } private boolean grade3Large() { - quiz.large(); + quiz.question3(); return 63 == quiz.length; } private boolean grade4moveTheLength() @@ -64,7 +66,7 @@ private boolean grade4moveTheLength() TortoiseUtils.setTurtle(turtle); TortoiseUtils.setOrientation(0, 0, 90); quiz.length = -3; - quiz.moveTheLength(); + quiz.question4(); return NumberUtils.equals(TortoiseUtils.getTurtle().getX(), -3, 0.005); } private boolean grade5turnTheCorner() @@ -73,7 +75,7 @@ private boolean grade5turnTheCorner() Turtle turtle = QuizUtils.createTestTurtle(); TortoiseUtils.setTurtle(turtle); turtle.setAngleInDegrees(angle); - quiz.turnTheCorner(); + quiz.question5(); return NumberUtils.equals(turtle.getAngleInDegrees(), angle + (-360.0 / 3), 0.005); } private boolean grade6drawASide() @@ -83,70 +85,70 @@ private boolean grade6drawASide() TortoiseUtils.setTurtle(turtle); TortoiseUtils.setOrientation(0, 0, angle); quiz.length = -3; - quiz.drawASide(); + quiz.question6(); boolean move = NumberUtils.equals(TortoiseUtils.getTurtle().getY(), -3, 0.005); boolean turn = NumberUtils.equals(turtle.getAngleInDegrees(), angle + (-360.0 / 3), 0.005); return move && turn; } private void drawTriangle() { - Tortoise.penUp(); - quiz.medium(); - quiz.large(); + Tortoise.setPenUp(); + quiz.question2(); + quiz.question3(); Tortoise.move(quiz.length); - Tortoise.penDown(); - quiz.turnTheCorner(); + Tortoise.setPenDown(); + quiz.question5(); for (int i = 0; i < 2; i++) { Tortoise.setPenWidth(3); - Tortoise.setPenColor(Colors.Purples.Lavender); - quiz.large(); - quiz.moveTheLength(); + Tortoise.setPenColor(PenColors.Purples.Lavender); + quiz.question3(); + quiz.question4(); Tortoise.turn(180); - quiz.moveTheLength(); + quiz.question4(); Tortoise.turn(180); drawSmallerLine(); - quiz.turnTheCorner(); + quiz.question5(); } - Tortoise.penUp(); - quiz.large(); - quiz.moveTheLength(); - Tortoise.penDown(); + Tortoise.setPenUp(); + quiz.question3(); + quiz.question4(); + Tortoise.setPenDown(); Tortoise.turn(180); - quiz.turnTheCorner(); + quiz.question5(); } private void drawSmallerLine() { moveMedium(); Tortoise.turn(360.0 / 6); moveMedium(); - quiz.turnTheCorner(); + quiz.question5(); moveMedium(); - quiz.turnTheCorner(); + quiz.question5(); Tortoise.turn(180); moveMedium(); } private void moveMedium() { - quiz.medium(); + quiz.question2(); Tortoise.setPenWidth(2); - Tortoise.setPenColor(Colors.Blues.LightBlue); - quiz.moveTheLength(); + Tortoise.setPenColor(PenColors.Blues.LightBlue); + quiz.question4(); Tortoise.turn(180); - quiz.moveTheLength(); + quiz.question4(); Tortoise.turn(180); drawSmallestLine(); } private void drawSmallestLine() { Tortoise.setPenWidth(1); - Tortoise.setPenColor(Colors.Blues.PowderBlue); + Tortoise.setPenColor(PenColors.Blues.PowderBlue); quiz.question1(); - quiz.moveTheLength(); + quiz.question4(); Tortoise.turn(360.0 / 6); - quiz.drawASide(); - quiz.drawASide(); + quiz.question6(); + quiz.question6(); Tortoise.turn(180); - quiz.moveTheLength(); + quiz.question4(); } } diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/MessageBoxMock.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/MessageBoxMock.java index 9741e6f5..8ea7c568 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/MessageBoxMock.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/MessageBoxMock.java @@ -1,6 +1,6 @@ package org.teachingkidsprogramming.recipes.quizzes.graders; -import org.teachingextensions.windows.MessageBox.MessageBoxInstance; +import org.teachingextensions.logo.utils.EventUtils.MessageBox.MessageBoxInstance; public class MessageBoxMock extends MessageBoxInstance { diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonCrazyQuizGrader.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonCrazyQuizGrader.java index ecab1420..4fe49b89 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonCrazyQuizGrader.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonCrazyQuizGrader.java @@ -3,38 +3,40 @@ import java.awt.Color; import java.awt.Graphics2D; -import org.teachingextensions.logo.ColorWheel; -import org.teachingextensions.logo.Colors; -import org.teachingextensions.logo.Paintable; +import javax.swing.JPanel; + +import org.teachingextensions.approvals.lite.util.NumberUtils; import org.teachingextensions.logo.Tortoise; import org.teachingextensions.logo.Turtle; -import org.teachingextensions.logo.Wheel; import org.teachingextensions.logo.utils.TortoiseUtils; - -import com.spun.util.NumberUtils; +import org.teachingextensions.logo.utils.ColorUtils.ColorWheel; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.ColorUtils.Wheel; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; public class PentagonCrazyQuizGrader implements Paintable { - private boolean[] answers; - public static int TURTLE_SPEED = 9; - private PentagonQuiz quiz; - private boolean mockStitch = false; - private int count = 0; - private String stitchingAngles = "25.601294645002;39.9954094294277;42.2747487414833;47.092558690198;-2.788677126170;8.082119014691;1.677864557623;3.746613109730;-25.826803494618;-67.5809589960839;-44.8780585363725;6.8440829952860;-18.9074111387679;-18.3392015893888;-22.0596908668138;-54.1385093815182;-73.2696242839109;-29.575128866738;-31.059191548109;-10.233377619284;3.083410700787;2.177224859757;12.620249199431;10.091222647431;-2.514163030606;-0.619322986136;19.377048562492;3.967384838321;20.365744867635;8.924468620782;5.247906731382;38.2861906270044;53.6722312927899;33.3231228793197;21.8612545917246;18.7599063446845;-1.9345991831263;11.1144118699626;-4.3183191159596;-0.4578370883930;20.6609500932546;-3.8233412487789;-32.1839398800777;17.4765102360018;28.6786604159701;-1.1959813284483;-5.7224879538386;-10.3016495267062;-63.9467251702219;-63.8779449224642;-30.3504986035853;-19.8687944708732;-21.978159282607;-14.363027757691;-16.463967303497;-23.821840937835;0.926592976539;-39.940321197861;-31.972205891899;-19.866181322959;0.031467825853;-33.734964949504;-9.726424741340;8.374963042147;5.816868521146;-8.073061677634;-3.548073295589;117.947684481056;2.034836317127;11.764854710885;19.126654192579;10.631238252889;28.914377802640;19.522477772099;28.4952954806338;32.0543585645222"; - private Wheel wheel; + private boolean[] answers; + public static int TURTLE_SPEED = 9; + private PentagonQuizAdapter quiz; + private boolean mockStitch = false; + private int count = 0; + private String stitchingAngles = "25.601294645002;39.9954094294277;42.2747487414833;47.092558690198;-2.788677126170;8.082119014691;1.677864557623;3.746613109730;-25.826803494618;-67.5809589960839;-44.8780585363725;6.8440829952860;-18.9074111387679;-18.3392015893888;-22.0596908668138;-54.1385093815182;-73.2696242839109;-29.575128866738;-31.059191548109;-10.233377619284;3.083410700787;2.177224859757;12.620249199431;10.091222647431;-2.514163030606;-0.619322986136;19.377048562492;3.967384838321;20.365744867635;8.924468620782;5.247906731382;38.2861906270044;53.6722312927899;33.3231228793197;21.8612545917246;18.7599063446845;-1.9345991831263;11.1144118699626;-4.3183191159596;-0.4578370883930;20.6609500932546;-3.8233412487789;-32.1839398800777;17.4765102360018;28.6786604159701;-1.1959813284483;-5.7224879538386;-10.3016495267062;-63.9467251702219;-63.8779449224642;-30.3504986035853;-19.8687944708732;-21.978159282607;-14.363027757691;-16.463967303497;-23.821840937835;0.926592976539;-39.940321197861;-31.972205891899;-19.866181322959;0.031467825853;-33.734964949504;-9.726424741340;8.374963042147;5.816868521146;-8.073061677634;-3.548073295589;117.947684481056;2.034836317127;11.764854710885;19.126654192579;10.631238252889;28.914377802640;19.522477772099;28.4952954806338;32.0543585645222"; + private Wheel wheel; private void displayScreen() { QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED); drawRewardShape(); } - public void grade(PentagonQuiz quiz) + public void grade(PentagonQuizAdapter quiz) { quiz.grader = this; this.quiz = quiz; answers = new boolean[]{gradeThread(), grade2Stitch76(), grade3Lime(), grade4Red()}; displayScreen(); } - public void paint(Graphics2D g) + @Override + public void paint(Graphics2D g, JPanel caller) { QuizUtils.displayScores(g, 300, answers); } @@ -59,7 +61,7 @@ private boolean gradeThread() Turtle turtle = QuizUtils.createTestTurtle(); TortoiseUtils.setTurtle(turtle); TortoiseUtils.setOrientation(0, 0, 90); - quiz.thread(); + quiz.callCreateAStitch(); return NumberUtils.equals(TortoiseUtils.getTurtle().getX(), 6, 0.005); } private boolean grade2Stitch76() @@ -73,7 +75,7 @@ private boolean grade3Lime() { ColorWheel.removeAllColors(); quiz.question3(); - return getSafeColor() == Colors.Greens.Lime; + return PenColors.Greens.Lime.equals(getSafeColor()); } public Color getSafeColor() { @@ -83,14 +85,14 @@ public Color getSafeColor() } catch (Exception e) { - return null; + return PenColors.Yellows.Yellow; } } private boolean grade4Red() { ColorWheel.removeAllColors(); quiz.question4(); - return getSafeColor() == Colors.Reds.Red; + return PenColors.Reds.Red.equals(getSafeColor()); } public void setColors() { @@ -108,10 +110,10 @@ public void stitch() { Tortoise.setPenColor(getSafeColor()); Tortoise.turn(wheel.next()); - Tortoise.penDown(); - quiz.thread(); - Tortoise.penUp(); - quiz.thread(); + Tortoise.setPenDown(); + quiz.callCreateAStitch(); + Tortoise.setPenUp(); + quiz.callCreateAStitch(); } } } diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonQuizAdapter.java similarity index 62% rename from TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonQuiz.java rename to TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonQuizAdapter.java index 72fdcf27..6c48a7ab 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonQuiz.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/PentagonQuizAdapter.java @@ -1,10 +1,11 @@ package org.teachingkidsprogramming.recipes.quizzes.graders; -public class PentagonQuiz +public class PentagonQuizAdapter { public PentagonCrazyQuizGrader grader; - public void thread() + public void callCreateAStitch() { + HousesQuizAdapter.call(this, "createAStitch"); } public void question2() { @@ -15,7 +16,7 @@ public void question3() public void question4() { } - public void stitch() + public void sewAStitch() { grader.stitch(); } diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/QuizUtils.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/QuizUtils.java index 417ae922..0dfe8ac5 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/QuizUtils.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/QuizUtils.java @@ -1,21 +1,18 @@ package org.teachingkidsprogramming.recipes.quizzes.graders; -import java.awt.Color; -import java.awt.Font; -import java.awt.Graphics2D; -import java.awt.RenderingHints; - -import org.teachingextensions.logo.Colors; -import org.teachingextensions.logo.Paintable; import org.teachingextensions.logo.Tortoise; import org.teachingextensions.logo.Turtle; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; import org.teachingextensions.logo.utils.TortoiseUtils; +import java.awt.*; + public class QuizUtils { public static void displayScores(Graphics2D g, int x, boolean[] answers) { - g.setColor(Colors.Blues.CornflowerBlue); + g.setColor(PenColors.Blues.CornflowerBlue); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setFont(new Font("Tahoma", Font.BOLD, 14)); @@ -33,16 +30,16 @@ public static void displayScores(Graphics2D g, int x, boolean[] answers) { boolean b = answers[i]; y += 25; - g.setColor(Colors.Blues.LightBlue); + g.setColor(PenColors.Blues.LightBlue); g.drawString(String.format("Question %s - ", i + 1), x, y); if (b) { - g.setColor(Colors.Greens.ForestGreen); + g.setColor(PenColors.Greens.ForestGreen); g.drawString("Pass", x + 90, y); } else { - g.setColor(Colors.Reds.Red); + g.setColor(PenColors.Reds.Red); g.drawString("Fail", x + 90, y); } } @@ -52,7 +49,7 @@ public static void prepareScoringScreen(boolean[] answers, Paintable paintable, TortoiseUtils.resetTurtle(); Tortoise.setSpeed(turtleSpeed); Tortoise.getBackgroundWindow().setColor(Color.black); - Tortoise.getBackgroundWindow().addAdditional(paintable); + Tortoise.getBackgroundWindow().getCanvas().add(paintable); Tortoise.show(); } public static Turtle createTestTurtle() diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleBubbleQuizAdapter.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleBubbleQuizAdapter.java new file mode 100644 index 00000000..9aa3063d --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleBubbleQuizAdapter.java @@ -0,0 +1,52 @@ +package org.teachingkidsprogramming.recipes.quizzes.graders; + +import org.teachingextensions.logo.Tortoise; + +public class SimpleBubbleQuizAdapter +{ + public int counter = 0; + public boolean leftClickWiredUp; + public boolean rightClickWiredUp; + public void drawNextBase() + { + goToNextBase(100); + drawDiamond(10); + } + public void goToNextBase(int size) + { + Tortoise.turn(-90); + Tortoise.move(size); + Tortoise.turn(-135); + } + public void drawDiamond(int size) + { + Tortoise.turn(45); + Tortoise.move(size); + Tortoise.turn(-90); + Tortoise.move(size); + Tortoise.turn(-90); + Tortoise.move(size); + Tortoise.turn(-90); + Tortoise.move(size); + } + public void question1() + { + } + public void question2() + { + } + public void question3() + { + } + public void question4() + { + } + public void answerQuestion1() + { + this.leftClickWiredUp = true; + } + public void answerQuestion3() + { + this.rightClickWiredUp = true; + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleBubbleQuizGrader.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleBubbleQuizGrader.java new file mode 100644 index 00000000..1d24a265 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleBubbleQuizGrader.java @@ -0,0 +1,76 @@ +package org.teachingkidsprogramming.recipes.quizzes.graders; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Text; + +import javax.swing.*; +import java.awt.*; + +public class SimpleBubbleQuizGrader implements Paintable +{ + private boolean[] answers = new boolean[4]; + public static int TURTLE_SPEED = 9; + private SimpleBubbleQuizAdapter quiz; + private void displayScreen() + { + QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED); + Tortoise.show(); + Tortoise.setX(150); + Tortoise.setY(200); + Tortoise.setPenColor(PenColors.Greens.GreenYellow); + quiz.drawDiamond(100); + quiz.question1(); + quiz.question3(); + } + public void grade(SimpleBubbleQuizAdapter quiz) + { + this.quiz = quiz; + displayScreen(); + } + @Override + public void paint(Graphics2D g, JPanel caller) + { + this.answers[0] = quiz.leftClickWiredUp; + this.answers[2] = quiz.rightClickWiredUp; + for (Paintable p : Tortoise.getBackgroundWindow().getCanvas().getPainters()) + { + try + { + Text t = (Text) p; + if (isAnswerToQuestion2(t)) + { + this.answers[1] = true; + } + else if (isAnswerToQuestion4(t)) + { + this.answers[3] = true; + } + } + catch (Exception e) + { + //do nothing + } + } + QuizUtils.displayScores(g, 300, answers); + drawRewardShape(g); + } + private boolean isAnswerToQuestion2(Text t) + { + if (t.getContent() != "Single!") { return false; } + if (t.getPenColor() != PenColors.Yellows.Yellow) { return false; } + if (t.getX() != 155 || t.getY() != 135) { return false; } + return true; + } + private boolean isAnswerToQuestion4(Text t) + { + if (t.getContent() != "Home Run!") { return false; } + if (t.getPenColor() != PenColors.Greens.LimeGreen) { return false; } + if (t.getX() != 105 || t.getY() != 235) { return false; } + return true; + } + public void drawRewardShape(Graphics2D g) + { + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleSquareQuizGrader.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleSquareQuizGrader.java index 9a88fde6..a1f2cee8 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleSquareQuizGrader.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SimpleSquareQuizGrader.java @@ -3,11 +3,12 @@ import java.awt.Color; import java.awt.Graphics2D; -import org.teachingextensions.logo.Paintable; +import javax.swing.JPanel; + +import org.teachingextensions.approvals.lite.util.NumberUtils; import org.teachingextensions.logo.Turtle; import org.teachingextensions.logo.utils.TortoiseUtils; - -import com.spun.util.NumberUtils; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; public class SimpleSquareQuizGrader implements Paintable { @@ -22,10 +23,11 @@ private void displayScreen() public void grade(SquareQuiz quiz) { this.quiz = quiz; - answers = new boolean[]{grade1Turn(), grade2Move(), grade3Color(), grade4Width()}; + answers = new boolean[]{grade1Move(), grade2Turn(), grade3Color(), grade4Width()}; displayScreen(); } - public void paint(Graphics2D g) + @Override + public void paint(Graphics2D g, JPanel caller) { QuizUtils.displayScores(g, 200, answers); } @@ -36,16 +38,16 @@ public void drawRewardShape() quiz.question4(); for (int i = 0; i < 5; i++) { - quiz.question2(); - quiz.question1(); quiz.question1(); + quiz.question2(); + quiz.question2(); } } - private boolean grade2Move() + private boolean grade1Move() { TortoiseUtils.setTurtle(QuizUtils.createTestTurtle()); TortoiseUtils.setOrientation(0, 0, 90); - quiz.question2(); + quiz.question1(); return NumberUtils.equals(TortoiseUtils.getTurtle().getX(), 110, 0.005); } private boolean grade3Color() @@ -58,13 +60,13 @@ private boolean grade4Width() quiz.question4(); return TortoiseUtils.getTurtle().getPenWidth() == 5; } - private boolean grade1Turn() + private boolean grade2Turn() { int angle = NumberUtils.getRandomInt(5, 20); Turtle turtle = QuizUtils.createTestTurtle(); TortoiseUtils.setTurtle(turtle); turtle.setAngleInDegrees(angle); - quiz.question1(); + quiz.question2(); return NumberUtils.equals(turtle.getAngleInDegrees(), angle + 360.0 / 5, 0.005); } } diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SpiderWebQuizGrader.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SpiderWebQuizGrader.java index e5e2a118..7a5a30fa 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SpiderWebQuizGrader.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/SpiderWebQuizGrader.java @@ -2,11 +2,13 @@ import java.awt.Graphics2D; -import org.teachingextensions.logo.ColorWheel; -import org.teachingextensions.logo.Colors; -import org.teachingextensions.logo.Paintable; +import javax.swing.JPanel; + import org.teachingextensions.logo.Tortoise; import org.teachingextensions.logo.utils.TortoiseUtils; +import org.teachingextensions.logo.utils.ColorUtils.ColorWheel; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; public class SpiderWebQuizGrader implements Paintable { @@ -35,9 +37,9 @@ public void initialize(SpiderQuiz quiz) TortoiseUtils.setOrientation(150, 200, 0); Tortoise.setPenWidth(15); ColorWheel.removeAllColors(); - ColorWheel.addColor(Colors.Grays.Black); - ColorWheel.addColor(Colors.Whites.White); - Tortoise.getBackgroundWindow().setBackground(Colors.Grays.Silver); + ColorWheel.addColor(PenColors.Grays.Black); + ColorWheel.addColor(PenColors.Whites.White); + Tortoise.getBackgroundWindow().setBackground(PenColors.Grays.Silver); quiz.number = 16; quiz.length = 15; } @@ -83,7 +85,8 @@ private boolean grade5Expand() quiz.expand(); return quiz.number == -100; } - public void paint(Graphics2D g) + @Override + public void paint(Graphics2D g, JPanel caller) { QuizUtils.displayScores(g, 400, answers); } @@ -98,14 +101,14 @@ public void circle(SpiderQuiz quiz) Tortoise.setPenColor(ColorWheel.getNextColor()); Tortoise.turn(angle); Tortoise.move(quiz.length); - Tortoise.penUp(); + Tortoise.setPenUp(); Tortoise.move(-quiz.length); Tortoise.turn(-angle); Tortoise.move(quiz.length); quiz.shrink(); Tortoise.move(quiz.length); quiz.grow(); - Tortoise.penDown(); + Tortoise.setPenDown(); Tortoise.turn(360.0 / quiz.number); } } @@ -120,9 +123,9 @@ public void adjust() angle *= -1; Tortoise.setPenColor(ColorWheel.getNextColor()); Tortoise.turn(-90); - Tortoise.penUp(); + Tortoise.setPenUp(); Tortoise.move(42); - Tortoise.penDown(); + Tortoise.setPenDown(); Tortoise.turn(90); quiz.expand(); } diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/TreeQuizAdapter.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/TreeQuizAdapter.java new file mode 100644 index 00000000..26475e5a --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/TreeQuizAdapter.java @@ -0,0 +1,40 @@ +package org.teachingkidsprogramming.recipes.quizzes.graders; + +import java.lang.reflect.Method; +import java.util.HashMap; + +public class TreeQuizAdapter +{ + public int length = 0; + public int turn = 0; + public HashMap angles = new HashMap(); + public static void call(Object that, String methodName) + { + try + { + Method method = that.getClass().getDeclaredMethod(methodName); + method.setAccessible(true); + method.invoke(that); + } + catch (Throwable e) + { + // ignore this + } + } + public void question1() + { + call(this, "doubleLength"); + } + public void question2() + { + call(this, "decreaseTurn"); + } + public void question3() + { + call(this, "setNinety"); + } + public void question4() + { + call(this, "angleFive"); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/TreeQuizGrader.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/TreeQuizGrader.java new file mode 100644 index 00000000..e014c342 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/graders/TreeQuizGrader.java @@ -0,0 +1,173 @@ +package org.teachingkidsprogramming.recipes.quizzes.graders; + +import java.awt.BasicStroke; +import java.awt.Graphics2D; +import java.awt.geom.Line2D; + +import javax.swing.JPanel; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.TortoiseUtils; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; + +public class TreeQuizGrader implements Paintable +{ + private boolean[] answers; + public static int TURTLE_SPEED = 9; + private TreeQuizAdapter quiz; + private int xTop = 25; + private int yTop = 25; + private void displayScreen() + { + QuizUtils.prepareScoringScreen(answers, this, TURTLE_SPEED); + drawRewardShape(); + } + public void grade(TreeQuizAdapter quiz) + { + this.quiz = quiz; + answers = new boolean[]{grade1DoubleLength(), grade2DecreaseTurn(), grade3SetNinety(), grade4AngleFive()}; + displayScreen(); + } + @Override + public void paint(Graphics2D g, JPanel caller) + { + QuizUtils.displayScores(g, 380, answers); + drawMaze(g); + } + private boolean grade1DoubleLength() + { + quiz.length = 111; + quiz.question1(); + return quiz.length == 222; + } + private boolean grade2DecreaseTurn() + { + quiz.turn = -31; + quiz.question2(); + return -32 == quiz.turn; + } + private boolean grade3SetNinety() + { + quiz.turn = -5; + quiz.question3(); + return 90 == getAngle(-5); + } + public Integer getAngle(int key) + { + Integer v = quiz.angles.get(key); + return v == null ? 0 : v; + } + private boolean grade4AngleFive() + { + quiz.question4(); + return 36 == getAngle(5); + } + public void drawRewardShape() + { + TortoiseUtils.setOrientation(xTop - 15, yTop + 15, 90); + quiz.length = 15; + quiz.question1(); + Tortoise.setPenColor(PenColors.Greens.Lime); + Tortoise.setPenWidth(2); + int[] turns = {0, + 90, + 0, + -90, + 90 - 36, + -90, + 0, + 90, + -90, + 0, + 0, + 0, + -90, + -90, + 0, + 0, + 90, + 0, + 0, + 90, + 0, + 0, + 0, + 0, + 90, + 90, + -90, + 0, + -90, + 90, + -90}; + for (int i = 0; i < turns.length; i++) + { + if (i == 4) + { + quiz.question4(); + quiz.angles.put(i + 1, getAngle(i + 1) + turns[i]); + } + else if (turns[i] != 90) + { + quiz.angles.put(i + 1, turns[i]); + } + else + { + quiz.turn = i + 1; + quiz.question3(); + } + } + quiz.turn = 0; + for (int i = 0; i < turns.length; i++) + { + quiz.question2(); + int turn = Math.abs(quiz.turn); + int degreesToTheRight = getAngle(turn); + Tortoise.turn(degreesToTheRight); + Tortoise.move(quiz.length); + } + } + private void drawMaze(Graphics2D g) + { + g.setColor(PenColors.Grays.DarkGray); + g.setStroke(new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)); + int[][] verticalLines = {{1, 4}, + {0, 2, 3, 1}, + {2, 1}, + {0, 1}, + {1, 3}, + {1, 2}, + {2, 1}, + new int[0], + {1, 1, 3, 2}, + {2, 1}, + {0, 4}}; + int[][] horizontalLines = {{0, 10}, + {2, 1, 5, 4}, + {1, 1, 3, 1, 7, 1}, + {0, 1, 2, 2, 5, 3, 9, 1}, + {1, 2, 4, 3, 8, 1}, + {0, 10}}; + drawLines(horizontalLines, g, true); + drawLines(verticalLines, g, false); + } + private void drawLines(int[][] lines, Graphics2D g, boolean addToX) + { + for (int line = 0; line < lines.length; line++) + { + for (int i = 0; i < lines[line].length; i += 2) + { + int grid = 30; + int p1 = xTop + lines[line][i] * grid; + int p2 = yTop + line * grid; + int x1 = addToX ? p1 : p2; + int y1 = addToX ? p2 : p1; + int length = lines[line][i + 1] * grid; + int x2 = addToX ? x1 + length : x1; + int y2 = addToX ? y1 : y1 + length; + g.draw(new Line2D.Double(x1, y1, x2, y2)); + } + } + } +} \ No newline at end of file diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/worksheets/SimpleSquareWorksheet.docx b/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/worksheets/SimpleSquareWorksheet.docx deleted file mode 100644 index a98ebff9..00000000 Binary files a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/worksheets/SimpleSquareWorksheet.docx and /dev/null differ diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section00demos/QuickShape.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section00demos/QuickShape.java new file mode 100644 index 00000000..b77c4115 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section00demos/QuickShape.java @@ -0,0 +1,28 @@ +package org.teachingkidsprogramming.section00demos; + +import java.util.Random; + +import org.teachingextensions.logo.Tortoise; + +@SuppressWarnings("unused") +public class QuickShape +{ + public static void main(String[] args) throws Exception + { + Tortoise.show(); + Tortoise.setX(150); + // Tip: Use the Tortoise object to draw shapes! + // Draw a red square that is 50 pixels per side with a line that's 2 pixels thick -- #1 + // + Tortoise.setX(425); + // Draw a blue hexagon that is 65 pixels per side with a line that's 40 pixels thick -- #2 + // + Tortoise.setX(250); + Tortoise.setY(375); + Random r = new Random(); + int sides = r.nextInt(10) + 1; + // Draw a purple shape that is 50 pixel on each side with a line that's 10 pixels thick -- #3 + // + } + // See "your" work at http://virtualproctor.tkpjava.org +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section00demos/QuickTortoise.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section00demos/QuickTortoise.java new file mode 100644 index 00000000..f1cc7a98 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section00demos/QuickTortoise.java @@ -0,0 +1,12 @@ +package org.teachingkidsprogramming.section00demos; + +import org.teachingextensions.logo.Tortoise; + +public class QuickTortoise +{ + public static void main(String[] args) throws Exception + { + Tortoise.show(); + // Use the Tortoise object to draw a Tortoise! + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework01.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/DeepDive01ForLoops.java similarity index 73% rename from TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework01.java rename to TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/DeepDive01ForLoops.java index ee1f46c1..6722bfa7 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework01.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/DeepDive01ForLoops.java @@ -1,26 +1,22 @@ -package org.teachingkidsprogramming.recipes.homework; - -import junit.framework.Assert; +package org.teachingkidsprogramming.section01forloops; +import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.teachingextensions.logo.Tortoise; import org.teachingextensions.logo.Turtle; import org.teachingextensions.logo.utils.TortoiseUtils; - -public class Homework01 +public class DeepDive01ForLoops { - // 'How to do homework: - // 'Step 1: Press the Run Button - // PC: Ctrl+F11 - // Mac: Command+fn+F11 - // 'Step 2: Read the name of the Method (Sub) that Failed - // 'Step 3: Fill in the blank (___) to make it pass - // 'Step 4: Repeat Until Enlightenment - // ' Do not change anything except the blank (___) - // + // Step 1: SELECT the method name (numbersDoNotNeedQuotes on line 23), then click the Run Button + // Keyboard shortcut to run -> PC: Ctrl+F11 or Mac: Command+fn+F11 + // Step 2: READ the name of the method that failed + // Step 3: FILL IN the blank (___) to make that method pass + // Step 4: SAY at least one thing you just learned + // Step 5: GO to the next method + // IMPORTANT - Do NOT change anything except the blank (___) + // @Test public void numbersDoNotNeedQuotes() { @@ -59,20 +55,20 @@ public void movingTheTortoise100Pixels() throws Exception public void theTortoiseTurns21() throws Exception { Tortoise.turn(____); - Assert.assertEquals(21.0, Tortoise.getAngle()); + Assert.assertEquals(21.0, Tortoise.getAngle(), 0.01); } @Test public void theTortoiseTurns15Twice() throws Exception { Tortoise.turn(____); Tortoise.turn(____); - Assert.assertEquals(30.0, Tortoise.getAngle()); + Assert.assertEquals(30.0, Tortoise.getAngle(), 0.01); } @Test public void howFastCanTheTortoiseGo() throws Exception { Tortoise.setSpeed(____); - Assert.assertEquals(Tortoise.getSpeed(), topSpeed); + Assert.assertEquals(topSpeed, Tortoise.getSpeed()); // 'Hint: Click SetSpeed then read the documentation on the left -----> } @Test @@ -100,10 +96,16 @@ public void combiningTextAndNumbers() throws Exception Assert.assertEquals(name, ___); } @Test + public void textIsTextEvenWhenItsNumbers() throws Exception + { + String age = "3" + "4"; + Assert.assertEquals(age, ___); + } + @Test public void combiningTextInALoop() throws Exception { String sound = "A"; - for (int i = 1; i <= 3; i++) + for (int i = 0; i < 3; i++) { sound += "H"; } @@ -113,18 +115,18 @@ public void combiningTextInALoop() throws Exception public void forLoopsEndAtTheEnd() throws Exception { String numbers = "# "; - for (int i = 1; i <= ____; i++) + for (int i = 0; i < ____; i++) { numbers += i; preventInfiniteLoops(); } - Assert.assertEquals("# 12345", numbers); + Assert.assertEquals("# 012345", numbers); } @Test public void forLoopsCanStartAnywhere() throws Exception { String answer = "Because "; - for (int i = ____; i <= 9; i++) + for (int i = ____; i < 10; i++) { answer += i; preventInfiniteLoops(); @@ -136,7 +138,7 @@ public void forLoopsCanStartAnywhere() throws Exception public void forLoopsCanSkip() throws Exception { String numbers = "# "; - for (int i = 1; i <= 20; i += ____) + for (int i = 1; i < 20; i += ____) { numbers = numbers + i + ","; preventInfiniteLoops(); @@ -147,7 +149,7 @@ public void forLoopsCanSkip() throws Exception public void forLoopsCanSkipUpAndDown() throws Exception { String numbers = "# "; - for (int i = 20; 0 < i && i <= 40; i += ____) + for (int i = 20; 0 < i && i < 40; i += ____) { numbers = numbers + i + ","; preventInfiniteLoops(); @@ -165,8 +167,18 @@ public void forLoopsCanGoBackwards() throws Exception } Assert.assertEquals("Countdown: 987654321", numbers); } + @Test + public void semicolonsMessUpForLoops() throws Exception + { + String sound = "A"; + for (int i = 0; i < 13; i++); + { + sound += "H"; + } + Assert.assertEquals(sound, ___); + } /** - * Ignore the following, it's needed to run the homework + * Ignore the following, it's needed to run the deep dive * * * diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/DoubleLoop.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/DoubleLoop.java new file mode 100644 index 00000000..df4701bb --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/DoubleLoop.java @@ -0,0 +1,43 @@ +package org.teachingkidsprogramming.section01forloops; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.ColorWheel; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; + +public class DoubleLoop +{ + public static void main(String[] args) + { + Tortoise.show(); + // Set the tortoise x position to 225 --#1.1 + // Set the tortoise y position to 150 --#1.2 + // UPDATE the tortoise speed to 10 --#8.2 + Tortoise.setSpeed(5); + // + ColorWheel.addColor(PenColors.Reds.Crimson); + ColorWheel.addColor(PenColors.Reds.DarkRed); + ColorWheel.addColor(PenColors.Reds.FireBrick); + // Do the following 6 times --#3.1 + // Change the pen color of the line the tortoise draws to the next color on the Color Wheel --#5 + // Move the tortoise 4 times the current line number you are drawing --#4 + // Turn the tortoise 1/6 of 360 degrees to the left --#2 + // + // Do the following 15 times --(HINT: The new line number is j) --#7.1 + // Set the pen width of the line the tortoise draws to 17 --#9 + // Move the tortoise 8 times the current line number you are drawing --#8.1 + // Turn the tortoise 1/5 of 360 degrees to the right --#6 + // End Repeat --#7.2 + // + // Hide the Tortoise --#10 + Tortoise.getBackgroundWindow().setBackground(PenColors.Yellows.PeachPuff); + // End Repeat --#3.2 + // Set the tortoise x position to 300 --#15.1 + // Set the tortoise y position to 200 --#15.2 + // Do the following 5 times --#12.1 + // Change the pen color of the line the tortoise draws to black --#14 + // Move the Tortoise 25 pixels --#11 + // Turn the tortoise 1/5 of 360 degrees to the right --#13 + // End Repeat --#12.2 + // + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/MakeALogo.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/MakeALogo.java new file mode 100644 index 00000000..7f4fe6b0 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/MakeALogo.java @@ -0,0 +1,19 @@ +package org.teachingkidsprogramming.section01forloops; + +public class MakeALogo +{ + public static int YValue = 300; + public static int XValue = 100; + public static void main(String[] args) + { + // Show the Tortoise --#1 + // Make the Tortoise draw a line as fast as possible --#2 + // Setup the Color Wheel --#3 HINT: Use the TKPLogo object + // Draw a TKP 'T' --#4 + // Draw a left bracket --#8 + // Draw a TKP 'K' --#5 + // Draw a right bracket --#9 + // Draw an outer TKP 'P' --#6 + // Draw an inner TKP 'P' --#7 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SimpleSquare.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/SimpleSquare.java similarity index 53% rename from TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SimpleSquare.java rename to TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/SimpleSquare.java index 9cf96e31..91e458d9 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/SimpleSquare.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/SimpleSquare.java @@ -1,4 +1,4 @@ -package org.teachingkidsprogramming.recipes; +package org.teachingkidsprogramming.section01forloops; public class SimpleSquare { @@ -7,12 +7,12 @@ public static void main(String[] args) throws Exception // Show the tortoise --#1 // Make the tortoise move as fast as possible --#6 // Do the following 4 times --#5.1 - // Change the color of the line the tortoise draws to "blue" --#4 + // Change the pen color of the line the tortoise draws to blue --#4 // Move the tortoise 50 pixels --#2 // Turn the tortoise to the right (90 degrees) --#3 - // Repeat --#5.2 + // End Repeat --#5.2 + // + // (Optional): Sign your work using the Virtual Proctor + // See your work at http://virtualproctor.tkpjava.org } - /* - * After you finish, watch the video recap at http://youtu.be/5bqUZEsJh_Q - */ } diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SimpleSquareQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/SimpleSquareQuiz.java similarity index 84% rename from TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SimpleSquareQuiz.java rename to TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/SimpleSquareQuiz.java index 5f284d93..53f8972d 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/quizzes/SimpleSquareQuiz.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/SimpleSquareQuiz.java @@ -1,4 +1,4 @@ -package org.teachingkidsprogramming.recipes.quizzes; +package org.teachingkidsprogramming.section01forloops; import org.teachingkidsprogramming.recipes.quizzes.graders.SimpleSquareQuizGrader; import org.teachingkidsprogramming.recipes.quizzes.graders.SquareQuiz; @@ -7,15 +7,15 @@ public class SimpleSquareQuiz implements SquareQuiz { public void question1() { - // Turn the tortoise 1/5 of 360 degrees to the right + // Move the tortoise 110 pixels } public void question2() { - // Move the tortoise 110 pixels + // Turn the tortoise 1/5 of 360 degrees to the right } public void question3() { - // Change the color the tortoise draws to yellow + // Change the pen color the tortoise draws to yellow } public void question4() { diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/Spiral.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/Spiral.java new file mode 100644 index 00000000..482d9ae2 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section01forloops/Spiral.java @@ -0,0 +1,27 @@ +package org.teachingkidsprogramming.section01forloops; + +import org.teachingextensions.logo.utils.EventUtils.MessageBox; + +public class Spiral +{ + public static void main(String[] args) + { + // Show the tortoise --#1 + // Make the tortoise go as fast as possible --#4 + // Add Blue Violet to the Color Wheel --#7 HINT: Use the ColorWheel object + // Add Violet to the Color Wheel --#8 + // Add Purple to the Color Wheel --#9 + // Do the following 75 times --#3.1 + try + { + // Change the pen color of the line the tortoise draws the next color on the Color Wheel --#6 + // Move the tortoise 5 times the current line number you are drawing --#5 + // Turn the tortoise 1/3 of 360 degrees to the right --#2 + } + catch (RuntimeException re) + { + MessageBox.showMessage("Hold up: " + re); + } + // End Repeat --#3.2 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework02.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/DeepDive02Variables.java similarity index 81% rename from TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework02.java rename to TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/DeepDive02Variables.java index d43052b1..e7fd139d 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework02.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/DeepDive02Variables.java @@ -1,22 +1,19 @@ -package org.teachingkidsprogramming.recipes.homework; +package org.teachingkidsprogramming.section02methods; -import junit.framework.Assert; - -import org.junit.Ignore; +import org.junit.Assert; import org.junit.Test; - -public class Homework02 +@SuppressWarnings("unused") +public class DeepDive02Variables { - // 'How to do homework: - // 'Step 1: Press the Run Button - // PC: Ctrl+F11 - // Mac: Command+fn+F11 - // 'Step 2: Read the name of the Method (Sub) that Failed - // 'Step 3: Fill in the blank (___) to make it pass - // 'Step 4: Repeat Until Enlightenment - // ' Do not change anything except the blank (___) - // + // Step 1: SELECT the method name (youCanReadVariables on line 19), then click the Run Button + // Keyboard shortcut to run -> PC: Ctrl+F11 or Mac: Command+fn+F11 + // Step 2: READ the name of the method that failed + // Step 3: FILL IN the blank (___) to make that method pass + // Step 4: SAY at least one thing you just learned + // Step 5: GO to the next method + // IMPORTANT - Do NOT change anything except the blank (___)// + // @Test public void youCanReadVariables() throws Exception { @@ -124,7 +121,7 @@ public String prepareForBed() return "gum"; } /** - * Ignore the following, It's needed to run the homework + * Ignore the following, It's needed to run the deep dive * * * @@ -138,6 +135,7 @@ public String prepareForBed() */ public String ___ = "You need to fill in the blank ___"; public int ____ = 10000; + public int numberOfHarryPotterBooks; public String ___() { return ___; diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/FourSquare.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/FourSquare.java new file mode 100644 index 00000000..65d1eb3a --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/FourSquare.java @@ -0,0 +1,21 @@ +package org.teachingkidsprogramming.section02methods; + +public class FourSquare +{ + public static void main(String[] args) + { + // Show the tortoise --#1 + // Make the tortoise move as fast as possible --#7 + // Do the following 4 times --#8.1 + // drawSquare (recipe below) --#6.1 + // ------------- Recipe for drawSquare --#6.2 + // Do the following 4 times --#5.1 + // Change the pen color of the line the tortoise draws to a random color --#3 + // Move the tortoise 50 pixels --#2 + // Turn the tortoise 90 degrees to the right --#4 + // End Repeat --#5.2 + // ------------- End of drawSquare recipe --#6.3 + // Turn the tortoise 90 degrees to the right --#9 + // End Repeat --#8.2 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/Houses.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/Houses.java new file mode 100644 index 00000000..9baabf68 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/Houses.java @@ -0,0 +1,29 @@ +package org.teachingkidsprogramming.section02methods; + +import org.teachingextensions.logo.Tortoise; + +public class Houses +{ + public static void main(String[] args) + { + Tortoise.show(); + // Make the tortoise move as fast as possible --#11 + // Have the tortoise start at 200 pixels in on the X axis --#14 + // The current height is 40 --#1.2 + // drawHouse (recipe below) --#9.1 + // ------------- Recipe for drawHouse --#9.2 + // Change the pen color of the line the tortoise draws to lightGray --#15 + // Move the tortoise the height of a house --#1.1 + // Turn the tortoise 90 degrees to the right --#2 + // Move the tortoise 30 pixels --#3 + // Turn the tortoise 90 degrees to the right --#4 + // Move the tortoise the height of a house --#5 + // Turn the tortoise 90 degrees to the left --#6 + // Move the tortoise 20 pixels --#7 + // Turn the tortoise 90 degrees to the left --#8 + // ------------- End of drawHouse recipe --#9.3 + // drawHouse with height 120 (recipe below) --#10 + // drawHouse with height 90 (recipe below) --#12 + // drawHouse with height 20 (recipe below) --#13 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/HousesQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/HousesQuiz.java new file mode 100644 index 00000000..c7706152 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/HousesQuiz.java @@ -0,0 +1,50 @@ +package org.teachingkidsprogramming.section02methods; + +import org.teachingkidsprogramming.recipes.quizzes.graders.HousesQuizAdapter; +import org.teachingkidsprogramming.recipes.quizzes.graders.HousesQuizGrader; + +public class HousesQuiz extends HousesQuizAdapter +{ + public void questions1Thru6() + { + // Question 1 + // small (recipe below) + // ------------- Recipe for small + length = 7; + // ------------- End of small recipe + // + // Question2 + // medium (recipe below) + // ------------- Recipe for medium + // set the current length to 21 + // ------------- End of medium recipe + // + // Question3 + // large (recipe below) + // ------------- Recipe for large + // set the current length to 63 + // ------------- End of large recipe + // + // Question4 + // moveTheLength (recipe below) + // ------------- Recipe for moveTheLength + // move the Tortoise the current length + // ------------- End of moveTheLength recipe + // + // Question5 + // turnTheCorner (recipe below) + // ------------- Recipe for turnTheCorner + // turn the Tortoise 1/3 of 360 degrees to the left + // ------------- End of turnTheCorner recipe + // + // Question6 + // drawASide (recipe below) + // ------------- Recipe for drawASide + // call moveTheLength and turnTheCorner + // ------------- End of drawASide recipe + } + public static void main(String[] args) + { + new HousesQuizGrader().grade(new HousesQuiz()); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/PyramidsOfGiza.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/PyramidsOfGiza.java new file mode 100644 index 00000000..04a44c48 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/PyramidsOfGiza.java @@ -0,0 +1,37 @@ +package org.teachingkidsprogramming.section02methods; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; + +public class PyramidsOfGiza +{ + public static void main(String[] args) throws Exception + { + setUpPyramidLand(); + // Turn the tortoise 90 degrees to the left + // Move the tortoise 220 pixels + // Turn the tortoise 135 degrees to the right + // Move the tortoise 100 pixels + // Turn the tortoise 90 degrees to the right + // Move the tortoise 100 pixels + // Turn the tortoise 90 degrees to the left + // Move the tortoise 100 pixels + // Turn the tortoise 90 degrees to the right + // Move the tortoise 100 pixels + // Turn the tortoise 90 degrees to the left + // Move the tortoise 100 pixels + // Turn the tortoise 90 degrees to the right + // Move the tortoise 100 pixels + // Turn the tortoise 135 degrees to the right + // Move the tortoise 210 pixels + } + private static void setUpPyramidLand() + { + Tortoise.show(); + Tortoise.setSpeed(10); + Tortoise.getBackgroundWindow().setBackground(PenColors.Blues.AliceBlue); + Tortoise.setPenColor(PenColors.Yellows.DarkGoldenrod); + Tortoise.setPenWidth(2); + Tortoise.hide(); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/TriangleShell.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/TriangleShell.java new file mode 100644 index 00000000..f910d751 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section02methods/TriangleShell.java @@ -0,0 +1,26 @@ +package org.teachingkidsprogramming.section02methods; + +@SuppressWarnings("unused") +public class TriangleShell +{ + private static int length = 1; + public static void main(String[] args) + { + // Show the tortoise --#1 + // Make the tortoise go as fast as possible --#6 + // Do the following 60 times --#7.1 + // Change the pen color of the line the tortoise draws to a random color --#9 + // Increase the current length of the side by 4 pixels --#8 + // drawTriangle (recipe below) --#5.1 + // + // ------------- Recipe for drawTriangle --#5.2 + // Do the following 3 times --#3.1 + // Move the tortoise using the current length --#4 + // Turn the tortoise 1/3rd of 360 degrees --#2 + // End Repeat --#3.2 + // ------------- End of drawTriangle recipe --#5.3 + // + // Turn the tortoise 1/60th of 360 degrees to the right --#10 + // End Repeat --#7.2 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/ChooseYourOwnAdventure.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/ChooseYourOwnAdventure.java new file mode 100644 index 00000000..80471ff2 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/ChooseYourOwnAdventure.java @@ -0,0 +1,90 @@ +package org.teachingkidsprogramming.section03ifs; + +import java.awt.Color; + +import org.teachingextensions.approvals.lite.util.ThreadUtils; +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.EventUtils.MessageBox; + +public class ChooseYourOwnAdventure +{ + public static void main(String[] args) + { + startStory(); + } + private static void startStory() + { + tellMoreStory("One morning the Tortoise woke up in a dream."); + animateStartStory(); + String action = askAQuestion("Do you want to 'wake up' or 'explore' the dream?"); + if ("wake up".equalsIgnoreCase(action)) + { + // wakeUp (recipe below) --#2.1 + // ------------- Recipe for wakeUp --#2.2 + // Tell the user "You wake up and have a boring day. The end." --#1 + // ------------- End of wakeUp recipe --#2.3 + } + else if ("explore".equalsIgnoreCase(action)) + { + // approachOoze (recipe below) --#4.1 + // ------------- Recipe for approachOoze --#4.2 + // Tell the user "You approach a glowing, green bucket of ooze. Worried that you will get in trouble, you pick up the bucket." --#3 + // Ask the user "Do you want to pour the ooze into the 'backyard' or 'toilet'?" --#7 + // If they answer "toilet" --#8.1 + // pourIntoToilet (recipe below) --#12.1 + // ------------- Recipe for pourIntoToilet --#12.2 + // Tell the user "As you pour the ooze into the toilet it backs up, gurgles, and explodes, covering you in radioactive waste." --#10 + // Ask the user "Do you want to train to be a NINJA? 'Yes' or 'HECK YES'?" --#11 + // If they answer "yes" --#13.1 + // Tell the user "Awesome dude! You live out the rest of your life fighting crimes and eating pizza!" --#14 + // Otherwise, if they answer "heck yes" --#13.2 + // Tell the user "Awesome dude! You live out the rest of your life fighting crimes and eating pizza!" --#15 + // Otherwise, if they answer anything else --#13.3 + // endStory --#16 + // ------------- End of pourIntoToilet recipe --#12.3 + // Otherwise, if they answer "backyard" --#8.2 + // pourIntoBackyard (recipe below) --#19.1 + // ------------- Recipe for pourIntoBackyard --#19.2 + // Tell the user "As you walk into the backyard a net scoops you up and a giant takes you to a boiling pot of water." --#17 + // Ask the user "As the man starts to prepare you as soup, do you...'Scream' or 'Faint'?" --#18 + // If they answer "faint" --#20.1 + // Tell the user "You made a delicious soup! Yum! The end." --#21 + // Otherwise, if they answer "scream" --#20.2 + // startStory --#22 + // Otherwise, if they answer anything else --#20.3 + // endStory --#23 + // ------------- End of pourIntoBackyard recipe --#19.3 + // Otherwise, if they answer anything else --#8.3 + // endStory --#9 + // ------------- End of approachOoze recipe --#4.3 + } + else + { + // endStory (recipe below) --#6.1 + // ------------- Recipe for endStory --#6.2 + // Tell the user "You don't know how to read directions. You can't play this game. The end." --#5 + // ------------- End of endStory recipe --#6.3 + } + } + private static void animateStartStory() + { + Tortoise.show(); + Color color = PenColors.Grays.Black; + for (int i = 0; i < 25; i++) + { + Tortoise.getBackgroundWindow().setColor(color); + color = PenColors.lighten(color); + ThreadUtils.sleep(100); + } + } + private static void tellMoreStory(String message) + { + MessageBox.showMessage(message); + } + private static String askAQuestion(String question) + { + String answer = MessageBox.askForTextInput(question); + return answer; + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/ConcentricLoop.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/ConcentricLoop.java new file mode 100644 index 00000000..9bcd67a2 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/ConcentricLoop.java @@ -0,0 +1,24 @@ +package org.teachingkidsprogramming.section03ifs; + +import org.teachingextensions.logo.Tortoise; + +public class ConcentricLoop +{ + public static void main(String[] args) + { + Tortoise.show(); + // Set the tortoise x position to 150 --#4.1 + // Set the tortoise y position to 200 --#4.2 + // Set the tortoise speed to 10 --#4.3 + // Do the following 360 times --#3.1 + // Move the tortoise 3 pixels --#1 + // Turn the tortoise 1 degree --#2 + // If i is divisible by 20 --(HINT: Use mod operator '%') --#7 + // Do the following 360 times --#8.1 + // Move the tortoise 1 pixel --#5 + // Turn the tortoise 1 degree --#6 + // Change the width of the line that the tortoise draws to 1/100th of the current line --#9 + // End Repeat --#8.2 + // End Repeat --#3.2 + } +} \ No newline at end of file diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework03Ifs.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/DeepDive03Ifs.java similarity index 83% rename from TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework03Ifs.java rename to TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/DeepDive03Ifs.java index 4c4ca434..521135d6 100644 --- a/TeachingKidsProgramming/src/org/teachingkidsprogramming/recipes/homework/Homework03Ifs.java +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/DeepDive03Ifs.java @@ -1,22 +1,19 @@ -package org.teachingkidsprogramming.recipes.homework; +package org.teachingkidsprogramming.section03ifs; -import junit.framework.Assert; - -import org.junit.Ignore; +import org.junit.Assert; import org.junit.Test; - -public class Homework03Ifs +@SuppressWarnings("unused") +public class DeepDive03Ifs { - // 'How to do homework: - // 'Step 1: Press the Run Button - // PC: Ctrl+F11 - // Mac: Command+fn+F11 - // 'Step 2: Read the name of the Method (Sub) that Failed - // 'Step 3: Fill in the blank (___) to make it pass - // 'Step 4: Repeat Until Enlightenment - // ' Do not change anything except the blank (___) - // + // Step 1: SELECT the method name (doesABear on line 19), then click the Run Button + // Keyboard shortcut to run -> PC: Ctrl+F11 or Mac: Command+fn+F11 + // Step 2: READ the name of the method that failed + // Step 3: FILL IN the blank (___) to make that method pass + // Step 4: SAY at least one thing you just learned + // Step 5: GO to the next method + // IMPORTANT - Do NOT change anything except the blank (___)// + // @Test public void doesABear() throws Exception { @@ -215,8 +212,19 @@ public void nestedIfOrPigsInABlanket() throws Exception } Assert.assertEquals("hambulance", status); } + @Test + public void semicolonsMessUpIfStatements() throws Exception + { + String dessert = "chocolate"; + if (false) + ; + { + dessert = "ketchup"; + } + Assert.assertEquals(___, dessert); + } /** - * Ignore the following, It's needed to run the homework + * Ignore the following, It's needed to run the deep dive * * * diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/HiLow.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/HiLow.java new file mode 100644 index 00000000..ce7a6b71 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/HiLow.java @@ -0,0 +1,21 @@ +package org.teachingkidsprogramming.section03ifs; + +public class HiLow +{ + public static void main(String[] args) + { + // Choose a random number between 1 and 100 --#4.1 (fake!) & --#13 + // Do the following 8 times --#9.1 + // Ask the user for a guess --#1 + // If the guess is correct --#4 + // Play a bell --#2 + // Tell the user that they won the game --#3 + // and exit --#10 + // Otherwise, if the guess is too high --#6 + // Tell the end user that it is too high --#5 + // Otherwise, if the guess is too low --#8 + // Tell the end user that it is too low --#7 + // End Repeat --#9.2 + // After 8 incorrect guesses tell the user they've lost --#11 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/HiLowQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/HiLowQuiz.java new file mode 100644 index 00000000..534737c2 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section03ifs/HiLowQuiz.java @@ -0,0 +1,35 @@ +package org.teachingkidsprogramming.section03ifs; + +import org.teachingkidsprogramming.recipes.quizzes.graders.HiLowQuizGrader; + +public class HiLowQuiz extends org.teachingkidsprogramming.recipes.quizzes.graders.HiLowQuiz +{ + @Override + public void question1() + { + // If the Y position of the tortoise is 115 + // Turn the tortoise to the right 63 degrees + } + @Override + public void question2() + { + // If the X position of tortoise is less than Y position of tortoise + // Turn the tortoise 54 degrees to the left + // Otherwise turn the tortoise 22 degrees to the right + } + @Override + public void question3() + { + // Display the message "elcomeway omehay!" + } + @Override + public void question4() + { + // If the Y position of tortoise is greater than 50 + // Turn the tortoise 177 degrees to the left + } + public static void main(String[] args) + { + new HiLowQuizGrader().grade(new HiLowQuiz()); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/BackgroundPhoto.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/BackgroundPhoto.java new file mode 100644 index 00000000..5105801b --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/BackgroundPhoto.java @@ -0,0 +1,26 @@ +package org.teachingkidsprogramming.section04mastery; + +import org.teachingextensions.logo.Tortoise; + +public class BackgroundPhoto +{ + @SuppressWarnings("unused") + public static void main(String[] args) + { + // Set the current picture to this url "https://usatftw.files.wordpress.com/2017/05/spongebob.jpg?w=1000&h=600&crop=1" --#1.0 + // Set the background image to the current picture--#1.1 + Tortoise.show(); + Tortoise.setSpeed(10); + int side = 2; + // Do the following 75 times --#7.1 + // Set the current pen color to yellow --#6.1 + // Use the current pen color for the line the tortoise draws --#6.2 + // Increase the length of a side by 1 pixel --#3.0 + // Move the tortoise the length of the current side --#3.1 + // Set the X position of the tortoise to 555 pixels --#2.0 + // Set the Y position of the tortoise to 65 pixels --#2.1 + // Turn the tortoise 1/3rd of 360 degrees to the right --#4 + // Turn the tortoise 1 more degree --#5 + // End Repeat --#7.2 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/DeepDive04Mastery.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/DeepDive04Mastery.java new file mode 100644 index 00000000..04d36392 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/DeepDive04Mastery.java @@ -0,0 +1,161 @@ +package org.teachingkidsprogramming.section04mastery; + +import org.junit.Assert; +import org.junit.Test; + +import you.need.to.fill.in.the.______; + +@SuppressWarnings("unused") +public class DeepDive04Mastery +{ + // Step 1: SELECT the method name (theseNumbersCount on line 21), then click the Run Button + // Keyboard shortcut to run -> PC: Ctrl+F11 or Mac: Command+fn+F11 + // Step 2: READ the name of the method that failed + // Step 3: FILL IN the blank (___) to make that method pass + // Step 4: SAY at least one thing you just learned + // Step 5: GO to the next method + // IMPORTANT - Do NOT change anything except the blank (___)// + // + @Test + public void theseNumbersCount() throws Exception + { + Integer number = 2; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void textTypes() throws Exception + { + String text = "Beans"; + Assert.assertEquals(text.getClass(), ______.class); + } + @Test + public void theNumbersAfterTheDot() throws Exception + { + Double number = 2.3; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void everythingIsAnObject() throws Exception + { + Object number = 2.3; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void iMeanEverythingIsAnObject() throws Exception + { + Object number = 2; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void iMeanEverySinglethingIsAnObject() throws Exception + { + Object number = "Everything"; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void integersAreATypeOfNumber() throws Exception + { + Number number = 2; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void doublesAreATypeOfNumber() throws Exception + { + Number number = 2.0; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void addingIntegers() throws Exception + { + Number number = 2 + 3; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void addingDoubles() throws Exception + { + Number number = 2.1 + 3.2; + Assert.assertEquals(number.getClass(), ______.class); + } + @Test + public void addingMixedTypes() throws Exception + { + Number number = 2 + 0.1; + Assert.assertEquals(number.getClass(), ______.class); + Assert.assertEquals(number, ____); + } + @Test + public void addingMixingMoreTypes() throws Exception + { + Object number = "19 fought 20, " + 21; + Assert.assertEquals(number.getClass(), ______.class); + Assert.assertEquals(number, ____); + } + @Test + public void convertingToText() throws Exception + { + Integer number = 21; + String text = number.toString(); + Assert.assertEquals(text.getClass(), ______.class); + Assert.assertEquals(text, ____); + } + @Test + public void convertingToText2() throws Exception + { + Integer number = 21; + String text = "" + number; + Assert.assertEquals(text.getClass(), ______.class); + Assert.assertEquals(text, ____); + } + @Test + public void dividing() throws Exception + { + Number number = 1.0 / 5; + Assert.assertEquals(number.getClass(), ______.class); + Assert.assertEquals(number, ___); + } + @Test + public void dividingIntegers() throws Exception + { + Number number = 11 / 5; + Assert.assertEquals(number.getClass(), ______.class); + Assert.assertEquals(number, ____); + } + @Test + public void understandingNumbers() throws Exception + { + String text = "42"; + Number theAnswer = Integer.parseInt(text); + Assert.assertEquals(theAnswer.getClass(), ______.class); + Assert.assertEquals(theAnswer, ____); + } + @Test + public void understandingDoubleNumbers() throws Exception + { + String text = "42"; + Number theAnswer = Double.parseDouble(text); + Assert.assertEquals(theAnswer.getClass(), ______.class); + Assert.assertEquals(theAnswer, ____); + } + /** + * Ignore the following, It's needed to run the deep dive + * + * + * + * + * + * + * + * + * + * + */ + public boolean _____ = false; + public boolean ______ = true; + public String ___ = "You need to fill in the blank ___"; + public Integer ____ = null; + private Double _______; + public String ___() + { + return ___; + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/DigiFlower.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/DigiFlower.java new file mode 100644 index 00000000..f3fe9fb2 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/DigiFlower.java @@ -0,0 +1,44 @@ +package org.teachingkidsprogramming.section04mastery; + +import java.awt.Color; + +import org.teachingextensions.logo.utils.ColorUtils.ColorWheel; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; + +public class DigiFlower +{ + public static void main(String[] args) + { + // Show the tortoise --#1 + // Make the tortoise move as fast as possible --#6 + // Make the background silver --#7 + // Make the line the tortoise draws 3 pixels wide --#12 + // createColorPalette (recipe below) --#8.1 + // Do the following 15 times --#11.1 + // drawOctogon (recipe below) --#9.1 + // Turn the tortoise 1/15th of 360 degrees to the right --#10 + // End Repeat --#11.2 + // ------------- Recipe for createColorPalette --#8.2 + Color color1 = PenColors.Reds.Red; + Color color2 = PenColors.Oranges.DarkOrange; + Color color3 = PenColors.Yellows.Gold; + Color color4 = PenColors.Yellows.Yellow; + ColorWheel.addColor(color1); + ColorWheel.addColor(color2); + ColorWheel.addColor(color3); + ColorWheel.addColor(color4); + ColorWheel.addColor(color4); + ColorWheel.addColor(color3); + ColorWheel.addColor(color2); + ColorWheel.addColor(color1); + // ------------- End of createColorPalette recipe --#8.3 + // + // ------------- Recipe for drawOctogon --#9.2 + // Do the following 8 times --#5.1 + // Change the pen color of the line the tortoise draws to the next color on the color wheel --#3 + // Move the tortoise 50 pixels --#2 + // Turn the tortoise 1/8th of 360 degrees to the right --#4 + // End Repeat --#5.2 + // ------------- End of drawOctogon recipe --#10.3 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/KnottedRing.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/KnottedRing.java new file mode 100644 index 00000000..59879d6a --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/KnottedRing.java @@ -0,0 +1,38 @@ +package org.teachingkidsprogramming.section04mastery; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.ColorWheel; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; + +public class KnottedRing +{ + public static void main(String[] args) + { + Tortoise.show(); + // Make the tortoise move as fast as possible --#4 + createColorPalette(); + // Do the following 30 times --#9.1 + // Change the pen color of the line the tortoise draws to the next color from the color wheel --#5 + // drawOctagonWithOverlap (recipe below) --#7.0 + // ------------- Recipe for drawOctagonWithOverlap --#6.1 + // Do the following 8 + 1 times --#3.1 + // Move the tortoise 110 pixels --#1 + // Turn the tortoise 1/8th of 360 degrees to the right --#2 + // End Repeat --#3.2 + // ------------- End of drawOctagonWithOverlap recipe --#6.2 + // Turn the tortoise 1/30th of 360 degrees to the right --#8 + // Turn the tortoise 5 more degrees to the right --#10 + // End Repeat --#9.2 + } + private static void createColorPalette() + { + ColorWheel.addColor(PenColors.Pinks.HotPink); + ColorWheel.addColor(PenColors.Reds.Red); + ColorWheel.addColor(PenColors.Pinks.Fuchsia); + ColorWheel.addColor(PenColors.Reds.OrangeRed); + ColorWheel.addColor(PenColors.Pinks.DeepPink); + ColorWheel.addColor(PenColors.Reds.MediumVioletRed); + ColorWheel.addColor(PenColors.Reds.Crimson); + ColorWheel.addColor(PenColors.Reds.Tomato); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/PentagonCrazy.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/PentagonCrazy.java new file mode 100644 index 00000000..09421e74 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/PentagonCrazy.java @@ -0,0 +1,41 @@ +package org.teachingkidsprogramming.section04mastery; + +import org.teachingextensions.logo.Tortoise; + +public class PentagonCrazy +{ + public static void main(String[] args) + { + Tortoise.show(); + // Make the tortoise move as fast as possible --#3 + // createColorPalette (recipe below) --#8.1 + // + // ------------- Recipe for createColorPalette --#8.2 + // Add steel blue to the color wheel --#7 + // Add dark orchid to the color wheel --#11 + // Add dark slate blue to the color wheel --#12 + // Add teal to the color wheel --#13 + // Add indigo to the color wheel --#14 + // ------------- End of createColorPalette recipe --#8.3 + // + // drawPentagon (recipe below) --#10.1 + // + // ------------- Recipe for drawPentagon --#10.2 + // Do the following 200 times --#2.1 + // adjustPen (recipe below) --#9.1 + // + // ------------- Recipe for adjustPen --#9.2 + // Change the pen color of the line the tortoise draws to the next color on the color wheel --#6 + // Increase the tortoises pen width by 1 --#15 + // If the tortoise's pen width is greater than 4, then --#17 + // Reset the pen width to 1 --#16 + // ------------- End of adjustPen recipe --#9.3 + // + // The current length of a side is the same as the number of the side you are about to draw ( 1st side = 1 pixel, 2nd side = 2 pixels, etc) --#4.2 + // Move the tortoise the length of a side --#4.1 + // Turn the tortoise 1/5th of 360 degrees --#1 + // Turn the tortoise 1 more degree --#5 + // End Repeat --#2.2 + // ------------- End of drawPentagon recipe --#10.3 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/PentagonCrazyQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/PentagonCrazyQuiz.java new file mode 100644 index 00000000..02f33971 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section04mastery/PentagonCrazyQuiz.java @@ -0,0 +1,37 @@ +package org.teachingkidsprogramming.section04mastery; + +import org.teachingkidsprogramming.recipes.quizzes.graders.PentagonCrazyQuizGrader; +import org.teachingkidsprogramming.recipes.quizzes.graders.PentagonQuizAdapter; + +public class PentagonCrazyQuiz extends PentagonQuizAdapter +{ + public void question1() + { + // Question 1 + // createAStitch (recipe below) + // ------------- Recipe for createAStitch + // Move the tortoise 6 pixels + // ------------- End of createAStitch recipe + } + @Override + public void question2() + { + // Do the following 76 times + // Call sewAStitch + // Repeat + } + @Override + public void question3() + { + // Add lime to the color wheel + } + @Override + public void question4() + { + // Add red to the color wheel + } + public static void main(String[] args) + { + new PentagonCrazyQuizGrader().grade(new PentagonCrazyQuiz()); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/DeepDive05Recursion.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/DeepDive05Recursion.java new file mode 100644 index 00000000..85f8a8a1 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/DeepDive05Recursion.java @@ -0,0 +1,133 @@ +package org.teachingkidsprogramming.section05recursion; + +import java.awt.Color; +import java.awt.Cursor; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; + +public class DeepDive05Recursion +{ + // Step 1: SELECT the method name (changeThePointerToAHand on line 27), then click the Run Button + // Keyboard shortcut to run -> PC: Ctrl+F11 or Mac: Command+fn+F11 + // Step 2: READ the name of the method that failed + // Step 3: FILL IN the blank (___) to make that method pass + // Step 4: SAY at least one thing you just learned + // Step 5: GO to the next method + // IMPORTANT - Do NOT change anything except the blank (___)// + // + @Test + public void changeThePointerToAHand() throws Exception + { + Tortoise.getBackgroundWindow().___(); + Assert.assertEquals(getCursor(), Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + @Test + public void getTheWindow() throws Exception + { + Tortoise.___().setCursor(Cursor.CROSSHAIR_CURSOR); + Assert.assertEquals(getCursor(), Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); + } + @Test + public void setColorUsingKey() throws Exception + { + HashMap colors = new HashMap(); + colors.put(10, PenColors.Greens.Lime); + colors.put(____, PenColors.Greens.DarkGreen); + Assert.assertEquals(PenColors.Greens.DarkGreen, colors.get(20)); + } + @Test + public void findTheGreenKey() throws Exception + { + HashMap colors = new HashMap(); + colors.put(20, PenColors.Greens.DarkGreen); + colors.put(30, PenColors.Greens.Green); + Assert.assertEquals(PenColors.Greens.Green, colors.get(___)); + } + @Test + public void findTheColorForTheBananaKey() throws Exception + { + HashMap colors = new HashMap(); + colors.put("banana", PenColors.Yellows.Yellow); + colors.put("apple", PenColors.Reds.Red); + Assert.assertEquals(_______, colors.get("banana")); + } + @Test + public void findTheNumberPositionOfTheWorld() throws Exception + { + List messages = Arrays.asList("Hello", "World!", "How", "Are", "You"); + String result = messages.get(____); + Assert.assertEquals("World!", result); + } + @Test + public void getWhatsLast() throws Exception + { + List messages = Arrays.asList("Hello", "World!", "How", "Are", "You"); + String result = messages.get(4); + Assert.assertEquals(___, result); + } + @Test + public void whatIsLastNow() throws Exception + { + List messages = Arrays.asList("Hello", "World!", "How", "Are", "You"); + messages.set(4, ___); + String result = messages.get(4); + Assert.assertEquals("The rest of them", result); + } + @Test + public void putAQuarterAtTheEnd() throws Exception + { + int[] coins = {1, 5, 10, ____}; + Assert.assertEquals(25, coins[3]); + } + @Test + public void getThirdCoin() throws Exception + { + int[] coins = {1, 5, 10, 25}; + Assert.assertEquals(10, coins[____]); + } + @Test + public void whichCoinIsSecond() throws Exception + { + int[] coins = {1, 5, 10, 25}; + Assert.assertEquals(____, coins[1]); + } + @Test + public void putAFiftyCentPieceFirst() throws Exception + { + int[] coins = {1, 5, 10, 25}; + coins[0] = ____; + Assert.assertEquals(50, coins[0]); + } + /** + * Ignore the following, It's needed to run the deep dive + * + * + * + * + * + * + * + * + * + * + */ + public boolean _____ = false; + public boolean ______ = true; + public String ___ = "You need to fill in the blank ___"; + public int ____ = 0; + public Color _______; + public String ___() + { + return ___; + } + private Cursor getCursor() + { + return Tortoise.getBackgroundWindow().getCanvas().getCursor(); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/RecursiveSquare.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/RecursiveSquare.java new file mode 100644 index 00000000..48c055e8 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/RecursiveSquare.java @@ -0,0 +1,56 @@ +package org.teachingkidsprogramming.section05recursion; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; + +public class RecursiveSquare +{ + public static void main(String[] args) throws Exception + { + Tortoise.show(); + Tortoise.getBackgroundWindow().setBackground(PenColors.Greens.DarkGreen); + Tortoise.setPenColor(PenColors.Yellows.Gold); + // + // Set the speed to the fastest --#8 + // Update the length to 100.0 --#1.1 + double length = 50.0; + // MakeASquare with the current length(recipe below) --#11.4 + // + // Create the makeASquare recipe --#11.1 + // If the current length is greater than 10 --#10.2 + // Run the recipe moveToTheSquareStart with the current length --#4.3 + // + // Create the moveToTheSquareStart recipe --#4.1 + // Set the pen up for the tortoise --#1.2 + // Move the tortoise the current length divided by two --#1.3 + // Turn the tortoise 90 degrees to the left --#2.1 + // Move the tortoise the current length divided by two --#2.2 + // Turn the tortoise 180 degrees to the right --#3.1 + // Set the pen down for the tortoise --#3.2 + // End of moveToTheSquareStart recipe --#4.2 + // + // Do the following 4 times --#7.1 + // Move the Tortoise the current length --#6.2 + // MakeASquare with the current length divided by 1.7 (recipe below)--#11.3 + // If the current process count is less than 3 (HINT: use 'i') --#9 + // Turn the tortoise 90 degrees to the right --#6.1 + // End Repeat --#7.2 + // + // MoveBackToCenter with the current length (recipe below)--#5.3 + // Create the moveBackToCenter recipe --#5.1 + Tortoise.setPenUp(); + Tortoise.turn(90); + Tortoise.move(length / 2); + Tortoise.turn(90); + Tortoise.move(length / 2); + Tortoise.turn(180); + Tortoise.setPenDown(); + // + // + // End of moveBackToCenter recipe--#5.2 + // + // Set the current length to the current length times two --#10.1 + // + // End of makeASquare recipe --#11.2 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/SpiderWeb.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/SpiderWeb.java new file mode 100644 index 00000000..3db366e2 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/SpiderWeb.java @@ -0,0 +1,39 @@ +package org.teachingkidsprogramming.section05recursion; + +import org.teachingextensions.logo.Tortoise; + +public class SpiderWeb +{ + public static void main(String[] args) + { + Tortoise.show(); + // Make the tortoise go as fast as possible --#6 + // Change the width of the line the tortoise draws to 1 pixel --#12 + // Change the Tortoise to a Spider --#14 + // Change the pen color of the line the tortoise draws to red --#13.1 + // Set the color of the background window to black (HINT: use the Tortoise to get the background window) --#13.2 + // The current length of a line is 10.5 pixels --#1.2 + // The current zoom is 1.1 --#8.2 + // Do the following 10 times --#10.1 + // weaveOneLayer (recipe below) --#9.1 + // + // ------------- Recipe for weaveOneLayer --#9.2 + // Do the following 6 times --#5.1 + // drawTriangle (recipe below) --#4.1 + // + // ------------- Recipe for drawTriangle --#4.2 + // Do the following 3 times --#3.1 + // Move the tortoise the current length (of the line) --#1.1 + // Turn the tortoise 1/3rd of 360 degrees --#2 + // End Repeat --#3.2 + // ------------- End of drawTriangle recipe --#4.3 + // + // Turn the tortoise 1/6th of 360 degrees to the right --#7 + // Increase the current length (of the line) by the current zoom --#8.1 + // End Repeat --#5.2 + // ------------- End of weaveOneLayer recipe --#9.3 + // + // Change the current zoom so it is multiplied by 1.3 --#11 + // End Repeat --#10.2 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/TreeQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/TreeQuiz.java new file mode 100644 index 00000000..8ba58494 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/TreeQuiz.java @@ -0,0 +1,38 @@ +package org.teachingkidsprogramming.section05recursion; + +import org.teachingkidsprogramming.recipes.quizzes.graders.TreeQuizAdapter; +import org.teachingkidsprogramming.recipes.quizzes.graders.TreeQuizGrader; + +public class TreeQuiz extends TreeQuizAdapter +{ + public void questions1To4() + { + // Question 1 + // doubleLength (recipe below) + // ------------- Recipe for doubleLength + // make the current length twice what it is + // ------------- End of doubleLength recipe + // + // Question 2 + // decreaseTurn (recipe below) + // ------------- Recipe for decreaseTurn + // decrease the current turn by 1 + // ------------- End of decreaseTurn recipe + // + // Question 3 + // setNinety (recipe below) + // ------------- Recipe for setNinety + // set the current turn angle to 90, HINT: Use angles.put(key,value); + // ------------- End of setNinety recipe + // + // Question 4 + // angleFive (recipe below) + // ------------- Recipe for angleFive + // sets the 5th angle to 36 degrees + // ------------- End of angleFive recipe + } + public static void main(String[] args) + { + new TreeQuizGrader().grade(new TreeQuiz()); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/TurtleTree.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/TurtleTree.java new file mode 100644 index 00000000..77b31274 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section05recursion/TurtleTree.java @@ -0,0 +1,53 @@ +package org.teachingkidsprogramming.section05recursion; + +import java.awt.Color; +import java.util.HashMap; + +import org.teachingextensions.logo.Tortoise; + +public class TurtleTree +{ + @SuppressWarnings("unused") + public static void main(String[] args) + { + Tortoise.show(); + // Make the tortoise go as fast as possible --#10 + // Turn the background black --#21 + // The current branch length = 60 --#1.2 + // drawBranch(recipe below) --#2.1 + // + // ------------- Recipe for drawBranch --#2.2 + // If the current branch length is greater than zero, do the rest of this recipe --#5 + // adjustColor (recipe below)--#15.1 + // ------------- Recipe for adjustColor --#15.2 + HashMap colors = new HashMap(); + // A 10 pixel long branch is lime --#20 + // A 20 pixel long branch is forest green --#19 + // A 30 pixel long branch is dark green --#18 + // A 40 pixel long branch is olive --#17 + // A 50 pixel long branch is sienna --#14 + // A 60 pixel long branch is saddle brown (TIP: Put the values into the 'colors' HashMap)--#13 + // Get the value of the branch length from the 'colors' HashMap and use that to set the pen color --#21 + // ------------- End of adjustColor --#15.3 + // + // Move the tortoise the length of the current branch --#1.1 + // drawLowerBranches (recipe below) --#6.1 + // + // ------------- Recipe for drawLowerBranches --#6.2 + // Turn the Tortoise 30 degrees to the right --#3 + // drawShorterBranch (recipe below) --#8.1 + // + // ------------- Recipe for drawShorterBranch --#8.2 + // drawBranch (10 pixels shorter) --#4 + // ------------- End of drawShorterBranch recipe --#8.3 + // + // Turn the Tortoise 60 degrees to the left --#7 + // drawShorterBranch --#9 + // Turn the Tortoise 30 degrees to the right --#12 + // adjustColor --#16 + // Move the tortoise backward the length of the current branch --#11 + // ------------- End of drawLowerBranches recipe --#6.3 + // + // ------------- End of drawBranch recipe --#2.3 + } +} \ No newline at end of file diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibs.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibs.java new file mode 100644 index 00000000..65f70c38 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibs.java @@ -0,0 +1,16 @@ +package org.teachingkidsprogramming.section06modelviewcontroller; + +public class AdLibs +{ + public static void main(String[] args) + { + // Ask the user to enter an adverb, save it as currentAdverb --#2 + // Ask the user to enter a verb ending in '-ed', save it as currentEdVerb --#4 + // Ask the user to enter a body part, save it as currentBodyPart --#6 + // Set the value of the currentStory to the word "Today " --#1.2 + // Add the words "I woke " + currentAdverb + ". " to the currentStory --#3 + // Add the words '"Then I " + currentEdVerb + " " to the currentStory --#5 + // Add the words "my " + currentBodyPart + ". " to the current story --#7 + // Show the currentStory in a message box as a message --#1.1 + } +} \ No newline at end of file diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibsQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibsQuiz.java new file mode 100644 index 00000000..3bc77a19 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibsQuiz.java @@ -0,0 +1,32 @@ +package org.teachingkidsprogramming.section06modelviewcontroller; + +import org.teachingkidsprogramming.recipes.quizzes.graders.AdLibsQuizAdapter; +import org.teachingkidsprogramming.recipes.quizzes.graders.AdLibsQuizGrader; + +public class AdLibsQuiz extends AdLibsQuizAdapter +{ + @Override + public void question1(String letter1, String letter3) + { + // Set current value of word1 to be letter1 + 'o' + letter3 + } + @Override + public void question2(String letter1) + { + // Add the letter1 to the end of word2 + } + @Override + public void question3(String templateText, Object model) + { + // Use the parser to combine the template and the model as word3 + } + @Override + public void question4(Pieces pieces) + { + // Set template4 to the template which does'g' + pieces.middle + 'e' + } + public static void main(String[] args) + { + new AdLibsQuizGrader().grade(new AdLibsQuiz()); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibsRtf.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibsRtf.java new file mode 100644 index 00000000..cf0abe93 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/AdLibsRtf.java @@ -0,0 +1,16 @@ +package org.teachingkidsprogramming.section06modelviewcontroller; + + +public class AdLibsRtf +{ + public static void main(String[] args) + { + // Create a new 'word' container your story's words (uncomment line 10) --#1.1 + // Words word = new Words(); + // Ask the user to enter an adverb, save it as currentAdverb --#2 + // Ask the user to enter a verb ending in '-ed', save it as currentEdVerb --#3 + // Ask the user to enter a body part, save it as currentBodyPart --#4 + // Connect the words in the currentStory to an RTF file parser (use the Parser object) --#1.2 + // Display the currentStory in an RTF file (use the Viewer object) --#1.3 + } +} \ No newline at end of file diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/DeepDive06ModelViewController.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/DeepDive06ModelViewController.java new file mode 100644 index 00000000..15046a95 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/DeepDive06ModelViewController.java @@ -0,0 +1,141 @@ +package org.teachingkidsprogramming.section06modelviewcontroller; + +import java.awt.Color; +import java.awt.Cursor; +import java.util.HashMap; + +import org.junit.Assert; +import org.junit.Test; +import org.teachingextensions.logo.Tortoise; + +@SuppressWarnings("unused") +public class DeepDive06ModelViewController +{ + // Step 1: SELECT the method name (stringsCanBeArrays on line 24), then click the Run Button + // Keyboard shortcut to run -> PC: Ctrl+F11 or Mac: Command+fn+F11 + // Step 2: READ the name of the method that failed + // Step 3: FILL IN the blank (___) to make that method pass + // Step 4: SAY at least one thing you just learned + // Step 5: GO to the next method + // IMPORTANT - Do NOT change anything except the blank (___)// + // + @Test + public void stringsCanBeArrays() throws Exception + { + String[] words = {"happy ", ___}; + String result = words[0] + words[1]; + Assert.assertEquals("happy baby", result); + } + @Test + public void numbersCanBeStrings() throws Exception + { + int numberOfBabies = ____; + String words = "" + numberOfBabies + " happy babies"; + Assert.assertEquals("10 happy babies", words); + } + @Test + public void trashtalkingFlorida() throws Exception + { + String compareThis = "is to"; + String analogy = "Florida " + ___ + " America as appendix " + ___ + " body"; + Assert.assertEquals("Florida is to America as appendix is to body", analogy); + } + @Test + public void sardinesFlyCoach() throws Exception + { + String fishReference = "The sardines were"; + String airplaneStress = "the coach section of a 747."; + String analogy = fishReference + " packed as tight as " + airplaneStress; + Assert.assertEquals("The sardines were packed as tight as the coach section of a 747.", ___); + } + @Test + public void sanityProblems() throws Exception + { + String selfDeprecation = "The nerds who made this were"; + String anAppleADay = "the doctors who complimented their mental stability."; + String analogy = selfDeprecation + " as sarcastic as " + anAppleADay; + Assert.assertEquals(___, analogy); + } + @Test + public void skydivingFrenchKings() throws Exception + { + String compareThis = ___; + String analogy = "Skydiving " + compareThis + " sensible as Louis XVI " + compareThis + " leadership"; + Assert.assertEquals("Skydiving is to sensible as Louis XVI is to leadership", analogy); + } + @Test + public void infiniteB() throws Exception + { + String infinite = "B"; + String analogy = "The " + ___ + " in " + ___ + "enoit " + ___ + ". Mandelbrot stands for " + ___ + "enoit " + + ___ + ". Mandelbrot."; + Assert.assertEquals("The B in Benoit B. Mandelbrot stands for Benoit B. Mandelbrot.", analogy); + } + @Test + public void expectTheResult() throws Exception + { + numbers.put(12, "dozen"); + numbers.put(144, "gross"); + numbers.put(20, "score"); + String aSomething = "A " + numbers.get(12) + ", a " + numbers.get(144) + ", and a " + numbers.get(20); + String aCalculation = aSomething + + " plus three times the square root of four, divided by seven, plus five times eleven"; + String aResult = aCalculation + " is nine squared and not a bit more"; + Assert.assertEquals("A dozen, a gross, and a score plus three times the square root of four," + + " divided by seven, plus five times eleven is nine squared and not a bit more", ___); + } + @Test + public void lookUp() throws Exception + { + // (12 + 144 + 20 + 3 x 4^1/2) / 7 + 5 x 11 = 9^2 + 0 + numbers.put(12, "dozen"); + numbers.put(144, "gross"); + numbers.put(20, "score"); + String aSomething = "A " + numbers.get(____) + ", a " + numbers.get(____) + ", and a " + numbers.get(____); + String aCalculation = aSomething + + " plus three times the square root of four, divided by seven, plus five times eleven"; + String aResult = aCalculation + " is nine squared and not a bit more"; + Assert.assertEquals("A dozen, a gross, and a score plus three times the square root of four," + + " divided by seven, plus five times eleven is nine squared and not a bit more", aResult); + } + @Test + public void inYourOwnWords() throws Exception + { + numbers.put(12, ___); + numbers.put(144, ___); + numbers.put(20, ___); + String aSomething = "A " + numbers.get(12) + ", a " + numbers.get(144) + ", and a " + numbers.get(20); + String aCalculation = aSomething + + " plus three times the square root of four, divided by seven, plus five times eleven"; + String aResult = aCalculation + " is nine squared and not a bit more"; + Assert.assertEquals("A dozen, a gross, and a score plus three times the square root of four," + + " divided by seven, plus five times eleven is nine squared and not a bit more", aResult); + } + /** + * Ignore the following, It's needed to run the deep dive + * + * + * + * + * + * + * + * + * + * + */ + public boolean _____ = false; + public boolean ______ = true; + public String ___ = "You need to fill in the blank ___"; + public HashMap numbers = new HashMap(); + public int ____ = 0; + public Color _______; + public String ___() + { + return ___; + } + private Cursor getCursor() + { + return Tortoise.getBackgroundWindow().getCanvas().getCursor(); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/OneFishTwoFish.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/OneFishTwoFish.java new file mode 100644 index 00000000..74f0385d --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section06modelviewcontroller/OneFishTwoFish.java @@ -0,0 +1,36 @@ +package org.teachingkidsprogramming.section06modelviewcontroller; + +//*************This Lesson is In Development*****************************// +@SuppressWarnings("unused") +public class OneFishTwoFish +{ + // Create a Scanner to make a string --#1 + public static void main(String[] args) + { + makeAString(); + } + public static void makeAString() + { + final String input = "1 fish 2 fish red fish blue fish,black fish,blue fish,old fish,new fish "; + // Use your scanner with your input --#2 + // Display a new line and "We have: " and the input and then a new line --#3 + // Now, tell a story with a new Scanner instance (tellAStory recipe) --#8 + } + //-------recipe for tellAStory------------------------------------ + private static void tellAStory(final String input) + { + // Use 'fish' as the base text w/your scanner [story] HINT: useDelimeter --#5 + // Get the next number to use in your scanner [story] HINT: nextInt --#7 + // Get the next value to use in your scanner [story] HINT: next --#9 + // Iterate over each fish [string] HINT: Iterable --#10 + // Create a new string iterator --#11 + // Create a new scanner for your input --#12 + // Use a comma to separate the strings in your story HINT: useDelimeter --#13 + // Return the result --#6 + { + // Display "And then: " and the fish in the console --#14 + } + System.out.println(""); + //------end recipe tellAStory-------------------------------------- + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/CloneTurtles.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/CloneTurtles.java new file mode 100644 index 00000000..7c15f658 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/CloneTurtles.java @@ -0,0 +1,45 @@ +package org.teachingkidsprogramming.section07objects; + +public class CloneTurtles +{ + // Uncomment the two lines of code below to create a container and a window for your turtles --#1 + // public ArrayList turtles = new ArrayList(); + // public MultiTurtleWindow mtw = new MultiTurtleWindow(); + // + public CloneTurtles() + { + showSomeTurtles(); + } + // + private void showSomeTurtles() + { + // Use a FOR loop to add your three turtles --#4.1 + // Create a turtle instance --#2.1 + // Add your turtles to your turtle container --#2.2 + // End Repeat --#4.2 + // + // Create a variable to count the number of turtles in the container --#3.1 + // Uncomment to Show the number of turtles in the container on the window --#3.2 + // new Text("There are " + numberOfTurtles + " turtles in the turtle container").setTopLeft(50, 50).setPenColor(PenColors.Yellows.Gold).addTo(mtw); + // + // Use a FOREACH loop to add your turtles to your window --#5.1 + // Add and Show your turtles on your window --#5.3 + // End Repeat --#5.2 + // + // Use a FOR loop to teleport all of your turtles around your window --#6.1 + // Get your turtle's current position and then set the X position to i*100 + 350 --#6.3 + // Get your turtle's current position and then set the Y position to i*100 + 100 --#6.4 + // End Repeat --#6.2 + // + // Use a FOREACH loop to set values for all of your turtles --#7.1 + // Set the pen width to 10 pixels -- #7.3 + // Set the turtle speed to 9 --#7.4 + // Have each turtle draw a star with a side that is 100 pixels --#7.5 + // End Repeat --#7.2 + } + // + public static void main(String[] args) + { + new CloneTurtles(); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/DeepDive07Objects.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/DeepDive07Objects.java new file mode 100644 index 00000000..c7030fd6 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/DeepDive07Objects.java @@ -0,0 +1,174 @@ +package org.teachingkidsprogramming.section07objects; + +import java.awt.Cursor; + +import org.junit.Assert; +import org.junit.Test; +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.Turtle; +import org.teachingextensions.logo.Turtle.Animals; +import org.teachingextensions.logo.utils.PizzaUtils.Pizza; +import org.teachingextensions.logo.utils.PizzaUtils.Topping; + +@SuppressWarnings("unused") +public class DeepDive07Objects +{ + // Step 1: SELECT the method name (twoTortoises on line 26), then click the Run Button + // Keyboard shortcut to run -> PC: Ctrl+F11 or Mac: Command+fn+F11 + // Step 2: READ the name of the method that failed + // Step 3: FILL IN the blank (___) to make that method pass + // Step 4: SAY at least one thing you just learned + // Step 5: GO to the next method + // IMPORTANT - Do NOT change anything except the blank (___)// + // + @Test + public void twoTortoises() throws Exception + { + Tortoise rafael = new Tortoise(); + Tortoise michealangelo = new Tortoise(); + boolean result = rafael.equals(michealangelo); + Assert.assertEquals(______, result); + } + @Test + public void twoTortoisesAgain() throws Exception + { + Tortoise rafael = new Tortoise(); + Tortoise anonymousNinja = rafael; + boolean result = rafael.equals(anonymousNinja); + Assert.assertEquals(_____, result); + } + @Test + public void twoTortoisesYetAgain() throws Exception + { + Tortoise rafael = new Tortoise(); + Tortoise michelangelo = new Tortoise(); + Tortoise anonymousNinja = ________; + boolean result = michelangelo.equals(anonymousNinja); + Assert.assertEquals(true, result); + } + //Turtle Leonardo belongs to "this" + private Turtle leonardo; + @Test + public void fatTrailTurtle() throws Exception + { + Turtle ninja = new Turtle(); + this.leonardo = _______; + ninja.setPenWidth(30); + Assert.assertEquals(30, this.leonardo.getPenWidth()); + } + //Turtle Donatello belongs to "this" + private Turtle donatello; + @Test + public void explodingTurtle() throws Exception + { + Turtle ninja = new Turtle(); + this._______ = ninja; + this.donatello.setAnimal(Animals.ExplodedTurtle); + Assert.assertTrue("The ninja is still alive!", ninja.isDead()); + } + @Test + public void feedTheNinja() throws Exception + { + Tortoise michelangelo = new Tortoise(); + michelangelo.likesTopping(Topping.Pepperoni); + Pizza pizza = new Pizza(); + pizza.addTopping(_________); + boolean likedIt = michelangelo.eatPizza(pizza); + Assert.assertTrue("Michelangelo barfs! Wrong pizza!", likedIt); + } + @Test + public void feedTheNinjaTwo() throws Exception + { + Tortoise karai = new Tortoise(); + karai.likesTopping(Topping.Anchovy); + Pizza pizza = new Pizza(); + pizza.addTopping(Topping.Anchovy); + boolean likedIt = karai.eatPizza(pizza); + Assert.assertTrue("Karai turns greener! Wrong pizza!", _____); + } + @Test + public void checkOutThePizza() throws Exception + { + Tortoise cecil = new Tortoise(); + cecil.likesTopping(Topping.Cheese); + Pizza pizza = new Pizza(); + pizza.addTopping(Topping.Cheese); + pizza.____(); + boolean likedIt = cecil.eatPizza(pizza); + Assert.assertTrue("Cecil sends it back, raw pizza!", likedIt); + } + @Test + public void feedAllTheNinjas() throws Exception + { + Tortoise[] tortoises = throwPizzaParty(); + Pizza pizza = new Pizza(); + pizza.____(); + for (Tortoise tortoise : tortoises) + { + gotASlice = tortoise.eatPizza(pizza); + if (!gotASlice) + { + break; + } + } + Assert.assertTrue("The ninja flips out - not enough pizza!", gotASlice); + } + @Test + public void feedAllTheNinjasAgain() throws Exception + { + Tortoise[] tortoises = throwPizzaParty(); + Pizza pizza = new Pizza(); + pizza.superSizeIt(); + for (Tortoise tortoise : tortoises) + { + _____ = tortoise.eatPizza(pizza); + if (!this.gotASlice) + { + break; + } + } + Assert.assertTrue("The ninja flips out - not enough pizza!", this.gotASlice); + } + /** + * Ignore the following, It's needed to run the deep dive + * + * + * + * + * + * + * + * + * + * + */ + private Tortoise[] throwPizzaParty() + { + Tortoise karai = new Tortoise(); + Tortoise cecil = new Tortoise(); + Tortoise michealangelo = new Tortoise(); + Tortoise fred = new Tortoise(); + return new Tortoise[]{karai, cecil, michealangelo, fred}; + } + private boolean gotASlice; + public boolean _____ = false; + public boolean ______ = true; + public String ___ = "You need to fill in the blank ___"; + public int ____ = 0; + public Turtle _______ = new Turtle(); + public Tortoise ________; + public Topping _________ = Topping.NoTopping; + public String ___() + { + return ___; + } + private Cursor getCursor() + { + return Tortoise.getBackgroundWindow().getCanvas().getCursor(); + } + public DeepDive07Objects() + { + this.leonardo = new Turtle(); + this.donatello = new Turtle(); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/SpiderWebQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/SpiderWebQuiz.java new file mode 100644 index 00000000..c5cbf0c1 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/SpiderWebQuiz.java @@ -0,0 +1,42 @@ +package org.teachingkidsprogramming.section07objects; + +import org.teachingkidsprogramming.recipes.quizzes.graders.SpiderQuiz; +import org.teachingkidsprogramming.recipes.quizzes.graders.SpiderWebQuizGrader; + +public class SpiderWebQuiz extends SpiderQuiz +{ + @Override + public void question1() + { + // Do the following the current number of times HINT: "number" is a variable name + // Call circle() + // Repeat + } + public void question2() + { + // Create and then call a recipe called circleAround which + // Does the following 3 times + // Call adjust() + // Call question1 + // Repeat + } + public void question3() + { + // Create and then call a recipe called grow which + // Changes the current length so it is multiplied by 2.5 + } + public void question4() + { + // Create and then call a recipe called shrink which + // Decreases the current length by 9 pixels + } + public void question5() + { + // Create and then call a recipe called expand which + // Increases the current number by 12 + } + public static void main(String[] args) + { + new SpiderWebQuizGrader().grade(new SpiderWebQuiz()); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/SuperTurtles.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/SuperTurtles.java new file mode 100644 index 00000000..bc5ab2c2 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/SuperTurtles.java @@ -0,0 +1,38 @@ +package org.teachingkidsprogramming.section07objects; + +import org.teachingextensions.WindowUtils.MultiTurtleWindow; + +public class SuperTurtles +{ + public MultiTurtleWindow mtw = new MultiTurtleWindow(); + public SuperTurtles() + { + showSomeTurtles(); + } + public static void main(String[] args) + { + new SuperTurtles(); + } + private void showSomeTurtles() + { + // makeSpeedyTurtle (recipe below) --#2.0 + // ------------- Recipe for makeSpeedyTurtle --#1.0 + // Create a new speedyTurtle instance + // Add your speedyTurtle to your MultiTurtleWindow + // Set the speed of your speedyTurtle to the fastest possible + // Have your speedyTurtle draw a triangle with 100 pixel sides + // ------------- End of makeSpeedyTurtle --#1.1 + // makeSlowTurtle (recipe below) --#4.0 + // ------------- Recipe for makeSlowTurtle --#3.0 + // Create a new slowTurtle instance + // Add your slowTurtle to your MultiTurtleWindow + // Have your slowTurtle draw a upside down triangle with 50 pixel sides + // ------------- End of makeSlowTurtle --#3.1 + // makeCrazyTurtle (recipe below) --#6.0 + // ------------- Recipe for makeCrazyTurtle --#5.1 + // Create a new crazyTurtle instance + // Add your crazyTurtle to your MultiTurtleWindow + // Have your crazyTurtle draw a 55 pixel long lightning bolt + // ------------- End of makeCrazyTurtle --#5.2 + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/WhichFish.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/WhichFish.java new file mode 100644 index 00000000..4ec25d05 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section07objects/WhichFish.java @@ -0,0 +1,47 @@ +package org.teachingkidsprogramming.section07objects; + +//*************This Lesson is In Development*****************************// +public class WhichFish +{ + public static void main(String[] args) + { + // UNCOMMENT to create a variable called 'numberOfFish' to hold the result of the question "How many fishes?" -- #INFO + // Use the FancyMessageBox with a title of "Are fishes like wishes?" -- #INFO + // int numberOfFish = FancyMessageBox.askForNumericalInput("How many fishes?", "Are Fishes Like Wishes?"); --#1 + // Create recipe makeAFishyDecision using the numberOfFish (recipe below) --#2 + //----------recipe for makeAFishyDecision with the numberOfFish---------------------/ + // Use a switch...case on the numberOfFish --#3 + // When the numberOfFish is -1 --#4 + // UNCOMMENT to create a string of this image + // String image = "../TeachingKidsProgramming.Source.Java/src/main/resources/icons/thumb-up.png"; + // Create a new ImageIcon from your image + // UNCOMMENT to Show a message with the fancy message box this text, this title and this icon... + // FancyMessageBox.showMesage("Had a Fish", "Not hungry anymore...", icon); + // End + // When the numberOfFish is 0 --#4 + // UNCOMMENT to create a string of this image + // String image0 = "../TeachingKidsProgramming.Source.Java/src/main/resources/icons/information.png"; + // Create a new ImageIcon from your image + // Show a message with the fancy message box this text, this title and this icon... + // End + // When the numberOfFish is 1 --#5 + // UNCOMMENT to create a string of this image + // String image1 = "../TeachingKidsProgramming.Source.Java/src/main/resources/icons/star.png"; + // Create a new ImageIcon from your image + // Show a message with the fancy message box this text, this title and this icon... + // End + // When the numberOfFish is 2 --#6 + // UNCOMMENT to create a string of this image + // String image2 = "../TeachingKidsProgramming.Source.Java/src/main/resources/icons/github.png"; + // Create a new ImageIcon from your image + // Show a message with the fancy message box this text, this title and this icon... + // End + // Otherwise --#7 + // UNCOMMENT to create a string of this image + // String image4 = "../TeachingKidsProgramming.Source.Java/src/main/resources/icons/hint.png"; + // Create a new ImageIcon from your image + // Show a message with the fancy message box this text, this title and this icon... + // End + //--------end of recipe for makeAFishyDecision-------------------------------------/ + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/ConnectTheDots.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/ConnectTheDots.java new file mode 100644 index 00000000..67d7f371 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/ConnectTheDots.java @@ -0,0 +1,59 @@ +package org.teachingkidsprogramming.section08events; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.ColorWheel; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.EventUtils.MouseLeftClickListener; +import org.teachingextensions.logo.utils.EventUtils.MouseRightClickListener; + +public class ConnectTheDots implements MouseRightClickListener, MouseLeftClickListener +{ + public static void main(String[] args) + { + new ConnectTheDots(); + } + public ConnectTheDots() + { + setUpTheWindow(); + prepareColorPalette(); + // Listen for left clicks on the window for the tortoise --#1 + // Listen for right clicks on the window for the tortoise --#20.2 + } + @Override + public void onLeftMouseClick(int x, int y) + { + // addDot at x and y (recipe below) --#5 + // ------------- Recipe for addDot --#6 + // createCircle at x and y (recipe below) --#2 + // ------------- Recipe for createCircle --#3.0 (everything in this recipe) + // Create a new circle with a radius of 11 using the next color on the color wheel + // Change the circle to be 60% opaque + // Move the circle so that it's center is at the current position of the mouse (x,y) + // Place the circle on the tortoise's window + // ------------- End of createCircle Recipe --#3.1 + // Move the tortoise to the current position of the mouse (x,y) --#4 + // ------------- End of addDot Recipe + // Uncomment to write the text "Right click to clear the window" on the screen at position 100, 100 --#8 + // new Text("Right click to clear the window").setTopLeft(100, 100).addTo(Tortoise.getBackgroundWindow()); + } + @Override + public void onRightMouseClick(int x, int y) + { + // Clear everything from the window HINT: Use Tortoise --#7 + } + private static void prepareColorPalette() + { + ColorWheel.addColor(PenColors.Reds.Red); + ColorWheel.addColor(PenColors.Greens.Green); + ColorWheel.addColor(PenColors.Blues.Blue); + ColorWheel.addColor(PenColors.Purples.Purple); + ColorWheel.addColor(PenColors.Pinks.Pink); + ColorWheel.addColor(PenColors.Greens.Teal); + } + private void setUpTheWindow() + { + Tortoise.show(); + Tortoise.setSpeed(10); + Tortoise.hide(); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/SimpleBubble.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/SimpleBubble.java new file mode 100644 index 00000000..5742a749 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/SimpleBubble.java @@ -0,0 +1,38 @@ +package org.teachingkidsprogramming.section08events; + +import org.teachingextensions.logo.utils.EventUtils.MouseLeftClickListener; + +public class SimpleBubble implements MouseLeftClickListener +{ + public SimpleBubble() + { + // Create a ProgramWindow titled My Bubble --#1.1 + // Uncomment the line below -- #1.2 + // programWindow.setWindowVisible(true); + // Have SimpleBubble listen for when the left mouse button is clicked in your program window --#2.2 + // prepareColorPalette (recipe below) --#7.1 + // + // ------------- Recipe for prepareColorPalette --#7.2 + // Add purple to the color wheel --#2.3 + // Add light steel blue to the color wheel --#4 + // Add blue to the color wheel --#5 + // Add dark blue to the color wheel --#6 + // ------------- End of prepareColorPalette recipe --#7.3 + } + @Override + public void onLeftMouseClick(int x, int y) + { + // createBubble (recipe below) --#8.1 + // ------------- Recipe for createBubble --#8.2 + // Remove previous bubbles from your program window --#9 + // Set the radius for the circle to a random number between 10 and 50 --#2.5 + // Create a circle with the radius and the next color from the color wheel --#2.1 + // Move the center of the bubble to the current position of the mouse on the window --#3 + // Add the circle to your program window --#2.4 + // ------------- End of createBubble recipe --#8.3 + } + public static void main(String[] args) + { + new SimpleBubble(); + } +} \ No newline at end of file diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/SimpleBubbleQuiz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/SimpleBubbleQuiz.java new file mode 100644 index 00000000..35b8ceda --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section08events/SimpleBubbleQuiz.java @@ -0,0 +1,67 @@ +package org.teachingkidsprogramming.section08events; + +import org.teachingextensions.logo.Tortoise; +import org.teachingextensions.logo.utils.ColorUtils.PenColors; +import org.teachingextensions.logo.utils.EventUtils.MouseLeftClickListener; +import org.teachingextensions.logo.utils.EventUtils.MouseRightClickListener; +import org.teachingextensions.logo.utils.LineAndShapeUtils.Text; +import org.teachingkidsprogramming.recipes.quizzes.graders.SimpleBubbleQuizAdapter; +import org.teachingkidsprogramming.recipes.quizzes.graders.SimpleBubbleQuizGrader; + +public class SimpleBubbleQuiz extends SimpleBubbleQuizAdapter + implements + MouseLeftClickListener, + MouseRightClickListener +{ + @Override + public void question1() + { + //code: In the Tortoise background window, have this quiz listen for when the left mouse button is clicked + //action: YOU must left click on the first base to pass this question + } + @Override + public void question2() + { + //code: Write "Single!" on the screen in yellow at position 155,135 + } + @Override + public void question3() + { + //code: In the Tortoise background window, have this quiz listen for when the right mouse button is clicked + //action: YOU must right click on the home plate (4th base) to pass this question + } + @Override + public void question4() + { + //code: Write "Home Run!" on the screen in lime green at position 105,235 + } + public static void main(String[] args) + { + new SimpleBubbleQuizGrader().grade(new SimpleBubbleQuiz()); + } + @Override + public void onLeftMouseClick(int x, int y) + { + if (counter < 3) + { + if (counter == 0) + { + this.answerQuestion1(); + question2(); + Text baseHit = new Text("Keep Running!"); + baseHit.setPenColor(PenColors.Oranges.Orange); + baseHit.setTopLeft(105, 35).addTo(Tortoise.getBackgroundWindow()); + } + drawNextBase(); + counter = counter + 1; + } + } + @Override + public void onRightMouseClick(int x, int y) + { + if (counter != 3) { return; } + this.answerQuestion3(); + question4(); + drawNextBase(); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzz.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzz.java new file mode 100644 index 00000000..d1e6d9dd --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzz.java @@ -0,0 +1,15 @@ +package org.teachingkidsprogramming.section09final; + +public class FizzBuzz +{ + // For the whole numbers from 1 to 100, print either that number, or, + // If that number is divisible by 3, then print the word 'Fizz', + // If that number is divisible by 5, then print the word 'Buzz', + // If that number is divisible by 3 and 5, then print the word 'FizzBuzz' + // + // NOTE: this is a kata (higher level instructions) + // part of the exercise is to translate into line-by-line English, THEN Java + // + // For more complete directions see this page + // https://www.penflip.com/lynnlangit/tkp-lesson-plans/blob/master/course09.txt +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzzGoldenMaster.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzzGoldenMaster.java new file mode 100644 index 00000000..e8e51d00 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzzGoldenMaster.java @@ -0,0 +1,27 @@ +package org.teachingkidsprogramming.section09final; + +import org.junit.Test; +import org.teachingextensions.approvals.lite.Approvals; + +public class FizzBuzzGoldenMaster +{ + // Write a test using the GoldenMaster method via the TDD style for the convert method + // IMPORTANT - GoldenMaster testing requires the use a of file compare tool + // Download 'BeyondCompare' -- http://www.scootersoftware.com/download.php + @Test + public void testNumbers() throws Exception + { + // Arrange Create a list of numbers from 1-100 + // Act Call the convert method on the list + // Verify The list is a Golden Master (uses .received and .approved files) + Approvals.verify("1"); + } + public static String convert(int i) + { + // For the whole numbers from 1 to 100, print either that number, or, + // If that number is divisible by 3, then print the word 'Fizz', + // If that number is divisible by 5, then print the word 'Buzz', + // If that number is divisible by 3 and 5, then print the word 'FizzBuzz' + return ""; + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzzTDD.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzzTDD.java new file mode 100644 index 00000000..5aff1d66 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/FizzBuzzTDD.java @@ -0,0 +1,24 @@ +package org.teachingkidsprogramming.section09final; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class FizzBuzzTDD +{ + // For the numbers being tested, print out either that number, or, + // If that number is divisible by 3, then print the word 'Fizz', + // If that number is divisible by 5, then print the word 'Buzz', + // If that number is divisible by 3 and 5, then print the word 'FizzBuzz' + // + // Write tests using the Assert object via the TDD style + // + // For more complete directions see this page + // https://www.penflip.com/lynnlangit/tkp-lesson-plans/blob/master/course09.txt + @Test + public void test1Returns1() + { + //String result = FizzBuzzTDD.convert(1); + assertEquals(1, 0); + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/RectangleKata.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/RectangleKata.java new file mode 100644 index 00000000..3d1af3a0 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/RectangleKata.java @@ -0,0 +1,13 @@ +package org.teachingkidsprogramming.section09final; + +public class RectangleKata +{ + public static void main(String[] args) + { + // Draw a rectangle + // Write the steps to code your rectangle out in English + // Translate from English to Java one line at a time + // Run your code after each line of Java to make sure it works as expected + // XTRA CREDIT: After your code is working, re-factor to remove duplication + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/SimplePuzzle.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/SimplePuzzle.java new file mode 100644 index 00000000..1327c827 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/SimplePuzzle.java @@ -0,0 +1,83 @@ +package org.teachingkidsprogramming.section09final; + +import java.awt.EventQueue; +import java.util.Arrays; +import java.util.Random; + +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; + +import org.teachingextensions.logo.utils.PuzzleUtils.Puzzle; +import org.teachingextensions.logo.utils.PuzzleUtils.PuzzleAnimation; +import org.teachingextensions.logo.utils.PuzzleUtils.PuzzleBoard; +import org.teachingextensions.logo.utils.PuzzleUtils.PuzzleState; + +public class SimplePuzzle implements Runnable +{ + public Puzzle puzzle = null; + public PuzzleState solution = null; + public int[] cells = {0, 1, 2, 3, 4, 5, 6, 7, 8}; + // + public static void main(String[] args) + { + EventQueue.invokeLater(new SimplePuzzle()); + } + // + public static int[] shuffled(int[] source) + { + int[] copy = Arrays.copyOf(source, source.length); + Random rnd = new Random(); + for (int i = copy.length - 1; i > 0; i--) + { + int index = rnd.nextInt(i + 1); + int a = copy[index]; + copy[index] = copy[i]; + copy[i] = a; + } + return copy; + } + // + @Override + public void run() + { + this.setLookAndFeel(); + PuzzleState solution = null; + // Do this until the player finds a solution --#6.1 + // Create a Message Box that shows the message "Looking for puzzle solution..." --#4 + // + // Try to solve the puzzle --#5.1 + // Create an array of integers named 'shuffled' which shuffles the cell array --#2.1 + // Run the new puzzle (uses the cells array), Then update it to use the shuffled array --#2.2 + // + puzzle = new Puzzle(cells); + // + // Create a new AStarPlayer named player (of type PuzzlePlayer) which uses the current puzzle -- #3.1 + // NOTE for teacher - have kids run it multiple times here to see that sometimes it fails + // Create a solution (of type PuzzleState) by telling the player to solve it (TIP: Not all puzzles can be solved!) --#3.2 + // + PuzzleBoard board = new PuzzleBoard(puzzle, solution); + // + // Create a new Puzzle Window that takes a parameter named board -- #1.1 + // + new Thread(new PuzzleAnimation(board)).start(); + // Set the current puzzle window visibility to be true --#1.2 + // + // End of try --#5.2 + // Create a Message Box that shows the message "This puzzle is not solvable, click ok to try again" --#5.4 + // End of catch --#5.3 + // + // End of while --#6.2 + } + // + private void setLookAndFeel() + { + try + { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } + catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException + | IllegalAccessException ignored) + { + } + } +} diff --git a/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/WheelKata.java b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/WheelKata.java new file mode 100644 index 00000000..8265f586 --- /dev/null +++ b/TeachingKidsProgramming/src/org/teachingkidsprogramming/section09final/WheelKata.java @@ -0,0 +1,10 @@ +package org.teachingkidsprogramming.section09final; + +public class WheelKata +{ + // Draw a wheel + // Write the steps to code your wheel out in English + // Translate from English to Java one line at a time + // Run your code after each line of Java to make sure it works as expected + // XTRA CREDIT: After your code is working, re-factor to remove duplication +} diff --git a/eclipse_workspace.zip b/eclipse_workspace.zip index 9f6b60a8..33f77adf 100644 Binary files a/eclipse_workspace.zip and b/eclipse_workspace.zip differ diff --git a/images/01CreateFolder.png b/images/01CreateFolder.png new file mode 100644 index 00000000..3de04185 Binary files /dev/null and b/images/01CreateFolder.png differ diff --git a/images/02MoveZip.png b/images/02MoveZip.png new file mode 100644 index 00000000..1fc7af98 Binary files /dev/null and b/images/02MoveZip.png differ diff --git a/images/03ExtractAll.png b/images/03ExtractAll.png new file mode 100644 index 00000000..89464251 Binary files /dev/null and b/images/03ExtractAll.png differ diff --git a/images/04TKPLauncher.png b/images/04TKPLauncher.png new file mode 100644 index 00000000..0c2c64d2 Binary files /dev/null and b/images/04TKPLauncher.png differ diff --git a/images/05NoJava.png b/images/05NoJava.png new file mode 100644 index 00000000..0e66dc80 Binary files /dev/null and b/images/05NoJava.png differ diff --git a/images/06_64bit.png b/images/06_64bit.png new file mode 100644 index 00000000..4fd63f9e Binary files /dev/null and b/images/06_64bit.png differ diff --git a/images/07NoEclipse.png b/images/07NoEclipse.png new file mode 100644 index 00000000..4d776bfe Binary files /dev/null and b/images/07NoEclipse.png differ diff --git a/images/08CreateFolder.png b/images/08CreateFolder.png new file mode 100644 index 00000000..aaa79fa4 Binary files /dev/null and b/images/08CreateFolder.png differ diff --git a/images/09MoveZip.png b/images/09MoveZip.png new file mode 100644 index 00000000..4b7f2b04 Binary files /dev/null and b/images/09MoveZip.png differ diff --git a/images/10Open.png b/images/10Open.png new file mode 100644 index 00000000..57a0ec6f Binary files /dev/null and b/images/10Open.png differ diff --git a/images/11TKPLauncher.png b/images/11TKPLauncher.png new file mode 100644 index 00000000..ee406673 Binary files /dev/null and b/images/11TKPLauncher.png differ diff --git a/images/12Untrusted.png b/images/12Untrusted.png new file mode 100644 index 00000000..8eb6f96f Binary files /dev/null and b/images/12Untrusted.png differ diff --git a/images/13Settings.png b/images/13Settings.png new file mode 100644 index 00000000..31408a8b Binary files /dev/null and b/images/13Settings.png differ diff --git a/images/14OpenAnyway.png b/images/14OpenAnyway.png new file mode 100644 index 00000000..a6182813 Binary files /dev/null and b/images/14OpenAnyway.png differ diff --git a/images/15NoJava.png b/images/15NoJava.png new file mode 100644 index 00000000..a6c18bd7 Binary files /dev/null and b/images/15NoJava.png differ diff --git a/images/16JDK.png b/images/16JDK.png new file mode 100644 index 00000000..7d000a2f Binary files /dev/null and b/images/16JDK.png differ diff --git a/images/17JDK2.png b/images/17JDK2.png new file mode 100644 index 00000000..3e8ec092 Binary files /dev/null and b/images/17JDK2.png differ diff --git a/images/18NoEclipse.png b/images/18NoEclipse.png new file mode 100644 index 00000000..7e004bf5 Binary files /dev/null and b/images/18NoEclipse.png differ diff --git a/images/19Eclipse.png b/images/19Eclipse.png new file mode 100644 index 00000000..d23836f0 Binary files /dev/null and b/images/19Eclipse.png differ diff --git a/images/20Success.png b/images/20Success.png new file mode 100644 index 00000000..e62f5733 Binary files /dev/null and b/images/20Success.png differ diff --git a/images/21Luna.png b/images/21Luna.png new file mode 100644 index 00000000..9697faa7 Binary files /dev/null and b/images/21Luna.png differ diff --git a/images/download zip.png b/images/download zip.png new file mode 100644 index 00000000..6e4a3ffe Binary files /dev/null and b/images/download zip.png differ diff --git a/images/download_zip.png b/images/download_zip.png new file mode 100644 index 00000000..6e4a3ffe Binary files /dev/null and b/images/download_zip.png differ diff --git a/install.sh b/install.sh new file mode 100644 index 00000000..a7db2843 --- /dev/null +++ b/install.sh @@ -0,0 +1,17 @@ +mkdir ~/TKPSource +cd ~/TKPSource +wget https://github.com/clockwisemusic/TeachingKidsProgramming.Java/archive/master.zip +unzip master.zip +rm master.zip +mv TeachingKidsProgramming.Java-master TeachingKidsProgramming.Java +cd TeachingKidsProgramming.Java +unzip eclipse_workspace.zip +cp tkp.desktop ~/Desktop +echo Exec=$HOME/eclipse/eclipse -data $HOME/TKPSource/TeachingKidsProgramming.Java >>~/Desktop/tkp.desktop +chmod +x ~/Desktop/tkp.desktop +cd ~/ +wget http://mirror.internode.on.net/pub/eclipse/technology/epp/downloads/release/luna/SR2/eclipse-java-luna-SR2-linux-gtk-x86_64.tar.gz +tar xzf eclipse-java-luna-SR2-linux-gtk-x86_64.tar.gz +rm eclipse-java-luna-SR2-linux-gtk-x86_64.tar.gz +~/eclipse/eclipse -data ~/TKPSource/TeachingKidsProgramming.Java +#sudo apt install gnome-color-chooser diff --git a/tkp.desktop b/tkp.desktop new file mode 100755 index 00000000..90f01d9b --- /dev/null +++ b/tkp.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=Teaching Kids Programming +Comment=Teaching Kids Programming In Java +Icon=eclipse +StartupNotify=true +Terminal=false +Type=Application