Fureiya君へ

 バイト先に行く途中、暇だったので丁度ブログに公開されていたソースを読みました。
 コメントで書くと長いので、ここに書きます。
 

  • ボタンの名前が不適当

 button1〜button9とやってしまうと、それに対するイベントリスナーを一個ずつ別の名前で用意しないといけなります。配列で用意しましょう。


 JButton buttons[];
for(int i=0;i<9;i++){
buttons[i]=new JButton();
}

で、これに対するActionLisnerは一つにしましょう。btn1Click〜btn9Clickまで作ってしまうと長くなるのは当然です。これを一つにして、コンストラクタに引数を渡してボタン番号を知らせるようにすることで、約320行の省略が出来ます。
 
 これにより、

button1.addActionListener(new btn1Click());
button2.addActionListener(new btn2Click());
button3.addActionListener(new btn3Click());
button4.addActionListener(new btn4Click());
button5.addActionListener(new btn5Click());
button6.addActionListener(new btn6Click());
button7.addActionListener(new btn7Click());
button8.addActionListener(new btn8Click());
button9.addActionListener(new btn9Click());

 
 この部分が

for(int i=0;i<9;i++){
buttons[i].addActionListener(new btnClick(i));
}

 こんな感じに書き換えられます。パネルへの追加も同様にできます。
 こっちのほうがシンプルでしょ?(w
 

  • 判定部分をどうするか?

 現行のアルゴリズムは全ての列に対して判定しているようですが、本当ならば置いた部分に対しての縦・横・斜めだけの判定でいいはずです。そちらのブログにもあるように1次元もしくは2次元配列を使うことにより、数個のfor文と数個のif文だけで簡単に判定ルーチンを作ることが出来ます。例えば

            • +
0 1 2
            • +
3 4 5
            • +
6 7 8
            • +


 
 このような配置で配列を定義したとします。
 左に行くと1ずつ減少します。上に行くと-3ずつ減少していきます。
 左端を判定するにはマス番号 % 横列数(ここならば3) = 0であるかどうか。上端を判定するにはマス番号 / 縦列数(ここならば3) = 0 であるかどうか。同様にして右端と下端も判定できるので、これで判定ルーチンの仕組みは分かると思います。
 

  • CPU戦が欲しい

 余力があるならCPU作りませんか。
 やる気があるなら作り方教えますよ。