Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: lỗi khi mở rộng tictactoe từ 3*3 lên 6*6

  1. #1
    Ngày gia nhập
    08 2009
    Nơi ở
    hanoi
    Bài viết
    2

    Mặc định lỗi khi mở rộng tictactoe từ 3*3 lên 6*6

    tình hình là e có sửa một bài code tictactoe từ 3*3 lên 6*6 bị mắc 1 lỗi ở phần check win theo hàng chéo
    khi load game như bình thường nhưng khi chạy game thì bị lỗi không chuyển được player

    Code:
    package tictactoe;
    
    import java.awt.*;
    import java.awt.event.*;
    
    class TicTacToe extends Frame {
       String turn = "O";	//value is either "O" or "X"
       Panel board;
       TicTacToeButton button[][];
       Label playerTurn;
       ButtonHandler bH = new ButtonHandler();
       int usedCells = 0;	//number of cells in use
    
       TicTacToe(String title) {
          super(title);
          board = new Panel();
          button = new TicTacToeButton[6][6];
          playerTurn = new Label("Player One's Turn");
       }
    
       void launchGame() {
          board.setLayout(new GridLayout(6,6));
          /* initialize buttons */
          for (int i = 0, count = 0; i < 6; i++) {
             //button[i] = new TicTacToeButton[3];
             for (int j = 0; j < 6; j++, count++) {
                button[i][j] = new TicTacToeButton();
                /* inialize button values to 0,1, 2,...,8 */
                button[i][j].value = (new Integer(count)).toString();
                board.add(button[i][j]);
                /* add listeners to the buttons */
                button[i][j].addActionListener(bH);
             }
          }
          add(board);
          add(playerTurn, BorderLayout.SOUTH);
          /* add listeners for closing the frame */
          addWindowListener( new WindowAdapter() {
             public void windowClosing( WindowEvent event ) {
                System.exit( 0 );
             }
          } );
          /* display */
          pack();
          setVisible(true);
       }
    
       class ButtonHandler implements ActionListener {
          void changeButtonLabel(TicTacToeButton b) {
             b.setLabel(turn);
             b.value = turn;
             /* remove listener */
             b.removeActionListener(bH);
             usedCells++;
          }
    
          //continued on next page
          public void actionPerformed(ActionEvent ae) {
             boolean win = false;
             boolean draw = false;
             int player = 0;
             TicTacToeButton b = (TicTacToeButton) ae.getSource();
             /* change content of button to O or X */
             changeButtonLabel(b);
             /* check for a win */
             /* ngang */
             for (int i = 0; i < 6 ; i++) {
                if ((button[i][0].value).equals(button[i][1].value) &&
                    (button[i][0].value).equals(button[i][2].value)) {
                   win = true;           
                }
             }
             for (int i = 0; i < 6 ; i++) {
                if ((button[i][1].value).equals(button[i][2].value) &&
                    (button[i][1].value).equals(button[i][3].value)) {
                   win = true;           
                }
             }
             for (int i = 0; i < 6 ; i++) {
                if ((button[i][2].value).equals(button[i][3].value) &&
                    (button[i][2].value).equals(button[i][4].value)) {
                   win = true;           
                }
             }
             for (int i = 0; i < 6 ; i++) {
                if ((button[i][3].value).equals(button[i][4].value) &&
                    (button[i][3].value).equals(button[i][5].value)) {
                   win = true;           
                }
             }
             /* dọc */
             /*------------------------------------------------------*/
             for (int i = 0; i < 6; i++) {
                if ((button[0][i].value).equals(button[1][i].value) &&
                    (button[0][i].value).equals(button[2][i].value)) {
                   win = true;
                }
             }
             for (int i = 0; i < 6; i++) {
                if ((button[1][i].value).equals(button[2][i].value) &&
                    (button[1][i].value).equals(button[3][i].value)) {
                   win = true;
                }
             }
             for (int i = 0; i < 6; i++) {
                if ((button[2][i].value).equals(button[3][i].value) &&
                    (button[2][i].value).equals(button[4][i].value)) {
                   win = true;
                }
             }
             for (int i = 0; i < 6; i++) {
                if ((button[3][i].value).equals(button[4][i].value) &&
                    (button[3][i].value).equals(button[5][i].value)) {
                   win = true;
                }
             }
             
             /* chéo */
             /*-------------------------------------------------------*/
           /* if ((button[0][0].value).equals(button[1][1].value) &&
                 (button[0][0].value).equals(button[2][2].value)) {
                win = true;
             } else if ((button[0][2].value).equals(button[1][1].value) &&
                 (button[0][2].value).equals(button[2][0].value)) {
                win = true;
    	}
    */
             for (int i = 0; i < 6; i++) {
                 for (int j = 0; j < 6; j++) {
                 int row=i,col=j;
                if ((button[i][j].value).equals(button[row+1][col+1].value) &&
                    (button[i][j].value).equals(button[row+2][col+2].value)) {
                   win = true;
                    }
                          
                 }
                }
             /* check for a draw */
             if (!win) {
                if (usedCells==9) {
                   draw = true;
                }
             }
             /* Change message */
             String message = "";
    
             //continued on next page
             if (win) {
                if (turn.equals("O")) {
                   player = 1;
                } else {
                   player = 2;
                }
                message += "Player " + player + " wins!";
                /* remove all listeners */
                for (int i = 0; i < 6; i++) {
                   for  (int j = 0; j < 6; j++) {
                      button[i][j].removeActionListener(bH);
                   }
                }
             } else if (draw) {
                message += "It's a draw!";
                for (int i = 0; i < 6; i++) {
                   for  (int j = 0; j < 6; j++) {
                      button[i][j].removeActionListener(bH);
                   }
                }
             } else {
                /* change turn */
                if (turn.equals("O")) {
                   turn = new String("X");
                   player = 2;
                   message += "Player Two's Turn.";
                } else {
                   turn = new String("O");
                   player = 1;
                   message += "Player One's Turn.";
                }
             }
             playerTurn.setText(message);
          }
       }
    
       class TicTacToeButton extends Button {
          String value;
       }
    
       public static void main(String args[]) {
          TicTacToe game = new TicTacToe("Tic-Tac-Toe");
          game.launchGame();
       }
    }

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    %appdata%\Temp
    Bài viết
    819

    ArrayOutOfBoundException: Exception do truy xuất phần tử ngoài kích thước của mảng.
    .::[The best way to predict the future is to invent it]::.
    __________________________________________________ _ - Alan Kay -

  3. #3
    Ngày gia nhập
    08 2009
    Nơi ở
    hanoi
    Bài viết
    2

    vậy bạn có thể gợi ý cho mình cách sửa không :(

  4. #4
    Ngày gia nhập
    03 2009
    Nơi ở
    %appdata%\Temp
    Bài viết
    819

    Bạn kiểm tra chỗ báo exception đó. Dòng 131 ghi to tướng ra thế còn gì
    .::[The best way to predict the future is to invent it]::.
    __________________________________________________ _ - Alan Kay -

Các đề tài tương tự

  1. làm sao Đưa web asp lên mạng
    Gửi bởi nghiapro2589 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 3
    Bài viết cuối: 25-09-2013, 10:23 PM
  2. Kỹ thuật C++ ghi lên đầu tập tin
    Gửi bởi maitrung trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 22-06-2012, 01:19 PM
  3. khắc lên pha lê, in lên pha lê, in ảnh lên pha lê
    Gửi bởi whitecrystal trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 13-12-2011, 11:34 AM
  4. Game Tổ chức cây trò chơi TicTacToe như thế nào?
    Gửi bởi hikagu2000 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 01-03-2011, 05:20 PM
  5. Load csdl lên treeview được,nhưng không hiện lên textbox???
    Gửi bởi hieudiep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 22-10-2009, 01:36 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn