From 92417608bd606362794f9501c6b4aabf6ca7192e Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Tue, 22 Sep 2015 15:17:42 -0400 Subject: [PATCH] contrib: add memory, the game with shapes and colors Signed-off-by: Jean Privat --- contrib/memory/.gitignore | 3 + contrib/memory/Makefile | 36 ++ contrib/memory/README.md | 31 + contrib/memory/art/drawing.svg | 368 +++++++++++ contrib/memory/art/icon.svg | 98 +++ contrib/memory/assets/bing.wav | Bin 0 -> 27836 bytes contrib/memory/assets/boing.wav | Bin 0 -> 54648 bytes contrib/memory/assets/click.wav | Bin 0 -> 1126 bytes contrib/memory/assets/cymbal.wav | Bin 0 -> 12124 bytes contrib/memory/assets/dart.wav | Bin 0 -> 26026 bytes contrib/memory/assets/duh.wav | Bin 0 -> 7502 bytes contrib/memory/assets/grunt.wav | Bin 0 -> 9082 bytes contrib/memory/assets/honkhonk.wav | Bin 0 -> 5104 bytes contrib/memory/assets/level.wav | Bin 0 -> 16736 bytes contrib/memory/assets/line_end.wav | Bin 0 -> 8170 bytes contrib/memory/assets/penalty.wav | Bin 0 -> 6278 bytes contrib/memory/assets/squishy-hit.wav | Bin 0 -> 28314 bytes contrib/memory/assets/whip.wav | Bin 0 -> 3182 bytes contrib/memory/assets/woodthunk.wav | Bin 0 -> 1886 bytes contrib/memory/org.nitlanguage.memory.txt | 16 + contrib/memory/package.ini | 11 + contrib/memory/src/memory.nit | 1000 +++++++++++++++++++++++++++++ 22 files changed, 1563 insertions(+) create mode 100644 contrib/memory/.gitignore create mode 100644 contrib/memory/Makefile create mode 100644 contrib/memory/README.md create mode 100644 contrib/memory/art/drawing.svg create mode 100644 contrib/memory/art/icon.svg create mode 100644 contrib/memory/assets/bing.wav create mode 100644 contrib/memory/assets/boing.wav create mode 100644 contrib/memory/assets/click.wav create mode 100644 contrib/memory/assets/cymbal.wav create mode 100644 contrib/memory/assets/dart.wav create mode 100644 contrib/memory/assets/duh.wav create mode 100644 contrib/memory/assets/grunt.wav create mode 100644 contrib/memory/assets/honkhonk.wav create mode 100644 contrib/memory/assets/level.wav create mode 100644 contrib/memory/assets/line_end.wav create mode 100644 contrib/memory/assets/penalty.wav create mode 100644 contrib/memory/assets/squishy-hit.wav create mode 100644 contrib/memory/assets/whip.wav create mode 100644 contrib/memory/assets/woodthunk.wav create mode 100644 contrib/memory/org.nitlanguage.memory.txt create mode 100644 contrib/memory/package.ini create mode 100644 contrib/memory/src/memory.nit diff --git a/contrib/memory/.gitignore b/contrib/memory/.gitignore new file mode 100644 index 0000000..c4781eb --- /dev/null +++ b/contrib/memory/.gitignore @@ -0,0 +1,3 @@ +assets/images/ +res/ +src/drawing.nit diff --git a/contrib/memory/Makefile b/contrib/memory/Makefile new file mode 100644 index 0000000..8e39e1d --- /dev/null +++ b/contrib/memory/Makefile @@ -0,0 +1,36 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# 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. + +all: bin/memory + +bin/memory: assets/images/drawing.png src/*.nit + mkdir -p bin + ../../bin/nitc -o bin/memory src/memory.nit -m ../../lib/mnit/linux/linux.nit + +assets/images/drawing.png: art/drawing.svg + mkdir -p assets/images/ + ../inkscape_tools/bin/svg_to_png_and_nit art/drawing.svg -a assets/ -s src/ -x 4 + +res/drawable-ldpi/icon.png: art/icon.svg + mkdir -p res/ + ../inkscape_tools/bin/svg_to_icons art/icon.svg --android --out res/ + +android: bin/memory.apk +bin/memory.apk: assets/images/drawing.png src/*.nit res/drawable-ldpi/icon.png + mkdir -p bin + ../../bin/nitc -o bin/memory.apk src/memory.nit -m ../../lib/mnit/android/android.nit -m ../../lib/android/landscape.nit + +android-release: assets/images/drawing.png src/*.nit res/drawable-ldpi/icon.png + mkdir -p bin + ../../bin/nitc -o bin/memory.apk src/memory.nit -m ../../lib/mnit/android/android.nit -m ../../lib/android/ landscape.nit --release diff --git a/contrib/memory/README.md b/contrib/memory/README.md new file mode 100644 index 0000000..ffbcdae --- /dev/null +++ b/contrib/memory/README.md @@ -0,0 +1,31 @@ +# Memorize Shapes and Colors + +A memory-based game where figures are cliqued in sequence by the computer and should be replayed by the player in the same order. +As the player progresses, more figures are added and the sequences to remember become longer. + +The player can make up to 2 errors to solve a single level. +At the 3rd error, the level has to be replayed. + +The game use a very simple user interface and features big figures with bright colors and simple distinguishable shapes; that makes it suitable for young children. + +The game offers three modes (difficulty level) + +Easy (for young children): + +* Start with 2 figures, 1 to remember +* Figures are easily distinguishable +* Figures remain on place +* After 3 errors, the same level is replayed + +Medium (for normal player): + +* Like easy but: +* Start with 3 figures, 3 to remember +* Figures are moved after the sequence played by the computer +* After 3 errors, a new level is produced + +Hard (for hypermnesic players) + +* Like medium but: +* Figures use overlapping combinations of colors and shapes +* Figures are shuffled completely diff --git a/contrib/memory/art/drawing.svg b/contrib/memory/art/drawing.svg new file mode 100644 index 0000000..7a4cd1c --- /dev/null +++ b/contrib/memory/art/drawing.svg @@ -0,0 +1,368 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ✘ + + + + + + + + + + + ↻ + + diff --git a/contrib/memory/art/icon.svg b/contrib/memory/art/icon.svg new file mode 100644 index 0000000..8a5990d --- /dev/null +++ b/contrib/memory/art/icon.svg @@ -0,0 +1,98 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/contrib/memory/assets/bing.wav b/contrib/memory/assets/bing.wav new file mode 100644 index 0000000000000000000000000000000000000000..c7cae5b2cbd10a62edf3f21e1f21d883fed7448e GIT binary patch literal 27836 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 Z?yM>2itj&uCtOu*Z{ug@uH)RR{{tiYj2Hj_ literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/click.wav b/contrib/memory/assets/click.wav new file mode 100644 index 0000000000000000000000000000000000000000..3d07b83d1a453fabab8658fd85d0d45aedd2f3b0 GIT binary patch literal 1126 zcmWks4NMbf7`|(-ch|e#_1a!(DXjdc1BQvrO)wiQBGB;Tkg5Tfu{n|{TOv-;Ok>GspN%??G5Hm`yE@QV~b7i%JIyw|N1oU>yySI==aFc zkvYwH!`-ik1M_2Cq3BhvbgdfRL%s-xxucx-tUOy<DO`kG&E&ff3%C$(OY=R4ofmILdXSQ5b8HqXS)cMP zdJHRbYzmhE8bQTsHfvaEV`}|L8%A(N^a4~Q=s_+CCF@P=p^VpF;OcW;UFdVx`opnN zI$!(omXoo&V|K@6ZLSXAuG)`I`JQ?{UpeSnc15|XmfIP<=PL)aaP-Nly@U6RgLcy2 zg}kqHXyY|t$WFSM*pEi@?w5q;#75A>buiKHCC`#4j6b8@7S_bo`3Iml{x3Y*IQHz( zMxEay>cGB)qmgvdB!djT^*mSgEvBI!rU_LN%u> zR9_4gDn?}uR2x*Avz_o6MB3M&_@uo*m2wjuW_o$7oZy{ZlQYvf0g7Hom<(BURBQ8vQYS!ECo^<~9d z%Ic6~Qke3~ukq|r9Z+{__Jnn6IyK>%9@Sy_G@gq-LA6LOs>6T9#>pMBYt+lKt#paB ziTF^WMVz8Tf_vbqpbv72`XDV*0S7e~y@hCz47`!}4^Ji=iAExsgs7v^U~WY#;6sA< R0^j>nxif319{|1u{s)BK?8X29 literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/cymbal.wav b/contrib/memory/assets/cymbal.wav new file mode 100644 index 0000000000000000000000000000000000000000..b55bac461a23065ffff3559e4a40ad3e273ab8f5 GIT binary patch literal 12124 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 literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/dart.wav b/contrib/memory/assets/dart.wav new file mode 100644 index 0000000000000000000000000000000000000000..422e2c23a93875385e5489b5c1eda9d7c8259569 GIT binary patch literal 26026 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 z zL3cOCf9cZn^x&XW3W<%4m6f+|F=sv>$;>js0Zt^NJe(_j#h z)X_m?ES906jt+|QdiVFYwl+6+b`B08gZ)CGFc?Nhr=}pIP(a3N-D0q_b9jjAKb@}E zB@(T6WMpE(VlkPzyLr4s!r?%*et39%>~aMHIK$NISSJR<$cV`_IEdXOlks>Q49?D6 zF0U8s6YIKC5eQT&gTZKo9BTG-+V4kB#W~02a=U%LPzYxep-`+e(Z0^#n?@7(m6ZBsVEdmrK(ktNT)LzCnu+-u%q*M z$)wwj-3T0EHxLMgVliYnoMd`?M@B|RO{Sh6vA9$sdEe{x`;mvqIWHKD#fbgBKCAjlwpOP9&nyK)~gK zKTl5)qs=B(%H-swOS7{VF6eXuK{gwSfJ-Ws$z&NMlfj_Nb$pDPX4IPiF~S*$O!d2a5?mAN@&7@-jRSSC{_l*<%_`vIJ&ZMLng zH3qx8ShdY2GU3z|Ml(L%*C&xwtGQf0Un*4?luFqwDixb;dmDY&+$xb649Eq@CT4SY zH=hsf`FychE|*G$LOLCZxLij^$koW!CnwP;P0M6`edFUZ3??Q92T?acx?08kN3B*a zr_+G|a{t=en>VYgJ3A*Q@i_AB;NavW{D7Q*3XrDJ2j`-C9bQ2dx4pf(iYj({`{X1R ztJga^a3Y1rr>Bv}Q9~69r4mgumoSXAQYn!jzIgj~Wo31Bd)wh49D935N2jM}W)MGG ztytV>R4TYf;qwIo4yRhpWLTCf3^q0n4&3fks?m_kv05#b$;q*?;bEOlF6Z-GEiPBU zfWx6_)Ly7V;mOri_|j%Wy-3p%3D)n##Psyk)Yus6WwE%`qUm}aTxl9LOgM}+eQ-DgU8zy)NBc-T(9?^mr#(sQwh^pG@^!sD6 zT#lyse5q8e?&<08A7n5v(9@${R&b z{wtMGr)K^K$P;8OgCRKLeh+ib+$8eI=!iaYH;CIoj2ANtrsW?2odkGdnUWhrRx7?k z80;~MavAXq&+>l+;u9kvV}ONfwNfFB^LgYNc!bbKUZ5D9TPHI{_+y;N8jz?|a97!A zApYBa#Je7Xw^LE z=!3Z-QOL#_@f#upoWUGiV43w5v|uIH>tIa)U3dZuG8Qs!`~vV0G!YJ@4`QE;qg;kY zaK-&D<^!6@Z7<$QKQcxVnM4E8OXOh%(Sk7{(#XgmN4OCNcw?i5L@)Fc4MZpWM8JBL zjFRmSDfp0h9nXXvu?pSL3!TKzWYo~ejvmj@0=8hv`U{doE9-akAgy>pFZhJa2DB4@ zlkvRkS<=EXBz(aNagKQ+TA`8XBt9jc!Hkf(C)S{aaA#SQr~z-5FY9X}hkgKTv6e_1 z(L{K&^G((cVa9p_mWUO?2|gwMnt|LHptu%{)97_LjL>>&%`p=lCR_mz5^2i z$gz^-iFp0*WubxeBfq3C(Su&(D_V&z>^5x1W;MOr!g3;6t{g0}??gZQ#{NC;Pg;n* zf3!;a{xiR*gb4nb-v8S^=Qh|U@_+2k-+te_X2?Pcw~3o1nv=`Hj? z5&}sez0J&f@4x#qA24BtdAFQ%?#;WII3gk8k2VNRi=R4d@yhk#UI-xu4(}+0BBmlF zKwjwg1?v}#g?j|>cNLXV3H?AX(L?kWeMu+L9P)sK!1))tmG+=xXephAdY~ngCGF@h z^cBg&W|6GCE{9LXORy&{!T*xMcskGVvv?;yiaTqc z$8Kk**i-CBSvT$$dw><-Q{*b1f+yesxEjwTHu8+b=x106l`>@xIt#u#tNA;Py^@eoQccZ>(pW0P-$s*&Hk;!xdG2vBAgTP1+vBxcK zY`txJOdX7)jPH!uhA#Rn;~T4pjpYvU97!UJ@l;-8ci^_N?`@a4f%XLkMe|^-Q5Ub7 zsqmBctS_s7E}c}dtHQ797rBe}0Kda=y2#&Qj9ZxZF`w7s;mkdhZgbUAb#}u<*_TRt z6}?w{ zZa!$PrLInoU6Q@dhT2-k`-GuEs0o=3pXEyF+8S5Mko?k8N5$-hpGqI?TzeFXM(H?! z`M~z63oiAo@vpgFLF>XzGlap;mpxww1b8LktM#p`eI?21^S;DprRvsp_YfjxC*BdZsX{^pw1ZDTFK(RJ-2~>gOHkG~Q{8!vyP4)iw3% z#wC@t#b>Hr8y-~0NRG()yy*#pIMb&ch+LyTKD=NMg!C&x*JX3EZtp_{EIvto%K#n90!uuh8F6@@?nyy94;?V z@}}CM{;YbC*;kn8GTdpfB~d-TNm3D;miV)`=Cb`*(+7L!R;Sts(P4d(gGztm{pM#O z1>LKLqzFDZo2!EFh^aFd{bnT7`KSsCNJBeKk@RhTLh&rwMCmPwq~4vi+J|aSHXNvlPi1cRy<>j2>U&+u z0o6*;THgU}6hr4tsY@8x<7J26TJLfwshd;PPC7U*A-O1hjbe{ZtNazUi+mV$Q+(L$ zLB7iSUS)QBomqQDa56P1G5HQ!^>MJW|`H(Y3Sd)VinSx1V;nDc|bbne_ccEH4;UIX^D(YOrc zZmDV6=VZxi@T71n7KkXk*+rL+l<1V6-8NBzI4t@QEK!BDueomC|>+bzpwtFa!}Kmntfl!{V0}4 zG!)iuP&_vm=~5MW_MYyH&u6!j;vFr9gbM;E`^@rq?RnJsiS>2!HI<@qdF}DS*LhBo zu)4)%f96S~Ow%G`pngx|P($}dztY?J3%<=NJX7OQx=6#h{}MdEW#{&3(GR;?LM?(I zL#O(`a`}%ZlO;dO3!+NiD@#N#eHZ$l2<`XF>99PPY}{<>)fiJgKKGx3dli>zhBOT0 z-nbq1-4Q5i^|Ix^z7m(^Vv*oR(>z&XoxNyq#+gq?k|WcWd`wIoRraxRue7wmr@^D} z?8|*Avf}YMW3zHA{20Ce3EycwdQBKNDtvIjkfhf4d&h1LF`#B=Qn zG}{}mG@Vp-kqrAbA!9(%%iNw{^##qEUh*56S8^oQROk2lWc72e6H#RW{^IgqX2&)} zJaeyXvF?{XVn<^PtreZBAM<^-q;tcroc-^k@>@3*SAI%8Th{>ti$8ZL5!al~xO4B- zhmPv4@(JJnZp>=AvbEGj6gaDwu~RN8)V$%^ScC;mX$K^I<;hjOYM~$ zYI`npfXhnW)&94-p!jfRT-vf9`FW9fJteK10|ZLZ0mtt_yTeENfAkjmQTMG>XxgQF zSO2+eZlOA_ccE|LjKbe57T3O%`AApgcl}WHQ2sjgUBBxaFK>BQSmmSqtSA!=>2@RD zJO1|Yfzv#vj~&7GdlbDR?6gNK@e_8E)K+tr?Qd;cv9qZn&@6`1ag` z7uF}?M*?^6y!GJg-e>0@?`}L3w3^vlKhEt^_a8xT*-f6M9peKHwrANc= zqW8d_{^4UHo^(7GeptNUGNXB$Y;U&ZBYvxYb>T(StI6;Bq)jZEEA6AWpjvF7?0izV z!s5#=N0-d=6tCp*#)Z1kRo&#rtv5BNvO_YLHykwIEXq!sSLb27plmL0VKw;n5D(>q z?&n&+4%{sIO}x!t=vKf!wm)Px^3T|xCrP2KrYhtTN5aDYkv`i?R>R zOX~U-3X2jY6C_)*uja(nNn~Afe*4;6Qr=u4Jyz_do#9&He29knM09-E;c@7kHobe~ zw)gez5!^9+fLo&RrG5Zg-ZZpmRsKHtW7*E!lsvYMY0R#io}W}Ur`D%pvEp~do9e8(Q;p^Feue8lMJIRvUi$IsJ%`6A`+4QPd{4<2 zRuIrC_}`Fa-7LfRj#)XlW8cXBfw6%dP6T#x8BO1E%Wb?Yu<&N>N_|q@REdM}latE0 zzw(Rhwm!OI&+9+my~-k=dfmVM=3C+OvIBXs)#F7w{9>K1i6VS%1%w zS`n-6uAgTbiYmpQTr*s@xfQux5X5n%+-_s9hDWm8+NpI;(sng1tmQ+{ltjH|WRz7Gb zSB1>^=Lu;oF4s!qW$lD$5VJOVjG3u8mt_K~~dYFaZ z8}?UZNS{i(78YcmlMJs8s60|#BJZZ%X3p22FeI9FMyqj%+P#`o|0{JW-Bxg=dPmd9 zruXV>{8pY#?JT;)1PWwdf=>0imNpU!0oe@sou%^WTdvZ|~PaOZ#(9X7N* z(=xtYXw)Ae-Nc<7MS|;w6Y{R01KXu5${VT|sn6<_&DZsRktE0Mq99a=+mSjrSgzE{+gCZacJsprP1|fQwWA6XQjDqNGk1L4^>%OO z?$QHgiPCbmgHMT1tpDZ6+CCj(G@VqP=XcHuQ@V|E9xZIr@2wqG(@9n>4XJumw@B@) zJ8slj?+|~%c)Z4X+LB;qRfB3b)ZMEMDm#^5SrA#NuRK|HQ?bud#Bbm{iKF8pq1L)o zzeLrtWX{L=@7ia0r?3y3UhXZKpvU6Y@!}Pt zX~NswLw%wuyP>1%NpqY&OBJu$V!2??)x^uDsh^r+W#@7}l(m;{&UyBJ#gABNYVpl) zOpQg*=#Xk(>h9g;V)U;O^{t0S*;=<3F4e}U&7~*aPI+?mP1P&Ov+xfOv))Oj)b%qq zigviX_q^MpN9)01gZ!<&Z#@#p6^qe2MQf~eu3Or4R9D(4(zy$rTo^$Vx$5}LWd-SL zsL@W=e3h-Oyis<&w0&_#p*?SYVO8}mMXfAX5pH}XK*CQNa^&Z6DJdDTMUi!}^1wzvX1&j9uSZ^*;2~{iwo3@T6@Y`r`YaO7 z#6S6d>_AJn`LJ1I{$hyJ&#~6oK3JZb{?H~h=QS*<8d#ZLd9bu|{_)(aCHC@J2%~(a5Y*^*Xs`d(deP8K?s(TI1dcBs_t>C(g zlp>i!PmhOz$$=5xD?NPN$BBAcc52Qlrk8EWE&RFXNB@lKl#GujQ@>^RFAOS8lb%uy z)upf_9fMuRxHO2*dF}N5;@-vCS@;%h!~MIOrx&gVyng!j z_Lup}J;Y8Y$!&94!-guUB(<=Awo{h#&-|PhIj_E_W{Ps+3tkkhE_1AV)0nNw(TFWw z=}1vehYjMLelh;p?ipTALB4_ayq|bRdcAk+CG5_sY)35)>Q{B2YqM&SDx*p>^4{bX z7gXdQ%`Y$7TA3mBs~fJoq&nAp$M}aK)3C-;XNzVB+xN3i`Kf$5(F#vG_Hf?hn&vjy z{gQi-%UOrvSc`1eCicXaDmW+}>ys^21W}wEV_0#>-Zr9(`dg*VO1I_)7D=g{w zBQp#o2}U}Lou@l?6(@@2B3DW*_1d(C%Bq^8n|Y48t8;VnwiY}n98=V%^hf0$=_F}- zb=%6p6-rHc4r@%Mp-;{ zUJ5L~-!Qq}TRN)xH`!JBKt)vJ-bRCJd()k!YnuATP}MC}Nd4J*@20Y*?W$L*+~y3! z9AlyJuyqEju}&~AfXnqM zsLsD%c&dC*^>5WXYDd=#>rczBDRoUc^+{z*jlaQHTc+xxf5+xncblTnI@bo5O-^rJ zlDs_KiySXIv*P=r>3o581Y2R*uhywtnu{8SD|6+OrBRAN`L@cnH9h1vS{_s33_KjK^i$4J>D9LyTQ&x& z->UaD`YXQFNt6NVh4t_21%@a1Ctc6{a97PjicNf5G&#%r(q1 zG-zVv6BQ{9Ph_2HUF1&{<%+%XiS>+nwkA=N)ig#o(vYn`q2H!oq2FrkZLHU|Gu$;@ zHL-@d#(riWbAs8^`i~{fJj`q`eKQ3bYxQZSVCy35d5hQ*YCB->Z|i8wu}9kHTZ65= zEEW?ojnbDjT~Pn6-lW;9o~O=jt~cB@T+x{gBP`ygQQB#mS&h!hdx{j%jH~58VF6Zh zaoj_8k^L{5t8K7#nstlSXgy}LS_jw`Sdk^scE>u{EVe$gSS@ANr)C$c%@${UWI1A8 zU@No5*yC6~d%k6+HQkzOiMFn>=uEH7HKyyvUFKTLGHXj)sdc$6*6wDzWj$mg)*+Tw z<}CAEi_P@Vs5fphJuNu5uI8lNN^UZ1 zv$torvRU@qw!dv#Y*jV~{x06ii*S3=lT5)Q_|-f_(00On%@km=>u2h38JC$)nzxwl znFd-v*y?TJ>?m#^=fqX8M%IO|;tc303P$&$BG z^=wD}4BrlSp+3xOM#sbm3q(56Fp-x?BM(`rW}x)Jb?txLEX9phY`S1iC?gkY5NQ?Z{^G zl#C%B#7?HrizElDa5-@$ar_`2;cff|b{v}k-n@qHcp_=K=^%<>jF|0G70|n6FT`g6R`UUv@GE#g6UTyPrX0Fy=F!7e6)nJ-u;_{xYG9l8j}dPMq=7^1@~@j2X) z?1p{cJTi;ws0p5bneL*q=?5Yt_wY$T@LXH?g0JDf;yN;rj)S`UYe={eT_snBqmT0JGH`I|(kxVd>xr@f3YxEfThChN| zS{z7x0jK$-3vGm~{0)2hYe-M*25OSWkLNmYllV1!ImdHmd>@!uPtP+wghPZ!1yur@ zppmiCL~27eWRWbD#OYa5;WQE}~545FlW#fC`+1 zeFYhS&v<4udP)BQJaz+oCeVpAlopan^e7!dh4el-K-!Z8z^6YJ;x)VU4jmXe-!CAp#<~|cGEEF7NGEor3hEhMsdnRyY2YC!Llo%THf1bEf6-gw+NIx=z z#F5MRH^9V6$WI1874O1PSiz6M!^j%4i*%%zZbt_ZMP*F9z*%q!6d{-iMh^5>at52hN40jooqS11(yq%S~ypOQx;2he#7 za1l&>DWV3_pSGkQ;lJLKu|x|fQsOUQ)pGnE=iv=_B;E(Fl{g2`|B=XvGoYrKu0uw& z2+-&xh!Nn7N{H1Fnbz- zen*ed9Of?Md>B*3xC=6wvv3?_OsE~$dKR?W6TI97HAlmr0Nm{1kMf)Or=Tzg@jv)B zb|ziPuVe{HAQM3W9{}R3hzp%Y*U?nk9i2g1P>Fs_0yCG1WKJS29Z2_)N*sU}^8I)h z{seb}tK?pC<=h6S6;EKUb%`H@i+O$@Dv@?0TVwNAHa`s5E%(tw4E#@lOUgI5Z|{%K~mwn z6&*~+!kkSHle1;$94bL_^cHfZhiW56E1=qlNGH6CS8!J$iVrviC*%Y8A^bf)0y>6X zI0)2U1FLL?=sd;804Zx}1$_^ezJyrD3ygvkfeB)JoC#ne(J8pfkpZLx3rG!~ial@y zs9*yA<3Ck~NtzpJ4HfMtwt^}aKy_aUs!I~x-v7FE>I1wGglZ6l|mgni)=8H90X53M|>dDeMmiU|2jT}OW}EO zpy%1})D-*x%W(`;#nEIIxkL)c50Xjh2?N{{P$g*zD&Rxo0r&27I=w+<)EBCGA2a~9 zM;4k7bI&C(+sq^pm~mbLZLZ|QAX3ZlJOPihmam!PD?2n1A-b z8M+yGy&ssZfl8UjKjQcEA9%{gfrf2^sd6~!4)}>Cp`;1$PjNk9aSuel7FMpt{zOVL zs2HZ9Va!9&p9M@MlOQL6Ocu7qJI&cpH!)B#w}i zCFC!ta(}|lheS&X$p_LvA^>~U#6ZH}cMxE3IbdxC^Z|3=cYivX&VyGAX*jjPJu32! zTm=;y0d-*@R7)?y!8?GXu-2atqi0wFoIFF0LSCPcVzLzay?m&iq43_J74D8_;v@JL zu*(l>+!dk*jh2&<^Z`777jz)A&=};8o*^N03d`Y`fuwZ%|Er>w>;b$)lW77$`+Q=vAu$*Z%^KH^A(_5vu=ws7`(mi$!q9 zA*dyuz?+uvnTS-PBpql^s)ignK_@Djv=rjfKpbfk)I1DVUV!?o0s9X^G&(_^rU3g!(2bzo zs{v)Bfr$;k^K{^BSE?l<=tjB&vj)>U;LRksJ_9@&1gl&G>^=gd-G|<|hFC~jN+AX| z5()mg(hTry0l9&Itsy&?xd2bKv{01>!25YXN{lGE_5frA(!>;Clf?WI9;19Q>RD zS4KdDqrukpP#5fg+z5#Ce+cgcQR@q9j|E?jQ=WAf2bGTmC@%P;Qz#l6FQYyZChBmTc$TyO#3yU*Q?|DUU9`$@jO{Un6O zpRe_EF+eF969FeY5ZG4|`+*=VU_^wH;3%UmPa{IYi29sM>iLShG!=#%(uP{dCO-~4 zbPyRVRfq~IiAy-eEMXSUghl$&P$Sw7rlRgol*N^h)WI^qUfM$%O9|l~%Vgb}cAL$? zShKn@mYL`DyAByfjxTL5MKv*XpL$o(v)b9LW(;y$Oo^FKEay1ySh?!>g3!ROhy~j* zF4CHtWu8h1&HB1H7Zth+j!?Ico3@|EopQKvIwXyB856i!!(+P>&H~MqL%(8#15$2{ zdJRqVb$jaLAY){i>a?GG1{(~kdumQ=hRTp(2hc1r3u7-n=9XIKO?Ud-eL~LS!=_4* zW1ESuE11(%;z`$L!(&p;Zj!yD#Z0RjY2;X)NLECQa1^5POte;2c;a){Y9T}U{Zlq3=VJ?^-&!sNMC)VETmTw=a}A8s_#rPZ{pF)Cp%2$1WZ4)=_cSLl=c zyKHOo=Db{?i%2sXy?)hoQR18Sa#gF3F1ruR_oM3L!RtoJ8~1dp9u0uTO@*TkUzmI8 zi<7PDn{(%}{|+5k*~E35&fIpX-U~f5d=>7~^Q-F9)h&M1dD|^@k|{zB{nTw@J&K7% z&hv^rd*wbn{!%_GznyH?#gsZ`J?9Oq2e5Sbd~(zty$L=IzZq;ieR;7}5>sxuwIr^Y zHt*85d%9}Z($|a6jUQH94_0p~8*Cn$ZbRlR%_aj`x98{XLHhFe@zMM1!;kYn7+*NE zT-S6z({$4sW?E->>u-i{t`9a|zioX)zGY9_`3b7QhPQOr9L!p!?pOR_@b<;w#>+RY ze|EmfwyN<3*)~LKnYf;x>D$S7@(c3%>R|Kgo&Kr)X1sOKy>@q~wW6H^?%npE^mxa9vZi-6pfqV((W&s#^O@D-+$eD z)cvZwbKcwBKZ_ov3*8;t^~-4!jsYuP;GKAEwzJ``bB1@F=hi{aoZR21ufpbVO#C!A z>%G`9vS9-a;r~9wF7XHIpniM0?Oyd;2o8YGFmBU@zZaZ4TfO6YBaEqQp;1VBp)dL= zYoW7vn_RO}atFBVtlcG1n=;Xxr z7IV#;M4A=^n(jG{XSFc*5LF@@A#}P#e3`q!2%B+e8k`x1WqZg*gixMPyFXX%;Edao z8E!{2zh)+~-cdxiFmpV~5b7mPJniCOkvg>BbFCl(VIb|6o#6(O$jPJ`&wL|4W@eTX z97iq=9Jk9GUgkGY1p6Tzn1SR1+(Il(IGTM6Q6@QIX@o>i*?vEC zdFaa!d`99LN;$Sv7LFJW66PjdM1qi#2o7s531v17e2)ec$$&EvOB#gC7XjrVMO+b^ zgPGJ9aPY`fd9)i@{vfnaHzP<$j2U(*#R$gc;5cQj93-CCA0S)i${>-lZAD$=W7p&0 zM3ThEDhp}UlUykoFjvIblBrpZN6k_^u-kG(T5=XP$-M76>5#iJWj=rd$7TVLVNa>H z-tTo9lUdsyXI|8G_$ai*B(WVT1T0n*x65JfRM0$VqHc4~r>VWRR*Ey#JNL*f86S>MExrizGsD6q(T8U|;!=Yfd^ zS6rE`IJOZi8mA&l!D$Xzqrc+2rNyjP#WBooE$tdE4MXtLT}7!F4m%9 zN&qK8yEP&m%kC@R<%?9ex)*XI|2BQJaeG_Z^-qFUr`;EI*9yBZkTDm5Nq;8#_cG}5mzE^v7-T93F7<^G1uk6NAIBgrIKMu57{}tY* zSC@y|FTTVN+TY~+b#)@GL-W*XQ!h`vHoh6{c1~XDzaM{{JSe?e?AF;L(d(_bYC3v< zf?M{*X}y)d%pS3?2Tz{f-0bfA^Q5V1{YZ0~a>m=%Q_lZGWmd-gtp){QRwoAgKP6K%QDN=BNrT-}>Sb$#+&HSpO@b?5SJ^VjkZ z?01#Xg|*)fx*gXrCTUX}UWpo-ztW#A-#fo@e@yRJhZkr^m#`mO?fIlx@1ChTUc7QQ zW?!R^?H>mB%cJMszUwpOcPfjE`cD6aIz;EMt!KyI+rKt{82$Ee`J%ZQf(INnp3Yxc zoBi8vr?Yx*JUspr{-ycH(XUD`R-5}%vg53ppUrP-JEJq|+Vl6;=d=H`|IYsJ!7p1s zPJd(EXpe)-y~i(3H(RTegm(VMeLVXQ?;rS|$lv>aL?7kP51!2jpLy40KOHs(%X;*$ zXnXRV@lV6=>-R_R_qNZ(v(B0OXfZ9Jx!JrOZl^De(&BaV!QyPUc0KvrzOc5$>0x>0 zSBL2)c`Hh@b5kEKJ4e&F!A{XuGU@DzegjKzIMwadMagE&y7-d&^S!H zy5+EeDB<(K985Xy=Cs+Jw(Fy1wbqNOt%P{QQC+{D%(0xsD9Z!QoP|f|QtXM?IEwtE zURrOB;-h51^9;wsm^PxNd6b>k4!eHY8J5b&S*ddz=t+=`I2n$pj*itXzK);y)6Q<% z+olVr!eYBOw38X7qY14i&+STjWj&3%)mGOj55roNG{|+h+rMF*^xWUgRz`C;Xt+Jn zH|lcoJcy%+a`_i-gWi^}YjwDYA_ z&Ig?aldfhY-PUe;rI#nijyD^-)%;4|8QhwsURJh;ZrzD_OQXl#UGH{r)Odb#w0(VZ zxHDNbk1|nVz53B$-l(P{VFV{V?02U@)jdlO>;W^dQAQJOOU<2Hl1GZA^J(D4E54sx z*qd_PYVu|&$u{<9vxe5s<3J2gW1O50TIe{c82zATkeVi&`>5~Kqby3e%+Gq};4-rE z37mV_kgVRI=%5{wmdT3K8X|ENoX&VOkKkMcR|0=()alq5xuzMWj+TymJQ&JkoZ=++ z!KGo>aVYDwf~Z*zN6p4y?CANNvGI`LeizQz&^Bf0>EOvUOA1}jGE?h~O=mhZobkZ3 z)5OEztvyJjh)X$~^vdwE&_r2ayJ_m-P%$`Qc@$zC1=tm-?~2HGIJhzD5h|D`65$7# zq9TYR-wnFN4r0$vVoi%e!&21Y2}csQ!7zdE`^?XzG0-N<9`bZUK;M^r8K4sKHfpT#K zDW-~q#Rt-$eP#JQVTqKwDlFs(itocvh#O?Y3c9YDbRozI9FanRq6k+I&IrsTAVbd! zl|{OcS9T$E0T;%o3}9P?n1DkrhU7w!;Y-M9BaS)D7?FX5fk3WHAU;8{gx~>U0a%z& zx-61p4ImI1c|7J8%b3Ly>d7K6hD1vWh@m8mM}-iD1k{7sf*g<$sVD(bDwPibp(02^ z*aMN4M`G#uvBa=A06@^$2NYD0bFTq@0zNwy9)qw)DeM=rLJxu+13i_4lfWYpfB*oA zGlofk0%2F6AUp~p^* z5E4Qb3uB`a3a1nR4Dv}}fbf9AMk|I>a54xW8S{Mx*(7I_6|WK)hsgjI2K%yTq0k>- z@JJb40=Afh^@mpsQZW#%+Y256MMAhIAcBMqJjddKo7j<0RFWRMH>`Aaj|ZrATN4DGguD2fUda1Z_o*4jaoB^LMy0PYbX$R zGzGYzfPt+gA8aTz7tD7&ca&f`bov=_*Kw_^&|3WbV0!UX{04X-y0c|1FRC?cT^GFo zx2|CD@U(7TTe*HNh6;i;{aVEbNWlVE@$-(MFm;VB)WJjXy{kY{Pyi095BK%+8ue$@ z9a{k`#CK)g_LHK5sDKxeg741mHT+KFTJc&|fYuy$3-W>BP6O0G(f^EsrVky8dr=C= N`updSLgl*e{{l;X&A$Ku literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/level.wav b/contrib/memory/assets/level.wav new file mode 100644 index 0000000000000000000000000000000000000000..2d30b6e0a3b858a79c2d3702b4ae68f3831ea51a GIT binary patch literal 16736 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 literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/line_end.wav b/contrib/memory/assets/line_end.wav new file mode 100644 index 0000000000000000000000000000000000000000..aead13e3ba06992eacf2df9772bbc3627603d2f5 GIT binary patch literal 8170 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 LzDkqKhT#7IDXTG= literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/penalty.wav b/contrib/memory/assets/penalty.wav new file mode 100644 index 0000000000000000000000000000000000000000..2ad3af089a5ce45d0f786639ae0ad1e54f0d9631 GIT binary patch literal 6278 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 literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/squishy-hit.wav b/contrib/memory/assets/squishy-hit.wav new file mode 100644 index 0000000000000000000000000000000000000000..dbd958b7e55806b0c085732113be2fbe30797c96 GIT binary patch literal 28314 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 literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/whip.wav b/contrib/memory/assets/whip.wav new file mode 100644 index 0000000000000000000000000000000000000000..b907832384c3cad7c39d94bd0fb60600c86f8e88 GIT binary patch literal 3182 zcmds3TW=fJ5mtac^q~*^2}K{;m!d_R*hOkMO`6DRDyfn!%d#a=mSl;#P+Z=2$-VE{ zJGmrxd0ml`C`zm(LzdylLR`dv+Zu6Tw}=rTXkj!+k^Ys=EGgCb0e$HqxqJ5P%=gXZ zoEcvG@XD3&_xk!K-n-Esj?zE)eqUeT8}RwzjlSUbM&Eb)!gF`%@4)&+kXx9e=kQMc zkB6cVqR4Q;>-h*ARyFtpUk&dXA*u>5@CVY0BFkM3(3B*2fG2nhqN=7FI%>caRaB6W z11&;yLn8sDBuSzuN|L|{V!%&ST?1iVCq%PzSYrbK^Y3rI`p4FJBVd~&bV@^yA?C7q^dyPPGWBBm1Y7!?ao zjLpnmyE;BPI6N`4Oexi^X35`d?;RcG1Be(EF>&SU?DCqBb=+EezeRwwf7%>`uU5efBg9Av&SdLCnqOQp58Ac7AJ@M ze>*t*`_Y@znWjIO8)#{C%O}|=gw5r+i&e2D^c`>#SxU3J2qr@RGM-GX!pWiO6w7NlE9=!a zw`!o)fNi$-hl8V|y^Y3hXT9JQtV|-ENk-;xjo+LKO#?u9VSXXJx)zBhAex3{=BxE` zWn-t^^Z}ykH);h_HFKJzn3lo{P(LJzD55}Ak>vydok*o&&qisMW0FalNzt$@k!+=0 zt~WOt{(5V>QHBFoE?P1#a!hb1?ilX37(djgk=Al69`I6_B ztMz)V<~N$_e!cFO91AL>!X{EIoVI8@va}qbVsVH2YNCO z8vuF_bgZDwVQN7az0*w%&@~nM9WY{}BEX}eyO1d*5CaQTS?o1S2pFm(bZ}D@Spz~9 zf(^RpkENrjssV(0|ufe9&k16W}(=+J06LA36~;a=9?nf~1A=tdvmpAQ2U=$l zL0B{ctwur&Oki=B4hdlk1OorHD)6Fe?IvS53wYC literal 0 HcmV?d00001 diff --git a/contrib/memory/assets/woodthunk.wav b/contrib/memory/assets/woodthunk.wav new file mode 100644 index 0000000000000000000000000000000000000000..2001e38709bda12b778d72fc458a32656be70fb5 GIT binary patch literal 1886 zcmYjSTWl0%6kZa8K59@gLF*+%E)pUMs0c#PSV6oMN(+S+mTkLj_cl8_JNNs{&g`va zTiVi=Qs{E2TqPhhM2#BM1bpzpH(z}qKIsc@8vM?`R6M&oJNuviKbPW*7Wu+{*aYG)*^c*Y*6c zJXjl@IDYc%`HPpYTsSr2qz`TQ{zK`MIS{Yqspk1jp)gbF(8_*QTXN7Ktog zwrce{@{`Qb2I*Y!?`kc{O(_m91s4!_sh*GGv40P)~gPmy>{#CuWrrX zxPEQ^_OJII?fT=+rCM&!hG!_m;^o`96F=X7=)C{i_ZKGuzO#AF5^^qjYWW*G_76x- zv3g`=eEQ7g`R{)C@!RXCYkIu(z4a@bmOj1Y*{0PScXnpnk^0qde!6?-_N_~^V`W=P z$D^J5+IF|J>~24BxGy7WhHaagB8#%B8@kN(?%TO#-K#IY(DcfRwHr3QyZz%`ZTq{T z-Mu}ru6->ZY=tYfxWGt?%dwo zyyLTuc-}oSRiC?XVXi(sTJ;Svo9gd5eCXi8L(y)WQ|$r>I68K0VsdhFV*F^W8dz$c zOZFj5G#ZPi1U(p@KKI3!^Yb^Zo}Znlm0VTI3xX&qn&pMn;jzh?`nmI;pF4eWYIG=c z4LP6Vv)L@q=dcM4*@e>3$oSOs^zq5D;j*jniCAaH-uAs6T|J4M=2b=}X6k3ooIO2z zVrr~b2^>R}1U{2WCI*t3oMd?A+W6GWZ2i>CgFtWfZM9|@5d zw@8dObgeO7nnBx&rAl>hXmGGvDIu5l&@W3c86$`0Ertb(l!zrRlR+8a36_KLxtxH+ zq9nrD4bHKHI0uOW0OUh;*g{gZT|Wqm)LJ?89YYZSet$oBLu)cXBea)SE&Lod@7(k044?3GC{CuS{8V5VMGhef!P)& z3x!Z6%1JYW|Ez#atPh-b)6w}`Qj8h0HFe8Pwzl#lKSJA$mC z5giXCMm1{37?>b{;lMg1X+fqK9~yEzzes$2!+`gcSnc0eNgVNn;Q!ibbD|u`3r@ zyWklO(*Q#aFawVP*AG!NtP~=Kg*w>t08C&EsA))?M8%8&M98op +license=Apache-2.0 +[upstream] +browse=https://github.com/nitlang/nit/tree/master/contrib/memory/ +git=https://github.com/nitlang/nit.git +git.directory=contrib/memory/ +homepage=http://nitlanguage.org +issues=https://github.com/nitlang/nit/issues diff --git a/contrib/memory/src/memory.nit b/contrib/memory/src/memory.nit new file mode 100644 index 0000000..3e9877d --- /dev/null +++ b/contrib/memory/src/memory.nit @@ -0,0 +1,1000 @@ +# This file is part of NIT (http://www.nitlanguage.org). +# +# 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. + +# A game of memory using shapes and colors +# +# # Features and TODO +# +# * [X] Various shapes, colors and sounds +# * [X] 3 difficulty modes +# * [X] Saved high scores +# * [ ] Level selection +# +# The remaining issues are +# +# * Crappy event system +# * Crappy UI element placement +module memory is + app_name("Memorize Shapes and Colors") + app_version(0, 1, git_revision) +end + +import mnit +import app::audio +import mnit::opengles1 +import app::data_store + +import drawing + +# A figure to click on +class Button + # The place, starting from 0. + # Will be used to derive the display place. + var place: Int + + # The color of the figure + var color: Color + + # The shape of the figure + var shape: Image + + # The sound of the figure + var sound: Sound + + # x-coordinate on the display + var x: Float = 0.0 + # y-coordinate on the display + var y: Float = 0.0 + # width on the display + var w: Float = 0.0 + # height the display + var h: Float = 0.0 + + # Event time to live (from 1.0 downto 0.0) + var ttl: Float = 0.0 + + # Is there a big error on the button? + var error = false + + # The initial position (according to shuffle) + var from: Pos is noinit + + # The current path if shuffling + var path: nullable BPath = null + + # The second path if hard shuffling + var path2: nullable BPath = null + + # Is there an hard shuffling? + var hard = false + + # The optional text on the button (in the menu) + var text: nullable Image = null + + # The color of the text + var text_color: nullable Color = null + + # The high score on the menu button + var text_max: Int = 0 + + # Draw on the display + fun blit_on(display: Display) + do + if ttl > 0.0 then + ttl -= 0.1 + if ttl <= 0.0 then + ttl = 0.0 + path = path2 + path2 = null + if path != null then ttl = path.duration + error = false + end + end + + var x = self.x + var y = self.y + var p = 0.0 + if ttl > 0.0 then + if path != null then + var pos = to_pos + path.update(pos, ttl) + x = pos.x + y = pos.y + if hard then + p = ttl/5.0 + if path2 != null then + p = 1.0 - p + end + end + else if error then + # nothing + else + y -= ttl * h / 10.0 + end + end + + if not app.player then + p = 0.2.lerp(p, 1.0) + end + + color.set(display, p) + display.blit_centered(shape, x, y) + var text = self.text + if text != null then + text.scale = shape.scale + text_color.set(display, p) + display.blit_centered(text, x, y - h/8.0) + if text_max > 0 then + app.blit_number(text_max, app.scale, x, y + h/8.0) + end + end + if display isa Opengles1Display then + display.reset_color + end + if error then + app.drawing.error.scale = app.scale + display.blit_centered(app.drawing.error, x, y) + end + end + + redef fun to_s do + return "{place},{color},{shape},{sound}" + end + + # Check collision + fun has(x,y: Float): Bool + do + return (self.x - x).abs*2.0 <= w and (self.y - y).abs*2.0 <= h + end + + # Return a new pos centered on the button + fun to_pos: Pos do return new Pos(x, y) +end + +# A rbg color +class Color + # red (from 0.0 to 1.0) + var r: Float + # green (from 0.0 to 1.0) + var g: Float + # blue (from 0.0 to 1.0) + var b: Float + + # Globally change the color of the display. + # The color will be used for the next blit operations. + # The color of the display has to be reseted manually (see `Opengles1Display::reset_color`). + fun set(display: Display, p: Float) + do + if display isa Opengles1Display then + display.color(p.lerp(r,1.0),p.lerp(g,1.0),p.lerp(b,1.0),p.lerp(1.0,0.0)) + end + end +end + +# A point in the display coordinates +class Pos + # x coordinate + var x: Float + # y coordinate + var y: Float + redef fun to_s do return "({x},{y})" +end + +# A cubic Bézier path between two points with two handles. +class BPath + # The origin point + var from: Pos + # The handle of the origin point + var from_handle: Pos + # The handle of the destination point + var to_handle: Pos + # The destination point + var to: Pos + # The duration on the path + var duration: Float + + # Update the coordinates of `cursor` for an absolute time to destination `ttd` + fun update(cursor: Pos, ttd: Float) + do + var p = 1.0 - ttd / duration + if p <= 0.0 then + cursor.x = from.x + cursor.y = from.y + return + end + if p >= 1.1 then + cursor.x = to.x + cursor.y = to.y + end + var bx = p.cerp(from.x, from_handle.x, to_handle.x, to.x) + var by = p.cerp(from.y, from_handle.y, to_handle.y, to.y) + cursor.x = bx + cursor.y = by + end +end + +redef class App + + # # Assets and resources + + # All the images assets + var drawing = new DrawingImages + + # Array of all available colors for the figures + var colors = new Array[Color] + + # Array of all available shapes for the figures + var shapes = new Array[Image] + + # Array of all available sounds for the figures + var sounds = new Array[Sound] + + # The sound to play on error (error) + var snd_penalty: Sound is noautoinit + + # The sound of other ui element + var snd_click: Sound is noautoinit + + redef fun on_create + do + colors.clear + colors.add new Color(0.9, 0.6, 0.0) + colors.add new Color(0.6, 0.0, 0.9) + colors.add new Color(0.6, 0.5, 0.4) + colors.add new Color(1.0, 0.0, 0.0) + colors.add new Color(1.0, 1.0, 0.0) + colors.add new Color(1.0, 0.0, 1.0) + colors.add new Color(0.0, 1.0, 0.0) + colors.add new Color(0.0, 1.0, 1.0) + colors.add new Color(0.0, 0.0, 1.0) + + drawing.load_all(self) + shapes.clear + shapes.add drawing.circle + shapes.add drawing.rect + shapes.add drawing.cross + shapes.add drawing.penta + shapes.add drawing.star + shapes.add drawing.triangle + shapes.add drawing.heart + shapes.add drawing.diamond + shapes.add drawing.moon + shapes.add drawing.spiral + + number_images = new NumberImages(drawing.n) + + sounds.clear + sounds.add new Sound("bing.wav") + sounds.add new Sound("boing.wav") + sounds.add new Sound("cymbal.wav") + sounds.add new Sound("dart.wav") + sounds.add new Sound("duh.wav") + sounds.add new Sound("grunt.wav") + sounds.add new Sound("honkhonk.wav") + sounds.add new Sound("line_end.wav") + sounds.add new Sound("squishy-hit.wav") + sounds.add new Sound("woodthunk.wav") + sounds.add new Sound("whip.wav") + + snd_penalty = new Sound("penalty.wav") + snd_click = new Sound("click.wav") + + # Force load the sounds. Required because bug #1728 + for s in sounds do s.load + snd_penalty.load + + is_menu = data_store["game"] != true + mode = data_int("mode") or else 0 + current_level = data_int("level") or else 0 + + max_levels[0] = data_int("max_0") or else 0 + max_levels[1] = data_int("max_1") or else 0 + max_levels[2] = data_int("max_2") or else 0 + + print "max_levels: {max_levels}" + + reload = new Button(-1, new Color(1.0,1.0,1.0), drawing.reload, snd_click) + + if is_menu then + new_menu + else + new_game + end + end + + # Get a positive numeric value from the store + fun data_int(name: String): nullable Int + do + var x = data_store[name] + if x isa Int then return x else return null + end + + # # Level information + + # Number of buttons for the next game + var size = 5 + + # Length of the memory sequence for the next game + var length = 5 + + # Do a hard deal? + var hard_deal = false + + # No shuffle (0), easy shuffle (1), or hard shuffle (2)? + var shuffling = 0 + + # Is a new deal make on replay? + # If true, a new set of figures and a new sequence is produced + # If false, the same is reused. + var deal_on_replay = true + + # Current buttons in the game + var buttons = new Array[Button] + + # The sequence of the buttons to memorize + var level = new Array[Button] + + # The number of errors (crosses) in the current level. (in [0..3]) + var error = 0 + + # Is the player playing? + # If false it means that the game is showing the sequence to memorize + var player = false + + # Next button on the level (to show or guess according to `player`) + var cpt = 0 + + # Time to live before the next event + var ttl = 0.0 + + # Are we in the menu? + var is_menu = true + + # In the end of game, is this a win of a lose? + var is_win = false + + # Reset everything and create a menu + fun new_menu + do + is_menu = true + size = 3 + length = 0 + shuffling = 0 + + data_store["game"] = false + + colors.shuffle + shapes.shuffle + sounds.shuffle + + buttons.clear + for i in [0..size[ do + var b = new Button(i, colors[i], shapes[i], sounds[i]) + buttons.add b + b.text = drawing.hard[i] + b.text_color = colors[3+i] + b.text_max = max_levels[i] + end + + # Start the scene + start_scene + end + + # The current mode: easy (0), medium (1), hard (2) + var mode = 0 + + # The current level (from 0) + var current_level = 0 + + # Hight scores of each mode + var max_levels: Array[Int] = [0, 0, 0] + + # Reset everything and create a new game using `mode` and `level` + fun new_game + do + print "Next game: mode={mode} level={current_level}" + data_store["game"] = true + data_store["mode"] = mode + data_store["level"] = current_level + if max_levels[mode] < current_level then + max_levels[mode] = current_level + data_store["max_{mode}"] = current_level + end + + if mode == 0 then + hard_deal = false + shuffling = 0 + deal_on_replay = false + size = 2 + length = 1 + else if mode == 1 then + hard_deal = false + shuffling = 1 + deal_on_replay = true + size = 3 + length = 3 + else + hard_deal = true + shuffling = 2 + deal_on_replay = true + size = 3 + length = 3 + end + for i in [0..current_level[ do + length += 1 + if length > size + 2 then + size += 1 + length -= 1 + end + if size > 16 then size = 16 + end + + deal_game + end + + # Reset the buttons and deal a new game using `size` and `length` + fun deal_game + do + is_menu = false + + # Randomize the deal + colors.shuffle + shapes.shuffle + sounds.shuffle + + # Setup the figure + buttons.clear + if not hard_deal then + # With the easy deal, each button is easily distinguishable + for i in [0..size[ do + var b = new Button(i, colors[i%colors.length], shapes[i%shapes.length], sounds[i%sounds.length]) + buttons.add b + end + else + # With the hard deal, use overlapping combinations of colors and shapes + var sqrt = size.to_f.sqrt + var ncol = sqrt.floor.to_i + var nsha = sqrt.ceil.to_i + while ncol*nsha < size do ncol += 1 + + # Randomly swap the numbers of colors/shapes + if 2.rand == 0 then + var t = ncol + ncol = nsha + nsha = t + end + + # Deal combinations (up to `size`) + for i in [0..ncol[ do + for j in [0..nsha[ do + if buttons.length >= size then break + var b = new Button(buttons.length, colors[i], shapes[j], sounds.rand) + buttons.add b + end + end + + # A last shuffle to break the colors/shapes grid + buttons.shuffle + end + + # Deal the level (i.e. sequence to memorize) + # To increase distribution, determinate a maximum number of repetition + # of a single button + var rep = (length.to_f / size.to_f).ceil.to_i + var pool = buttons * rep + pool.shuffle + + level.clear + for i in [0..length[ do + level.add pool[i] + end + + print "newgame size={size} length={length}" + + # Start the scene + start_scene + end + + # Cause a replay on the same level + # On easy mode, the same level is replayed exactly + # On other modes, a new deal is made + fun replay_game + do + if deal_on_replay then + deal_game + else + start_scene + end + end + + # Reset the state of the scene and start with `fly_in` + fun start_scene + do + player = false + cpt = -1 + path = null + error = 0 + + # Ask for a redraw + first_frame = true + end + + # # Placement and moves + + # Locations used to place buttons on the screen + private var locations: Array[Array[Float]] = [ + [0.0, 1.0], + [0.0, 1.0, 0.5], + [0.0, 1.0, 0.0, 1.0], + [0.0, 1.0, 2.0, 0.5, 1.5], + [0.0, 1.0, 2.0, 0.0, 1.0, 2.0], + [0.5, 1.5, 0.0, 1.0, 2.0, 0.5, 1.5], + [0.0, 1.0, 2.0, 0.0, 2.0, 0.0, 1.0, 2.0], + [0.0, 1.0, 2.0, 0.0, 1.0, 2.0, 0.0, 1.0, 2.0], + [0.5, 1.5, 2.5, 0.0, 1.0, 2.0, 3.0, 0.5, 1.5, 2.5], + [0.0, 1.0, 2.0, 3.0, 0.0, 1.5, 3.0, 0.0, 1.0, 2.0, 3.0], + [0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, 3.0], + [0.5, 1.5, 2.5, 0.0, 1.5, 3.0, 0.0, 1.0, 2.0, 3.0, 0.5, 1.5, 2.5], + [0.5, 1.5, 2.5, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, 3.0, 0.5, 1.5, 2.5], + [0.5, 1.5, 2.5, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, 3.0], + [0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, 3.0, 0.0, 1.0, 2.0, 3.0]] + + + # The scale of the figures. + # According to the screen dimensions and the number of figures + var scale = 0.0 + + # The scale of the UI + # According to the screen dimensions + var ui_scale = 0.0 + + # Compute then location on the display for each button + # + # The method can be called when there is a change in the buttons (or the display). + fun locate(display: Display) + do + # The locations depend of the number of buttons (from 2 to 9) + var n = buttons.length + var locs = locations[n-2] + var columns = if n <= 4 then 2 else if n <= 9 then 3 else 4 + var rows = if n <= 2 then 1 else if n <= 6 then 2 else if n <= 12 then 3 else 4 + + # Compute basic dimensions according to the screen + var slotw = display.width / columns + var sloth = display.height / rows + var subw = slotw - slotw/5 + var subh = sloth - sloth/5 + + # Compute the figure scale + var img = drawing.circle + var xs = subw.to_f / img.width.to_f + var ys = subh.to_f / img.height.to_f + scale = xs.min(ys) + + # Compute the UI scale + xs = display.width.to_f / img.width.to_f + ys = display.height.to_f / img.height.to_f + ui_scale = xs.min(ys) / 4.0 + + var last = -1.0 + var row = 0.0 + var cpt = 0 + for b in buttons do + b.place = cpt + var col = locs[cpt] + if col <= last then + row += 1.0 + end + last = col + + b.x = (col + 0.5) * slotw.to_f + b.y = (row + 0.5) * sloth.to_f + img = b.shape + img.scale = scale + b.w = (img.width.to_f * scale) + b.h = (img.height.to_f * scale) + + cpt += 1 + end + + left.x = -150.0 * scale + left.y = (display.height / 2).to_f + right.x = display.width.to_f + 150.0 * scale + right.y = left.y + + # Other UI elements + + if not is_menu then + var reload = self.reload + drawing.reload.scale = ui_scale + reload.x = display.width.to_f - (drawing.reload.width.to_f / 2.0 * 1.2 ) * ui_scale + reload.y = drawing.reload.height.to_f / 2.0 * 1.2 * ui_scale + reload.w = drawing.reload.width.to_f * ui_scale + reload.h = drawing.reload.height.to_f * ui_scale + end + end + + # The origin point of the cursor on the left + var left = new Pos(0.0, 0.0) + + # The destination point of the cursor on the right + var right = new Pos(0.0, 0.0) + + # The current cursor position + var cursor = new Pos(0.0, 0.0) + + # The current cursor path + var path: nullable BPath = null + + # The reload button + var reload: Button is noautoinit + + # Safe point for a cursor on the i-th button of the level + fun path_pos(i: Int): Pos + do + if i < 0 then return left + if i >= level.length then return right + return level[i].to_pos + end + + # A random point outside of the screen + fun far_away(display: Display): Pos + do + var a = (2.0*pi).rand + var w = display.width.to_f / 2.0 + var h = display.height.to_f / 2.0 + var x = w + a.cos * w * 1.8 + var y = h + a.sin * h * 1.8 + return new Pos(x, y) + end + + # Create a BPath between two point with some nice handle values + fun new_path(from, to: Pos, ttl: Float): BPath + do + var a = atan2(to.y-from.y, to.x-from.x) + a += pi * (2.0.rand - 1.0) + var radius = 300.0 * scale + var fh = new Pos(from.x + a.cos*radius, from.y + a.sin*radius) + #var th = new Pos(to.x - a.cos*radius, to.y - a.sin*radius) + var path = new BPath(from, fh, to, to, ttl) + return path + end + + # Initial placement of buttons + fun fly_in(display: Display) + do + for b in buttons do + var from = far_away(display) + var to = b.to_pos + var path = new_path(from, to, 5.0) + b.path = path + b.ttl = 5.0 + end + ttl = 6.0 + end + + # Final leaving of buttons + fun fly_out(display: Display) + do + for b in buttons do + var from = b.to_pos + var to = far_away(display) + b.x = to.x + b.y = to.y + var path = new_path(from, to, 5.0) + b.path = path + b.ttl = 5.0 + b.hard = false + end + ttl = 6.0 + end + + # Randomly permute the content of `buttons` such that no element appears in its original position. + fun derangement + do + # The simplest algorithm is to shuffle until no buttons is at the same place + # This is also quite efficient and converges extremely quickly + var redo = true + while redo do + redo = false + buttons.shuffle + for i in [0..size[ do + if i == buttons[i].place then + redo = true + break + end + end + end + end + + # Shuffling the place of each button on the screen + fun shuffle(display: Display) + do + for b in buttons do + b.from = b.to_pos + end + + derangement + + locate(display) + for b in buttons do + var from = b.from + var to = b.to_pos + #print "shuffle move {b.place}: {from} -> {to}" + b.path = new_path(from, to, 5.0) + b.ttl = 5.0 + end + ttl = 5.0 + end + + # Shuffle the place of each button in a hard way + fun hard_shuffle(display: Display) + do + for b in buttons do + b.from = b.to_pos + b.hard = true + end + + derangement + + locate(display) + for b in buttons do + var from = b.from + var to = b.to_pos + var midx = display.width.to_f / 2.0 + var midy = display.height.to_f / 2.0 + var mid = new Pos(midx, midy) + #print "shuffle move {b.place}: {from} -> {to}" + b.path = new_path(from, mid, 5.0) + b.path2 = new_path(mid, to, 5.0) + b.ttl = 5.0 + end + ttl = 5.0 + end + + # Setup the next cursor path + fun setpath + do + if is_menu then return + var from = path_pos(cpt-1) + var to = path_pos(cpt) + #print "cursor {cpt-1}->{cpt}: {from} -> {to}" + path = new_path(from, to, 4.0) + cursor.x = from.x + cursor.y = from.y + ttl = 5.0 + end + + # Main loop, drawing and inputs + + # Flag used to ask for a (re-)computation of the display layout + private var first_frame = true + + redef fun frame_core(display) + do + if first_frame then + locate(display) + if cpt == -1 then + fly_in(display) + end + first_frame = false + end + + # Clear the screen + display.clear(1.0, 1.0, 1.0) + + # Manage events + # This is a crappy ad hoc organic implementation + if not player then + ttl -= 0.1 + if path != null then path.update(cursor, ttl) + if ttl <= 0.0 then + ttl = 0.0 + if is_menu then + # Menu animation is over + player = true + else if cpt < 0 then + # Level place animation is over + cpt += 1 + setpath + else if cpt < level.length then + # The cursor is playing + var b = level[cpt] + b.ttl = 1.0 + b.sound.play + cpt += 1 + setpath + else if cpt == level.length then + # The cursor is out, run the shuffle + path = null + if shuffling == 1 then + shuffle(display) + else if shuffling > 1 then + hard_shuffle(display) + end + cpt += 1 + else + # The shuffling is over, start playing + player = true + cpt = 0 + end + end + else if ttl > 0.0 then + ttl -= 0.1 + if ttl <= 0.0 then + ttl = 0.0 + if cpt == level.length then + fly_out(display) + cpt += 1 + else + if is_menu then + new_game + else if is_win then + current_level += 1 + new_game + else + replay_game + end + end + end + end + + # Display each button + for b in buttons do + b.blit_on(display) + end + + # Display the cursor + if path != null then + drawing.cursor.scale = scale + display.blit(drawing.cursor, cursor.x, cursor.y) + end + + if not is_menu then + blit_number(current_level, ui_scale, 10.0 * scale, 10.0 * scale) + reload.blit_on(display) + end + end + + # Blit a number somewhere + fun blit_number(number: Int, scale: Float, x, y: Float) + do + for img in number_images.imgs do img.scale = scale + display.blit_number(number_images, number, x.to_i, y.to_i) + end + + # Images with the numbers + private var number_images: NumberImages is noautoinit + + # A player click on a button + fun action(b: Button) + do + if is_menu then + b.sound.play + mode = b.place + current_level = 0 + ttl = 0.1 + cpt = level.length + is_win = true + return + end + if cpt >= level.length then return + if b == level[cpt] then + b.sound.play + b.ttl = 1.0 + + cpt += 1 + if cpt >= level.length then + is_win = true + print "Won!" + ttl = 2.0 + end + else + error += 1 + print "Err {error}" + b.error = true + b.ttl = 3.0 + snd_penalty.play + if error > 2 then + is_win = false + print "Lose!" + for b2 in buttons do + b2.error = true + b2.ttl = 3.0 + end + ttl = 3.0 + cpt = level.length + end + end + end + + redef fun input(ie) + do + # Quit? + if ie isa QuitEvent then + quit = true + return true + end + + # On click (or tap) + if ie isa PointerEvent and ie.depressed then + if player then + for b in buttons do + if b.has(ie.x, ie.y) then + action(b) + return true + end + end + end + + if not is_menu then + if reload.has(ie.x, ie.y) then + reload.sound.play + reload.ttl = 1.0 + replay_game + return true + end + end + end + + # Special commands + if ie isa KeyEvent and ie.is_down then + var c = ie.name + + if c == "4" or c == "escape" then + # 4 is *back* on android + if is_menu then + # quit = true # broken + new_menu + else + new_menu + end + return true + end + + if is_menu then + return false + end + + if c == "[+]" or c == "=" then + # [+] is keypad `+` + size += 1 + deal_game + return true + else if c == "[-]" or c == "-" then + size -= 1 + deal_game + return true + else if c == "[*]" or c == "]" then + length += 1 + deal_game + return true + else if c == "[/]" or c == "[" then + length -= 1 + deal_game + return true + else if c == "space" or c == "82" then + # 82 is *menu* on android + reload.sound.play + reload.ttl = 1.0 + replay_game + return true + end + + print "got keydown: `{c}`" + end + + return false + end +end -- 1.7.9.5