/*******************************************************************

  XPUYO   puyo-puyo for X11          (c)1997 CDR/TK  (Tatsuya Kudoh)

  score.c ---- compute the score

  得点計算およびレベル・スピード設定(表示等は行わない)

*******************************************************************/


#include<stdio.h>
#include"xpuyo.h"

static int Multiply;    /* 基本点数に乗ずる倍率               */
static int Total;       /* 一回で消したぷよの数               */
static int Maximum;     /* 消した時つながっていたぷよの最大値 */



/* レベルとスピードを設定 */

void set_level( void )
{
  int i;
  int speed[5][7] = {
    { 1000,750,500,1000,750,500,250 },
    {  900,675,450, 900,675,450,225 },
    {  800,600,400, 800,600,400,200 },
    {  600,450,300, 600,450,300,150 },
    {  400,300,200, 400,300,200,100 },
  }; 

  Level = Sc_block / 210 + Level_start;
  if( Level > 5 )
    Level = 5;

  Colors = Level + 3;
  if( Colors > 6 )
    Colors = 6;

  i = ( Sc_block % 210 ) / 30;

  Speed = speed[Level-1][i];
}



/* 計算開始 (一連鎖目に戻る) */

void init_calc( void )
{
  Multiply = 1;
}


/* 計算開始 (各連鎖ごとに呼ぶ) */

void start_calc( void )
{
  Total = 0;
  Maximum = 0;
}


/* 消したぷよの加算 (消した色ごとに呼ぶ) */

void add_score( int puyo )
{
  Total += puyo;
  Sc_block += puyo;

  if( puyo > Maximum )
    Maximum = puyo;
}


/* 計算 (連鎖ごとに呼ぶ) */

void calc_score( void )
{
  int mul;

  if( Multiply == 1 ){
    if( Total == Maximum ){
      if( Total < 6 )
	mul = 1;
      else
	mul = Total - 4;
    }else
      mul = Total - 1;

    Multiply = 8;

  }else{

    mul = Multiply + Maximum - 4;
    if( mul > 512 )
      mul = 512;

    Multiply *= 2;
  }
  Sc_base = Total * Level * 10;
  Sc_multi = mul;
  Sc += Sc_base * mul;

  set_level();
}
