Home | Raetsel | Gedichte | Schach | Retros | Wienerisch | Blog | Events

Verbesserungsvorschlag bei Sudoku

Wollen Sie über unsere Javascript-Programme im Rätselbereich oder Spielebereich diskutieren? Haben Sie Fragen zur Bedienung, Fehlermeldungen oder Verbesserungsvorschläge? Dann sind Sie hier richtig!

Moderatoren: Angela, Otto

Verbesserungsvorschlag bei Sudoku

Beitragvon Robo » 23.10.2020 21:31

Hallo Otto,

eigentlich nervt es mich, dass ich für Sudokus zwischen Ziffern- und Kandidatenmodus regelmäßig umschalten muss (F7). Eine der Umschalttasten wäre dafür ganz praktisch. Mir scheint, Shift wäre an der Stelle noch frei.

Ich habe mir das am Beispiel eines Kropki-Sudokus mal angeschaut. War etwas Fummelei, die lokal gespeicherte Version der Seite zu deminifizieren und zum Laufen zu bringen, aber machbar. Bin ja vom Fach ;).

In der onKeyPress Methode der Puzzle-Klasse ist eine Umschaltung drin, basierend auf a.vMarkerMode wird eine Ziffer oder ein Kandidat gesetzt. Da hab ich zwei Zeilen vorgeschaltet:

Code: Alles auswählen
   var vmmode = a.vMarkerMode;
   if (b.shiftKey && b.code.startsWith("Digit")) { d=b.code[5]; vmmode=!vmmode; }


Die Namen sind aus der Minifizierung. b ist das KeyPress-Event, und in d speicherst Du den ermittelten Zeichencode (die Zeile, wo String.fromCharCode aufgerufen wird). d muss ich neu setzen, weil da bei Shift-1 ein Ausrufezeichen drin steht, das passt dann im Folgecode nicht mehr.

vmmode wird dann statt in der Abfrage, ob toggleValueMarker oder makeMove aufzurufen ist, an Stelle von a.vMarkerMode verwendet. Scheint gut zu funktionieren.

Natürlich weiß ich nicht, ob das andere Puzzles behindert - aber wäre das für Dich ein valider Verbesserungsvorschlag? Wenn Du solche Vorschläge nicht magst - auch gut, dann bin ich schnell wieder still.

Gruß
Robo
Robo
 
Beiträge: 135
Registriert: 11.11.2008 17:00
Wohnort: Erftstadt

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Otto » 24.10.2020 08:33

Doch, ich mag Vorschläge, dazu muss man aber nicht notwendigerweise den Code dekomprimieren. So lustig ist das auch nicht.

Das Puzzle-Script ist die Basis-Klasse für alle Rätselarten, hat keine Ahnung von Sudoku. Was dort geändert wird betrifft somit auch alle anderen Rätselarten.

Die Umschalttaste ist nicht wirklich frei, da man viele Zeichen ja nur über diese erreicht. Und dies ist noch dazu bei jedem sprachspezifischen Tastaturlayout anders. Und einig dieser Zeichen werden benötigt - nicht oft, aber doch. Eine Änderung will also gut überlegt sein.

Technisch gesehen ist da noch das Problem, dass F7 mit dem char-code arbeitet, nicht mit dem key-code. Damit muss ich mich nicht um verschiedene Tastaturlayouts kümmern. Das würde sich mit dem Umfunktionieren der Umschalttaste ändern.

Dann sollte man noch überlegen, wie das mit virtuellen Tastaturen auf Mobilgeräten ist. IMHO gibt es keine Möglichkeit, zwischen virtueller und realer Tastatur zu unterscheiden.
Otto
Site Admin
 
Beiträge: 2260
Registriert: 07.08.2004 15:17
Wohnort: Wien

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Robo » 24.10.2020 20:11

So lustig ist das auch nicht.


Für mich war's nicht ganz lustig. Stimmt. Wenn es für dich nicht lustig ist - der Code ist dein geistiges Eigentum und das werde ich natürlich respektieren. Wenn Du nicht willst, dass man sich deinen Code anschaut, okay, ich werde es nicht mehr tun. Wenn du darüber hier nicht mehr diskutieren willst, auch ok, dann bin ich still. Ich will ja nicht nerven. Bitte sag an, wie es sein soll.

Dass das Puzzle-Script für alle oder zumindest viele Rätselarten greift, habe ich erkannt. Aus dem uglyfizierten Code lässt sich nicht so genau erkennen, wie Folgewirkungen sind; inwieweit die nachfolgene enable.colors Sektion betroffen ist, kannst nur Du sagen. Aber mein Vorschlag prüft, ob das code Property mit "Digit" beginnt, das ist der logische Name der Taste, nicht der charCode. Im charCode würdest Du bei shift+1 ein Ausrufezeichen finden, oder was anderes, je nach Layout. Aber "Digit1" als Tastenname bekommst Du immer. Deswegen ist das Tastaturlayout egal.

Wie sich dein Script auf Touchgeräten spielt, guter Einwand. Ich hab's noch nicht gemacht, das ist mir zu klein. Da ist Shift vermutlich genauso schnell erreicht wie F7 (oder das Umschalt-Icon). Aber auch eine Screentastatur dürfte Dir "Digit1" als Codename für die Taste mit der 1 darauf liefern.
Robo
 
Beiträge: 135
Registriert: 11.11.2008 17:00
Wohnort: Erftstadt

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Otto » 24.10.2020 21:19

Missverständnis: Ich meinte, es sei für Dich nicht lustig. Der Code ist nicht verschlüsselt, sondern nur minifiziert (mit Googles Closure Compiler), um die Downloadgröße klein zu halten.

startsWith("Digit") funktioniert nicht, den Kandidatenmodus gibt es ja auch für ABC-End-View und andere. Auch bei manchen Zahlenrätseln gibt es den Kandidaten "X" für Leerfeld. Abgesehen davon liefert ↑+1 kein "Digit", sondern ein Rufzeichen (auf der deutschen Tastatur).

Reden wir aneinander vorbei? Ich dachte folgendes: Mit F7 schaltet man den Kandidatenmodus (KM) ein, 1 ist dann ein Kandidat, und mit ↑+1 (was ein Rufzeichen ist, zumindest auf der deutschen Tastatur) trägt man die Zahl 1 ein, bleibt aber weiter im KM, bis man diesen mit F7 ausschaltet.

vmmode=!vmmode ... Der KM sei aus. Dann schaltet ↑+1 den KM ein und trägt den Kandidaten 1 ein. In der Folge werden 1, 2, 3, ... zu Kandidaten. ↑+4 schaltet den KM aus und träge 4 als Wert ein. In der Folge sind 1, 2, 3, ... wieder normale Werte. (Mal abgesehen davon wie ich ↑+1 sprachunabhängig erkennen soll.)

ABER: Ist das wirklich intuitiv? Wer hat dazu eine Meinung? (Ich hoffe, das war nicht zu sehr verwirrend)
Otto
Site Admin
 
Beiträge: 2260
Registriert: 07.08.2004 15:17
Wohnort: Wien

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Robo » 25.10.2020 18:08

Okay. Ich wollte Dich nicht ärgern. Gut, dass es das nicht war. So schlimm ist die Dekompression nicht, ich habe einfach das Pretty Print Feature der Entwicklerwerkzeuge genutzt. Die Variablenverkürzung und die Codekompression gehen dadurch nicht weg, aber das lässt sich mit etwas Übung lesen.

Die Stelle, wo ich eingegriffen habe, **scheint** sich nur mit Ziffern zu beschäftigen. Jedenfalls findet man da sowas wie "d.charCodeAt(0) - 48" - was nur für Ziffern Sinn ergibt. Ich müsste vermutlich deinen unkomprimierten, kommentierten Code sehen, um zu verstehen, wie da Buchstaben mit ins Spiel kommen. Es scheint, als ob Buchstaben direkt davor behandelt würden, da ist eine for-Schleife, die ähnliches tut.

Ich habe bis eben nicht verstanden, wo deine Bedenken waren. Du hast natürlich recht, dass die Properties, die den laut Layout zugewiesenen Tastenwert liefern, auf Shift+1 mit einem "!" reagieren oder auch etwas anderem, je nach Layout. Und das Property "code", das den Tastennamen liefert, achtet nicht auf's Layout. Aber dass die Konsequenz davon ist, dass ich ein Y drücke und code="KeyZ" bekomme - brrrr.

D.h. diese Umschaltlogik müsste man für Ziffern anders implementieren als für Buchstaben. Aber hey, das scheint ja eh schon der Fall zu sein ;) Ob es intuitiv ist, ja, das ist eine gute Frage.

Meine Idee war jedenfalls, dass Shift + Zifferntaste für diese eine Ziffer zwischen Kandidaten- und Eingabemodus wechselt. Man ist im Kandidatenmodus - Shift + 1 trägt die Ziffer ein. Man ist im Eingabemodus - Shift + 1 trägt den Kandidaten ein (ja ok, das sehe ich nicht, wenn schon eine Ziffer eingetragen ist. Aber macht das was? Aus Sicht des Users passiert nichts).

PS: Du verwendest die Propertys which und charCode des KeyboardEvent Objekts. Die sind deprecated, man soll "key" verwenden. Darin findet sich ein DOMString, der der gedrückten Taste entspricht.

Robo
Robo
 
Beiträge: 135
Registriert: 11.11.2008 17:00
Wohnort: Erftstadt

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Otto » 26.10.2020 10:34

Buchstaben und Ziffern werden besonders behandelt, weil die Zeichenwerte 0~9, a~z und A~Z jeweils in Zahlen 0~9 bzw. 1~26 umgesetzt werden. Dann gibt es noch Tabellen, die die Zeichen rätselartspezifisch in Zahlen umwandeln, z.B. [a,s,d] in [schwarz,weiß,grau] bzw [1,0,-1]. Diese Tabellen werden von der abgeleiteten Klasse bereitgestellt (falls notwendig). → Die Scleifen davor.

Die Behandlung der Zahlen ist komplexer, weil es ja auch mehrstellige Zahlen gibt, die man irgendwie eingeben können muss. Daher die Abfrage, die Du gefunden hat.

Nochmals zu den Zahlen charCodes: Manche Leute arbeiten auch mit dem numerischen Tastenblock und da ist wieder alles ganz anders. Diese ganze rumfrickeleien nimmt mir das Betriebssystem ab, und berechnet den "richtigen" charCode unter Berücksichtigung con Umschalttaste, Strg, NumLock, Fn, AltGr, usw.

Hast Du schon mal nen Tastaturtreiber erstellt? Ich schon, drum habe ich auch ◄►▲▼ →←↑↓ ∞ №µ»«∑• und einige mehr direkt auf meiner Tastatur.

Ich werde trotz aller Probleme über Deinen Wunsch nachdenken.

---

which und charCode: Nun, der Code ist ~10 Jahre alt und komplex. Ich halte es da mit der alten Weisheit "never touch a running systen" wenn es nicht unbedingt sein muss. Meine Scripts laufen übrigens alle noch mit Firefox 14 und MSIE 11 -- das sind meine Legacy Browser und was da läuft, läuft auch überall sonst -- ich kann es mir nicht leisten, alle Änderungen mit vielen Browsern und vielen verschiedenen Geräten zu testen. Am problematischsten ist übrigens Safari, nicht MSIE.
Otto
Site Admin
 
Beiträge: 2260
Registriert: 07.08.2004 15:17
Wohnort: Wien

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Robo » 26.10.2020 11:55

Otto hat geschrieben:Hast Du schon mal nen Tastaturtreiber erstellt?


Yup, ich brauchte Vokale mit Querstrich (Macron) um Vokabeln in Latein für meine Kinder richtig eingeben zu können. Und das GROẞE SZ hab ich eingefügt. Weil das mit dem kleinen sz SCHEUßLICH aussieht.

Aber die Macrons funktionieren nicht mehr. Blödes Win10...

Ok, ich sehe dass das komplex wird. Und sicherlich möchtest Du in Puzzle.js nicht unterschiedliche Varianten der keypress-Methode pflegen, die dann von der abgeleiteten Klasse jeweils aufgerufen werden.

Robo
Robo
 
Beiträge: 135
Registriert: 11.11.2008 17:00
Wohnort: Erftstadt

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Otto » 26.10.2020 14:00

Goodie: keyboardEvent.key wird von FF 16 noch nicht unterstützt und von IE 11 nur teilweise bzw. inkompatibel. FF kann ich verschmerzen, IE nicht.
Otto
Site Admin
 
Beiträge: 2260
Registriert: 07.08.2004 15:17
Wohnort: Wien

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Robo » 26.10.2020 15:20

FF16, ja ich holte schon tief Luft. Wer den noch hat, ist selbst schuld.

IE, ja, stimmt, der hat in allen Versionen Left/Right/Up/Down statt ArrowLeft/ArrowRight/ArrowUp/ArrowDown. Microsoft hat wohl Angst vor Oliver Queen. Aber ich glaube, die 4 sind der einzige Unterschied.
Robo
 
Beiträge: 135
Registriert: 11.11.2008 17:00
Wohnort: Erftstadt

Re: Verbesserungsvorschlag bei Sudoku

Beitragvon Otto » 26.10.2020 17:55

FF16 nur stellvertretend für alte Browser. Mir ist schon klar, dass den kaum mehr wer hat.

Ich denke, MS hat einfach einen Draft-Standard implementiert und konnte dies aus Kompatibilitätsgründen später nicht mehr ändern. Aber "GreenArrow" oder besser "ArrowGreen" wäre natürlich kreativer gewesen.

(Für die staunenden Mitlesenden: Oliver Queen ist die Hauptfigur aus der Fernsehserie "Arrow". Meine Lieblingsfigur ist aber Felicity/Overwatch.)
Otto
Site Admin
 
Beiträge: 2260
Registriert: 07.08.2004 15:17
Wohnort: Wien


Zurück zu Javascript-Programme

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast