|
4 | 4 | } else { |
5 | 5 | pzpr.classmgr.makeCustom(pidlist, classbase); |
6 | 6 | } |
7 | | -})(["kurarin", "tetrochaink"], { |
| 7 | +})(["kurarin", "tetrochaink", "sansaroad"], { |
8 | 8 | //--------------------------------------------------------- |
9 | 9 | // マウス入力系 |
10 | 10 | MouseEvent: { |
|
73 | 73 | var dot = pos.getDot(); |
74 | 74 | if (dot !== null) { |
75 | 75 | var qn = dot.getDot(); |
| 76 | + var max = dot.piece.getmaxnum(); |
76 | 77 | if (this.btn === "left") { |
77 | | - if (qn === 3) { |
| 78 | + if (qn === max) { |
78 | 79 | dot.setDot(0); |
79 | 80 | } else { |
80 | 81 | dot.setDot(qn + 1); |
81 | 82 | } |
82 | 83 | } else if (this.btn === "right") { |
83 | 84 | if (qn === 0) { |
84 | | - dot.setDot(3); |
| 85 | + dot.setDot(max); |
85 | 86 | } else { |
86 | 87 | dot.setDot(qn - 1); |
87 | 88 | } |
|
114 | 115 | this.puzzle.redraw(); |
115 | 116 | } |
116 | 117 | }, |
| 118 | + "MouseEvent@sansaroad": { |
| 119 | + inputModes: { |
| 120 | + edit: ["mark-triangle"], |
| 121 | + play: ["shade", "unshade"] |
| 122 | + }, |
| 123 | + mouseinput_other: function() { |
| 124 | + if (this.inputMode === "mark-triangle") { |
| 125 | + this.inputFixedNumber(1); |
| 126 | + } |
| 127 | + }, |
| 128 | + mouseinputAutoPlay: function() { |
| 129 | + this.inputShade(); |
| 130 | + } |
| 131 | + }, |
117 | 132 |
|
118 | 133 | //--------------------------------------------------------- |
119 | 134 | // キーボード入力系 |
|
130 | 145 | var dot = this.cursor.getDot(); |
131 | 146 | if (dot !== null) { |
132 | 147 | var num = +ca; |
133 | | - if (num >= 0 && num <= 3) { |
| 148 | + if (num >= 0 && num <= dot.piece.getmaxnum()) { |
134 | 149 | dot.setDot(num); |
135 | | - } else if (ca === " " || ca === "-") { |
| 150 | + } else if (ca === " " || ca === "-" || ca === "BS") { |
136 | 151 | dot.setDot(0); |
137 | 152 | } |
138 | 153 | dot.draw(); |
|
161 | 176 | return this.lcnt === 0 && this.qsub === 1; |
162 | 177 | } |
163 | 178 | }, |
| 179 | + "Cell@sansaroad": { |
| 180 | + maxnum: 1, |
| 181 | + allowShade: function() { |
| 182 | + return this.qnum <= 0; |
| 183 | + }, |
| 184 | + posthook: { |
| 185 | + qnum: function(val) { |
| 186 | + if (val >= 0) { |
| 187 | + this.setQans(0); |
| 188 | + } |
| 189 | + } |
| 190 | + } |
| 191 | + }, |
164 | 192 | Cross: { |
165 | 193 | qnum: 0, |
166 | 194 | minnum: 0, |
|
205 | 233 | "AreaShade8Graph@tetrochaink": { |
206 | 234 | enabled: true |
207 | 235 | }, |
| 236 | + "AreaUnshadeGraph@sansaroad": { |
| 237 | + enabled: true |
| 238 | + }, |
208 | 239 |
|
209 | 240 | //--------------------------------------------------------- |
210 | 241 | // 画像表示系 |
|
218 | 249 | this.drawShadedCells(); |
219 | 250 | if (this.pid === "kurarin") { |
220 | 251 | this.drawDotCells(); |
| 252 | + } else if (this.pid === "sansaroad") { |
| 253 | + this.drawQuesMarks(); |
221 | 254 | } |
222 | 255 | this.drawGrid(); |
223 | 256 |
|
|
238 | 271 | }, |
239 | 272 |
|
240 | 273 | getDotFillColor: function(dot) { |
| 274 | + if (this.pid === "sansaroad" && dot.piece.group === "cell") { |
| 275 | + return null; |
| 276 | + } |
| 277 | + |
241 | 278 | switch (dot.getDot()) { |
242 | 279 | case 1: |
243 | 280 | return this.quescolor; |
|
250 | 287 | } |
251 | 288 | }, |
252 | 289 | getDotOutlineColor: function(dot) { |
| 290 | + if (this.pid === "sansaroad" && dot.piece.group === "cell") { |
| 291 | + return null; |
| 292 | + } |
| 293 | + |
253 | 294 | if (dot.getDot() >= 1) { |
254 | 295 | return dot.iserror() ? this.errcolor1 : this.quescolor; |
255 | 296 | } |
|
263 | 304 | "Graphic@tetrochaink": { |
264 | 305 | bgcellcolor_func: "qsub1" |
265 | 306 | }, |
| 307 | + "Graphic@sansaroad": { |
| 308 | + bgcellcolor_func: "qsub1", |
| 309 | + drawQuesMarks: function() { |
| 310 | + var g = this.vinc("cell_mark", "auto", true); |
| 311 | + |
| 312 | + var rsize = this.cw * 0.3, |
| 313 | + tsize = this.cw * 0.26; |
| 314 | + g.lineWidth = 2; |
| 315 | + |
| 316 | + var clist = this.range.cells; |
| 317 | + for (var i = 0; i < clist.length; i++) { |
| 318 | + var cell = clist[i]; |
| 319 | + var px = cell.bx * this.bw, |
| 320 | + py = cell.by * this.bh; |
| 321 | + g.strokeStyle = this.getQuesNumberColor(cell); |
| 322 | + |
| 323 | + g.vid = "c_mk_" + cell.id; |
| 324 | + if (cell.qnum === 1) { |
| 325 | + g.beginPath(); |
| 326 | + g.setOffsetLinePath( |
| 327 | + px, |
| 328 | + py, |
| 329 | + 0, |
| 330 | + tsize, |
| 331 | + -rsize, |
| 332 | + -tsize, |
| 333 | + rsize, |
| 334 | + -tsize, |
| 335 | + true |
| 336 | + ); |
| 337 | + g.stroke(); |
| 338 | + } else { |
| 339 | + g.vhide(); |
| 340 | + } |
| 341 | + } |
| 342 | + } |
| 343 | + }, |
266 | 344 |
|
267 | 345 | //--------------------------------------------------------- |
268 | 346 | // URLエンコード/デコード処理 |
|
349 | 427 | continue; |
350 | 428 | } |
351 | 429 |
|
| 430 | + if (dot.piece.group === "cell" && this.pid === "sansaroad") { |
| 431 | + continue; |
| 432 | + } |
| 433 | + |
352 | 434 | var cells = dot.piece.dotCells(); |
353 | 435 | var shaded = cells.filter(function(cell) { |
354 | 436 | return cell.isShade(); |
|
456 | 538 | } |
457 | 539 | } |
458 | 540 | }, |
| 541 | + "AnsCheck@sansaroad": { |
| 542 | + checklist: [ |
| 543 | + "checkConnectUnshade", |
| 544 | + "checkTriangleUnder", |
| 545 | + "checkEmptyUnder", |
| 546 | + "checkShadeWhite", |
| 547 | + "checkShadeBlack", |
| 548 | + "checkShadeGray", |
| 549 | + "checkTriangleOver", |
| 550 | + "checkEmptyOver", |
| 551 | + "check2x2UnshadeCell++", |
| 552 | + "doneShadingDecided" |
| 553 | + ], |
| 554 | + checkTriangleUnder: function() { |
| 555 | + this.checkAdjacency(1, -1, "cuLt3"); |
| 556 | + }, |
| 557 | + checkEmptyUnder: function() { |
| 558 | + this.checkAdjacency(0, -1, "cuLt2"); |
| 559 | + }, |
| 560 | + checkTriangleOver: function() { |
| 561 | + this.checkAdjacency(1, +1, "cuGt3"); |
| 562 | + }, |
| 563 | + checkEmptyOver: function() { |
| 564 | + this.checkAdjacency(0, +1, "cuGt2"); |
| 565 | + }, |
| 566 | + |
| 567 | + checkAdjacency: function(num, flag, code) { |
| 568 | + for (var c = 0; c < this.board.cell.length; c++) { |
| 569 | + var cell = this.board.cell[c]; |
| 570 | + if (cell.isShade() || cell.qnum !== num) { |
| 571 | + continue; |
| 572 | + } |
| 573 | + var count = cell.countDir4Cell(function(cell2) { |
| 574 | + return cell2.isUnshade(); |
| 575 | + }); |
| 576 | + if ((flag < 0 && count >= 2 + num) || (flag > 0 && count <= 2 + num)) { |
| 577 | + continue; |
| 578 | + } |
| 579 | + |
| 580 | + this.failcode.add(code); |
| 581 | + if (this.checkOnly) { |
| 582 | + break; |
| 583 | + } |
| 584 | + cell.seterr(1); |
| 585 | + } |
| 586 | + } |
| 587 | + }, |
459 | 588 | FailCode: { |
460 | 589 | ceEmpty: "ceEmpty.yajilin" |
461 | 590 | } |
|
0 commit comments