追記:Javaでオブジェクト指向とリバーシ作成
Javaでオブジェクト指向とリバーシ作成2 - メモ的な何か
前回で一応リバーシ作成は完結しましたが、残っていたパネルへの表示がうまくいってない(更新がボード部分と同時になっていたため、ボードの描画中にいったん消えてしまうようだった)ことを修正しましたのでメモしておきます。
修正方法は修正前は以下のようになっているところを
JFrame -- JPanel(ボード表示) -- JLabel(文字表示)
修正後では以下のように修正しました
JFrame -- JPanel(ボード表示)
|_ JPanel(文字表示)
パネルで描画処理を行っているので、別々のパネルを用意し単純に描画を分けました。(ラベルからパネルにしたのは応用が利くと思ったので)
記述方法は文字表示用のパネルクラスを用意しました。
ConsolPanel.java
package reversi; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JPanel; @SuppressWarnings("serial") public class ConsolPanel extends JPanel { private static final int PANEL_WIDTH = 800; private static final int PANEL_HEIGHT = 50; private String str; public ConsolPanel() { setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); setBackground(Color.BLACK); } public void setString(String str) { this.str = str; } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.WHITE); if (str != null) { g.drawString(str, 10, 20); } } }
文字列をセットして描画を呼べば表示されます。
これをフレームでインスタンス化します。
ReversiFrame.java
public ReversiFrame() { setTitle("リバーシ"); setLayout(new BorderLayout()); ConsolPanel consolPanel = new ConsolPanel(); ReversiPanel panel = new ReversiPanel(consolPanel); Container contentPane = getContentPane(); contentPane.add(panel, BorderLayout.NORTH); contentPane.add(consolPanel, BorderLayout.SOUTH); pack(); }
こんな感じで2つのパネルの配置とボードのパネルに文字表示用のパネルを渡して、ゲームマスターの文字表示が行えるようにしました。
最終的な画面も貼っておきます(あまり変わってないですがw)
ソースはGitHubにPush済みです。
かつjarのアップロードもしました!ダブルクリックで実行できると思います!
先攻黒が自動プレイヤーになってます。(動作確認はJavaSE-1.7で行ってます)
ruihub/java_reversi · GitHub
これにてリバーシは(たぶん)完です!