#include "score.h" inline int roundup(int value, int roundto) { return value % roundto ? value + roundto - value % roundto : value; } inline int max(int x, int y) { return x < y ? x : y; } Score::Score(int yaku_, int fu_, int dora_) : yaku(yaku_), fu(fu_), dora(dora_) { } int Score::han() { return yaku + dora; } int Score::fu_rounded() { return roundup(fu, 10); } int Score::base_points() { if(han() < 5) { // Normal hand. return max(fu_rounded() << (2 + han()), 2000); } else if(han() <= 5) { // Mangan. return 2000; } else if(han() <= 7) { // Haneman. return 3000; } else if(han() <= 10) { // Baiman. return 4000; } else if(han() <= 12) { // Sanbaiman. return 6000; } else { // Kazoe yakuman. return 8000; } } int Score::ron() { return roundup(base_points() * 4, 100); } int Score::ron_east() { return roundup(base_points() * 6, 100); } int Score::tsumo() { return roundup(base_points(), 100); } int Score::tsumo_east() { return roundup(base_points() * 2, 100); }