package view;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import model.Player;
public class RecordPanel {
private GameFrame gf;
private Player player;
private JPanel recordPanel; //最終的に全てを貼り付けるパネル
private JPanel centerPanel; //バトルボード、ストックボードを貼り付けるパネル
private JPanel battleBoardPanel; //バトルボードを生成するパネル
private JPanel stockBoardPanel;
private JPanel mine; //自分のストックボード
private JPanel enemy;//敵のストックボード
private JPanel westPanel; //左側のメニュー欄を貼り付けるパネル
private JButton reStartButton; //最初からやり直すボタン
private JButton titleButton; //タイトルボタン
private JPanel eastPanel; //右側の履歴を貼り付けるパネル
private JList list;
private JLabel recordLabel; //履歴から読みだした駒ラベル
private List<int[][][]> recordList;
//コンストラクタ
public RecordPanel(GameFrame gf,Player player){
this.gf = gf;
this.player = player;
recordPanel = new JPanel(new BorderLayout());
initialize();
//-------------リストベタ打ち----------------
recordList = new ArrayList<int [][][]>();
int[][] yx1 = {{-3,-5,-2},{0,-1,0},{0,1,0},{2,5,3}};
int[][] yx2 = {{6,6,6},{6,6,6}};
int[][] yx3 = {{-6,-6,-6},{-6,-6,-6}};
int[][][] zyx = {yx1,yx2,yx3};
recordList.add(zyx);
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
yx1[i][j] *= 10;
}
}
int[][] yx11 = {{-3,-5,-2},{0,1,0},{0,0,0},{2,5,3}};
int[][] yx21 = {{1,6,6},{6,6,6}};
int[][] yx31 = {{-6,-6,-6},{-6,-6,-6}};
zyx[0] = yx11;
zyx[1] = yx21;
zyx[1] = yx31;
recordList.add(zyx);
//----------------------------------------ここまで
}
//レコードパネルを初期化する
public void initialize(){
//真ん中の初期化
centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.X_AXIS));
//ボード部分の初期化
battleBoardPanel = makeBattlePanel();
stockBoardPanel = makeStockPanel();
centerPanel.add(battleBoardPanel);
centerPanel.add(stockBoardPanel);
//右の初期化
eastPanel = makeEastPanel();
//左の初期化
westPanel = makeWestPanel();
recordPanel.add("Center",centerPanel);
recordPanel.add("West",westPanel);
recordPanel.add("East",eastPanel);
}
//履歴用のパネルを生成して返す
public JPanel makeEastPanel(){
JPanel panel = new JPanel();
String[] data = new String[recordList.size()];
int[] before = new int[3];
int[] after = new int[3];
data[0] = "すたーと";
//----------------一手前のレコードと比較するループ-----------------------------
for(int i=1;i<recordList.size();i++){
int[][][] tmpRecord = recordList.get(i-1);
int[][][] record = recordList.get(i);
//----------------------縦のループ-----------------------
for(int y=0;y<4;y++){
//---------------------横のループ-----------------------------
for(int x=0;x<3;x++){
//一手前のレコードと中身が違うなら移動先と移動以前を考える
if(tmpRecord[0][y][x] != record[0][y][x]){
//中身が0なら移動以前いた場所
if(record[0][y][x] == 0){
before[0] = 0; //ボードの種類
before[1] = y;
before[2] = x;
//中身があるが以前と変わっていれば移動後の場所
}else{
after[0] = record[0][y][x]; //駒の種類
after[1] = y;
after[x] = x;
}
}
//-----------縦のループが0,1ならばストックボードのチェックも行う-------------------
if(y<2){
//自分のストックボードの場合の差分チェック
if(tmpRecord[1][y][x] != record[1][y][x]){
if(record[1][y][x] == 6){
before[0] = 1; //ボードの種類
before[1] = y;
before[2] = x;
}else{
after[0] = record[0][y][x]; //駒の種類
after[1] = y;
after[x] = x;
}
}
//自分のストックボードの場合の差分チェック
if(tmpRecord[1][y][x] != record[1][y][x]){
if(record[1][y][x] == -6){
before[0] = 2; //ボードの種類
before[1] = y;
before[2] = x;
}else{
after[0] = record[0][y][x]; //駒の種類
after[1] = y;
after[x] = x;
}
}
}
}
//---------------------横のループここまで-----------------------------
}
//---------------------横のループここまで-------------------------
data[i] = String.valueOf(after[0]) + " " + String.valueOf(after[1]) + "," + String.valueOf(after[2]);
}
//-------------------------比較ここまで-----------------------
list = new JList(data);
panel.add(list);
return panel;
}
//メニュー用のパネルを生成して返す
public JPanel makeWestPanel(){
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
reStartButton = new JButton("もう一度");
reStartButton.addActionListener(new ButtonListener());
panel.add(reStartButton);
titleButton = new JButton("タイトルに戻る");
titleButton.addActionListener(new ButtonListener());
panel.add(titleButton);
return panel;
}
//バトル用のボードを生成する
public JPanel makeBattlePanel(){
JPanel panel = new JPanel(new GridLayout(4,3));
for(int i = 0;i<4;i++){
for(int j = 0;j<3;j++){
recordLabel = new JLabel(i+","+j);
panel.add(recordLabel);
}
}
return panel;
}
//ストック用のボードを生成する
public JPanel makeStockPanel(){
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
mine = new JPanel(new GridLayout(4,3));
enemy = new JPanel(new GridLayout(4,3));
for(int i = 0; i<4;i++){
for(int j = 0; j<3;j++){
recordLabel = new JLabel("testMine"+i+","+j);
mine.add(recordLabel);
recordLabel = new JLabel("testEnemy"+(3-i)+","+(2-j));
enemy.add(recordLabel);
}
}
panel.add(enemy);
panel.add(mine);
return panel;
}
//実装予定 パネルをリセットして最新に更新
public void reSetPanel(){
recordPanel.revalidate();
recordPanel.repaint();
}
public class RecordListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
}
//ラベル付きボタン用アクションリスナー
public class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
}
//レコードパネルを返す
public JPanel getPanel(){
return recordPanel;
}
}