game.java

来自「一些很有用的spring的书籍」· Java 代码 · 共 192 行

JAVA
192
字号
package com.apress.springbook.chapter03;

import java.util.List;
import java.util.Stack;

/**
 * Created by IntelliJ IDEA.
 * User: stevend
 * Date: 2-feb-2006
 * Time: 20:40:22
 * To change this template use File | Settings | File Templates.
 */
public class Game implements Ordered {

    private Player server;
    private Stack<Point> points = new Stack<Point>();
    private int order = 1;

    public Game(Player server) {
        this.server = server;
    }

    public Game(Player server, int order) {
        this.server = server;
        this.order = order;
    }

    public int getOrder() {
        return this.order;
    }

    public Game serverPoint() {
        Game newGame = copy();
        newGame.points.add(new Point());
        return newGame;
    }

    public boolean isGameOver() {
        GameStats stats = new GameStats(points);

        if (stats.serverPoints < 4 && stats.receiverPoints < 4) {
            return false;
        } else if (stats.serverPoints == 4 && stats.receiverPoints < 3) {
            return true;
        } else if (stats.serverPoints < 3 && stats.receiverPoints == 4) {
            return true;
        } else if (Math.abs(stats.serverPoints - stats.receiverPoints) == 2) {
            return true;
        } else {
            return false;
        }
    }

    public boolean isServerWon() {
        GameStats stats = new GameStats(points);

        if (stats.serverPoints < 4) {
            return false;
        } else if (stats.serverPoints == 4 && stats.receiverPoints < 3) {
            return true;
        } else if (stats.serverPoints > stats.receiverPoints && stats.serverPoints - stats.receiverPoints == 2) {
            return true;
        } else {
            return false;
        }
    }

    public Game receiverPoint() {
        Game newGame = copy();
        newGame.points.add(new Point(false));
        return newGame;
    }

    public boolean isAdvantageServer() {
        GameStats stats = new GameStats(points);

        if (stats.serverPoints <= 4 && stats.receiverPoints <= 4) {
            return false;
        } else if (stats.serverPoints - stats.receiverPoints == 1) {
            return true;
        } else {
            return false;
        }

    }

    public boolean isAdvantageReceiver() {
        GameStats stats = new GameStats(points);

        if (stats.serverPoints <= 4 && stats.receiverPoints <= 4) {
            return false;
        } else if (stats.receiverPoints - stats.serverPoints == 1) {
            return true;
        } else {
            return false;
        }
    }

    public Game ace() {
        Game newGame = copy();
        newGame.points.add(new Ace());
        return newGame;
    }

    public int getNumberOfAces() {
        int numberOfAces = 0;
        for (Point point : points) {
            if (point instanceof Ace) {
                numberOfAces++;
            }
        }
        return numberOfAces;
    }

    public Player getServer() {
        return server;
    }

    public Game undo() {
        Game newGame = copy();
        newGame.points.pop();
        return newGame;
    }

    private Game copy() {
        Game newGame = new Game(server);
        newGame.points.addAll(points);
        return newGame;
    }

    protected static class GameStats {
        private int serverPoints = 0;
        private int receiverPoints = 0;

        protected int getServerPoints() {
            return serverPoints;
        }

        protected int getReceiverPoints() {
            return receiverPoints;
        }

        private GameStats(List<Point> points) {
            for (Point point  : points) {
                if (point.isServerPoint()) {
                    serverPoints++;
                } else {
                    receiverPoints++;
                }
            }
        }
    }

    protected static interface GameStatsSpecification {
        boolean isSatisfiedBy(GameStats gameStats);
    }

    protected static class GameOverSpecification implements GameStatsSpecification {
        public boolean isSatisfiedBy(GameStats gameStats) {
            if (gameStats.getServerPoints() < 4 && gameStats.getReceiverPoints() < 4) {
                return false;
            } else if (gameStats.getServerPoints() == 4 && gameStats.getReceiverPoints() < 3) {
                return true;
            } else if (gameStats.getServerPoints() < 3 && gameStats.getReceiverPoints() == 4) {
                return true;
            } else if (Math.abs(gameStats.getServerPoints() - gameStats.getReceiverPoints()) == 2) {
                return true;
            } else {
                return false;
            }
        }
    }

    protected static class ServerWonSpecification implements GameStatsSpecification {
        public boolean isSatisfiedBy(GameStats gameStats) {
            throw new UnsupportedOperationException();
        }
    }

    protected static class AdvantageServerSpecification implements GameStatsSpecification {
        public boolean isSatisfiedBy(GameStats gameStats) {
            throw new UnsupportedOperationException();
        }
    }

    protected static class AdvantageReceiverSpecification implements GameStatsSpecification {
        public boolean isSatisfiedBy(GameStats gameStats) {
            throw new UnsupportedOperationException();
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?