GUI部品とイベント処理の例 マインスィーパもどきの作成 倉敷芸術科学大学 産業科学技術学部 梶浦文夫.

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
プログラミング基礎I(再) 山元進.
アルゴリズムとデータ構造 2013年6月18日
Ex7. Search for Vacuum Problem
Ex8. Search for Vacuum Problem(2)
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
GUIコンポーネントの設定と配置 Creation and positioning of GUI components
JAVA GUIプログラミング 第6回 TextFieldとLabel.
2004年度JAVAゼミコンテスト作品 「Othello」
アルゴリズムとデータ構造 2012年7月23日
Javaレクチャー ーSwing入門ー.
アルゴリズムとデータ構造 2012年6月14日
アルゴリズムとデータ構造 2011年6月13日
第6章 2重ループ&配列 2重ループと配列をやります.
アルゴリズムとデータ構造 補足資料4-2 「線形探索」
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
アルゴリズムとデータ構造 2011年7月14日
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
アルゴリズムとデータ構造 2011年6月14日
プログラミング演習3 第2回 GUIの復習.
情報論理工学 研究室 第6回: リバーシの合法手生成.
Borland Delphi 6 でビジュアルプログラミング
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
JAVA入門後期⑦ JAVAのSwingの基本構造
第15回独習Javaゼミ セクション14~15 発表者 直江宗紀.
EVENT プログラミングのスタイル 手続き型: ある決められた場所から開始され, その後は純粋に上から下に流れて行く方式. 実行したいことを, 順番に記述してゆく. 逐次処理形式コーディングの方法である。 今までの授業(情報処理2や3)で 行ってきたプログラミングの演習 bcc32やmake 手続き型.
マインスイーパの概要 マインスイーパの準備 マインスイーパの完成 マインスイーパの改良
シューティングゲーム.
アルゴリズムとデータ構造 2013年7月16日
アルゴリズムとデータ構造1 2005年7月15日
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
二分探索木における要素削除 データ構造とプログラミング(10)
アルゴリズムとデータ構造1 2005年7月1日
JAVA入門後期⑥ JAVAのAWTの基本構造 (レイアウトマネージャー、 ウインドウ型アプリケーション)
大岩 元 慶応大学環境情報学部 再帰 データ構造とプログラミング(8) 大岩 元 慶応大学環境情報学部
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
アルゴリズムとデータ構造1 2005年7月5日
プログラムの制御構造 配列・繰り返し.
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
ソフトウェア制作論 平成30年10月10日.
アルゴリズムとデータ構造 2010年7月26日
Ex7. Search for Vacuum Problem
疑似乱数, モンテカルロ法によるシミュレーション
アルゴリズムとデータ構造1 2006年7月11日
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
AVL木.
アルゴリズムとデータ構造1 2006年7月4日
C#プログラミング実習 第3回.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとデータ構造1 2008年7月24日
アルゴリズムとデータ構造1 2006年6月23日
第6回:得点を表示しよう! (文字の表示、乱数)
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
プログラミング実習(Java) グラフィクス処理とGUIプログラミング 講師:坂口 利裕(横浜市立大学)
プログラミング 平成24年12月11日 森田 彦.
アルゴリズムとデータ構造1 2005年7月12日
ソフトウェア制作論 平成30年10月17日.
7.集合 7.1 集合とは [集合と要素] 関東の都道府県 群馬県 栃木県 要素 埼玉県 茨城県 東京都 千葉県 神奈川県
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
プログラミング演習I 補講用課題
Presentation transcript:

GUI部品とイベント処理の例 マインスィーパもどきの作成 倉敷芸術科学大学 産業科学技術学部 梶浦文夫

ゲームの説明 ◎いくつかの桝目の中 に爆弾が隠れている ◎爆弾の桝目を開けると 負け ◎爆弾のない桝目を 全部開けると勝ち   に爆弾が隠れている ◎爆弾の桝目を開けると   負け ◎爆弾のない桝目を   全部開けると勝ち ◎ヒントとして周囲の爆弾   の個数を表示

ゲームの説明2 0 周囲の爆弾の 個数とは? 2 隣接する8個の桝目のなかにある爆弾の数 3 1

実行 画面 8×8の 舛目 終了ボタン リプレイボタン

実行中 の画面 桝目を開けると、周りの爆弾の個数が表示される ここを開けたとき

実行中 の画面 爆弾の桝目を開けてしまって負けたところ

ゲーム盤の作成 Frame    BorderLayout Panel GridLayout Button Panel リプレイボタン 終了ボタン

碁盤目の作成 Panel p1; //全体のレイアウトはボーダーレイアウト setLayout(new BorderLayout()); GridLayout  碁盤目の作成 Frame  BorderLayout Panel Panel p1; //全体のレイアウトはボーダーレイアウト setLayout(new BorderLayout()); //盤のためのパネル p1 = new Panel(); p1.setLayout(new GridLayout(SIZE, SIZE));

碁盤目の作成 //パネルp1上に盤の作成 for(int i = 0;i < SIZE;i++)  碁盤目の作成 GridLayout Panel Button //パネルp1上に盤の作成 for(int i = 0;i < SIZE;i++) for(int j = 0;j < SIZE;j++) { b[i][j] = new Button(" "); b[i][j].addActionListener(this); p1.add(b[i][j]); } //盤を中央に貼りつけ add(p1, BorderLayout.CENTER); 8行8列に ボタン作成 リスナ設定 Panelに貼り付け

リプレイボタン、終了ボタン Panel p2; //パネル Button b_end; //終了ボタン Button b_cont;  //継続ボタン //終了ボタン貼りつけ b_end = new Button("End"); b_end.addActionListener(this); //p2の貼りつけ p2.add(b_end); add(p2, BorderLayout.SOUTH);//下側に貼りつけ リプレイボタン省略

盤の状態を保持する変数(配列) boolean bombset[8][8]; //爆弾がセットされているか? ○ 桝目の個数分の要素を持つ配列(64個) ○ 要素の型はboolean型 ○ trueなら爆弾あり!  falseなら爆弾なし   boolean  opened[8][8]; //桝目がオープンされているか? ○ 桝目の個数分の要素を持つ配列(64個) ○ 要素の型はboolean型 ○ trueなら開かれている!  falseならまだ!  

盤の初期化1 64個の要素全部を設定 void init_board() { //桝目の状態初期化 for(int i = 0;i < SIZE;i++) for(int j = 0;j < SIZE;j++) opened[i][j] = false; bombset[I][j] = false; b[i][j].setLabel(" "); } オープンされていない 爆弾はセットされていない ボタンの文字は空白

盤の初期化2 爆弾の個数分繰り返し //爆弾の位置設定 for(int i = 0;i < NOB;i++) while(true) { int x = (int)(Math.random() * 8.0); int y = (int)(Math.random() * 8.0); if(!bombset[x][y]) bombset[x][y] = true; break; } 同じ位置にならないように 0~7の乱数 まだ爆弾がセットされていなければ 爆弾をセット 0.0 <= Math.random() < 1.0 の乱数

イベント処理1 public void actionPerformed(ActionEvent ae) { //終了ボタンの場合 if(ae.getSource() == b_end) System.exit(0); //継続ボタンの場合 else if(ae.getSource() == b_cont) init_board(); :

イベント処理2 64個のボタンのうちどのボタンが押されたのか調べる int ii = -1; int jj = -1; for(int i = 0;i < SIZE;i++) for(int j = 0;j < SIZE;j++) if(ae.getSource() == b[i][j]) { ii = i; jj = j; } 押されたのはii行jj列のボタン

イベント処理3 開かれてなかったら 爆弾があったら 爆弾がなかったら if(ii >= 0 && !opened[ii][jj]) { //爆発! if(bombset[ii][jj]) disp_bomb(); //爆弾の位置表示 else //ラッキー   //周囲の爆弾の個数表示   b[ii][jj].setLabel(" " + count_bomb(jj, ii));   //状態変数openedをtrueに   opened[ii][jj] = true; } 開かれてなかったら 爆弾があったら 爆弾がなかったら

隣接する8個の桝目 bombset[y-1][x-1] bombset[y-1][x] bombset[y-1][x+1]

周りの爆弾の個数 //y行目、x桁目の周りの爆弾の個数を調べる //周囲の爆弾の個数 int count = 0; if(y > 0 && x > 0 && bombset[y - 1][x - 1]) count++; //左上チェック if(y > 0 && bombset[y - 1][x]) count++;         //上チェック if(y > 0 && x < 7 && bombset[y - 1][x + 1]) count++; //右上チェック if(x > 0 && bombset[y][x - 1]) count++;         //左チェック if(y < 7 && x > 0 && bombset[y + 1][x - 1]) count++; //左下チェック if(y < 7 && bombset[y + 1][x]) count++;         //下チェック if(y < 7 && x < 7 && bombset[y + 1][x + 1]) count++; //右下チェック if(x < 7 && bombset[y][x + 1]) count++;         //右チェック return count;

最後に 今回のプログラムで使用したクラスは… Button、Panel、Frameなどである 使用したLayoutは…  今回のプログラムで使用したクラスは… Button、Panel、Frameなどである  使用したLayoutは… FlowLayout、BorderLayout、GridLayoutである  イベント処理は… actionPerformed( )である  今後の課題は… 現在の爆弾の個数、オープンした桝目の数な どを表示するようにする