演習4-1 オセロの基礎1
をテンプレートにして作成
開始行:
[[TopPage]] > 最終課題に向けて > 演習4-1 オセロの基礎1
* オセロの基礎 [#rc5dd636]
** はじめに [#lb0ff286]
''まずは,[[最終課題]]を確認してください''.
演習4は&size(24){任意};の課題です.やらなくてもかまいませ...
ここでは,&color(red){%%%「ひとまずオセロを作りたいんだけ...
ネットワーク通信とマス目アルゴリズムの詳しい説明もしてい...
※クライアントは,[[演習3-2>演習3-2 ネットワーク対戦ゲーム...
※サーバは,[[演習3-1-1>演習3-1-1 MyServer.java]]で作成し...
** やりたいことを考える [#e56d7212]
- オセロといっても,単純ではありません.やることはいっぱ...
-- まず,どんなプログラムを書けばいいかの想定と順序を組み...
- まず,コマを自由に置ける空間を作りましょう.それからタ...
細かな準備
クライアントごとに置けるコマの色を決定する
ターン制にする
判定を行う
置けるかどうか
ひっくり返すかどうか
ターンをパスするかどうか
勝敗はどうか
etc ...
** 課題1・細かな準備 [#c3dff162]
+ 使用するマウスイベントを限定する
-- 余計な出力や,マス目をドラッグできる機能はいりませんよ...
-- コメントアウト(// や /* */)しておくと,その行を無効...
+ ウインドウのタイトルやサイズを設定する
+ ボタンを8x8にする
-- 二重配列を使い,[[演習2-1>演習2-1 GUIプログラミングの...
-- %%%jとi,y方向とx方向の関係に注意してください%%%.下記...
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
buttonArray[j][i]. ...
}
}
-- setActionCommandには,ひとつの情報しか付加できません....
-- この計算式を受信部分などでj,iに戻したい場合は,以下の...
int y = theBnum / 8;
int x = theBnum % 8;
+ 初期のコマを配置する
** 課題2・クライアントごとに置けるコマの色を決定する [#m...
- MyClient内のmyColorと同じ位置に,2つの新しい変数を宣言...
private ImageIcon myIcon, yourIcon;
-- myColorが0の時,myIconにblackIcon,yourIconにwhiteIcon...
- これで,いつでも自分の色のアイコン(myIcon)を参照でき...
-- 自分と相手は,myIconの中身が異なることになります.
-- では,自分側でmyIconを置いた時に,相手側ではyourIconを...
- ここで,[[演習3-2>演習3-2 ネットワーク対戦ゲームクライ...
-- PLACEの送信部分で送る色の情報をmyColorにしてください.
-- 送信前にアイコンを変更する処理を色々書いていたら,この...
- そして,PLACEの受信部分の中に,アイコンを変更する処理を...
if(color == myColor){
//送信元クライアントでの処理
buttonArray[y][x].setIcon(myIcon);
} else {
//送信先クライアントでの処理
buttonArray[y][x].setIcon(yourIcon);
}
-- colorとmyColorを比較しています.colorは,送信されたmyC...
#ref(msgothello.png,center,50%)~
CENTER:図1. 2つのMyClient.javaの送信と受信(クリックで拡大)
-- 受信部分は両方のクライアントで実行される,という話はし...
-- 送信した「自分のmyColor」と,「相手のmyColor」は異なる...
-- したがって,この2つの情報を比較することで,受信部分の...
--- &color(red){両方のクライアントで行いたい処理};
--- &color(red){送信元のみで行いたい処理};
--- &color(red){送信先のみで行いたい処理};
-- を場合分けすることができます.ここがポイント!
-- あとは,送信元はmyIcon,送信先はyourIconを置く処理を書...
- 「自分のmyIcon」と「相手のyourIcon」は同じ色のはずなの...
** 課題3・ターン制にする [#sdde45f7]
- myColorと同じように,myTurnという変数を作ります.
- ターンの判定方法は様々です.ここでは,例を4つぐらい挙げ...
-- myTurnを「0」と「1」に限定し,一方を1,他方を0で初期化...
--- 0なら相手のターン,1なら自分のターン
--- 0なら黒のターン,1なら白のターン
myTurn = 1 - myTurn; // 0を1に,1を0にする
-- 両者とも0から始めて,自分のターンが済んだら自分だけ+1...
--- 自分と相手のターン数を比較し,一致したら先攻のターン
-- 両者とも0から始めて,自分のターンが済んだら両者とも+1...
--- ターン数が偶数なら先攻のターン
- myTurnの初期化は,myColorの決まった後などのタイミングで...
- クリックした時に,myTurnによって処理を行う・行わないを...
- あとは,myTurnをどこでうまく変更するかを考えてみてくだ...
#br
&size(16){[[&ref(http://yoslab.net/netprog/next.gif,nolin...
終了行:
[[TopPage]] > 最終課題に向けて > 演習4-1 オセロの基礎1
* オセロの基礎 [#rc5dd636]
** はじめに [#lb0ff286]
''まずは,[[最終課題]]を確認してください''.
演習4は&size(24){任意};の課題です.やらなくてもかまいませ...
ここでは,&color(red){%%%「ひとまずオセロを作りたいんだけ...
ネットワーク通信とマス目アルゴリズムの詳しい説明もしてい...
※クライアントは,[[演習3-2>演習3-2 ネットワーク対戦ゲーム...
※サーバは,[[演習3-1-1>演習3-1-1 MyServer.java]]で作成し...
** やりたいことを考える [#e56d7212]
- オセロといっても,単純ではありません.やることはいっぱ...
-- まず,どんなプログラムを書けばいいかの想定と順序を組み...
- まず,コマを自由に置ける空間を作りましょう.それからタ...
細かな準備
クライアントごとに置けるコマの色を決定する
ターン制にする
判定を行う
置けるかどうか
ひっくり返すかどうか
ターンをパスするかどうか
勝敗はどうか
etc ...
** 課題1・細かな準備 [#c3dff162]
+ 使用するマウスイベントを限定する
-- 余計な出力や,マス目をドラッグできる機能はいりませんよ...
-- コメントアウト(// や /* */)しておくと,その行を無効...
+ ウインドウのタイトルやサイズを設定する
+ ボタンを8x8にする
-- 二重配列を使い,[[演習2-1>演習2-1 GUIプログラミングの...
-- %%%jとi,y方向とx方向の関係に注意してください%%%.下記...
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
buttonArray[j][i]. ...
}
}
-- setActionCommandには,ひとつの情報しか付加できません....
-- この計算式を受信部分などでj,iに戻したい場合は,以下の...
int y = theBnum / 8;
int x = theBnum % 8;
+ 初期のコマを配置する
** 課題2・クライアントごとに置けるコマの色を決定する [#m...
- MyClient内のmyColorと同じ位置に,2つの新しい変数を宣言...
private ImageIcon myIcon, yourIcon;
-- myColorが0の時,myIconにblackIcon,yourIconにwhiteIcon...
- これで,いつでも自分の色のアイコン(myIcon)を参照でき...
-- 自分と相手は,myIconの中身が異なることになります.
-- では,自分側でmyIconを置いた時に,相手側ではyourIconを...
- ここで,[[演習3-2>演習3-2 ネットワーク対戦ゲームクライ...
-- PLACEの送信部分で送る色の情報をmyColorにしてください.
-- 送信前にアイコンを変更する処理を色々書いていたら,この...
- そして,PLACEの受信部分の中に,アイコンを変更する処理を...
if(color == myColor){
//送信元クライアントでの処理
buttonArray[y][x].setIcon(myIcon);
} else {
//送信先クライアントでの処理
buttonArray[y][x].setIcon(yourIcon);
}
-- colorとmyColorを比較しています.colorは,送信されたmyC...
#ref(msgothello.png,center,50%)~
CENTER:図1. 2つのMyClient.javaの送信と受信(クリックで拡大)
-- 受信部分は両方のクライアントで実行される,という話はし...
-- 送信した「自分のmyColor」と,「相手のmyColor」は異なる...
-- したがって,この2つの情報を比較することで,受信部分の...
--- &color(red){両方のクライアントで行いたい処理};
--- &color(red){送信元のみで行いたい処理};
--- &color(red){送信先のみで行いたい処理};
-- を場合分けすることができます.ここがポイント!
-- あとは,送信元はmyIcon,送信先はyourIconを置く処理を書...
- 「自分のmyIcon」と「相手のyourIcon」は同じ色のはずなの...
** 課題3・ターン制にする [#sdde45f7]
- myColorと同じように,myTurnという変数を作ります.
- ターンの判定方法は様々です.ここでは,例を4つぐらい挙げ...
-- myTurnを「0」と「1」に限定し,一方を1,他方を0で初期化...
--- 0なら相手のターン,1なら自分のターン
--- 0なら黒のターン,1なら白のターン
myTurn = 1 - myTurn; // 0を1に,1を0にする
-- 両者とも0から始めて,自分のターンが済んだら自分だけ+1...
--- 自分と相手のターン数を比較し,一致したら先攻のターン
-- 両者とも0から始めて,自分のターンが済んだら両者とも+1...
--- ターン数が偶数なら先攻のターン
- myTurnの初期化は,myColorの決まった後などのタイミングで...
- クリックした時に,myTurnによって処理を行う・行わないを...
- あとは,myTurnをどこでうまく変更するかを考えてみてくだ...
#br
&size(16){[[&ref(http://yoslab.net/netprog/next.gif,nolin...
ページ名: