|
10 | 10 | })(["jatahoku"], { |
11 | 11 | MouseEvent: { |
12 | 12 | inputModes: { |
13 | | - edit: ["number", "tapa", "border", "clear"], |
| 13 | + edit: ["number", "border", "clear"], |
14 | 14 | play: ["number", "subcircle", "subcross", "clear"] |
15 | 15 | }, |
16 | 16 |
|
17 | | - mouseinput_other: function() { |
18 | | - if (this.inputMode === "tapa" && this.mousestart) { |
19 | | - this.inputTapaClue(); |
20 | | - } |
21 | | - }, |
22 | 17 | mouseinput_number: function() { |
23 | 18 | if (!this.mousestart) { |
24 | 19 | return; |
|
88 | 83 | if (cell !== this.cursor.getc()) { |
89 | 84 | this.setcursor(cell); |
90 | 85 | } else { |
91 | | - var states = cell.qnum_states, |
92 | | - state = 0; |
93 | | - for (var i = 0; i < states.length; i++) { |
94 | | - if (this.puzzle.pzpr.util.sameArray(cell.qnums, states[i])) { |
95 | | - state = i; |
96 | | - break; |
97 | | - } |
98 | | - } |
99 | | - state = |
100 | | - this.btn === "right" |
101 | | - ? (state + states.length - 1) % states.length |
102 | | - : (state + 1) % states.length; |
103 | | - cell.setQnum(-1); |
104 | | - cell.setQnums(states[state]); |
105 | | - cell.setAnum(-1); |
106 | | - cell.setQsub(0); |
107 | | - cell.clrSnum(); |
108 | | - cell.draw(); |
| 86 | + this.inputqnum_tapa_main(cell); |
109 | 87 | } |
110 | 88 | this.mouseCell = cell; |
111 | 89 | }, |
| 90 | + inputqnum_tapa_main: function(cell) { |
| 91 | + var states = cell.qnum_states, |
| 92 | + state = 0; |
| 93 | + for (var i = 0; i < states.length; i++) { |
| 94 | + if (this.puzzle.pzpr.util.sameArray(cell.qnums, states[i])) { |
| 95 | + state = i; |
| 96 | + break; |
| 97 | + } |
| 98 | + } |
| 99 | + |
| 100 | + var isinc = |
| 101 | + this.inputMode === "number" || |
| 102 | + (this.inputMode === "auto" && this.btn === "left"); |
| 103 | + if (isinc) { |
| 104 | + state = state < states.length - 1 ? state + 1 : 0; |
| 105 | + } else { |
| 106 | + state = state > 0 ? state - 1 : states.length - 1; |
| 107 | + } |
| 108 | + cell.setQnum(-1); |
| 109 | + cell.setQnums(states[state]); |
| 110 | + cell.setAnum(-1); |
| 111 | + cell.setQans(0); |
| 112 | + cell.setQsub(0); |
| 113 | + cell.clrSnum(); |
| 114 | + cell.draw(); |
| 115 | + }, |
112 | 116 |
|
113 | 117 | inputqnum_excell: function() { |
114 | 118 | var indicator = this.board.indicator, |
|
219 | 223 | this.key_inputqnums(ca); |
220 | 224 | if (cell.qnums.length > 0) { |
221 | 225 | cell.setQnum(-1); |
| 226 | + cell.setAnum(-1); |
| 227 | + cell.clrSnum(); |
222 | 228 | } |
223 | 229 | }, |
224 | 230 | key_inputqnum_excell_jatahoku: function(excell, ca) { |
|
235 | 241 | this.key_inputqnum_main(excell, ca); |
236 | 242 | } |
237 | 243 | }, |
238 | | - key_inputqnums: function(ca) { |
239 | | - var cell = this.cursor.getc(), |
240 | | - nums = cell.qnums, |
241 | | - val = []; |
242 | | - if (("0" <= ca && ca <= "8") || ca === "-") { |
243 | | - var num = ca === "-" ? -2 : +ca; |
244 | | - if (this.prev === cell) { |
245 | | - val = nums.slice(); |
246 | | - } |
247 | | - val.push(num); |
248 | | - if (!cell.isValidQnums(val)) { |
249 | | - val = [num]; |
250 | | - } |
251 | | - } else if (ca === "BS") { |
252 | | - val = nums.slice(0, -1); |
253 | | - } else if (ca !== " ") { |
254 | | - return; |
255 | | - } |
256 | | - cell.setQnums(val); |
257 | | - cell.setQnum(-1); |
258 | | - cell.setQans(0); |
259 | | - cell.setQsub(0); |
260 | | - cell.clrSnum(); |
261 | | - this.prev = cell; |
262 | | - cell.draw(); |
263 | | - }, |
264 | 244 | key_inputqnum_indicator: function(ca) { |
265 | 245 | var bd = this.board, |
266 | 246 | val = this.getNewNumber(bd.indicator, ca, bd.indicator.count); |
|
298 | 278 | enableSubNumberArray: true, |
299 | 279 | numberWithMB: true, |
300 | 280 | disInputHatena: true, |
301 | | - minnum: 1, |
| 281 | + minnum: function() { |
| 282 | + return this.puzzle.editmode ? 0 : 1; |
| 283 | + }, |
302 | 284 | maxnum: function() { |
303 | | - return this.board.indicator.count; |
| 285 | + return this.puzzle.editmode ? 8 : this.board.indicator.count; |
304 | 286 | }, |
305 | 287 | qnum_states: (function() { |
306 | 288 | var states = [[], [-2], [0], [1], [2], [3], [4], [5], [6], [7], [8]], |
307 | | - sum; |
308 | | - for (var n1 = 1; n1 <= 5; n1++) { |
309 | | - for (var n2 = n1; n2 <= 5; n2++) { |
310 | | - sum = n1 + n2; |
| 289 | + sum = 0; |
| 290 | + for (var n1 = 0; n1 <= 5; n1++) { |
| 291 | + for (var n2 = 0; n2 <= 5; n2++) { |
| 292 | + sum = (n1 > 0 ? n1 : 1) + (n2 > 0 ? n2 : 1); |
311 | 293 | if (sum <= 6) { |
312 | | - states.push([n1, n2]); |
| 294 | + states.push([n1 > 0 ? n1 : -2, n2 > 0 ? n2 : -2]); |
313 | 295 | } |
314 | 296 | } |
315 | 297 | } |
316 | | - for (var a = 1; a <= 3; a++) { |
317 | | - for (var b = a; b <= 3; b++) { |
318 | | - for (var c = b; c <= 3; c++) { |
319 | | - sum = a + b + c; |
| 298 | + for (var n1 = 0; n1 <= 3; n1++) { |
| 299 | + for (var n2 = 0; n2 <= 3; n2++) { |
| 300 | + for (var n3 = 0; n3 <= 3; n3++) { |
| 301 | + sum = (n1 > 0 ? n1 : 1) + (n2 > 0 ? n2 : 1) + (n3 > 0 ? n3 : 1); |
320 | 302 | if (sum <= 5) { |
321 | | - states.push([a, b, c]); |
| 303 | + states.push([ |
| 304 | + n1 > 0 ? n1 : -2, |
| 305 | + n2 > 0 ? n2 : -2, |
| 306 | + n3 > 0 ? n3 : -2 |
| 307 | + ]); |
322 | 308 | } |
323 | 309 | } |
324 | 310 | } |
|
327 | 313 | return states; |
328 | 314 | })(), |
329 | 315 | isValidQnums: function(val) { |
330 | | - if (val.length <= 1) { |
331 | | - return ( |
332 | | - val.length === 0 || val[0] === -2 || (val[0] >= 0 && val[0] <= 8) |
333 | | - ); |
| 316 | + if (val.length === 0) { |
| 317 | + return true; |
334 | 318 | } |
| 319 | + if (val.length === 1) { |
| 320 | + return val[0] <= 8; |
| 321 | + } |
| 322 | + |
335 | 323 | var sum = 0; |
336 | 324 | for (var i = 0; i < val.length; i++) { |
337 | | - if (val[i] === 0 || val[i] < -2) { |
| 325 | + if (val[i] === 0) { |
338 | 326 | return false; |
339 | 327 | } |
340 | | - sum += val[i] < 0 ? 1 : val[i]; |
| 328 | + sum += val[i] >= 0 ? val[i] : 1; |
341 | 329 | } |
342 | 330 | return val.length + sum <= 8; |
343 | 331 | }, |
|
534 | 522 | }, |
535 | 523 |
|
536 | 524 | BoardExec: { |
537 | | - allowedOperations: function() { |
538 | | - return 0; |
| 525 | + allowedOperations: function(isplaymode) { |
| 526 | + return isplaymode ? 0 : this.FLIPX | this.FLIPY; |
| 527 | + }, |
| 528 | + adjustBoardData: function(key, d) { |
| 529 | + this.adjustExCellTopLeft_1(key, d); |
| 530 | + var bd = this.board; |
| 531 | + this.jatahokuBottom = []; |
| 532 | + this.jatahokuRight = []; |
| 533 | + for (var bx = 1; bx < bd.cols * 2; bx += 2) { |
| 534 | + this.jatahokuBottom.push(bd.getex(bx, bd.rows * 2 + 1).qnum); |
| 535 | + } |
| 536 | + for (var by = 1; by < bd.rows * 2; by += 2) { |
| 537 | + this.jatahokuRight.push(bd.getex(bd.cols * 2 + 1, by).qnum); |
| 538 | + } |
539 | 539 | }, |
540 | | - adjustBoardData2: function() { |
| 540 | + adjustBoardData2: function(key, d) { |
| 541 | + this.adjustExCellTopLeft_2(key, d, true); |
| 542 | + var bd = this.board; |
| 543 | + if (key === this.FLIPY) { |
| 544 | + var rowmin = bd.excellRows(bd.cols, bd.rows) * -2 + 1; |
| 545 | + for (var bx = 1; bx < bd.cols * 2; bx += 2) { |
| 546 | + var top = []; |
| 547 | + for (var topby = rowmin; topby <= -1; topby += 2) { |
| 548 | + top.push(bd.getex(bx, topby)); |
| 549 | + } |
| 550 | + this.reverseJatahokuClues(top); |
| 551 | + } |
| 552 | + for (var by = 1, row = 0; by < bd.rows * 2; by += 2, row++) { |
| 553 | + bd.getex(bd.cols * 2 + 1, by).setQnum( |
| 554 | + this.jatahokuRight[bd.rows - row - 1] |
| 555 | + ); |
| 556 | + } |
| 557 | + } else if (key === this.FLIPX) { |
| 558 | + var colmin = bd.excellCols(bd.cols, bd.rows) * -2 + 1; |
| 559 | + for (var by = 1; by < bd.rows * 2; by += 2) { |
| 560 | + var left = []; |
| 561 | + for (var leftbx = colmin; leftbx <= -1; leftbx += 2) { |
| 562 | + left.push(bd.getex(leftbx, by)); |
| 563 | + } |
| 564 | + this.reverseJatahokuClues(left); |
| 565 | + } |
| 566 | + for (var bx = 1, col = 0; bx < bd.cols * 2; bx += 2, col++) { |
| 567 | + bd.getex(bx, bd.rows * 2 + 1).setQnum( |
| 568 | + this.jatahokuBottom[bd.cols - col - 1] |
| 569 | + ); |
| 570 | + } |
| 571 | + } |
541 | 572 | this.board.indicator.init(); |
| 573 | + }, |
| 574 | + reverseJatahokuClues: function(excells) { |
| 575 | + var clues = excells |
| 576 | + .filter(function(excell) { |
| 577 | + return excell.qnum !== -1; |
| 578 | + }) |
| 579 | + .map(function(excell) { |
| 580 | + return excell.qnum; |
| 581 | + }) |
| 582 | + .reverse(); |
| 583 | + for (var i = 0, clue = 0; i < excells.length; i++) { |
| 584 | + if (excells[i].qnum !== -1) { |
| 585 | + excells[i].setQnum(clues[clue++]); |
| 586 | + } |
| 587 | + } |
542 | 588 | } |
543 | 589 | }, |
544 | 590 |
|
|
0 commit comments