|
1 | | -// |
2 | | -// パズル固有スクリプト部 あみぼー版 amibo.js |
3 | | -// |
4 | 1 | (function(pidlist, classbase) { |
5 | 2 | if (typeof module === "object" && module.exports) { |
6 | 3 | module.exports = [pidlist, classbase]; |
7 | 4 | } else { |
8 | 5 | pzpr.classmgr.makeCustom(pidlist, classbase); |
9 | 6 | } |
10 | | -})(["lapaz"], { |
| 7 | +})(["lapaz", "trizone"], { |
11 | 8 | //--------------------------------------------------------- |
12 | 9 | // マウス入力系 |
13 | 10 | MouseEvent: { |
|
26 | 23 | this.inputdragcross(); |
27 | 24 | } |
28 | 25 | } else if (this.mouseend && this.notInputted()) { |
29 | | - this.inputcell(); |
| 26 | + if ( |
| 27 | + this.puzzle.getConfig("patchwork_leftaux") && |
| 28 | + !this.getpos(0.25).oncell() |
| 29 | + ) { |
| 30 | + var border = this.getborder(); |
| 31 | + if (!border.isnull) { |
| 32 | + border.setQsub(border.qsub === 1 ? 0 : 1); |
| 33 | + border.draw(); |
| 34 | + } |
| 35 | + } else { |
| 36 | + this.inputcell(); |
| 37 | + } |
30 | 38 | } |
31 | 39 | } else if (this.puzzle.editmode) { |
32 | 40 | if (this.mousestart) { |
|
58 | 66 | } |
59 | 67 | } |
60 | 68 | }, |
| 69 | + "MouseEvent@trizone": { |
| 70 | + inputModes: { |
| 71 | + edit: ["number", "empty", "clear"], |
| 72 | + play: ["border", "shade", "unshade", "subline"] |
| 73 | + } |
| 74 | + }, |
61 | 75 |
|
62 | 76 | //--------------------------------------------------------- |
63 | 77 | // キーボード入力系 |
|
110 | 124 | return this.reldirbd(this.getdir(cell2, 2), 1); |
111 | 125 | } |
112 | 126 | }, |
| 127 | + "Cell@trizone": { |
| 128 | + maxnum: 6 |
| 129 | + }, |
113 | 130 | Border: { |
114 | 131 | isGrid: function() { |
115 | 132 | return ( |
|
157 | 174 | return !border.isBorder(); |
158 | 175 | } |
159 | 176 | }, |
| 177 | + "AreaRoomGraph@trizone": { |
| 178 | + setExtraData: function(component) { |
| 179 | + component.clist = new this.klass.CellList(component.getnodeobjs()); |
| 180 | + |
| 181 | + var set = new Set(); |
| 182 | + |
| 183 | + component.clist.each(function(cell) { |
| 184 | + for (var dir in cell.adjacent) { |
| 185 | + var adj = cell.adjacent[dir]; |
| 186 | + if (!adj.isnull && adj.room !== component) { |
| 187 | + set.add(adj); |
| 188 | + } |
| 189 | + } |
| 190 | + }); |
| 191 | + component.adjclist = new this.klass.CellList(Array.from(set)); |
| 192 | + } |
| 193 | + }, |
160 | 194 | //--------------------------------------------------------- |
161 | 195 | // 画像表示系 |
162 | 196 | Graphic: { |
|
172 | 206 |
|
173 | 207 | this.drawValidDashedGrid(); |
174 | 208 | this.drawBorders(); |
| 209 | + this.drawBorderQsubs(); |
175 | 210 |
|
176 | 211 | this.drawQuesNumbers(); |
177 | 212 |
|
|
269 | 304 | // 正解判定処理実行部 |
270 | 305 | AnsCheck: { |
271 | 306 | checklist: [ |
272 | | - "checkNumberRegionSize", |
| 307 | + "checkNumberRegionSize@lapaz", |
273 | 308 | "check1x1Shaded", |
274 | 309 | "checkAdjacentShadeCell", |
275 | | - "checkShadeCounts", |
| 310 | + "checkLessThreeCells@trizone", |
| 311 | + "checkShadeCounts@lapaz", |
| 312 | + "checkDoubleNumber@trizone", |
| 313 | + "checkNoNumber@trizone", |
| 314 | + "checkShadeAdjacentCount@trizone", |
276 | 315 | "checkRegionSize" |
277 | 316 | ], |
278 | 317 |
|
|
290 | 329 |
|
291 | 330 | checkRegionSize: function() { |
292 | 331 | var areas = this.board.roommgr.components; |
| 332 | + var max = this.pid === "trizone" ? 3 : 2; |
293 | 333 | for (var id = 0; id < areas.length; id++) { |
294 | 334 | var area = areas[id]; |
295 | 335 |
|
296 | | - if (area.clist.length <= 2) { |
| 336 | + if (area.clist.length <= max) { |
297 | 337 | continue; |
298 | 338 | } |
299 | 339 |
|
300 | | - this.failcode.add("bkSizeGt2"); |
| 340 | + this.failcode.add(max === 3 ? "bkSizeGt3" : "bkSizeGt2"); |
301 | 341 | if (this.checkOnly) { |
302 | 342 | break; |
303 | 343 | } |
304 | 344 | area.clist.seterr(1); |
305 | 345 | } |
306 | | - }, |
307 | | - |
| 346 | + } |
| 347 | + }, |
| 348 | + "AnsCheck@lapaz": { |
308 | 349 | checkShadeCounts: function() { |
309 | 350 | this.checkRowsColsPartly( |
310 | 351 | this.isRowCount, |
|
345 | 386 | } |
346 | 387 | return true; |
347 | 388 | } |
| 389 | + }, |
| 390 | + "AnsCheck@trizone": { |
| 391 | + checkNoNumber: function() { |
| 392 | + var rooms = this.board.roommgr.components; |
| 393 | + for (var r = 0; r < rooms.length; r++) { |
| 394 | + var room = rooms[r], |
| 395 | + num = room.clist.getQnumCell().getNum(); |
| 396 | + if (num !== -1 || room.clist.length !== 3) { |
| 397 | + continue; |
| 398 | + } |
| 399 | + |
| 400 | + this.failcode.add("bkNoNum"); |
| 401 | + if (this.checkOnly) { |
| 402 | + return; |
| 403 | + } |
| 404 | + room.clist.seterr(1); |
| 405 | + } |
| 406 | + }, |
| 407 | + checkDoubleNumber: function() { |
| 408 | + var rooms = this.board.roommgr.components; |
| 409 | + for (var r = 0; r < rooms.length; r++) { |
| 410 | + var room = rooms[r]; |
| 411 | + if (room.clist.length !== 3) { |
| 412 | + continue; |
| 413 | + } |
| 414 | + var num = room.clist.filter(function(cell) { |
| 415 | + return cell.isNum(); |
| 416 | + }).length; |
| 417 | + if (num < 2) { |
| 418 | + continue; |
| 419 | + } |
| 420 | + |
| 421 | + this.failcode.add("bkNumGe2"); |
| 422 | + if (this.checkOnly) { |
| 423 | + return; |
| 424 | + } |
| 425 | + room.clist.seterr(1); |
| 426 | + } |
| 427 | + }, |
| 428 | + checkLessThreeCells: function() { |
| 429 | + this.checkAllArea( |
| 430 | + this.board.roommgr, |
| 431 | + function(w, h, a, n) { |
| 432 | + return a !== 2; |
| 433 | + }, |
| 434 | + "bkSizeLt3" |
| 435 | + ); |
| 436 | + }, |
| 437 | + checkShadeAdjacentCount: function() { |
| 438 | + var checkSingleError = !this.puzzle.getConfig("multierr"); |
| 439 | + var rooms = this.board.roommgr.components; |
| 440 | + for (var r = 0; r < rooms.length; r++) { |
| 441 | + var room = rooms[r], |
| 442 | + num = room.clist.getQnumCell().getNum(); |
| 443 | + if (num < 0 || room.clist.length !== 3) { |
| 444 | + continue; |
| 445 | + } |
| 446 | + |
| 447 | + var actual = room.adjclist.filter(function(cell) { |
| 448 | + return cell.isShade(); |
| 449 | + }); |
| 450 | + |
| 451 | + if (actual.length !== num) { |
| 452 | + this.failcode.add("nmShadeNe"); |
| 453 | + if (this.checkOnly) { |
| 454 | + return; |
| 455 | + } |
| 456 | + room.clist.seterr(1); |
| 457 | + actual.seterr(1); |
| 458 | + if (checkSingleError) { |
| 459 | + return; |
| 460 | + } |
| 461 | + } |
| 462 | + } |
| 463 | + } |
348 | 464 | } |
349 | 465 | }); |
0 commit comments