|
7 | 7 | } else { |
8 | 8 | pzpr.classmgr.makeCustom(pidlist, classbase); |
9 | 9 | } |
10 | | -})(["nawabari", "fourcells", "fivecells", "heteromino", "subomino"], { |
| 10 | +})(["nawabari", "fourcells", "fivecells", "heteromino", "subomino", "narrow"], { |
11 | 11 | //--------------------------------------------------------- |
12 | 12 | // マウス入力系 |
13 | 13 | MouseEvent: { |
|
29 | 29 | this.inputempty(); |
30 | 30 | } |
31 | 31 | }, |
32 | | - "MouseEvent@fourcells,fivecells,subomino": { |
| 32 | + "MouseEvent@fourcells,fivecells,subomino,narrow": { |
33 | 33 | inputModes: { |
34 | 34 | edit: ["empty", "number", "clear"], |
35 | 35 | play: ["border", "subline"] |
|
90 | 90 | maxnum: 3, |
91 | 91 | minnum: 0 |
92 | 92 | }, |
| 93 | + "Cell@narrow": { |
| 94 | + maxnum: 4, |
| 95 | + disInputHatena: true |
| 96 | + }, |
93 | 97 | "Cell@subomino": { |
94 | 98 | maxnum: function() { |
95 | 99 | return this.board.cols * this.board.rows; |
|
187 | 191 | }); |
188 | 192 | } |
189 | 193 | }, |
| 194 | + "AreaRoomGraph@narrow": { |
| 195 | + setExtraData: function(component) { |
| 196 | + var clist = (component.clist = new this.klass.CellList( |
| 197 | + component.getnodeobjs() |
| 198 | + )); |
| 199 | + var numlist = clist.filter(function(cell) { |
| 200 | + return cell.isNum(); |
| 201 | + }); |
| 202 | + component.num = numlist.length === 1 ? numlist[0].getNum() : -1; |
| 203 | + } |
| 204 | + }, |
190 | 205 |
|
191 | 206 | //--------------------------------------------------------- |
192 | 207 | // 画像表示系 |
|
265 | 280 | } |
266 | 281 | }, |
267 | 282 |
|
| 283 | + "Graphic@narrow": { |
| 284 | + drawQuesNumbers: function() { |
| 285 | + var g = this.vinc("cell_mark", "auto"); |
| 286 | + |
| 287 | + g.lineWidth = Math.max(this.cw / 18, 2); |
| 288 | + var rsize = this.cw * 0.3; |
| 289 | + var clist = this.range.cells; |
| 290 | + for (var i = 0; i < clist.length; i++) { |
| 291 | + var cell = clist[i]; |
| 292 | + |
| 293 | + g.vid = "c_mk_" + cell.id; |
| 294 | + g.strokeStyle = this.getQuesNumberColor(cell); |
| 295 | + var px = cell.bx * this.bw, |
| 296 | + py = cell.by * this.bh; |
| 297 | + switch (cell.getNum()) { |
| 298 | + case 1: |
| 299 | + g.strokeCircle(px, py, rsize); |
| 300 | + break; |
| 301 | + case 2: |
| 302 | + g.beginPath(); |
| 303 | + g.moveTo(px - rsize, py); |
| 304 | + g.lineTo(px + rsize, py); |
| 305 | + g.moveTo(px, py - rsize); |
| 306 | + g.lineTo(px, py + rsize); |
| 307 | + g.stroke(); |
| 308 | + break; |
| 309 | + case 3: |
| 310 | + g.strokeCross(px, py, rsize); |
| 311 | + break; |
| 312 | + case 4: |
| 313 | + g.beginPath(); |
| 314 | + g.setOffsetLinePath( |
| 315 | + px, |
| 316 | + py, |
| 317 | + 0, |
| 318 | + -rsize, |
| 319 | + rsize, |
| 320 | + 0, |
| 321 | + 0, |
| 322 | + rsize, |
| 323 | + -rsize, |
| 324 | + 0, |
| 325 | + true |
| 326 | + ); |
| 327 | + g.stroke(); |
| 328 | + break; |
| 329 | + default: |
| 330 | + g.vhide(); |
| 331 | + break; |
| 332 | + } |
| 333 | + } |
| 334 | + } |
| 335 | + }, |
| 336 | + |
268 | 337 | //--------------------------------------------------------- |
269 | 338 | // URLエンコード/デコード処理 |
270 | 339 | Encode: { |
|
341 | 410 | this.outbstr += cm; |
342 | 411 | } |
343 | 412 | }, |
344 | | - "Encode@subomino": { |
| 413 | + "Encode@subomino,narrow": { |
345 | 414 | decodePzpr: function(type) { |
346 | 415 | this.decodeNumber16(); |
347 | 416 | this.decodeEmpty(); |
|
395 | 464 | "checkTouchDifferent@heteromino", |
396 | 465 | "checkLessThreeCells@heteromino", |
397 | 466 | "checkRoomRect@nawabari", |
398 | | - "checkNoNumber@nawabari", |
399 | | - "checkDoubleNumber@nawabari", |
| 467 | + "checkRoom2x2@narrow", |
| 468 | + "checkRoomIdentical@narrow", |
| 469 | + "checkNoNumber@nawabari,narrow", |
| 470 | + "checkRoomNotRect@narrow", |
| 471 | + "checkDoubleNumber@nawabari,narrow", |
400 | 472 | "checkOverFourCells@fourcells", |
401 | 473 | "checkOverFiveCells@fivecells", |
402 | | - "checkdir4BorderAns@!heteromino", |
| 474 | + "checkdir4BorderAns@!heteromino,!narrow", |
403 | 475 | "checkBorderDeadend+", |
404 | 476 | "checkLessFourCells@fourcells", |
405 | 477 | "checkLessFiveCells@fivecells" |
|
570 | 642 | area.clist.seterr(1); |
571 | 643 | } |
572 | 644 | } |
| 645 | + }, |
| 646 | + |
| 647 | + "AnsCheck@narrow": { |
| 648 | + checkRoomNotRect: function() { |
| 649 | + this.checkAllArea( |
| 650 | + this.board.roommgr, |
| 651 | + function(w, h, a, n) { |
| 652 | + return w * h !== a; |
| 653 | + }, |
| 654 | + "bkRect" |
| 655 | + ); |
| 656 | + }, |
| 657 | + |
| 658 | + checkRoom2x2: function() { |
| 659 | + var bd = this.board; |
| 660 | + allloop: for (var c = 0; c < bd.cell.length; c++) { |
| 661 | + var cell = bd.cell[c], |
| 662 | + bx = cell.bx, |
| 663 | + by = cell.by; |
| 664 | + if (bx >= bd.maxbx - 1 || by >= bd.maxby - 1) { |
| 665 | + continue; |
| 666 | + } |
| 667 | + |
| 668 | + var clist = bd.cellinside(bx, by, bx + 2, by + 2); |
| 669 | + if (!clist[0].room || clist[0].room.num <= 0) { |
| 670 | + continue; |
| 671 | + } |
| 672 | + for (var i = 1; i < 4; i++) { |
| 673 | + if (!clist[i].room || clist[0].room.num !== clist[i].room.num) { |
| 674 | + continue allloop; |
| 675 | + } |
| 676 | + } |
| 677 | + |
| 678 | + this.failcode.add("nmSame2x2"); |
| 679 | + if (this.checkOnly) { |
| 680 | + break; |
| 681 | + } |
| 682 | + clist.seterr(1); |
| 683 | + } |
| 684 | + }, |
| 685 | + |
| 686 | + checkRoomIdentical: function() { |
| 687 | + var found = {}; |
| 688 | + |
| 689 | + var rooms = this.board.roommgr.components; |
| 690 | + for (var i = 0; i < rooms.length; i++) { |
| 691 | + var room = rooms[i]; |
| 692 | + if (room.num <= 0) { |
| 693 | + continue; |
| 694 | + } |
| 695 | + var tag = room.num + ""; |
| 696 | + |
| 697 | + if (!(tag in found)) { |
| 698 | + found[tag] = {}; |
| 699 | + } |
| 700 | + |
| 701 | + var shape = room.clist.getBlockShapes().canon; |
| 702 | + if (!(shape in found[tag])) { |
| 703 | + found[tag][shape] = room; |
| 704 | + } else { |
| 705 | + this.failcode.add("bkSameShape"); |
| 706 | + if (this.checkOnly) { |
| 707 | + return; |
| 708 | + } |
| 709 | + found[tag][shape].clist.seterr(1); |
| 710 | + room.clist.seterr(1); |
| 711 | + } |
| 712 | + } |
| 713 | + } |
573 | 714 | } |
574 | 715 | }); |
0 commit comments