麻雀得点計算プログラム by sou51

再生

 友達と麻雀を遊んでいて、やっかいなのが得点計算。麻雀のルールは知っていてもこれだけは苦手という人も多いんじゃないかな? これは得点計算をサポートするプログラム。
 十字ボタン上下で項目を選択、左右で変更すると、自動的に画面下に得点が表示されるぞ。Rボタンでリセットされるのでうまく使い分けよう。
 麻雀のルールが分かっていれば、そう迷うところはないだろう。「2−8」は中張牌、「19@」は么九牌を示している。計算結果の「オヤ」「コ」はそれぞれ上がった親または子に支払う点数なのは言うまでもないね。

私が作りました

sou51

元プログラマ。現在プログラマ以外の職を求職中。


 CHECK POiNT 

ワンパク
今回はセンモン的なプログラムがけっこう多いが、これならオレにも分かるゼ! 麻雀の点数計算はぶっちゃけ面倒だからよォ、コレをDSiで持ち運べるんならベンリじゃねえか?

神崎
こういうのも専門的というのかは分からないけど……。たしかに麻雀の専門用語でいっぱいではあるか。

博士
課題があるとすれば、そのあたりをどれだけ分かりやすくするか、じゃろうか。
たとえば么九牌、いわゆる1と9の字牌を「19@」と表現しておるが、これをフォントの書き換えやグラフィックでもっと分かりやすく置き換えたり、じゃな。

インテリ
麻雀を知ってる人なら、わざわざそこまで説明しなくても分かりそうではあるけどね。
グラフィック面に背景色や区切り線を描いて、見やすくする工夫もアリかな。

プログラムリスト

  1. ’マーシ゛ャン テンスウ ケイサン フ゜ロク゛ラム
  2. CLEAR:CLS
  3. ’ヘンスウ ショキカ
  4. ’CUR=カーソルイチ
  5. ’HAN=アカ゛リ ハンスウ
  6. ’    1-12:ハンスウ
  7. ’    13:ヤクマン
  8. ’    14:タ゛フ゛ルヤクマン
  9. ’    15:トリフ゜ルヤクマン
  10. ’AGARI=アカ゛リカタ
  11. ’      0:メンセ゛ンロン
  12. ’      1:ロン
  13. ’      2:ツモ
  14. ’      3:ツモヒ゜ンフ
  15. ’ATAMA=シ゛ャントウ カ゛ ヤクハイ ナラ 1
  16. ’MACHI=マチカタ。タンキ、ヘ゜ンチャン、カンチャン ナラ 1
  17. ’CHITOI=チートイツ ナラ 1
  18. CUR=0:HAN=1:AGARI=0:ATAMA=0:MACHI=0:CHITOI=0
  19. ’コーツ カンツ ノ カス゛
  20. ’ 0:チュンシ゛ャンハイ アンコ/アンカン
  21. ’ 1:ヤオチュウハイ   アンコ/アンカン
  22. ’ 2:チュンシ゛ャンハイ ミンコ/ミンカン
  23. ’ 3:ヤオチュウハイ   ミンコ/ミンカン
  24. DIM KOUTSU(4),KANTSU(4)
  25. ’アカ゛リカタ テ゛ カサン サレル フ テイキ゛
  26. DIM AGRFU(4)
  27. AGRFU(0)=10:AGRFU(1)=0:AGRFU(2)=2:AGRFU(3)=0
  28. ’ヒョウシ゛ヨウ モシ゛レツ テイキ゛
  29. DIM MNGNST$(16),MNGNSCR(16),AGRSTR$(4),ATMSTR$(2),MCSTR$(2)
  30. MNGNST$(0)=”マンカ゛ン”:MNGNSCR(0)=2000
  31. MNGNST$(1)=”マンカ゛ン”:MNGNSCR(1)=2000
  32. MNGNST$(2)=”マンカ゛ン”:MNGNSCR(2)=2000
  33. MNGNST$(3)=”マンカ゛ン”:MNGNSCR(3)=2000
  34. MNGNST$(4)=”マンカ゛ン”:MNGNSCR(4)=2000
  35. MNGNST$(5)=”マンカ゛ン”:MNGNSCR(5)=2000
  36. MNGNST$(6)=”ハネマン”:MNGNSCR(6)=3000
  37. MNGNST$(7)=”ハネマン”:MNGNSCR(7)=3000
  38. MNGNST$(8)=”ハ゛イマン”:MNGNSCR(8)=4000
  39. MNGNST$(9)=”ハ゛イマン”:MNGNSCR(9)=4000
  40. MNGNST$(10)=”ハ゛イマン”:MNGNSCR(10)=4000
  41. MNGNST$(11)=”3ハ゛イマン”:MNGNSCR(11)=6000
  42. MNGNST$(12)=”3ハ゛イマン”:MNGNSCR(12)=6000
  43. MNGNST$(13)=”ヤクマン”:MNGNSCR(13)=8000
  44. MNGNST$(14)=”タ゛フ゛ルヤクマン”:MNGNSCR(14)=16000
  45. MNGNST$(15)=”トリフ゜ルヤクマン”:MNGNSCR(15)=24000
  46. AGRSTR$(0)=”メンセ゛ンロン   10フ”
  47. AGRSTR$(1)=”ロン         0フ”
  48. AGRSTR$(2)=”ツモ         2フ”
  49. AGRSTR$(3)=”ツモ(ヒ゜ンフ)   0フ”
  50. ATMSTR$(0)=”ソノタ        0フ”
  51. ATMSTR$(1)=”ヤクハイ       2フ”
  52. MCSTR$(0)=”      ソノタ        0フ”
  53. MCSTR$(1)=”タンキ・カンチャン・ヘ゜ンチャン 2フ”
  54. GOSUB @DRAW
  55. ’メインルーフ゜
  56. @LOOP
  57. LBTNS=BTNS
  58. BTNS=BUTTON()
  59. ’ウエ ホ゛タン
  60. IF((NOT LBTNS)AND 1)AND(BTNS AND 1)THEN GOSUB @UP
  61. ’シタ ホ゛タン
  62. IF((NOT LBTNS)AND 2)AND(BTNS AND 2)THEN GOSUB @DOWN
  63. ’ヒタ゛リ ホ゛タン
  64. IF((NOT LBTNS)AND 4)AND(BTNS AND 4)THEN GOSUB @LEFT
  65. ’ミキ゛ ホ゛タン
  66. IF((NOT LBTNS)AND 8)AND(BTNS AND 8)THEN GOSUB @RIGHT
  67. ’Rホ゛タン
  68. IF((NOT LBTNS)AND 512)AND(BTNS AND 512)THEN GOSUB @RBTN
  69. GOTO @LOOP
  70. ’------
  71. ’フ ケイサン
  72. ’------
  73. @FUCALC
  74. IF CHITOI==1 GOTO @CHIFU
  75. FU=20+KOUTSU(0)*4+KOUTSU(1)*8+KOUTSU(2)*2+KOUTSU(3)*4
  76. FU=FU+KANTSU(0)*16+KANTSU(1)*32+KANTSU(2)*8+KANTSU(3)*16
  77. FU=FU+ATAMA*2+MACHI*2+AGRFU(AGARI)
  78. ’ツモヒ゜ンフ ハ 20フ コテイ
  79. IF AGARI==3 THEN FU=20
  80. ’10タンイ ニ キリアケ゛
  81. KFU=FU:FU=FU+9:FU=FU-(FU%10)
  82. GOTO @FUEND
  83. ’チートイツ ハ 25フ コテイ
  84. @CHIFU
  85. FU=25:KFU=FU
  86. @FUEND
  87. ’------
  88. ’キホンテン ケイサン
  89. ’------
  90. ’5ハン イシ゛ョウ ハ マンカ゛ン
  91. IF HAN>4 GOTO @MNGNC
  92. ’チートイ/ツモヒ゜ンフ ノ トキ ハ 2ハン イシ゛ョウ ニ スル
  93. HAN=HAN+((HAN==1)AND((CHITOI==1)OR(AGARI==3)))
  94. ’ハ゛ソ゛ロ ト ハンスウフ゛ン ハ゛イハ゛イ ニ シテイク
  95. BASE=FU*4:FOR I=1 TO HAN:BASE=BASE*2:NEXT
  96. ’キホンテン カ゛ 2000 コエタラ マンカ゛ン
  97. IF BASE>=2000 GOTO @MNGNC
  98. GOTO @MNEND
  99. ’マンカ゛ン トクテン
  100. @MNGNC
  101. BASE=MNGNSCR(HAN)
  102. @MNEND
  103. RETURN
  104. ’------
  105. ’キー ニュウリョク
  106. ’------
  107. @UP
  108. IF CHITOI==0 AND AGARI!=3 THEN CUR=(CUR+12)%13:GOTO@UPEND
  109. IF CUR==0 THEN CUR=10:GOTO@UPEND
  110. IF CUR==10 THEN CUR=1:GOTO@UPEND
  111. CUR=0
  112. @UPEND
  113. GOSUB@DRAW
  114. RETURN
  115. ’----
  116. @DOWN
  117. IF CHITOI==0 AND AGARI!=3 THEN CUR=(CUR+1)%13:GOTO@DOWNEND
  118. IF CUR==1 THEN CUR=10:GOTO@DOWNEND
  119. IF CUR==10 THEN CUR=0:GOTO@DOWNEND
  120. CUR=1
  121. @DOWNEND
  122. GOSUB@DRAW:RETURN
  123. ’----
  124. @LEFT
  125. ON CUR GOSUB @LHAN,@CHI,@L2A3,@L1A3,@L2M3,@L1M3,@L2A4,@L1A4,@L2M4,@L1M4,@LAGR,@JTU,@MCH
  126. GOSUB @DRAW:RETURN
  127. ’----
  128. @RIGHT
  129. ON CUR GOSUB @RHAN,@CHI,@R2A3,@R1A3,@R2M3,@R1M3,@R2A4,@R1A4,@R2M4,@R1M4,@RAGR,@JTU,@MCH
  130. GOSUB @DRAW:RETURN
  131. ’----
  132. @RBTN
  133. CUR=0:HAN=1:AGARI=0:ATAMA=0:MACHI=0:CHITOI=0
  134. FOR I=0 TO 3:KOUTSU(I)=0:KANTSU(I)=0:NEXT
  135. GOSUB @DRAW:RETURN
  136. ’------
  137. ’カク コウモク ノ サユウ ニュウリョク
  138. ’------
  139. ’ハン
  140. @LHAN
  141. HAN=HAN-(HAN>1):RETURN
  142. @RHAN
  143. HAN=HAN+(HAN<15):RETURN
  144. ’チュンシ゛ャン アンコ
  145. @L2A3
  146. KOUTSU(0)=KOUTSU(0)-(KOUTSU(0)>0):RETURN
  147. @R2A3
  148. KOUTSU(0)=KOUTSU(0)+(KOUTSU(0)<4):RETURN
  149. ’ヤオチュウ アンコ
  150. @L1A3
  151. KOUTSU(1)=KOUTSU(1)-(KOUTSU(1)>0):RETURN
  152. @R1A3
  153. KOUTSU(1)=KOUTSU(1)+(KOUTSU(1)<4):RETURN
  154. ’チュンシ゛ャン ミンコ
  155. @L2M3
  156. KOUTSU(2)=KOUTSU(2)-(KOUTSU(2)>0):RETURN
  157. @R2M3
  158. KOUTSU(2)=KOUTSU(2)+(KOUTSU(2)<4):RETURN
  159. ’ヤオチュウ ミンコ
  160. @L1M3
  161. KOUTSU(3)=KOUTSU(3)-(KOUTSU(3)>0):RETURN
  162. @R1M3
  163. KOUTSU(3)=KOUTSU(3)+(KOUTSU(3)<4):RETURN
  164. ’チュンシ゛ャン アンカン
  165. @L2A4
  166. KANTSU(0)=KANTSU(0)-(KANTSU(0)>0):RETURN
  167. @R2A4
  168. KANTSU(0)=KANTSU(0)+(KANTSU(0)<4):RETURN
  169. ’ヤオチュウ アンカン
  170. @L1A4
  171. KANTSU(1)=KANTSU(1)-(KANTSU(1)>0):RETURN
  172. @R1A4
  173. KANTSU(1)=KANTSU(1)+(KANTSU(1)<4):RETURN
  174. ’チュンシ゛ャン ミンカン
  175. @L2M4
  176. KANTSU(2)=KANTSU(2)-(KANTSU(2)>0):RETURN
  177. @R2M4
  178. KANTSU(2)=KANTSU(2)+(KANTSU(2)<4):RETURN
  179. ’ヤオチュウ ミンカン
  180. @L1M4
  181. KANTSU(3)=KANTSU(3)-(KANTSU(3)>0):RETURN
  182. @R1M4
  183. KANTSU(3)=KANTSU(3)+(KANTSU(3)<4):RETURN
  184. ’チートイツ
  185. @CHI
  186. CHITOI=1-CHITOI:AGARI=AGARI AND 2
  187. RETURN
  188. ’アカ゛リカタ
  189. @LAGR
  190. AGARI=(AGARI+2+(CHITOI!=1))%4:RETURN
  191. @RAGR
  192. AGARI=(AGARI+1+(CHITOI==1))%4:RETURN
  193. ’シ゛ャントウ
  194. @JTU
  195. ATAMA=1-ATAMA:RETURN
  196. ’マチカタ
  197. @MCH
  198. MACHI=1-MACHI:RETURN
  199. ’------
  200. ’カ゛メン ヒ゛ョウカ゛
  201. ’------
  202. @DRAW
  203. GOSUB @FUCALC
  204. ’----
  205. COLOR 7-(CUR!=0)*7
  206. LOCATE 3,2:?”ハンスウ”
  207. LOCATE 12,2
  208. IF HAN>=13 GOTO @MNGNN
  209. ?HAN”ハン      ”
  210. GOTO @HANEND
  211. @MNGNN
  212. ?MNGNST$(HAN)”      ”
  213. @HANEND
  214. ’----
  215. COLOR 7-(CUR!=1)*7
  216. LOCATE 3,4:?”チートイツ”
  217. LOCATE 12,4
  218. IF CHITOI==0 GOTO @CNO
  219. ?”YES”:GOTO @CEND
  220. @CNO
  221. ?”NO ”
  222. @CEND
  223. ’----
  224. ’ENABLE ハ チートイ、ツモヒ゜ンフ テ゛ カンケイナイ コウモク ヲ ハイイロ ニ スル
  225. ENABLE=(CHITOI==0)AND(AGARI!=3)
  226. ’----
  227. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=2)*7
  228. LOCATE 3,6:?”2-8アンコ”
  229. LOCATE 12,6:?KOUTSU(0)” x  4 = ”KOUTSU(0)*4”フ ”
  230. ’----
  231. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=3)*7
  232. LOCATE 3,7:?”19@アンコ”
  233. LOCATE 12,7:?KOUTSU(1)” x  8 = ”KOUTSU(1)*8”フ ”
  234. ’----
  235. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=4)*7
  236. LOCATE 3,8:?”2-8ミンコ”
  237. LOCATE 12,8:?KOUTSU(2)” x  2 = ”KOUTSU(2)*2”フ ”
  238. ’----
  239. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=5)*7
  240. LOCATE 3,9:?”19@ミンコ”
  241. LOCATE 12,9:?KOUTSU(3)” x  4 = ”KOUTSU(3)*4”フ ”
  242. ’----
  243. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=6)*7
  244. LOCATE 3,11:?”2-8アンカン”
  245. LOCATE 12,11:?KANTSU(0)” x  4 = ”KANTSU(0)*4”フ ”
  246. ’----
  247. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=7)*7
  248. LOCATE 3,12:?”19@アンカン”
  249. LOCATE 12,12:?KANTSU(1)” x  8 = ”KANTSU(1)*8”フ ”
  250. ’----
  251. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=8)*7
  252. LOCATE 3,13:?”2-8ミンカン”
  253. LOCATE 12,13:?KANTSU(2)” x  2 = ”KANTSU(2)*2”フ ”
  254. ’----
  255. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=9)*7
  256. LOCATE 3,14:?”19@ミンカン”
  257. LOCATE 12,14:?KANTSU(3)” x  4 = ”KANTSU(3)*4”フ ”
  258. ’----
  259. COLOR 7-(CUR!=10)*7
  260. LOCATE 3,16:?”アカ゛リ”
  261. LOCATE 12,16:?AGRSTR$(AGARI)
  262. ’----
  263. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=11)*7
  264. LOCATE 3,17:?”シ゛ャントウ”
  265. LOCATE 12,17:?ATMSTR$(ATAMA)
  266. ’----
  267. COLOR 2:IF ENABLE==1 THEN COLOR 7-(CUR!=12)*7
  268. LOCATE 3,18:?”マチ”
  269. LOCATE 6,18:?MCSTR$(MACHI)
  270. ’----
  271. IF HAN>4 OR BASE >=2000 THEN GOTO @MANGAND
  272. COLOR 0:LOCATE 4,20:?FU”フ(”KFU”フ) ”HAN”ハン  キホンテン ”BASE”テン    ”
  273. GOTO @MANGEND
  274. @MANGAND
  275. COLOR 0:LOCATE 4,20:?MNGNST$(HAN)”                         ”
  276. @MANGEND
  277. ’----
  278. IF AGARI>1 GOTO @TSUMOD
  279. ’ロン アカ゛リ ノ ヒョウシ゛
  280. ’オヤアカ゛リ ハ キホンテンx6(100テン タンイ キリアケ゛)
  281. OYA=BASE*6+90:OYA=OYA-(OYA%100)
  282. LOCATE 4,21:?”オヤ ”OYA”         ”
  283. ’コアカ゛リ ハ キホンテンx4(100テン タンイ キリアケ゛)
  284. KO=BASE*4+90:KO=KO-(KO%100):IF KO<1000 THEN KO=1000
  285. LOCATE 4,22:?”コ  ”KO”         ”
  286. GOTO @SEND
  287. ’ツモ アカ゛リ ノ ヒョウシ゛
  288. @TSUMOD
  289. ’オヤアカ゛リ ハ キホンテンx2(100テン タンイ キリアケ゛)
  290. OYA=BASE*2+90:OYA=OYA-(OYA%100)
  291. LOCATE 4,21:?”オヤ ”OYA”オール   ”
  292. ’コアカ゛リ ノ オヤ ハ オヤアカ゛リ ト オナシ゛
  293. ’オヤアカ゛リ ノ コ ハ キホンテンx1(100テン タンイ キリアケ゛)
  294. KO=BASE+90:KO=KO-(KO%100)
  295. LOCATE 4,22:?”コ  ”OYA” / ”KO”   ”
  296. @SEND
  297. RETURN