Android Open Source - it.alcacoop.fourinaline Default Eval Score






From Project

Back to project page it.alcacoop.fourinaline.

License

The source code is released under:

GNU General Public License

If you think the Android project it.alcacoop.fourinaline listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * DefaultEvalScore.java//www. j a  v a  2 s  .c o m
 *
 * Created: 2008/02/24
 *
 * Copyright (C) 2008 Julien Aubin
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
package org.gojul.fourinaline.model;

import java.util.Collection;
import java.util.List;

import org.gojul.fourinaline.model.GameModel.CellCoord;
import org.gojul.fourinaline.model.GameModel.PlayerMark;

/**
 * The default evaluation function of the game for an AI player.<br/>
 * It is based on the works from Keith Pomakis, available 
 * <A href="http://www.pomakis.com/c4/connect_generic/c4.txt">there</A>.
 * 
 * @author Julien Aubin
 */
public final class DefaultEvalScore implements EvalScore
{
  
  /**
   * The serial version UID.
   */
  final static long serialVersionUID = 1;

  /**
   * @see org.gojul.fourinaline.model.TestConnect.EvalScore#evaluate(org.gojul.fourinaline.model.GameModel, org.gojul.fourinaline.model.GameModel.PlayerMark)
   */
  public int evaluate(final GameModel gameModel, final PlayerMark playerMark)
      throws NullPointerException
  {      
    if (gameModel == null || playerMark == null)
      throw new NullPointerException();
    
    return evaluateForOnePlayer(gameModel, playerMark) - evaluateForOnePlayer(gameModel, PlayerMark.getNextMark(playerMark));
  }
  
  /**
   * Evaluates the score for the player which has for mark <code>playerMark</code>.
   * See <A href="http://www.pomakis.com/c4/connect_generic/c4.txt">this document</A>
   * for futher information.
   * @param gameModel the game model to consider.
   * @param playerMark the player mark to consider.
   * @return the score for the player which has for mark <code>playerMark</code>.
   */
  private int evaluateForOnePlayer(final GameModel gameModel, final PlayerMark playerMark)
  {
    int score = 0;
    
    Collection<List<CellCoord>> lines = gameModel.getAllLines();
    
    for (List<CellCoord> line: lines)
    {
      // We treat only once each line.
      // Since we treat all the cells, a line might be treated at
      // a maximum of four times if we do not check if it has already
      // been treated.
      int lineScore = evaluateLine(gameModel, playerMark, line); 
      score += lineScore;
    }
    
    return score;
  }
  
  /**
   * Evaluates the value of the line <code>line</code> in the game
   * model <code>gameModel</code> with the player mark <code>playerMark</code>.
   * @param gameModel the game model.
   * @param playerMark the player mark.
   * @param line the line to consider.
   * @return the value of the line <code>line</code> in the game
   * model <code>gameModel</code> with the player mark <code>playerMark</code>.
   */
  private int evaluateLine(final GameModel gameModel, final PlayerMark playerMark, final List<CellCoord> line)
  {  
    // Formula : score for a cell = 2^(number of cells of this color in the line) if the cell
    // still contains winning positions 0 otherwise.    
    int result = 1;
    
    List<PlayerMark> lineValues = gameModel.getValuesOfLine(line);
    
    for (int i = 0, len = line.size(); i < len && result != 0; i++)
    {
      PlayerMark markTest = lineValues.get(i);
      
      if (markTest != null)
      {
        if (markTest.equals(playerMark))
          result = 2 * result;
        else
          result = 0;
      }
    }
    
    return result;
  }
}




Java Source Code List

android.UnusedStub.java
it.alcacoop.fourinaline.BaseGServiceApplication.java
it.alcacoop.fourinaline.FourInALineDesktop.java
it.alcacoop.fourinaline.FourInALine.java
it.alcacoop.fourinaline.GServiceApplication.java
it.alcacoop.fourinaline.GServiceInterface.java
it.alcacoop.fourinaline.MainActivity.java
it.alcacoop.fourinaline.NativeFunctions.java
it.alcacoop.fourinaline.PrivateDataManager.java
it.alcacoop.fourinaline.PurchaseActivity.java
it.alcacoop.fourinaline.SoundManager.java
it.alcacoop.fourinaline.actors.BoardImage.java
it.alcacoop.fourinaline.actors.Board.java
it.alcacoop.fourinaline.actors.ChatBox.java
it.alcacoop.fourinaline.actors.Checker.java
it.alcacoop.fourinaline.actors.FixedButtonGroup.java
it.alcacoop.fourinaline.actors.IconButton.java
it.alcacoop.fourinaline.actors.ParticleEffectActor.java
it.alcacoop.fourinaline.actors.PlayerBlock.java
it.alcacoop.fourinaline.actors.UIDialog.java
it.alcacoop.fourinaline.billingutils.Base64DecoderException.java
it.alcacoop.fourinaline.billingutils.Base64.java
it.alcacoop.fourinaline.billingutils.IabException.java
it.alcacoop.fourinaline.billingutils.IabHelper.java
it.alcacoop.fourinaline.billingutils.IabResult.java
it.alcacoop.fourinaline.billingutils.Inventory.java
it.alcacoop.fourinaline.billingutils.Purchase.java
it.alcacoop.fourinaline.billingutils.Security.java
it.alcacoop.fourinaline.billingutils.SkuDetails.java
it.alcacoop.fourinaline.client.GwtLauncher.java
it.alcacoop.fourinaline.fsm.FSM.java
it.alcacoop.fourinaline.gservice.GServiceClient.java
it.alcacoop.fourinaline.gservice.GServiceCookieMonster.java
it.alcacoop.fourinaline.gservice.GServiceMessages.java
it.alcacoop.fourinaline.gservice.GServiceNetHandler.java
it.alcacoop.fourinaline.layers.BaseScreen.java
it.alcacoop.fourinaline.layers.GameScreen.java
it.alcacoop.fourinaline.layers.MatchOptionsScreen.java
it.alcacoop.fourinaline.layers.MenuScreen.java
it.alcacoop.fourinaline.layers.OptionsScreen.java
it.alcacoop.fourinaline.layers.SplashScreen.java
it.alcacoop.fourinaline.logic.AIExecutor.java
it.alcacoop.fourinaline.logic.MatchState.java
it.alcacoop.fourinaline.util.Base64DecoderException.java
it.alcacoop.fourinaline.util.Base64.java
it.alcacoop.fourinaline.util.GServiceGameHelper.java
it.alcacoop.fourinaline.util.GameHelperUtils.java
it.alcacoop.fourinaline.utils.AchievementsManager.java
it.alcacoop.fourinaline.utils.AppDataManager.java
it.alcacoop.fourinaline.utils.ELORatingManager.java
org.gojul.fourinaline.model.AlphaBeta.java
org.gojul.fourinaline.model.DefaultEvalScore.java
org.gojul.fourinaline.model.EvalScore.java
org.gojul.fourinaline.model.GameModel.java