TopPage > 演習課題 > 演習3-2 ネットワーク対戦ゲームクライアント
まず,下記のプログラムと画像3枚を同じフォルダにダウンロードしてください.
MyClient.java ダウンロード/ソースコードファイルを見る
画像ファイルの保存は,画像ファイル上で右クリックし「名前をつけて画像を保存」をクリックします.
★保存先のフォルダが変わっている場合がありますので,注意してください.
※サーバは,演習3-1でダウンロードしたMyServer.javaを使います.
接続を確認するために,コマンドプロンプトを3つ起動させます.
MyClient.javaは大きく4つの部分に分かれています.
プログラムの改良を通じて,動きを理解しましょう.
[改良1] 複数のPC間で通信できるようにしましょう.
やり方はいくつかありますが,例えば下記の方法があります.
[改良2] 特定の番号のコマは動かないようにしてみましょう.
例えば,配列の1番目だけは,動かないようにしてみましょう.mouseDraggedのところで,theArrayIndexを見て,条件を分ければできます.
[改良3] 自分のコマをクリックしたときに,相手のコマも変わるようにしましょう.
現在は,クリックしたらコマをクリックしたら,自分のコマしか色が変わりません.
まず,mouseClickedのところで,mouseDraggedのような送信部分を作ります.
mouseDraggedでは,「MOVE」でしたので,「CLICK」「CHANGE」など別な名前にします.
送る情報としては,コマの色を含める必要があります.
次に,MesgRecvThreadの中に,if(cmd.equals("MOVE"))と同様に
CLICKの情報を受けとり,そのなかで,コマの色を変えるプログラムを書きます.
[改良4] 自動的に,黒と白を決めてみましょう.
※この課題では,演習3-1-1の練習問題で作成したMyServer2.javaを使います!!
これは,演習3-1-1の練習問題(MyServer2.java)では,接続してきたクライアントに対して,
1
と接続番号を送信していますね.
この接続番号「1」(2回目は2,3回目は3...)の数字を使うと例えば,偶数は黒,奇数は白とすると,つないだプログラムごとに黒と白が判定できます.
次は,クライアント(MyClient.java)です.
(ファイルの名前を変えても構いませんが,ファイル名を変えるとプログラムの中も変える必要があります.ある程度動いたら,名前を変えたり,バックアップをとったりすると,あとで動かなくなったときに,おかしいところを探すのに便利です.)
受信部分は
public void run()
です.
out.println(myName);//名前を送る
の後に,
String myNumberStr = br.readLine();
を追加します.
これで,サーバが送った番号を受け取れますが,このままだとまだ,単なる文字なので,
Integer.parseIntを使って数値にします.
また,この数値を奇数が偶数かを判定するには,
%(モジュロ)演算子を使います.
例えば,下記は偶数の時にif文の条件を満たします.
if(myNumberInt % 2 == 0){ }
自分が黒か白かの情報は,他の場所でも使いますので,どこでも使えるように,
public class MyClient extends JFrame implements MouseListener,MouseMotionListener { private JButton buttonArray[];
のようなところに,
private int myColor;
と宣言しておいて, myColorが0の時は黒,myColorが1の時は白とかを決めておくと良いでしょう.
MyServer.javaには,接続数の制限があります.つまり接続数が100を超えるとサーバが止まってしまいます.maxConnection = 100で制限していますので,気になる人は数を増やしておくと良いでしょう.
※本来なら,socketは使い回せるのですが,プログラムの簡略化のため,このような書き方をしています.