Здравствуйте!
Для саморазвития и частично портфолио пишу шахматную программу под Андроид. Частично написал логику программы.Но есть подозрение,что это криво###код...
Основная идея в том,чтобы создать интовский массив и в него писать значения-коды фигур,а также другую нужную информацию. В процессе описания возможных ходов фигур выяснилось,что выхожу за границу массива,поэтому он был расширен и шахматная доска "вписана" в него. Поначитался Макконела ,стараюсь следовать его советам.Но...
Прошу помощи в критике кода,а также в советах как правильно сделать .
Спасибо.
| Код | /** * Файл создан 10.04.2012 14:07:46 TODO */ package com.wildchess.Logic;
import com.wildchess.ThirdSystems.ServiceFunctions; import java.math.*; /** * @author Konstantin * */ public class Logic { private int BOARD_SIZE=8; private int Full_Board_Size=24; private boolean FlagOoutofBoard=false; private boolean FlagWhiteBlack=true; // для функции битых полей- true/false- белые/черные private int FireWhiteBlack=100; Logic logic=new Logic(); ServiceFunctions service=new ServiceFunctions(); private int board[][]; // описываем шахматную доску. private int FireBoard[][]; // обьявляем доску ,в которой описываются "простреливаемые" поля. public Logic() // 1.инициализировать доску фигурами. // 2.заполнить остальное простарнство числом 666. { setBoards(new int[getFull_Board_Size()][getFull_Board_Size()]); setBoards(ServiceFunctions.InitMass(0, 0)); //инициализируем доску. setFireBoard(new int[getFull_Board_Size()][getFull_Board_Size()]); // инициализация неактивной части доски числом выхода за границу доски-666. setFireBoard(ServiceFunctions.InitMass(8, 8, 666)); setFireBoard(ServiceFunctions.InitMass(8, 16, 666)); setFireBoard(ServiceFunctions.InitMass(16, 24, 666)); setFireBoard(ServiceFunctions.InitMass(16, 8, 666)); setFireBoard(ServiceFunctions.InitMass(24, 16, 666)); //-------------------------------------------------------------------------- } /*Функция создания "битых" полей.На вход получает доску с фигурами * на выход-доску с фигурами и битыми полями. * условные обозначения ,белых/черных * pawn=1/11;Knight=2/22;Bishop=3/33;Ladia=4/44;Qween=5/55;King=6/66 * 100|111-поля,простреливаемые белыми/черными boolean FlagWhiteBlack- флаг указания,для какого цвета фигур рассчитывать битые поля и возможные ходы */ public int[][] GetBattleField(int[][] board,int board_size,boolean FlagWhiteBlack) { if (FlagWhiteBlack==false) // задаем флагом возвращяемые функцией значения битых полей для белых/черных { FireWhiteBlack=111; } for(int X=0;X<board_size;X++) for(int Y=0;Y<board_size;Y++) { switch(board[X][Y]) { // сделать проверку выхода за границу доски // boolean isOutofBoard(int[][] board) case 1: board[X+1][Y+1]=SetOutOfBoard(board[X+1][Y+1],X,Y);;//1 -для белой пешки board[X-1][Y+1]=SetOutOfBoard(board[X-1][Y+1],X,Y);; case 2: // битые поля Коня. board[X-1][Y+2]=SetOutOfBoard(board[X-1][Y+2],X,Y); board[X+1][Y+2]=SetOutOfBoard(board[X+1][Y+2],X,Y); board[X-2][Y+1]=SetOutOfBoard(board[X-2][Y+1],X,Y); board[X+2][Y+1]=SetOutOfBoard(board[X+2][Y+1],X,Y); board[X-2][Y-1]=SetOutOfBoard(board[X-2][Y-1],X,Y); board[X+2][Y-1]=SetOutOfBoard(board[X+2][Y-1],X,Y); case 3: // Слон int i=0; // переменная для перемещения влево-вправо от положения фигуры while((X+i)>BOARD_SIZE+8) { X=X+1; board[X][Y]=FireWhiteBlack; i++; } while((X-i)<BOARD_SIZE) { X=X-1; board[X][Y]=FireWhiteBlack; i++; } case 4 : // Ладья int i=0; while((Y+i)>BOARD_SIZE+8) { Y=Y+1; board[X][Y]=FireWhiteBlack; i++; } while((X-i)<BOARD_SIZE) { Y=Y-1; board[X][Y]=FireWhiteBlack; i++; } case 5: // Ферзь int i=0; // переменная для перемещения влево-вправо от положения фигуры while((X+i)>BOARD_SIZE+8) { X=X+1; board[X][Y]=FireWhiteBlack; i++; } while((X-i)<BOARD_SIZE) { X=X-1; board[X][Y]=FireWhiteBlack; i++; } while((Y+i)>BOARD_SIZE+8) { Y=Y+1; board[X][Y]=FireWhiteBlack; i++; } while((X-i)<BOARD_SIZE) { Y=Y-1; board[X][Y]=FireWhiteBlack; i++; } case 6: // King int i=1; // переменная для перемещения влево-вправо от положения фигуры while((X+i)>BOARD_SIZE+8) { X=X+1; board[X][Y]=FireWhiteBlack; break; } while((X-i)<BOARD_SIZE) { X=X-1; board[X][Y]=FireWhiteBlack; break; } while((Y+i)>BOARD_SIZE+8) { Y=Y+1; board[X][Y]=FireWhiteBlack; break; } while((X-i)<BOARD_SIZE) { Y=Y-1; board[X][Y]=FireWhiteBlack; break; } } } return board; } // проверяем,вышла ли фигура за границы доски.и все. /* * как проверить,вышла ли фигура за границы доски? * 1.увеличить массив до 24х24. * 2.вписать в него доску размером 8х8.таким образом,выхода за границу настоящего массива не будет. * 3.заполнить несуществующий массив кодовым числом ошибки выхода за границу доски- -1. * 4.в функции int[][] GetBattleField(int[][] board) создаются битые поля фигур,выходящие за размеры доски, * но входящие в поле массива. * 5.isOutofBoard проверяет ,вышли ли входные координаты за границу доски и возвращает true|false */ public boolean isOutofBoard(int BOARD_SIZE,int X,int Y) { if((X&Y)>BOARD_SIZE+8) { return false; } if((X&Y)<BOARD_SIZE) { return false; } return true; } /* на вход получаем доску и координты. на выход возвращаем или значение битого поля для белых/черных или возвращаем -1 -признак выхода за границу доски. */ int SetOutOfBoard(int[][] board,int X,int Y) { if(isOutofBoard(BOARD_SIZE,X,Y)==true) { return FireWhiteBlack; } else return -1; } public boolean getFlagOoutofBoard() { return FlagOoutofBoard; } public void setFlagOoutofBoard(boolean flagOoutofBoard) { FlagOoutofBoard = flagOoutofBoard; }
/** * @return the boards */ public int[][] getBoards() { return board; } /** * @param boards the boards to set */ public void setFireBoard(int boards[][]) { this.FireBoard = boards; } public int[][] getFireBoard() { return FireBoard; } /** * @param boards the boards to set */ public void setBoards(int boards[][]) { this.board = boards; } /* * */ /** * @return the bOARD_SIZE */ public int getBOARD_SIZE() { return BOARD_SIZE; } /** * @param bOARD_SIZE the bOARD_SIZE to set */ public void setBOARD_SIZE(int bOARD_SIZE) { BOARD_SIZE = bOARD_SIZE; } public int getFull_Board_Size() { return Full_Board_Size; } public void setFull_Board_Size(int myFull_Board_Size) { Full_Board_Size=myFull_Board_Size; } public int getFireWhiteBlack() { return FireWhiteBlack; } public void setFireWhiteBlack(int myFireWhiteBlack) { FireWhiteBlack=myFireWhiteBlack; } }
|
|