Skip to content

Commit 2386ee3

Browse files
committed
反転モードの処理修正&不要な入力モードを削除
1 parent 40afb60 commit 2386ee3

5 files changed

Lines changed: 181 additions & 75 deletions

File tree

src-ui/p.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ <h2 id="title2">読み込み中です...</h2>
135135
<div class="child" data-value="unshade">__inputmode.unshade__</div>
136136
<div class="child" data-value="number">__inputmode.number__</div>
137137
<div class="child" data-value="number-">__inputmode.number-__</div>
138-
<div class="child" data-value="tapa">__inputmode.tapa__</div>
139138
<div class="child" data-value="letter">__inputmode.letter__</div>
140139
<div class="child" data-value="letter-">__inputmode.letter-__</div>
141140
<div class="child" data-value="quesmark">__inputmode.quesmark__</div>

src-ui/res/p.en.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@
8484
"inputmode.unshade": "Unshaded cells",
8585
"inputmode.number": "Number",
8686
"inputmode.number-": "Number (rev)",
87-
"inputmode.tapa": "Gray clues",
8887
"inputmode.letter": "Alphabet",
8988
"inputmode.letter-": "Alphabet (rev)",
9089
"inputmode.quesmark": "Question marks",

src-ui/res/p.ja.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@
7878
"inputmode.unshade": "白マス",
7979
"inputmode.number": "数字",
8080
"inputmode.number-": "数字(逆順)",
81-
"inputmode.tapa": "グレーヒント",
8281
"inputmode.letter": "アルファベット",
8382
"inputmode.letter-": "アルファベット(逆順)",
8483
"inputmode.quesmark": "盤面記号",

src/variety/jatahoku.js

Lines changed: 117 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,10 @@
1010
})(["jatahoku"], {
1111
MouseEvent: {
1212
inputModes: {
13-
edit: ["number", "tapa", "border", "clear"],
13+
edit: ["number", "border", "clear"],
1414
play: ["number", "subcircle", "subcross", "clear"]
1515
},
1616

17-
mouseinput_other: function() {
18-
if (this.inputMode === "tapa" && this.mousestart) {
19-
this.inputTapaClue();
20-
}
21-
},
2217
mouseinput_number: function() {
2318
if (!this.mousestart) {
2419
return;
@@ -88,27 +83,36 @@
8883
if (cell !== this.cursor.getc()) {
8984
this.setcursor(cell);
9085
} 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);
10987
}
11088
this.mouseCell = cell;
11189
},
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+
},
112116

113117
inputqnum_excell: function() {
114118
var indicator = this.board.indicator,
@@ -219,6 +223,8 @@
219223
this.key_inputqnums(ca);
220224
if (cell.qnums.length > 0) {
221225
cell.setQnum(-1);
226+
cell.setAnum(-1);
227+
cell.clrSnum();
222228
}
223229
},
224230
key_inputqnum_excell_jatahoku: function(excell, ca) {
@@ -235,32 +241,6 @@
235241
this.key_inputqnum_main(excell, ca);
236242
}
237243
},
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-
},
264244
key_inputqnum_indicator: function(ca) {
265245
var bd = this.board,
266246
val = this.getNewNumber(bd.indicator, ca, bd.indicator.count);
@@ -298,27 +278,33 @@
298278
enableSubNumberArray: true,
299279
numberWithMB: true,
300280
disInputHatena: true,
301-
minnum: 1,
281+
minnum: function() {
282+
return this.puzzle.editmode ? 0 : 1;
283+
},
302284
maxnum: function() {
303-
return this.board.indicator.count;
285+
return this.puzzle.editmode ? 8 : this.board.indicator.count;
304286
},
305287
qnum_states: (function() {
306288
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);
311293
if (sum <= 6) {
312-
states.push([n1, n2]);
294+
states.push([n1 > 0 ? n1 : -2, n2 > 0 ? n2 : -2]);
313295
}
314296
}
315297
}
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);
320302
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+
]);
322308
}
323309
}
324310
}
@@ -327,17 +313,19 @@
327313
return states;
328314
})(),
329315
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;
334318
}
319+
if (val.length === 1) {
320+
return val[0] <= 8;
321+
}
322+
335323
var sum = 0;
336324
for (var i = 0; i < val.length; i++) {
337-
if (val[i] === 0 || val[i] < -2) {
325+
if (val[i] === 0) {
338326
return false;
339327
}
340-
sum += val[i] < 0 ? 1 : val[i];
328+
sum += val[i] >= 0 ? val[i] : 1;
341329
}
342330
return val.length + sum <= 8;
343331
},
@@ -534,11 +522,69 @@
534522
},
535523

536524
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+
}
539539
},
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+
}
541572
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+
}
542588
}
543589
},
544590

test/variety/jatahoku_test.js

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ describe("Variety:jatahoku", function() {
9292
puzzle.board.indicator.count = 4;
9393
puzzle.setMode("edit");
9494

95-
puzzle.mouse.setInputMode("tapa");
95+
puzzle.mouse.setInputMode("number");
9696
puzzle.cursor.init(1, 1);
9797
puzzle.key.inputKeys("2", "1");
9898
assert.deepEqual(puzzle.board.getc(1, 1).qnums, [2, 1]);
@@ -134,6 +134,27 @@ describe("Variety:jatahoku", function() {
134134
assert.equal(puzzle.mouse.getNewNumber(puzzle.board.getc(7, 1), -1), -3);
135135
});
136136

137+
it("uses the same gray clue input rules as Tapa", function() {
138+
var puzzle = new pzpr.Puzzle().open("jatahoku/5/5");
139+
var tapa = new pzpr.Puzzle().open("tapa/5/5");
140+
puzzle.setMode("edit");
141+
tapa.setMode("edit");
142+
assert.deepEqual(
143+
puzzle.board.getc(1, 1).qnum_states,
144+
tapa.board.getc(1, 1).qnum_states
145+
);
146+
147+
puzzle.cursor.init(1, 1);
148+
tapa.cursor.init(1, 1);
149+
puzzle.key.inputKeys("-", "2", "1");
150+
tapa.key.inputKeys("-", "2", "1");
151+
assert.deepEqual(
152+
puzzle.board.getc(1, 1).qnums,
153+
tapa.board.getc(1, 1).qnums
154+
);
155+
assert.deepEqual(puzzle.board.getc(1, 1).qnums, [-2, 2, 1]);
156+
});
157+
137158
it("does not allow candidate numbers in gray clue cells", function() {
138159
var puzzle = new pzpr.Puzzle().open("jatahoku/4/4");
139160
var cell = puzzle.board.getc(1, 1);
@@ -171,6 +192,48 @@ describe("Variety:jatahoku", function() {
171192
assert.equal(reopened.board.indicator.count, 3);
172193
});
173194

195+
it("reverses top clue order when flipping vertically", function() {
196+
var puzzle = new pzpr.Puzzle().open("jatahoku/6/6");
197+
var board = puzzle.board;
198+
board.getex(1, -5).qnum = 11;
199+
board.getex(1, -1).qnum = 12;
200+
board.getex(-1, 1).qnum = 21;
201+
board.getex(-1, 11).qnum = 27;
202+
board.getex(13, 1).qnum = 31;
203+
board.getex(13, 11).qnum = 37;
204+
205+
board.exec.execadjust("flipy");
206+
207+
assert.equal(board.getex(1, -5).qnum, 12);
208+
assert.equal(board.getex(1, -3).qnum, -1);
209+
assert.equal(board.getex(1, -1).qnum, 11);
210+
assert.equal(board.getex(-1, 1).qnum, 27);
211+
assert.equal(board.getex(-1, 11).qnum, 21);
212+
assert.equal(board.getex(13, 1).qnum, 37);
213+
assert.equal(board.getex(13, 11).qnum, 31);
214+
});
215+
216+
it("reverses left clue order when flipping horizontally", function() {
217+
var puzzle = new pzpr.Puzzle().open("jatahoku/6/6");
218+
var board = puzzle.board;
219+
board.getex(-5, 1).qnum = 21;
220+
board.getex(-1, 1).qnum = 22;
221+
board.getex(1, -1).qnum = 11;
222+
board.getex(11, -1).qnum = 17;
223+
board.getex(1, 13).qnum = 31;
224+
board.getex(11, 13).qnum = 37;
225+
226+
board.exec.execadjust("flipx");
227+
228+
assert.equal(board.getex(-5, 1).qnum, 22);
229+
assert.equal(board.getex(-3, 1).qnum, -1);
230+
assert.equal(board.getex(-1, 1).qnum, 21);
231+
assert.equal(board.getex(1, -1).qnum, 17);
232+
assert.equal(board.getex(11, -1).qnum, 11);
233+
assert.equal(board.getex(1, 13).qnum, 37);
234+
assert.equal(board.getex(11, 13).qnum, 31);
235+
});
236+
174237
it("does not mark gray clues for a block with missing numbers", function() {
175238
var puzzle = new pzpr.Puzzle().open("jatahoku/4/4");
176239
var room = puzzle.board.roommgr.components[0];

0 commit comments

Comments
 (0)