#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 han_, int fu_) : han(han_), fu(fu_) { } int Score::base_points() { if(han < 5) { // Normal hand. return max(roundup(fu, 10) << (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); }