001 ///////////////////////////////////////////////////////////////////////////////
002 // Copyright (c) 2006, Frank S. Nestel, All Rights Reserved.
003 //
004 // This library is free software; you can redistribute it and/or
005 // modify it under the terms of the GNU Lesser General Public
006 // License as published by the Free Software Foundation; either
007 // version 2.1 of the License, or (at your option) any later version.
008 //
009 // This library is distributed in the hope that it will be useful,
010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 // GNU General Public License for more details.
013 //
014 // You should have received a copy of the GNU Lesser General Public
015 // License along with this program; if not, write to the Free Software
016 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
017 ///////////////////////////////////////////////////////////////////////////////
018
019 package de.spieleck.app.turn.scoring;
020
021 import de.spieleck.app.turn.PlayerGameScore;
022 import de.spieleck.app.turn.PlayerScore;
023
024 /**
025 * A ScoringMode for chess results.
026 * <br />
027 * Only knows 1:0, 0.5:0.5, 0:1 as results.
028 *
029 * <p><a href="$URL: https://svn.sourceforge.net/svnroot/jtourney/src/de/spieleck/app/turn/scoring/Chess.java $">$URL: https://svn.sourceforge.net/svnroot/jtourney/src/de/spieleck/app/turn/scoring/Chess.java $</a></p>
030 *
031 * @author Frank S. Nestel
032 * @author $Author: nestefan $
033 * @version $Revision: 2 $ $Date: 2006-03-20 14:33:27 +0100 (Mo, 20 Mrz 2006) $ $Author: nestefan $
034 */
035 public class Chess
036 extends BaseScoring
037 {
038 public PlayerGameScore parseRawScore(String line)
039 {
040 String l = line.trim();
041 if ( "0.5".equals(line) || ".5".equals(line) )
042 return new ChessScore(1);
043 else if ( "1".equals(line) || "1.".equals(line) || "1.0".equals(line) )
044 return new ChessScore(2);
045 else if ( "0".equals(line) || "0.".equals(line) || "0.0".equals(line) )
046 return new ChessScore(0);
047 return null;
048 }
049
050 public String checkScore(PlayerGameScore[] pgs)
051 {
052 if ( pgs.length == 2 )
053 {
054 ChessScore c0 = (ChessScore) pgs[0];
055 ChessScore c1 = (ChessScore) pgs[1];
056 if ( c0.d + c1.d == 2 )
057 return null;
058 return "Sum of scores is "+(c0.d + c1.d);
059 }
060 else if ( pgs.length == 1 )
061 {
062 ChessScore c0 = (ChessScore) pgs[0];
063 if ( c0.d == 1 )
064 return null;
065 return "Single score is "+c0.d;
066 }
067 return "Chess scoring cannot be applied to "+pgs.length+"players";
068 }
069
070 public PlayerGameScore[] adjustScore(PlayerGameScore[] pgs)
071 {
072 return pgs;
073 }
074
075 public PlayerGameScore zeroScore()
076 {
077 return new ChessScore(0);
078 }
079
080 public PlayerScore addPlayers(PlayerScore ps, PlayerScore pgs)
081 {
082 return new ChessScore(((ChessScore)ps).d + ((ChessScore)pgs).d);
083 }
084
085 public static class ChessScore
086 implements PlayerGameScore, PlayerScore
087 {
088 private int d;
089
090 public ChessScore(int d)
091 {
092 this.d = d;
093 }
094
095 public int compareTo(Object o)
096 {
097 if ( ! ( o instanceof ChessScore ) )
098 return -1;
099 return this.d - ((ChessScore)o).d;
100 }
101
102 public String toString()
103 {
104 return Integer.toString(d/2) + ( (d & 1) != 0 ? ".5" : ".0" );
105 }
106 }
107
108 public String toString()
109 {
110 return "Chess";
111 }
112 }