Changeset 33 for chess


Ignore:
Timestamp:
02/09/09 17:18:36 (13 years ago)
Author:
BegemoT
Message:

pawn improved

Location:
chess
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • chess/chess.jad

    r32 r33  
    11MIDlet-1: Chess Game, , chess.ui.ChessMIDlet 
    2 MIDlet-Jar-Size: 311740 
     2MIDlet-Jar-Size: 312761 
    33MIDlet-Jar-URL: chess.jar 
    44MIDlet-Name: Chess 
  • chess/src/chess/control/BaseController.java

    r32 r33  
    165165            app.getMidlet().display.setCurrent( alert ); 
    166166        } 
    167         setStatus( WAITING_CONNECT ); 
     167        app.getMidlet().showStartScreen(); 
     168        //setStatus( WAITING_CONNECT ); 
    168169    } 
    169170 
     
    315316    } 
    316317 
     318    private void postAskForDraw() { 
     319        post( SystemAction.askForDraw( player ) ); 
     320    } 
     321 
    317322    public void commandAction( final Command c, 
    318323                               final Displayable d ) { 
     
    337342                midlet.showStartScreen(); 
    338343            } else if ( c == ui.askForDrawCommand ) { 
    339                 //todo implement 
     344                postAskForDraw();                 
    340345            } 
    341346        } 
  • chess/src/chess/game/Game.java

    r19 r33  
    3434    private Player owner; 
    3535 
     36    private final King[] kings = new King[2]; 
     37 
    3638    public Game() { 
    3739        //this.owner = owner; 
     
    158160        } 
    159161        activeUnits[player].addElement( unit ); 
     162        if ( unit instanceof King ) { 
     163            final King king = ( King )unit; 
     164            if ( kings[player] != null ) { 
     165                throw new IllegalStateException( "King for " + unit.getOwner() + " is already exists" ); 
     166            } 
     167            kings[player] = king; 
     168        } 
    160169    } 
    161170 
     
    173182 
    174183        final int pIndex = victim.getOwner().ordinal(); 
     184        if ( victim == kings[pIndex] ) { 
     185            kings[pIndex] = null; 
     186        } 
    175187        activeUnits[pIndex].removeElement( victim ); 
    176188        deadUnits[pIndex].addElement( victim ); 
     
    217229        move( ( AUnit )actor, fromX, fromY, toX, toY ); 
    218230 
     231        if ( actor.canTransform() ) { 
     232            final AUnit _actor = ( AUnit )actor.transform(); 
     233            desk[toIndex( toX, toY )] = _actor; 
     234            final Vector units = activeUnits[actor.getOwner().ordinal()]; 
     235            units.removeElement( actor ); 
     236            units.addElement( _actor ); 
     237        } 
     238 
    219239        timings[a.getPlayer().ordinal()] += a.duration(); 
    220240 
     
    235255    public void setListener( final IGameListener l ) { 
    236256        this.listener = l; 
     257    } 
     258 
     259    public int units( final Player p, 
     260                      final int type, 
     261                      final IUnit[] buffer ) { 
     262        switch ( type ) { 
     263            case IUnit.KING: 
     264                final King king = kings[p.ordinal()]; 
     265                if ( king == null ) { 
     266                    return 0; 
     267                } else { 
     268                    buffer[0] = king; 
     269                    return 1; 
     270                } 
     271            default: 
     272                int cnt = 0; 
     273                for ( int i = 0; i < desk.length; i++ ) { 
     274                    final AUnit unit = desk[i]; 
     275                    if ( unit.type() == type && p == unit.getOwner() ) { 
     276                        buffer[cnt++] = unit; 
     277                    } 
     278                } 
     279                return cnt; 
     280            //throw new RuntimeException( "Not implemented" ); 
     281        } 
     282 
    237283    } 
    238284 
  • chess/src/chess/game/IGame.java

    r19 r33  
    5959 
    6060    public void setListener( final IGameListener l ); 
     61 
     62    public int units( final Player p, 
     63                      final int type, 
     64                      final IUnit[] buffer ); 
    6165} 
  • chess/src/chess/game/IUnit.java

    r17 r33  
    1111 */ 
    1212public interface IUnit { 
     13    public static final int KING = 5; 
     14    public static final int QUEEN = 4; 
     15    public static final int BISHOP = 3; 
     16    public static final int CASTLE = 2; 
     17    public static final int KNIGHT = 1; 
     18    public static final int PAWN = 0; 
     19 
     20    public int type(); 
     21 
    1322    public Player getOwner(); 
    1423 
     
    2029     * ïåðåìåñòèòüñÿ, ëèáî ÿ÷åéêè, çàíÿòûå ôèãóðàìè ïðîòèâíèêà, 
    2130     * åñëè îíè ìîãóò áûòü àòàêîâàíû. 
     31     * 
    2232     * @return 
    2333     */ 
    24     public Location[] canMoveTo();     
     34    public Location[] canMoveTo(); 
    2535 
    2636    /** 
     
    3242    /** 
    3343     * @return âîçâðàùàåò íîâóþ ôèãóðó 
    34      * todo âîîáùå-òî ïåøêà ìîæåò ïðåâðàòèòüñÿ â ëþáóþ ôèãóðó 
    35      * íóæåí ìåõàíèçì âûáîðà -- â êàêóþ èìåííî 
     44     *         todo âîîáùå-òî ïåøêà ìîæåò ïðåâðàòèòüñÿ â ëþáóþ ôèãóðó 
     45     *         íóæåí ìåõàíèçì âûáîðà -- â êàêóþ èìåííî 
    3646     */ 
    3747    public IUnit transform(); 
  • chess/src/chess/game/units/Bishop.java

    r29 r33  
    1818        } 
    1919 
    20         public Location[] canMoveTo() { 
     20    public int type() { 
     21        return BISHOP; 
     22    } 
     23 
     24    public Location[] canMoveTo() { 
    2125                _temp.removeAllElements(); 
    2226                final Location l = location; 
  • chess/src/chess/game/units/Castle.java

    r19 r33  
    1313 */ 
    1414public class Castle extends AUnit { 
     15    private boolean virgin = true; 
     16 
    1517    public Castle( final Player player, 
    1618                   final IGame game, 
    1719                   final Location location ) { 
    1820        super( player, game, location ); 
     21    } 
     22 
     23    public int type() { 
     24        return CASTLE; 
     25    } 
     26 
     27    public void setLocation( final Location location ) { 
     28        super.setLocation( location ); 
     29        virgin = false; 
    1930    } 
    2031 
     
    5061    } 
    5162 
    52         protected char getSymbol(final boolean white) { 
    53                 //if( white ) { 
    54                 //      return '?'; 
    55                 //} else { 
    56                 //      return '?'; 
    57                 //} 
     63    protected char getSymbol( final boolean white ) { 
     64        //if( white ) { 
     65        //      return '?'; 
     66        //} else { 
     67        //      return '?'; 
     68        //} 
    5869        return 'C'; 
    59         } 
     70    } 
     71 
     72    public boolean isVirgin() { 
     73        return virgin; 
     74    } 
    6075} 
  • chess/src/chess/game/units/King.java

    r29 r33  
    3434        } 
    3535 
    36         public Location[] canMoveTo() { 
     36    public int type() { 
     37        return KING; 
     38    } 
     39 
     40    public Location[] canMoveTo() { 
    3741                _temp.removeAllElements(); 
    3842 
     
    6266        } 
    6367 
     68    public boolean isVirgin() { 
     69        return virgin; 
     70    } 
    6471} 
  • chess/src/chess/game/units/Knight.java

    r19 r33  
    2121        private static int[] yBuff = new int[8]; 
    2222 
    23         public Location[] canMoveTo() { 
     23    public int type() { 
     24        return KNIGHT; 
     25    } 
     26 
     27    public Location[] canMoveTo() { 
    2428                final Location l = location; 
    2529                fillupBuffer( l ); 
  • chess/src/chess/game/units/Pawn.java

    r19 r33  
    1515public class Pawn extends AUnit { 
    1616 
    17     private boolean virgin = true; 
     17    private int turnNum = 0; 
    1818 
    1919    public Pawn( final Player player, 
     
    2626                 final IGame game, 
    2727                 final Location location, 
    28                  final boolean virgin ) { 
     28                 final int turnNum ) { 
    2929        super( player, game, location ); 
    30         this.virgin = virgin; 
     30        this.turnNum = turnNum; 
    3131    } 
    3232 
    3333    public void setLocation( final Location location ) { 
    3434        super.setLocation( location ); 
    35         virgin = false; 
     35        turnNum++; 
     36    } 
     37 
     38    public int type() { 
     39        return PAWN; 
    3640    } 
    3741 
     
    6064            } 
    6165        } 
    62         if ( virgin ) { 
     66        //äëèííûé õîä 
     67        if ( turnNum == 0 ) { 
    6368            x = l.x; 
    6469            y = l.y + 2 * dir; 
     
    6772            } 
    6873        } 
    69         if ( _temp.isEmpty() ) { 
    70             return EMPTY; 
     74 
     75        x = l.x + 1; 
     76        y = l.y; 
     77        //âçÿòèå ïåøêè íà ïðîõîäå 
     78        { 
     79            if ( game.isValid( x, y ) ) { 
     80                final IUnit u = game.getUnit( x, y ); 
     81                if ( isOpponent( u ) 
     82                        && u.type() == PAWN 
     83                        && ( ( Pawn )u ).getTurnNum() == 1 ) { 
     84                    _temp.addElement( new Location( x, y ) ); 
     85                } 
     86            } 
    7187        } 
    72         final Location[] res = new Location[_temp.size()]; 
    73         _temp.copyInto( res ); 
    74         _temp.removeAllElements(); 
    75         return res; 
    76     }     
     88 
     89        x = l.x - 1; 
     90        y = l.y; 
     91        //âçÿòèå ïåøêè íà ïðîõîäå 
     92        { 
     93            if ( game.isValid( x, y ) ) { 
     94                final IUnit u = game.getUnit( x, y ); 
     95                if ( isOpponent( u ) 
     96                        && u.type() == PAWN 
     97                        && ( ( Pawn )u ).getTurnNum() == 1 ) { 
     98                    _temp.addElement( new Location( x, y ) ); 
     99                } 
     100            } 
     101        } 
     102 
     103        return convertBuffer(); 
     104    } 
    77105 
    78106    public boolean canTransform() { 
    79         if ( player == Player.WHITE && location.y == game.getHeight() - 1 ) { 
    80             return true; 
    81         } 
    82         if ( player == Player.BLACK && location.y == 0 ) { 
    83             return true; 
    84         } 
    85         return false; 
     107        return player.opponent().getBaseY( game ) == location.y; 
     108        //if ( player == Player.WHITE && location.y == game.getHeight() - 1 ) { 
     109        //    return true; 
     110        //} 
     111        //if ( player == Player.BLACK && location.y == 0 ) { 
     112        //    return true; 
     113        //} 
     114        //return false; 
    86115    } 
    87116 
     
    90119    } 
    91120 
     121    public int getTurnNum() { 
     122        return turnNum; 
     123    } 
    92124 
    93         protected char getSymbol( final boolean white ) { 
    94                 //if( white ) { 
    95                 //      return '?'; 
    96                 //} else { 
    97                 //      return '?'; 
    98                 //} 
     125    protected char getSymbol( final boolean white ) { 
     126        //if( white ) { 
     127        //      return '?'; 
     128        //} else { 
     129        //      return '?'; 
     130        //} 
    99131        return 'P'; 
    100         } 
     132    } 
    101133} 
  • chess/src/chess/game/units/Queen.java

    r19 r33  
    1616                  final Location location ) { 
    1717        super( player, game, location ); 
     18    } 
     19 
     20    public int type() { 
     21        return QUEEN; 
    1822    } 
    1923 
Note: See TracChangeset for help on using the changeset viewer.