From 3bf3ba450c5d7d8da41cbe5ca2d405e38b40d631 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 20 Jan 2024 14:51:40 +0900 Subject: [PATCH] enhance(reversi): tweak reversi --- packages/frontend/assets/reversi/put.mp3 | Bin 0 -> 5014 bytes packages/frontend/assets/reversi/stone_b.png | Bin 0 -> 10794 bytes packages/frontend/assets/reversi/stone_w.png | Bin 0 -> 11546 bytes .../frontend/src/pages/reversi/game.board.vue | 106 +++++++++++++++--- packages/frontend/src/pages/reversi/index.vue | 16 +-- 5 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 packages/frontend/assets/reversi/put.mp3 create mode 100644 packages/frontend/assets/reversi/stone_b.png create mode 100644 packages/frontend/assets/reversi/stone_w.png diff --git a/packages/frontend/assets/reversi/put.mp3 b/packages/frontend/assets/reversi/put.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..baa1b83195434d3af77ecf04b6d81c22c8fd2109 GIT binary patch literal 5014 zcmezWdxH-H0pOXJme0Vzz|X+Iz|O!RJdHsG1$d%>Tof<~6>LKRw^6`<6u`j1VCm!N z>uRiLXkfs&3*I%HfZS2GMS&S4F^Y#$2tZOC^Tf2Ur7Q=SGSjS% zELgxG%A1>ev$cU~=DOV7avKg4`wTUonMUQ+|NsC0Qja40HE9JBsEy|8?H^%ocS za-G<_cLD+e0)?l${1pfYhyjDx@8x?rMA#bixDWq!baZr)x}Q;v(7<-J{pNxOG-i zR8U2Wp(5)9$NS8?C(4wnd&_31vZ)@ioN+IOL)Blps`Au|5{b>)IyxCwA|5gB5w-f? zKjYcIH0e_!&EYHl-~E5)?L)8jnw=jKdACbUVe4UZ7yHeaelh*`G0j7PYyXwo7RQ?M zax^5UICU^EFmSasA6Qw~6yfmdl=|5vFZ{b$X6dMUPuj3#iP49jDNFsQE>>Iibin1+@a&?K2@~!p7;(5>Qd?%~&zEM@P<@d}rHCqiY|E$zRaq3Nf7fBsP2|NmjnHqDar%Y0AnKDTr2y+gs> zCU0X8eqQwK^#2tuHav@uPOX~VrX&DzVe^UT?vqwN8z)Ri=N4|XswrC?5q@>%>gtne z|9@}F5o}<2<8bM_?E{7?k5hfm7cd07s(PN;aPgGml9zj17HKxGu&&%|ZW(1G;S<39 zTKH*|!X5F`hxRmu=bqD@{q7&jhig;Mz4r*dbz`^Mn_pM^{^=zi^gmk7)+aUl*~_m* zFK4m1ZTqqHu62v1#(~qb@BKVl7%}DS#^nZ;37rQ^njbP+Dsp~aCS5&EqG{u+0NIrh z7Pi;gXN$AP?0ai*XLsgOCnW}k1ZGCQw5Vd|?9c>-{!6>Kw(>T!+pUUvJYizBewVD# zf-9Dbnim&y@#ZpLYg{`o@Q^@BP{pzLg05M?6J9)i+mbEwaglUww?Lt@ZqknoH?i}r zzyHsEz4OQa|3>vGyA>@m=imD?dy{e4mZP>8n!o;i=>J1K@72y{vOEhMG@hD>8h!I! zAmn2^-7d(r@3y|!O^!QlTkaX{`V^5Qr@3ggcbKE*nv0elzmzX&=S>gmX9`qF*jn^8 zY;X9!-`nKlVud$d%?}riIQ?=@Xx$GFvuOX=pwA&+w&<8z9d$L6D=B^^m0G@)u8z2|0|{A>(_e(Ffr;L z-o9>0@!2HSY?TGm4&A-7nyE!rdZWkXm7+VMlf96pWww+gxNz8Luc6m;w)@3fWa&L`8=du-kMmf*5)^QDA zxn=K^8QmpXK3#GT!U~1rI`>y@k?QS8Pw0Hk^xx;BPW}J?|3jl@_P96;FffWuk(;B* zv*BEP$pfYqQ%2uiS)m>`Z(iD0kshtPNvNS9uIS^cZ!+qjBq!dW@+`#vGrvng*IFq) z+va(~CvB~dFS&fmSS!8aOJC(Z{;2`$()tAh%Ee<8*YrQ|-?Oi7?T?%o?b~&;mrc@9 zy=-0mvsCccnb29?lel($-ST$p-3M!}HahC&tT0H~y0a`Vc%khHvp+df*>_J%Z032r z@`$|V&m&D6|sR?Or}?)SZmG+)JDVPIhScvbGN)9GWWHxiYd zKl(W}&)6{QwQh?>6~FoM+?>|+C2P-gEojf11J8r*1lyS}IXi3iWvgRe z+jcW+uQS#)I`gz*v*^rJw41~SMVF4f9Y<uV(Hk z;}&7fnsLWbBYMMMr6495m$^rmFdtdf+UgX*;&3xzqKDVnGf$6CR4gy#mh?KKRuR+~ z>~T~h(uvK*#p|@FNY}OcLA(myS3l~Qoh^PJGLjI1xROm4{=WgIIwZwH;c+}kZmj7%8Vm^N?v)#$p}>sXaYlMR={Q`7d{ zK|3r;FD%$#t0CvdU9fFuH7Lo6HmFQ-K3n+4_|ueJ$r9V* zn9^~|JYR5yJLirGAp$Iq7Cd3=dA#n=>Lr^th1^Sg`!e@VY;@HhJ*Nqqgj#nlm9=y^ z`0>1T;F-FG{Hp9qJvZOIJ1XQ|x+A-{K=rpwMV*dS#S+8!)>~ZJKQ*{dUGSIPAcNC+ z!r5DU|6gc$FTlP2`~RnoD`&91tdKW4?sq$^Z*F8#cCVbO)a-SIe~Mcx&IOvyynZ|K zWs2pcZSO2fuIxO#t1C%v-qz@=E89$roF?<1*`{^ng+}7p?}C$^-)_{Hv_vaZ>&jib zC1ER_=6!5hEV3j1>>MZW?Q@KST_d+_IcqAG|CV)%O!vnHp(mzRdtI{L`l`_Hc>9_2 z&%YY|;t9MKvhi961B0UNnz{Fs%#4}8{FGRFqJ5L)gvKco^0cmnF6Rq1&^q&UnXni0 z)UCWub9$9jLuPPac_g7i_n_K_T;vAD(LK5dUMXCfj zv9+wer|R-?;x$dSgsX-=D>YTG&3G!g%hhvN*_~o*!{hG*HlIkp6!tay(ygsot|bd^ z=BTBA$+?~4SHDSCXafU}_59~Iyu~_}$|*9duMTVa_bg#W=*%Tj;VKIS9oKE!@2bu? z>!OOxv8jr>I`slJE#1>DN;dv;Sn)Nf%VedJEZ>nf(d4ajfA%1wLv`$eSesduZEX1z$?tZ}&{ z=PJui%>?nBF!feDzKee*CaSAUI2iVmZ@x_Ls#|-h8{klziH|GkDY2Z*r&ljpihW zhMqP1D=;zrsf~uFh^R$ChM6LN=V3{Y6lIg5?^R7~RwooB**?V8Ld`ua&_$64){S2xYl zy4RUp^Q~TaXGF?_1t#B@wQ>j)ns_!Xn&dCGTzN~$j zt4(}D^rFDIhboNiH(wLmqLAWVain%`ck61V%a_i?zrGi@v^Xy@wKn#6*xo&F^255N zh345YpPIJ2N>^*|t({p9i>Ec&RG!jrJ=yRi`s~^zCbw?C+P(Pl)irLH^9)7KKV56a zxFo#$>tb_$om=a_e|h<3#$mP!kNW8cuT;!PDBw!@Dt$ox1EcE6?)*<@bi|Jw)Y(yD z%YSa_q4bj)Gt~}%c$2qi*LC5hHSCT%|D-2hWOx|JS(0D$eBwr%7!i4%&5vDgU7T<_ zx$Na68zK7z8#35(?>O`b8n-AlY~8GKv)OD5t6FwPgYjFQX=N9#9%R;9c*!}nU1R0l zCc|Ir?aW`@-+JQHOF#MCSF1K|JpZdGy-lv6?8cK+TWe7U))WSYgBeq}j|IH+^jbEJ z|M=NS?jg>nj`rNL=&Sj%Z)HTdZ)zOv>`4+pMttIWbpqJ0FGYD{W16f45swv-p~okx^^u z-NvVZrFGe+xkJu7&?~8AB^0yT)Z}H|*tA{+85G8N*^n z;NX=TH5aF@IV>LL7aMzX{_3jD2DVo>y{TSy%Y0?RdCU7bi{}R0{QkJjGUBw&|Dc;; zFIJ^8O;p~xv@i80_v6fktBx?VpAGTb8fMC&!E%GcdRv1y0-YricMFap5L_9+bwwN;^Z#Ps8{)mU-s?Vpl!PN!i+ABhu7}v z>WHYkPWl}-yYK8h;hF!{_M3^bHVH5PlR5i~yS~2O_K@HI)jwT!2|k#Ae9v6%jGN`W zcm6-S%GkS5QDn16tIy9E4@aR0H?4(DsvWaBlRXlA3zU|ea9XmZtCV3w*2^a5vJ`uAPcSf; zG%zr*2$i@pI2BJ}VvLkpbdMmPSyQ$yi$68 zD!EE6a`Y^Fcb8FU>2JeU#`x=8D*N;u0ywTY$IP5z5E^u4MR3pA!!I}kge7O)yv%a*QO7;^rQ+RceUnG@Pv+;2uMov7wD`O)T!CaWa8w0*^nX+$2U+RY`vl6%-CP*AVwI%cE!4OZa&+36Iex@wBlC|;Sn%sycC(*=XKDLnMFqVX6lsQDFy}(huA$+ zr%7tFvhWC$l+XW{v#_y=P4J@qf7MhLJ}c}0|IVyU?Q8x2H;juzLg7Jn{f_|CKxWbZ VKbB@Llm7pIYG@FAENIn8003MAtM32+ literal 0 HcmV?d00001 diff --git a/packages/frontend/assets/reversi/stone_b.png b/packages/frontend/assets/reversi/stone_b.png new file mode 100644 index 0000000000000000000000000000000000000000..9e98455a3ec345f0c52893f66f857c000dc8db79 GIT binary patch literal 10794 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

-
({{ i18n.ts._reversi.black }}) vs ({{ i18n.ts._reversi.white }})
+
+ ({{ i18n.ts._reversi.black }}) + + vs + + ({{ i18n.ts._reversi.white }}) +
@@ -49,8 +55,14 @@ SPDX-License-Identifier: AGPL-3.0-only }]" @click="putStone(i)" > - - + +
@@ -62,10 +74,41 @@ SPDX-License-Identifier: AGPL-3.0-only
-
{{ i18n.tsx._reversi.turnCount({ count: logPos }) }} {{ i18n.ts._reversi.black }}:{{ engine.blackCount }} {{ i18n.ts._reversi.white }}:{{ engine.whiteCount }} {{ i18n.ts._reversi.total }}:{{ engine.blackCount + engine.whiteCount }}
+
+
+ {{ i18n.tsx._reversi.turnCount({ count: logPos }) }} {{ i18n.ts._reversi.black }}:{{ engine.blackCount }} {{ i18n.ts._reversi.white }}:{{ engine.whiteCount }} {{ i18n.ts._reversi.total }}:{{ engine.blackCount + engine.whiteCount }} +
+
+
+ ({{ i18n.ts._reversi.black }}) + + +
+
vs
+
+ ({{ i18n.ts._reversi.white }}) + + +
+
+
+

{{ i18n.ts._reversi.isLlotheo }}

+

{{ i18n.ts._reversi.loopedMap }}

+

{{ i18n.ts._reversi.canPutEverywhere }}

+
+
-
- {{ i18n.ts._reversi.surrender }} + + +
+ Show labels + useAvatarAsStone +
+
+ +
+ {{ i18n.ts._reversi.surrender }} + {{ i18n.ts.share }}
@@ -79,12 +122,6 @@ SPDX-License-Identifier: AGPL-3.0-only
-
-

{{ i18n.ts._reversi.isLlotheo }}

-

{{ i18n.ts._reversi.loopedMap }}

-

{{ i18n.ts._reversi.canPutEverywhere }}

-
- @@ -98,12 +135,16 @@ import * as CRC32 from 'crc-32'; import * as Misskey from 'misskey-js'; import * as Reversi from 'misskey-reversi'; import MkButton from '@/components/MkButton.vue'; +import MkFolder from '@/components/MkFolder.vue'; +import MkSwitch from '@/components/MkSwitch.vue'; import { deepClone } from '@/scripts/clone.js'; import { useInterval } from '@/scripts/use-interval.js'; import { signinRequired } from '@/account.js'; import { i18n } from '@/i18n.js'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { userPage } from '@/filters/user.js'; +import * as sound from '@/scripts/sound.js'; +import * as os from '@/os.js'; const $i = signinRequired(); @@ -112,7 +153,8 @@ const props = defineProps<{ connection: Misskey.ChannelConnection; }>(); -const showBoardLabels = true; +const showBoardLabels = ref(false); +const useAvatarAsStone = ref(true); const autoplaying = ref(false); const game = ref(deepClone(props.game)); const logPos = ref(game.value.logs.length); @@ -206,8 +248,10 @@ function putStone(pos) { triggerRef(engine); - // サウンドを再生する - //sound.play(myColor.value ? 'reversiPutBlack' : 'reversiPutWhite'); + sound.playUrl('/client-assets/reversi/put.mp3', { + volume: 1, + playbackRate: 1, + }); const id = Math.random().toString(36).slice(2); props.connection.send('putStone', { @@ -232,8 +276,13 @@ function onStreamLog(log: Reversi.Serializer.Log & { id: string | null }) { case 'put': { engine.value.putStone(log.pos); triggerRef(engine); + + sound.playUrl('/client-assets/reversi/put.mp3', { + volume: 1, + playbackRate: 1, + }); + checkEnd(); - //sound.play(x.color ? 'reversiPutBlack' : 'reversiPutWhite'); break; } @@ -281,7 +330,13 @@ function onStreamRescue(_game) { checkEnd(); } -function surrender() { +async function surrender() { + const { canceled } = await os.confirm({ + type: 'warning', + text: i18n.ts.areYouSure, + }); + if (canceled) return; + misskeyApi('reversi/surrender', { gameId: game.value.id, }); @@ -317,6 +372,13 @@ function autoplay() { }, 1000); } +function share() { + os.post({ + initialText: `#MisskeyReversi ${location.href}`, + instant: true, + }); +} + onMounted(() => { props.connection.on('log', onStreamLog); props.connection.on('rescue', onStreamRescue); @@ -341,7 +403,7 @@ $gap: 4px; } .board { - width: calc(100% - 16px); + width: 100%; max-width: 500px; margin: 0 auto; } @@ -437,4 +499,12 @@ $gap: 4px; border-color: transparent !important; } } + +.boardCellStone { + pointer-events: none; + user-select: none; + display: block; + width: 100%; + height: 100%; +} diff --git a/packages/frontend/src/pages/reversi/index.vue b/packages/frontend/src/pages/reversi/index.vue index c483e36c24..d33acc95a9 100644 --- a/packages/frontend/src/pages/reversi/index.vue +++ b/packages/frontend/src/pages/reversi/index.vue @@ -10,9 +10,11 @@ SPDX-License-Identifier: AGPL-3.0-only
-
- {{ i18n.ts._reversi.freeMatch }} - {{ i18n.ts.invite }} +
+
+ {{ i18n.ts._reversi.freeMatch }} + {{ i18n.ts.invite }} +
@@ -28,12 +30,12 @@ SPDX-License-Identifier: AGPL-3.0-only - +