Graphics/2021/ex14
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*グラフィックス基礎及び実習 2021年度 第14回 実習と宿題 [#...
#contents
//&color(#ff0000){''工事中''};
//**注意 [#notice]
**課題のための準備 [#o0bcb890]
+ サンプルをダウンロードしよう.Graphics チーム から以下...
-- SammokuSample.class
-- SammokuGUISample.class
-- sammokuGUI.css
+ サンプルを実行してみよう
java SammokuSample
java SammokuGUISample
+ SammokuSample の動作を確認しよう
-- 盤面の外や既に o/x が置いてある所を指定するとどうなる?
-- 勝ち/負け/引き分けの判定はしてないですね
-- 終了は,CTRL+C (コントロールキーを押しながらC)
+ SammokuGUISample の動作を確認しよう
-- SammokuSampleクラス使ってます
-- 適当にボタンを押してみよう
**実習課題A 締切: 次回13:30 [#kadaiA]
StepX の X は,課題 A, B と S の間で通し番号になってます.
*** Step0 -- Sammoku (ver.0) を作ろう [#step0]
[[''Step0''>#step0]] [[Step1>#step1]] [[Step2>#step2]] ...
&color(#00a000){''(^o^)/ まずはキー入力の処理だけのプログ...
次のような動作をするプログラムを作ろう.★から右側は解説.
#pre{{
0 1 2
0| | | |
1| | | | ★ 盤面を数字と縦棒で表示
2| | | |
横縦の順に値を入力してね(例: 2 1): 2 1 ★ 右側の 2 1...
(2,1) ★ 入力された値を表示
0 1 2
0| | | |
1| | | | ★ ver.0 では o や x の表示はなく,常に空の...
2| | | |
横縦の順に値を入力してね(例: 2 1): 1 1
(1,1)
0 1 2
0| | | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): -1 2 ★ 盤面内の数...
(-1,2)
0 1 2
0| | | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 99 100
(99,100)
0 1 2
0| | | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 0 hoge ★ 整数とし...
横縦の順に値を入力してね(例: 2 1):
}}
&color(red){''/(*_*) 次のことを守ってプログラムを考えよう...
+ クラス名は Sammoku とする.
+ ver.0 では,盤面を表示するインスタンスメソッド(引数な...
+ mainメソッドは,以下のプログラム例を参考に作ろう.
#pre{{
import java.util.*; // for Scanner class
public class Hoge{
public static void main(String[] args){
// キー入力を扱う Scanner クラス
Scanner sc = new Scanner(System.in);
// 空白を区切りとして2つの整数を入力するとその和を出力
// 動作確認のためわざと変な入力をしてみるとよい
while(true){
int x, y;
boolean done = false;
do{
System.out.print("x y : ");
try{
x = Integer.parseInt(sc.next());
y = Integer.parseInt(sc.next());
sc.nextLine(); // この行の残りを読みとばす
done = true;
}catch(NumberFormatException e){
x = y = 0;
sc.nextLine(); // この行の残りを読みとばす
done = false;
}
}while(!done);
System.out.println("x + y = " + (x + y));
}
}
}
}}
//&color(#00a000){''ここまでできた Sammoku のソースファイ...
***Step1 -- Sammoku (ver.1) を作ろう [#step1]
[[Step0>#step0]] [[''Step1''>#step1]] [[Step2>#step2]] ...
&color(#00a000){''(^o^)/ キー入力で指定された位置に o や ...
次のような動作をするプログラムを作ろう.
以下の動作例からわかるように,このver.1では,SammokuSampl...
#pre{{
0 1 2
0| | | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 0 0
(0,0) に置いたで
0 1 2
0|o| | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 0 0
(0,0) に置いたで
0 1 2
0|x| | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 0 hoge
横縦の順に値を入力してね(例: 2 1): 0 100
Exception in thread "main" java.lang.ArrayIndexOutOfBound...
}}
&color(red){''/(*_*) 次のことを守ってプログラムを考えよう...
以下の「&color(blue){''クラスの設計を考えよう''};」をよく...
***クラスの設計を考えよう [#i0e89597]
&color(Blue){''/(?_?) Sammokuクラスのオブジェクトは,デー...
つまり,インスタンス変数やクラス変数としてどんなものを用...
→ 例えば盤面はどう扱う?
盤面の状態を表す変数を用意するとして,それに○や×などの文...
→ ○や×などに対応させて適当に整数値を割り当てるのがよいだ...
といっても,マスの数ぶんの変数を一つ一つばらばらに用意す...
→ ということは…
&color(Blue){''/(*_*) 次のことを守ってプログラムを考えよ...
- ''盤面を表す変数などは外部から勝手にいじられたりしない...
&color(Blue){''/(?_?) Sammokuクラスにはどんな機能があれば...
一つのメソッドがいろんな仕事をするように作ると使い勝手が...
一つのメソッドはなるべく単純な仕事しかしないように作って...
→ そういうわけで,次のような5つの機能に分ける構成としてみ...
- 盤面の初期化: コンストラクタで
- 指定された位置のマスの値(○や×を表す整数値)を返す: 引...
- 指定された位置のマスを指定された値(○や×を表す整数値)...
- 盤面を表示: ver.0 で作成したメソッドを改造
- キー入力を受け付けて上記のメソッドたちを呼ぶ動作を繰り...
***Step2 -- Sammoku (ver.2) を作ろう [#step2]
[[Step0>#step0]] [[Step1>#step1]] [[''Step2''>#step2]] ...
&color(#00a000){''(^o^)/ 盤面外や既に○×が置いてある場所を...
そのためには,指定した位置に○×を置ける/置けないを判定す...
というわけで,次の仕様のメソッドを定義してそれを使うよう...
:boolean isPlaceable(int x, int y)|
位置 (x,y) が置ける場所なら,つまり (x,y) が盤面内でかつ...
&color(#00a000){''完成した Sammoku のソースファイルを moo...
**実習課題B 締切: 次回15:00 [#kadaiB]
&color(Red){''注意''};:
- 課題A を提出していなければこの課題の点数は付きません
- 課題A で提出された Sammoku を使用しますので,「課題Aの...
***Step3 -- SammokuGUI を作ろう [#step3]
[[Step0>#step0]] [[Step1>#step1]] [[Step2>#step2]] [['...
&color(#00a000){''(^o^)/SammokuGUISample と同様のふるまい...
- Sammokuクラスを利用する(Sammokuのインスタンスを生成し...
- Button の2次元配列を作るとよい
-- この2次元配列の要素について二重 for ループしながら,各...
#pre{{
エラー: ラムダ式から参照されるローカル変数は、finalまたは...
if(s.isPlaceable(ix, iy)){
^
}}
この問題に対処するには,二重 for ループの内側で setOnActi...
#pre{{
final int fx = ix, fy = jy;
}}
と書いておく → setOnAction の引数では ix, iy のかわりに f...
- ボタンをサンプルのように配置するには,GridPane を使えば...
- CSS ファイル sammokuGUI.css で全てのボタンに対するスタ...
#pre{{
Scene scene = new Scene(root);
scene.getStylesheets().add("sammokuGUI.css");
}}
&color(#00a000){''完成した SammokuGUI のソースファイルを ...
**宿題 [#hw]
&color(#00a000){''実習課題以外の宿題はありません''};
**実習課題S(omake) 締切: 次回実習時間終了時 [#kadaiS]
//&color(#ff0000){''工事中''};
*** Step4 -- ほげほげしよう [#step4]
[[Step0>#step0]] [[Step1>#step1]] [[Step2>#step2]] [[S...
&color(#00a000){''これはおまけ課題です.やらなくても減点...
- 次のことを実現しよう.これら以外にも工夫したければお好...
-- ソースをちょっといじるだけで盤面のサイズを(20x20など...
-- 勝ち/負け/引き分けを判定する機能を追加する.Sammoku...
-- 人対コンピュータで対戦できるようにする.コンピュータは...
- 提出するソースファイル名/クラス名は任意です.ファイル...
終了行:
*グラフィックス基礎及び実習 2021年度 第14回 実習と宿題 [#...
#contents
//&color(#ff0000){''工事中''};
//**注意 [#notice]
**課題のための準備 [#o0bcb890]
+ サンプルをダウンロードしよう.Graphics チーム から以下...
-- SammokuSample.class
-- SammokuGUISample.class
-- sammokuGUI.css
+ サンプルを実行してみよう
java SammokuSample
java SammokuGUISample
+ SammokuSample の動作を確認しよう
-- 盤面の外や既に o/x が置いてある所を指定するとどうなる?
-- 勝ち/負け/引き分けの判定はしてないですね
-- 終了は,CTRL+C (コントロールキーを押しながらC)
+ SammokuGUISample の動作を確認しよう
-- SammokuSampleクラス使ってます
-- 適当にボタンを押してみよう
**実習課題A 締切: 次回13:30 [#kadaiA]
StepX の X は,課題 A, B と S の間で通し番号になってます.
*** Step0 -- Sammoku (ver.0) を作ろう [#step0]
[[''Step0''>#step0]] [[Step1>#step1]] [[Step2>#step2]] ...
&color(#00a000){''(^o^)/ まずはキー入力の処理だけのプログ...
次のような動作をするプログラムを作ろう.★から右側は解説.
#pre{{
0 1 2
0| | | |
1| | | | ★ 盤面を数字と縦棒で表示
2| | | |
横縦の順に値を入力してね(例: 2 1): 2 1 ★ 右側の 2 1...
(2,1) ★ 入力された値を表示
0 1 2
0| | | |
1| | | | ★ ver.0 では o や x の表示はなく,常に空の...
2| | | |
横縦の順に値を入力してね(例: 2 1): 1 1
(1,1)
0 1 2
0| | | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): -1 2 ★ 盤面内の数...
(-1,2)
0 1 2
0| | | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 99 100
(99,100)
0 1 2
0| | | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 0 hoge ★ 整数とし...
横縦の順に値を入力してね(例: 2 1):
}}
&color(red){''/(*_*) 次のことを守ってプログラムを考えよう...
+ クラス名は Sammoku とする.
+ ver.0 では,盤面を表示するインスタンスメソッド(引数な...
+ mainメソッドは,以下のプログラム例を参考に作ろう.
#pre{{
import java.util.*; // for Scanner class
public class Hoge{
public static void main(String[] args){
// キー入力を扱う Scanner クラス
Scanner sc = new Scanner(System.in);
// 空白を区切りとして2つの整数を入力するとその和を出力
// 動作確認のためわざと変な入力をしてみるとよい
while(true){
int x, y;
boolean done = false;
do{
System.out.print("x y : ");
try{
x = Integer.parseInt(sc.next());
y = Integer.parseInt(sc.next());
sc.nextLine(); // この行の残りを読みとばす
done = true;
}catch(NumberFormatException e){
x = y = 0;
sc.nextLine(); // この行の残りを読みとばす
done = false;
}
}while(!done);
System.out.println("x + y = " + (x + y));
}
}
}
}}
//&color(#00a000){''ここまでできた Sammoku のソースファイ...
***Step1 -- Sammoku (ver.1) を作ろう [#step1]
[[Step0>#step0]] [[''Step1''>#step1]] [[Step2>#step2]] ...
&color(#00a000){''(^o^)/ キー入力で指定された位置に o や ...
次のような動作をするプログラムを作ろう.
以下の動作例からわかるように,このver.1では,SammokuSampl...
#pre{{
0 1 2
0| | | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 0 0
(0,0) に置いたで
0 1 2
0|o| | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 0 0
(0,0) に置いたで
0 1 2
0|x| | |
1| | | |
2| | | |
横縦の順に値を入力してね(例: 2 1): 0 hoge
横縦の順に値を入力してね(例: 2 1): 0 100
Exception in thread "main" java.lang.ArrayIndexOutOfBound...
}}
&color(red){''/(*_*) 次のことを守ってプログラムを考えよう...
以下の「&color(blue){''クラスの設計を考えよう''};」をよく...
***クラスの設計を考えよう [#i0e89597]
&color(Blue){''/(?_?) Sammokuクラスのオブジェクトは,デー...
つまり,インスタンス変数やクラス変数としてどんなものを用...
→ 例えば盤面はどう扱う?
盤面の状態を表す変数を用意するとして,それに○や×などの文...
→ ○や×などに対応させて適当に整数値を割り当てるのがよいだ...
といっても,マスの数ぶんの変数を一つ一つばらばらに用意す...
→ ということは…
&color(Blue){''/(*_*) 次のことを守ってプログラムを考えよ...
- ''盤面を表す変数などは外部から勝手にいじられたりしない...
&color(Blue){''/(?_?) Sammokuクラスにはどんな機能があれば...
一つのメソッドがいろんな仕事をするように作ると使い勝手が...
一つのメソッドはなるべく単純な仕事しかしないように作って...
→ そういうわけで,次のような5つの機能に分ける構成としてみ...
- 盤面の初期化: コンストラクタで
- 指定された位置のマスの値(○や×を表す整数値)を返す: 引...
- 指定された位置のマスを指定された値(○や×を表す整数値)...
- 盤面を表示: ver.0 で作成したメソッドを改造
- キー入力を受け付けて上記のメソッドたちを呼ぶ動作を繰り...
***Step2 -- Sammoku (ver.2) を作ろう [#step2]
[[Step0>#step0]] [[Step1>#step1]] [[''Step2''>#step2]] ...
&color(#00a000){''(^o^)/ 盤面外や既に○×が置いてある場所を...
そのためには,指定した位置に○×を置ける/置けないを判定す...
というわけで,次の仕様のメソッドを定義してそれを使うよう...
:boolean isPlaceable(int x, int y)|
位置 (x,y) が置ける場所なら,つまり (x,y) が盤面内でかつ...
&color(#00a000){''完成した Sammoku のソースファイルを moo...
**実習課題B 締切: 次回15:00 [#kadaiB]
&color(Red){''注意''};:
- 課題A を提出していなければこの課題の点数は付きません
- 課題A で提出された Sammoku を使用しますので,「課題Aの...
***Step3 -- SammokuGUI を作ろう [#step3]
[[Step0>#step0]] [[Step1>#step1]] [[Step2>#step2]] [['...
&color(#00a000){''(^o^)/SammokuGUISample と同様のふるまい...
- Sammokuクラスを利用する(Sammokuのインスタンスを生成し...
- Button の2次元配列を作るとよい
-- この2次元配列の要素について二重 for ループしながら,各...
#pre{{
エラー: ラムダ式から参照されるローカル変数は、finalまたは...
if(s.isPlaceable(ix, iy)){
^
}}
この問題に対処するには,二重 for ループの内側で setOnActi...
#pre{{
final int fx = ix, fy = jy;
}}
と書いておく → setOnAction の引数では ix, iy のかわりに f...
- ボタンをサンプルのように配置するには,GridPane を使えば...
- CSS ファイル sammokuGUI.css で全てのボタンに対するスタ...
#pre{{
Scene scene = new Scene(root);
scene.getStylesheets().add("sammokuGUI.css");
}}
&color(#00a000){''完成した SammokuGUI のソースファイルを ...
**宿題 [#hw]
&color(#00a000){''実習課題以外の宿題はありません''};
**実習課題S(omake) 締切: 次回実習時間終了時 [#kadaiS]
//&color(#ff0000){''工事中''};
*** Step4 -- ほげほげしよう [#step4]
[[Step0>#step0]] [[Step1>#step1]] [[Step2>#step2]] [[S...
&color(#00a000){''これはおまけ課題です.やらなくても減点...
- 次のことを実現しよう.これら以外にも工夫したければお好...
-- ソースをちょっといじるだけで盤面のサイズを(20x20など...
-- 勝ち/負け/引き分けを判定する機能を追加する.Sammoku...
-- 人対コンピュータで対戦できるようにする.コンピュータは...
- 提出するソースファイル名/クラス名は任意です.ファイル...
ページ名: