(Java/FX ) Java CD Java version Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas C

Similar documents
GIMP import javafx.application.application; import javafx.scene.scene; import javafx.scene.canvas.canvas; import javafx.scene.canvas.graphicscontext;

K227 Java 2

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

// ステージを設定します stage.setscene(scene); stage.settitle(" キャンバス "); // ステージを表示します stage.show(); public static void main(string[] args) launch(args); キャンバス

I java A

新・明解Java入門

オブジェクト指向言語 Java 博士 ( 情報理工学 ) 小林貴訓博士 ( 工学 ) Htoo Htoo 共著工学博士大澤裕 コロナ社 コロナ社

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

8 if switch for while do while 2

r1.dvi

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

: : : TSTank 2


r02.dvi

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

Java演習(4) -- 変数と型 --

Java updated

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java

Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem

ALG2012-F.ppt

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

オブジェクト指向プログラミング・同演習 5月21日演習課題

明解Javaによるアルゴリズムとデータ構造

IE6 2 BMI chapter1 Java 6 chapter2 Java 7 chapter3 for if 8 chapter4 : BMI 9 chapter5 Java GUI 10 chapter6 11 chapter7 BMI 12 chap

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

2 static final int DO NOTHING ON CLOSE static final int HIDE ON CLOSE static final int DISPOSE ON CLOSE static final int EXIT ON CLOSE void setvisible

Java学習教材

Java言語 第1回

問題1 以下に示すプログラムは、次の処理をするプログラムである

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =


2.2 Java C main Java main 2 C 6 C Java 3 C Java ( ) G101Hello.java G101Hello main G101Hello.java /* G101Hello */ class G101Hello { /* main */ public s


1: Preference Display 1 package sample. pref ; 2 3 import android. app. Activity ; 4 import android. content. Intent ; 5 import android. content. Shar

Java講座

アルゴリズムとデータ構造1

Assignment9_1.java

解きながら学ぶJava入門編

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

JavaプログラミングⅠ

,,,,., C Java,,.,,.,., ,,.,, i

10K pdf

2

Microsoft Word - keisankigairon.ch doc

226

2

r3.dvi

haskell.gby

(Eclipse\202\305\212w\202\324Java2\215\374.pdf)

Java Java Java Java Java 4 p * *** ***** *** * Unix p a,b,c,d 100,200,250,500 a*b = a*b+c = a*b+c*d = (a+b)*(c+d) = 225

55 7 Java C Java TCP/IP TCP/IP TCP TCP_RO.java import java.net.*; import java.io.*; public class TCP_RO { public static void main(string[] a

アルゴリズムとデータ構造1

新・明解Javaで学ぶアルゴリズムとデータ構造

ALG2012-A.ppt

JavaプログラミングⅠ

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

ALG2012-C.ppt

アプレットの作成

オブジェクト脳のつくり方

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

ALG ppt

Transcription:

(Java/FX ) Java CD Java version 10.0.1 Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas Canvas Eclipse Eclipse M... 1

javafx e(fx)clipse 3.0.0 Eclipse JavaFX 2

Java Eclispe Sudoku import javafx.application.application; public class Sudoku extends Application { public static void main(string... args) { } Sudoku Application Application import Sudoku public class Sudoku extends Application { Canvas canvas; int board_size = 500; @Override public void start(stage pstage) { Pane root = new Pane(); canvas = new Canvas(board_size, board_size); root.getchildren().add(canvas); drawcanvas(); Scene scene = new Scene(root); pstage.settitle(" "); pstage.setscene(scene); pstage.show(); void drawcanvas() { public static void main(string... args) { launch(args); } Canvas canvas canvas board_size start(stage pstage) start(stage pstage) Python Ruby canvas = new Canvas(board_size, board_size); drawcanvas() 3

void drawcanvas() { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; GraphicsContext gc = canvas.getgraphicscontext2d(); gc.setstroke(color.blue); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(2); gc.strokeline(w, h+i*s, w+9*s, h+i*s); else { gc.setlinewidth(1); gc.strokeline(w, h+i*s, w+9*s, h+i*s); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(2); gc.strokeline(w+i*s, h, w+i*s, h+9*s); else { gc.setlinewidth(1); gc.strokeline(w+i*s, h, w+i*s, h+9*s); import javafx.application.application; import javafx.scene.scene; import javafx.scene.canvas.canvas; import javafx.scene.canvas.graphicscontext; import javafx.scene.layout.pane; import javafx.scene.paint.color; import javafx.stage.stage; public class Sudoku extends Application { Canvas canvas; int board_size = 500; @Override public void start(stage pstage) { Pane root = new Pane(); 4

canvas = new Canvas(board_size, board_size); root.getchildren().add(canvas); drawcanvas(); Scene scene = new Scene(root); pstage.settitle(" "); pstage.setscene(scene); pstage.show(); void drawcanvas() { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; GraphicsContext gc = canvas.getgraphicscontext2d(); gc.setstroke(color.blue); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(2); gc.strokeline(w, h+i*s, w+9*s, h+i*s); else { gc.setlinewidth(1); gc.strokeline(w, h+i*s, w+9*s, h+i*s); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(2); gc.strokeline(w+i*s, h, w+i*s, h+9*s); else { gc.setlinewidth(1); gc.strokeline(w+i*s, h, w+i*s, h+9*s); public static void main(string... args) { launch(args); } 5

import javafx.application.application; import javafx.scene.scene; import javafx.scene.canvas.canvas; import javafx.scene.canvas.graphicscontext; import javafx.scene.layout.pane; import javafx.scene.paint.color; import javafx.stage.stage; import javafx.application.application; import Eclipse drawcanvas() int i = 1, j = 1; int n = 9; gc.setfont(new Font("courier", 50)); gc.setstroke(color.black); gc.settextalign(textalignment.center); 6

gc.filltext(string.valueof(n), w+(i+0.5)*s, h+(j+0.9)*s); i = 8; j = 8; n = 5; gc.setfont(new Font(" ", 40)); gc.settextalign(textalignment.left); gc.stroketext(string.valueof(n), w+(i+0.1)*s, h+(j+0.9)*s); gc.stroketext(string.valueof(n), w+(i+0.1)*s, h+(j+0.9)*s); gc.stroketext() gc.settextalign(textalignment.left); gc.settextalign(textalignment.center); y 7

gc.setfont(new Font("courier", 50)); gc.setstroke(color.black); ban ban int[][] ban = { {0,1,0,0,0,0,9,0,3}, {0,9,0,0,0,7,0,0,0}, {0,0,0,0,0,0,0,7,1}, {6,0,9,0,0,0,0,0,0}, {0,0,7,6,0,0,0,0,0}, {2,0,0,8,0,5,0,0,0}, {0,0,4,0,0,8,0,0,0}, {0,3,0,0,2,0,0,0,0}, {0,0,8,5,3,0,0,9,4}}; 2 drawcanvas() gc.setfont(new Font("courier", 50)); gc.setstroke(color.black); gc.settextalign(textalignment.center); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ban[j][i] >0) { gc.filltext(string.valueof(ban[j][i]), w+(i+0.5)*s, h+(j+0.9)*s); import javafx.application.application; import javafx.scene.scene; import javafx.scene.canvas.canvas; import javafx.scene.canvas.graphicscontext; import javafx.scene.layout.pane; import javafx.scene.paint.color; import javafx.scene.text.font; import javafx.scene.text.textalignment; import javafx.stage.stage; public class Sudoku extends Application { Canvas canvas; int board_size = 500; 8

int[][] ban = { {0,1,0,0,0,0,9,0,3}, {0,9,0,0,0,7,0,0,0}, {0,0,0,0,0,0,0,7,1}, {6,0,9,0,0,0,0,0,0}, {0,0,7,6,0,0,0,0,0}, {2,0,0,8,0,5,0,0,0}, {0,0,4,0,0,8,0,0,0}, {0,3,0,0,2,0,0,0,0}, {0,0,8,5,3,0,0,9,4}}; @Override public void start(stage pstage) { Pane root = new Pane(); canvas = new Canvas(board_size, board_size); root.getchildren().add(canvas); drawcanvas(); Scene scene = new Scene(root); pstage.settitle(" "); pstage.setscene(scene); pstage.show(); void drawcanvas() { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; GraphicsContext gc = canvas.getgraphicscontext2d(); gc.setstroke(color.blue); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w, h+i*s, w+9*s, h+i*s); else { gc.setlinewidth(1); gc.strokeline(w, h+i*s, w+9*s, h+i*s); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); 9

gc.strokeline(w+i*s, h, w+i*s, h+9*s); else { gc.setlinewidth(1); gc.strokeline(w+i*s, h, w+i*s, h+9*s); gc.setfont(new Font("courier", 50)); gc.setstroke(color.black); gc.settextalign(textalignment.center); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ban[j][i] >0) { gc.filltext(string.valueof(ban[j][i]), w+(i+0.5)*s, h+(j+0.9)*s); public static void main(string... args) { launch(args); } if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w, h+i*s, w+9*s, h+i*s); else { gc.setlinewidth(1); gc.strokeline(w, h+i*s, w+9*s, h+i*s); 10

start(stage pstage) public void start(stage pstage) { MenuBar bar = new MenuBar(); Menu m1 = new Menu("Sample"); MenuItem sample1 = new MenuItem("Sample1"); MenuItem sample2 = new MenuItem("Sample2"); m1.getitems().addall(sample1, sample2); bar.getmenus().add(m1); VBox root = new VBox(); canvas = new Canvas(board_size, board_size); root.getchildren().addall(bar, canvas); drawcanvas(); Scene scene = new Scene(root); pstage.settitle(" "); pstage.setscene(scene); pstage.show(); 11

Pane root = new Pane(); VBox root = new VBox(); start(stage pstage) sample1.setonaction((event)->{ ban = ban1; drawcanvas(); ); sample2.setonaction((event)->{ ban = ban2; drawcanvas(); ); Sudoku 12

int[][] ban = { {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0} ; int[][] ban1 = { {0,1,0,0,0,0,9,0,3}, {0,9,0,0,0,7,0,0,0}, {0,0,0,0,0,0,0,7,1}, {6,0,9,0,0,0,0,0,0}, {0,0,7,6,0,0,0,0,0}, {2,0,0,8,0,5,0,0,0}, {0,0,4,0,0,8,0,0,0}, {0,3,0,0,2,0,0,0,0}, {0,0,8,5,3,0,0,9,4} ; int[][] ban2 = { {0,0,0,0,0,6,2,0,1}, {0,0,0,0,4,0,3,7,0}, {0,0,3,0,9,2,0,0,6}, {4,0,5,0,0,0,0,6,0}, {0,0,0,0,7,0,0,0,0}, {0,2,0,0,0,0,4,0,5}, {9,0,0,4,5,0,1,0,0}, {0,5,4,0,2,0,0,0,0}, {7,0,1,9,0,0,0,0,0} ; drawcanvas() 2 gc.clearrect(0, 0, board_size, board_size); import javafx.application.application; import javafx.scene.scene; import javafx.scene.canvas.canvas; import javafx.scene.canvas.graphicscontext; 13

import javafx.scene.control.menu; import javafx.scene.control.menubar; import javafx.scene.control.menuitem; import javafx.scene.layout.vbox; import javafx.scene.paint.color; import javafx.scene.text.font; import javafx.scene.text.textalignment; import javafx.stage.stage; public class Sudoku extends Application { Canvas canvas; int board_size = 500; int[][] ban = { {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0} ; int[][] ban1 = { {0,1,0,0,0,0,9,0,3}, {0,9,0,0,0,7,0,0,0}, {0,0,0,0,0,0,0,7,1}, {6,0,9,0,0,0,0,0,0}, {0,0,7,6,0,0,0,0,0}, {2,0,0,8,0,5,0,0,0}, {0,0,4,0,0,8,0,0,0}, {0,3,0,0,2,0,0,0,0}, {0,0,8,5,3,0,0,9,4} ; int[][] ban2 = { {0,0,0,0,0,6,2,0,1}, {0,0,0,0,4,0,3,7,0}, {0,0,3,0,9,2,0,0,6}, {4,0,5,0,0,0,0,6,0}, {0,0,0,0,7,0,0,0,0}, {0,2,0,0,0,0,4,0,5}, {9,0,0,4,5,0,1,0,0}, {0,5,4,0,2,0,0,0,0}, 14

{7,0,1,9,0,0,0,0,0} ; @Override public void start(stage pstage) { MenuBar bar = new MenuBar(); Menu m1 = new Menu("Sample"); MenuItem sample1 = new MenuItem("Sample1"); MenuItem sample2 = new MenuItem("Sample2"); m1.getitems().addall(sample1, sample2); bar.getmenus().add(m1); VBox root = new VBox(); canvas = new Canvas(board_size, board_size); root.getchildren().addall(bar, canvas); drawcanvas(); Scene scene = new Scene(root); pstage.settitle(" "); pstage.setscene(scene); pstage.show(); sample1.setonaction((event)->{ ban = ban1; drawcanvas(); ); sample2.setonaction((event)->{ ban = ban2; drawcanvas(); ); void drawcanvas() { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; GraphicsContext gc = canvas.getgraphicscontext2d(); gc.clearrect(0, 0, board_size, board_size); gc.setstroke(color.blue); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w, h+i*s, w+9*s, h+i*s); else { 15

gc.setlinewidth(1); gc.strokeline(w, h+i*s, w+9*s, h+i*s); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w+i*s, h, w+i*s, h+9*s); else { gc.setlinewidth(1); gc.strokeline(w+i*s, h, w+i*s, h+9*s); gc.setfont(new Font("courier", 50)); gc.setstroke(color.black); gc.settextalign(textalignment.center); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ban[j][i] >0) { gc.filltext(string.valueof(ban[j][i]), w+(i+0.5)*s, h+(j+0.9)*s); public static void main(string... args) { launch(args); } 16

Sample1 Sample2 17

start(stage pstage) RadioButton rb1 = new RadioButton("Ban"); RadioButton rb2 = new RadioButton("Ans"); ToggleGroup group = new ToggleGroup(); rb1.settogglegroup(group);; rb2.settogglegroup(group);; rb1.setselected(true);; root.getchildren().addall(bar, canvas, rb1, rb2); 18

start(stage pstage) canvas.setonmouseclicked((event)->{ buttonpressed(event.getx(), event.gety()); ); Sudoku buttonpressed(double x, double y) void buttonpressed(double x, double y) { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; int i = (int) Math.floor((x - w) / s); int j = (int) Math.floor((y - h) / s); int n = 7; if (i >= 0 && i < 9 && j >= 0 && j < 9) { gc.setfont(new Font("courier", 50)); gc.setstroke(color.black); gc.settextalign(textalignment.center); gc.filltext(string.valueof(n), w+(i+0.5)*s, h+(j+0.9)*s); 19

gc drawcanvas() Sudoku GraphicsContext gc; drawcanvas() gc = canvas.getgraphicscontext2d(); import javafx.application.application; import javafx.scene.scene; import javafx.scene.canvas.canvas; import javafx.scene.canvas.graphicscontext; import javafx.scene.control.menu; import javafx.scene.control.menubar; import javafx.scene.control.menuitem; import javafx.scene.control.radiobutton; import javafx.scene.control.togglegroup; import javafx.scene.layout.vbox; import javafx.scene.paint.color; import javafx.scene.text.font; import javafx.scene.text.textalignment; import javafx.stage.stage; public class Sudoku extends Application { Canvas canvas; GraphicsContext gc; int board_size = 500; int[][] ban = { {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0} ; int[][] ban1 = { {0,1,0,0,0,0,9,0,3}, {0,9,0,0,0,7,0,0,0}, {0,0,0,0,0,0,0,7,1}, {6,0,9,0,0,0,0,0,0}, 20

{0,0,7,6,0,0,0,0,0}, {2,0,0,8,0,5,0,0,0}, {0,0,4,0,0,8,0,0,0}, {0,3,0,0,2,0,0,0,0}, {0,0,8,5,3,0,0,9,4} ; int[][] ban2 = { {0,0,0,0,0,6,2,0,1}, {0,0,0,0,4,0,3,7,0}, {0,0,3,0,9,2,0,0,6}, {4,0,5,0,0,0,0,6,0}, {0,0,0,0,7,0,0,0,0}, {0,2,0,0,0,0,4,0,5}, {9,0,0,4,5,0,1,0,0}, {0,5,4,0,2,0,0,0,0}, {7,0,1,9,0,0,0,0,0} ; @Override public void start(stage pstage) { MenuBar bar = new MenuBar(); Menu m1 = new Menu("Sample"); MenuItem sample1 = new MenuItem("Sample1"); MenuItem sample2 = new MenuItem("Sample2"); m1.getitems().addall(sample1, sample2); bar.getmenus().add(m1); RadioButton rb1 = new RadioButton("Ban"); RadioButton rb2 = new RadioButton("Ans"); ToggleGroup group = new ToggleGroup(); rb1.settogglegroup(group);; rb2.settogglegroup(group);; rb1.setselected(true);; VBox root = new VBox(); canvas = new Canvas(board_size, board_size); root.getchildren().addall(bar, canvas, rb1, rb2); drawcanvas(); Scene scene = new Scene(root); pstage.settitle(" "); pstage.setscene(scene); pstage.show(); sample1.setonaction((event)->{ ban = ban1; 21

drawcanvas(); ); sample2.setonaction((event)->{ ban = ban2; drawcanvas(); } ); canvas.setonmouseclicked((event)->{ buttonpressed(event.getx(), event.gety()); ); void buttonpressed(double x, double y) { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; int i = (int) Math.floor((x - w) / s); int j = (int) Math.floor((y - h) / s); int n = 7; if (i >= 0 && i < 9 && j >= 0 && j < 9) { gc.setfont(new Font("courier", 50)); gc.setstroke(color.black); gc.settextalign(textalignment.center); gc.filltext(string.valueof(n), w+(i+0.5)*s, h+(j+0.9)*s); void drawcanvas() { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; gc = canvas.getgraphicscontext2d(); gc.clearrect(0, 0, board_size, board_size); gc.setstroke(color.blue); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w, h+i*s, w+9*s, h+i*s); else { gc.setlinewidth(1); gc.strokeline(w, h+i*s, w+9*s, h+i*s); 22

for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w+i*s, h, w+i*s, h+9*s); else { gc.setlinewidth(1); gc.strokeline(w+i*s, h, w+i*s, h+9*s); gc.setfont(new Font("courier", 50)); gc.setstroke(color.black); gc.settextalign(textalignment.center); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ban[j][i] >0) { gc.filltext(string.valueof(ban[j][i]), w+(i+0.5)*s, h+(j+0.9)*s); public static void main(string... args) { launch(args); } 23

buttonpressed(double x, double y) void buttonpressed(double x, double y) { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; int i = (int) Math.floor((x - w) / s); int j = (int) Math.floor((y - h) / s); if (i >= 0 && i < 9 && j >= 0 && j < 9) { String str = "123456789"; TextInputDialog dlg = new TextInputDialog(str); str = dlg.showandwait().orelse(""); if (str!= "") { int n = Integer.parseInt(str); ban[j][i] = n; drawcanvas(); 24

OK ans[][] Sudoku Sudoku int[][] ans = new int[9][9];; RadioButton rb1; RadioButton rb2; start(stage pstage) 25

rb1 = new RadioButton("Ban"); rb2 = new RadioButton("Ans"); sample1.setonaction() sample1.setonaction() sample1.setonaction((event)->{ ban = ban1; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { ans[j][i] = ban[j][i]; drawcanvas(); ); sample2.setonaction((event)->{ ban = ban2; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { ans[j][i] = ban[j][i]; drawcanvas(); ); buttonpressed(double x, double y) void buttonpressed(double x, double y) { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; int i = (int) Math.floor((x - w) / s); int j = (int) Math.floor((y - h) / s); if (i >= 0 && i < 9 && j >= 0 && j < 9) { String str = "123456789"; TextInputDialog dlg = new TextInputDialog(str); str = dlg.showandwait().orelse(""); if (str!= "") { int n = Integer.parseInt(str); if (rb1.isselected()) { ban[j][i] = n; ans[j][i] = n; else { ans[j][i] = n; 26

drawcanvas(); drawcanvas() void drawcanvas() { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; gc = canvas.getgraphicscontext2d(); gc.clearrect(0, 0, board_size, board_size); gc.setstroke(color.blue); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w, h+i*s, w+9*s, h+i*s); else { gc.setlinewidth(1); gc.strokeline(w, h+i*s, w+9*s, h+i*s); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w+i*s, h, w+i*s, h+9*s); else { gc.setlinewidth(1); gc.strokeline(w+i*s, h, w+i*s, h+9*s); gc.setfont(new Font("courier", 50)); gc.settextalign(textalignment.center); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ban[j][i] >0) { gc.setfill(color.blue); gc.filltext(string.valueof(ban[j][i]), w+(i+0.5)*s, h+(j+0.9)*s); else if (ans[j][i] > 0) { gc.setfill(color.red); 27

gc.filltext(string.valueof(ans[j][i]), w+(i+0.5)*s, h+(j+0.9)*s); filltext() gc.setfill(color.blue); ban ans VC++ MenuBar bar = new MenuBar(); Menu m2 = new Menu("File"); MenuItem savemenu = new MenuItem("Save"); MenuItem openmenu = new MenuItem("Open"); m2.getitems().addall(savemenu, openmenu); Menu m1 = new Menu("Sample"); MenuItem sample1 = new MenuItem("Sample1"); MenuItem sample2 = new MenuItem("Sample2"); 28

m1.getitems().addall(sample1, sample2); bar.getmenus().addall(m2, m1); savemenu.setonaction((event)->{ try { FileChooser fc = new FileChooser(); File sf = fc.showsavedialog(pstage); if (sf!= null) { FileWriter fileout = new FileWriter(sf); for (int j=0; j<9; j++) { String str = ""; for (int i=0; i<9; i++) { str += String.valueOf(ban[j][i])+ " "; fileout.write(str + "\n"); for (int j=0; j<9; j++) { String str = ""; for (int i=0; i<9; i++) { str += String.valueOf(ans[j][i])+ " "; fileout.write(str + "\n"); fileout.close(); catch(exception e) {}; ); openmenu.setonaction((event)->{ try { FileChooser fc = new FileChooser(); File sf = fc.showopendialog(pstage); if (sf!= null) { FileReader filein = new FileReader(sf); BufferedReader buf = new BufferedReader(filein); String data; int row = 0; while ((data = buf.readline())!= null) { String[] sa = data.split(" "); if (row < 9) { for (int i=0; i<9; i++) { 29

ban[row][i] = Integer.parseInt(sa[i]); else { for (int i=0; i<9; i++) { ans[row-9][i] = Integer.parseInt(sa[i]); row++; filein.close(); catch(exception e) {}; drawcanvas(); ); 30

ban[][] ans[][] Open 31

1 9 Java Python Ruby set boolean[][][] hint[j][i][n] = true if n is candidate, = false if n is not candidate Sudoku boolean[][][] hint = new boolean[9][9][10]; 101 n 9 sample1.setonaction((event)->{ ban = ban1; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { ans[j][i] = ban[j][i]; sethint(); drawcanvas(); ); sample2.setonaction((event)->{ 32

ban = ban2; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { ans[j][i] = ban[j][i]; sethint(); drawcanvas(); ); sethint(); openmenu.setonaction((event)->{ try { FileChooser fc = new FileChooser(); File sf = fc.showopendialog(pstage); if (sf!= null) { FileReader filein = new FileReader(sf); BufferedReader buf = new BufferedReader(filein); String data; int row = 0; while ((data = buf.readline())!= null) { String[] sa = data.split(" "); if (row < 9) { for (int i=0; i<9; i++) { ban[row][i] = Integer.parseInt(sa[i]); else { for (int i=0; i<9; i++) { ans[row-9][i] = Integer.parseInt(sa[i]); row++; filein.close(); catch(exception e) {}; sethint(); drawcanvas(); ); 33

sethint(); sethint() void sethint() { int[][][] box = new int[9][9][2]; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { int m = j / 3 * 3 + i / 3; int n = j % 3 * 3 + i % 3; box[m][n][0] = j; box[m][n][1] = i; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { for (int n=1; n<=9; n++) { boolean flag = true; for (int k=0; k<9; k++) { if (ans[j][k]==n) { flag = false; break; for (int k=0; k<9; k++) { if (ans[k][i]==n) { flag = false; break; int m = j / 3 * 3 + i / 3; for (int k=0; k<9; k++) { if (ans[box[m][k][0]][box[m][k][1]]==n) { flag = false; break; hint[j][i][n] = flag; 34

void buttonpressed(double x, double y) { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; int i = (int) Math.floor((x - w) / s); int j = (int) Math.floor((y - h) / s); if (i >= 0 && i < 9 && j >= 0 && j < 9) { String str = "123456789"; TextInputDialog dlg = new TextInputDialog(str); str = dlg.showandwait().orelse(""); if (str!= "") { int n = Integer.parseInt(str); if (rb1.isselected()) { ban[j][i] = n; ans[j][i] = n; else { ans[j][i] = n; sethint(); drawcanvas(); sethint(); drawcanvas() gc.setfont(new Font("courier", 12)); gc.settextalign(textalignment.center); gc.setfill(color.black); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ans[j][i] == 0) { for (int n=1; n<=9; n++) { if (hint[j][i][n]) { int r = (int) ((j+((n-1)/3*2+1.5)/6.0)*s); int l = (int) ((i+((n-1)%3*2+1)/6.0)*s); gc.filltext(string.valueof(n), w+l, h+r); 35

void drawcanvas() { int k = 9; int s = board_size / (k+2); int w = (board_size-s*9)/2; int h = (board_size-s*9)/2; gc = canvas.getgraphicscontext2d(); gc.clearrect(0, 0, board_size, board_size); gc.setstroke(color.blue); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w, h+i*s, w+9*s, h+i*s); else { gc.setlinewidth(1); gc.strokeline(w, h+i*s, w+9*s, h+i*s); for (int i=0; i<=9; i++) { if (i % 3 == 0) { gc.setlinewidth(3); gc.strokeline(w+i*s, h, w+i*s, h+9*s); else { gc.setlinewidth(1); gc.strokeline(w+i*s, h, w+i*s, h+9*s); gc.setfont(new Font("courier", 50)); gc.settextalign(textalignment.center); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ban[j][i] >0) { gc.setfill(color.blue); gc.filltext(string.valueof(ban[j][i]), w+(i+0.5)*s, h+(j+0.9)*s); else if (ans[j][i] > 0) { gc.setfill(color.red); gc.filltext(string.valueof(ans[j][i]), w+(i+0.5)*s, h+(j+0.9)*s); 36

gc.setfont(new Font("courier", 12)); gc.settextalign(textalignment.center); gc.setfill(color.black); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ans[j][i] == 0) { for (int n=1; n<=9; n++) { if (hint[j][i][n]) { int r = (int) ((j+((n-1)/3*2+1.5)/6.0)*s); int l = (int) ((i+((n-1)%3*2+1)/6.0)*s); gc.filltext(string.valueof(n), w+l, h+r); 37

Sample1 1 9 1 (One-choice: A cell that contains only one candidate value) 1 (5,1) 38

1 (One-choice: A cell that contains only one candidate value) 7 7 1 (One-place: A region(row, column, or block) that has only one cell available for a given number) 39

start(stage pstage) Button b1 = new Button(" 1 "); Button b2 = new Button(" 1 "); HBox hb = new HBox(); hb.getchildren().addall(b1, b2); root.getchildren().addall(bar, canvas, rb1, rb2, hb); 40

b1.setonaction((event) -> { setuniquesell(); ); start(stage pstage) setuniquesell() boolean setuniquesell() { boolean FLAG = false; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ans[j][i] > 0) continue; int count = 0; int index = -1; for (int n=1; n<=9; n++) { if (hint[j][i][n]) { count++; index = n; 41

if (count == 1) { ans[j][i] = index; FLAG = true; sethint(); drawcanvas(); return FLAG; boolean setuniquesell() void setuniquesell() Sample1 1 1 b2.setonaction((event) -> { setsinglecand(); ); 42

start(stage pstage) setsinglecand() boolean setsinglecand() { boolean F = false; int[][][] box = new int[9][9][2]; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { int m = j / 3 * 3 + i / 3; int n = j % 3 * 3 + i % 3; box[m][n][0] = j; box[m][n][1] = i; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ans[j][i] > 0) continue; for (int n=1; n<=9; n++) { if (!hint[j][i][n]) continue; boolean flag = true; for (int k=0; k<9; k++) { if (k == i ans[j][k]>0) continue; if (hint[j][k][n]) { flag = false; break; if (flag) { ans[j][i] = n; F = true; sethint(); drawcanvas(); return F; flag = true; for (int k=0; k<9; k++) { if (k == j ans[k][i]>0) continue; if (hint[k][i][n]) { flag = false; break; if (flag) { ans[j][i] = n; 43

F = true; sethint(); drawcanvas(); return F; int m = j / 3 * 3 + i / 3; int p = j % 3 * 3 + i % 3; flag = true; for (int k=0; k<9; k++) { if (k == p ans[box[m][k][0]][box[m][k][1]]>0) continue; if (hint[box[m][k][0]][box[m][k][1]][n]) { flag = false; break; if (flag) { ans[j][i] = n; F = true; sethint(); drawcanvas(); return F; sethint(); drawcanvas(); return F; Sample1 1 44

Sample2 1 45

Button b3 = new Button(" "); start(stage pstage) hb.getchildren().addall(b1, b2, b3); regularplay() void regularplay() { boolean F= false; do { do { F = setuniquesell(); while (F); F = setsinglecand(); while (F); b3.setonaction((event) -> { regularplay(); drawcanvas(); ); 46

Sample2 Button b4 = new Button(" "); start(stage pstage) hb.getchildren().addall(b1, b2, b3, b4); 47

completep() boolean completep() { for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ans[j][i] == 0) { return false; for (int j=0; j<9; j++) { for (int n=1; n<=9; n++) { boolean flag = false; for (int i=0; i<9; i++) { if (ans[j][i] == n) { flag = true; break; if (!flag) return false; 48

for (int i=0; i<9; i++) { for (int n=1; n<=9; n++) { boolean flag = false; for (int j=0; j<9; j++) { if (ans[j][i] == n) { flag = true; break; if (!flag) return false; int[][][] box = new int[9][9][2]; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { int m = j / 3 * 3 + i / 3; int n = j % 3 * 3 + i % 3; box[m][n][0] = j; box[m][n][1] = i; for (int k=0; k<9; k++) { for (int n=1; n<=9; n++) { boolean flag = false; for (int i=0; i<9; i++) { if (ans[box[k][i][0]][box[k][i][1]] == n) { flag = true; break; if (!flag) return false; return true; losingp() boolean losingp() { sethint(); for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { 49

boolean flag = false; for (int n=1; n<=9; n++) { if (hint[j][i][n]) { flag = true; break; if (!flag) return true; for (int j=0; j<9; j++) { int[] P = {0,0,0,0,0,0,0,0,0,0}; for (int i=0; i<9; i++) { P[ans[j][i]] = P[ans[j][i]]+1; for (int n=1; n<=9; n++) { if (P[n] > 1) return true; for (int i=0; i<9; i++) { int[] P = {0,0,0,0,0,0,0,0,0,0}; for (int j=0; j<9; j++) { P[ans[j][i]] = P[ans[j][i]]+1; for (int n=1; n<=9; n++) { if (P[n] > 1) return true; int[][][] box = new int[9][9][2]; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { int m = j / 3 * 3 + i / 3; int n = j % 3 * 3 + i % 3; box[m][n][0] = j; box[m][n][1] = i; for (int k=0; k<9; k++) { int[] P = {0,0,0,0,0,0,0,0,0,0}; for (int i=0; i<9; i++) { P[ans[box[k][i][0]][box[k][i][1]]] = 50

P[ans[box[k][i][0]][box[k][i][1]]]+1; for (int n=1; n<=9; n++) { if (P[n] > 1) return true; return false; b4.setonaction((event) -> { solver(); drawcanvas(); ); solver() boolean solver() { if (losingp()) { return false; if (completep()) return true; int jj = -1, ii = -1; boolean flag = false; out: for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ans[j][i] == 0) { jj = j; ii = i; flag = true; break out; if (flag) { sethint(); boolean[] S = new boolean[10]; for (int n=1; n<=9; n++) S[n] = hint[jj][ii][n]; for (int n=1; n<=9; n++) { if (S[n]) { 51

ans[jj][ii] = n; if (solver()) return true; ans[jj][ii] = 0; return false; solver() boolean solver() { regularplay(); if (losingp()) { return false; if (completep()) return true; int jj = -1, ii = -1; boolean flag = false; 52

out: for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { if (ans[j][i] == 0) { jj = j; ii = i; flag = true; break out; if (flag) { int[][] tempans = new int[9][9]; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { tempans[j][i] = ans[j][i]; sethint(); boolean[] S = new boolean[10]; for (int n=1; n<=9; n++) S[n] = hint[jj][ii][n]; for (int n=1; n<=9; n++) { if (S[n]) { ans[jj][ii] = n; if (solver()) return true; for (int j=0; j<9; j++) { for (int i=0; i<9; i++) { ans[j][i] = tempans[j][i]; ans[jj][ii] = 0; return false; 53

VC++ Python Java VC++ VC++ JavaFX Java 3 Java Java Python Ruby andoroid Kotlin Python Ruby Java 1 10 30 300 Giulio Zambon Sudoku Programming with C Apress VC++ box[][][] 54