我流でプログラミングを勉強してきました。
なんとか動作するプログラムはこちらで質問させて頂きながら完成させることは出来ましたが、どうしても読みづらいプログラムになってしまっていると感じます。
こう工夫すれば、より読みやすくなる分かりやすくなるといったポイントがあれば教えて下さい。
加えて、エラー処理(例えば、ひっくり返す場所がないので自動的にパスをする・引っくり返すものがない場所には置けない)等をどうやって実装するべきか教えて頂けると幸いです。
以下長文となりますがプログラム全文をはらせていただきます。
package othello;
public class Main {
public static void main(String[] args){ Board b = new Board(); Piece p = new Piece(); p.pieceSetting(); b.putPiece(); }
}
package othello;
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Board implements ActionListener{
Piece[][] pButton; JFrame frame = new JFrame("Othello"); JPanel panel = new JPanel(); JButton[][] b = new JButton[8][8]; public Board(){ frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(680,700); panel.setLayout(null); panel.setBackground(Color.WHITE); frame.add(panel); pButton = new Piece[8][8]; for(int i=0; i<64; i++) { int x = i/8; int y = i%8; pButton[x][y] = new Piece(); pButton[x][y].setSize(80,80); pButton[x][y].setBounds(x*80+10, y*80+10, 80, 80); pButton[x][y].setMargin(new Insets(0,0,0,0)); pButton[x][y].setBackground(Color.GRAY); pButton[x][y].setFont(new Font("MSゴシック", Font.PLAIN, 60)); pButton[x][y].setActionCommand(String.valueOf(i)); //ボタン判別に利用 pButton[x][y].addActionListener(this); panel.add(pButton[x][y]); } } public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); System.out.println(str); int data = Integer.parseInt(str); int x = data/8; int y = data%8; if(Piece.p[x+1][y+1] == 0) { Piece.p[x+1][y+1] = Piece.turn; Piece.checkRev(x+1,y+1); putPiece(); if(Piece.turn == Piece.BLACK){ Piece.turn = Piece.WHITE; }else{ Piece.turn = Piece.BLACK; } } } public void putPiece(){ for(int i=0; i<100; i++) { int x = i/10; int y = i%10; if(Piece.p[x][y] == Piece.BLACK) { pButton[x-1][y-1].setText("●"); } else if(Piece.p[x][y] == Piece.WHITE) { pButton[x-1][y-1].setText("○"); } } }
}
package othello;
import javax.swing.JButton;
public class Piece extends JButton{
static int[][] p = new int[10][10]; public static final int OFFMAP =-1; //盤外 public static final int NULL = 0; //コマが無いマス public static final int BLACK = 1; public static final int WHITE = 2; static int turn = BLACK; public void pieceSetting(){ for(int i=0; i<100; i++) { int x = i%10; int y = i/10; if(x==0 || x== 9 || y==0 || y==9) { p[x][y] = OFFMAP; } else { p[x][y] = NULL; } } p[4][4] = BLACK; p[5][5] = BLACK; p[4][5] = WHITE; p[5][4] = WHITE; // 初期配置 } public static void doRev(int sx, int sy){ int saveX = sx; int saveY = sy; int mx = -1; int my = -2; // for文で+1スタートするので-2から始める for(int i=0; i<8; i++) { sx = saveX; sy = saveY; int revX = saveX; int revY = saveY; if(mx == 0 && my == -1) { my = my + 2; } else if(my != 1) { my++; } else { mx++; my = -1; } while(p[sx+mx][sy+my] != turn && p[sx+mx][sy+my] > 0) { sx = sx+mx; sy = sy+my; } if(p[sx+mx][sy+my] == turn){ while(p[revX+mx][revY+my] != turn && p[revX+mx][revY+my] > 0) { p[revX+mx][revY+my] = turn; revX = revX+mx; revY = revY+my; } } } }
}
回答2件
あなたの回答
tips
プレビュー