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

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

  move.c ---- move puyos

  ぷよ移動処理

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

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

static int Next_puyo[2];        /* NEXTぷよの色           */
static int Puyo[2];             /* 現在落ちているぷよの色 */
static int Puyo_x[2],Puyo_y[2]; /* ぷよの座標 */
static int Puyo_dir;            /* 二匹目のぷよのいる方向 0上 1右 2下 3左 */


/* NEXTぷよの色を決め表示 */

void make_next( void )
{
  Next_puyo[0] = rnd( Colors )+1;
  Next_puyo[1] = rnd( Colors )+1;
  put_next( Next_puyo[0],Next_puyo[1] );
}



/* ぷよを表示 */

static void put_puyo( int n )
{
  put_graph( Puyo_x[n],Puyo_y[n],Puyo[n],n*16 );
}



/*ぷよを消す */

static void del_puyo( int n )
{
 put_graph( Puyo_x[n],Puyo_y[n],0,NOTHING );
}



/* 新しいぷよの移動開始。画面が一杯なら 0 を返す。 */

int init_move( void )
{
  if( !ismove(3,2) )
    return 0;

  Puyo[0] = Next_puyo[0];
  Puyo[1] = Next_puyo[1];

  Puyo_x[0] = 3;
  Puyo_y[0] = 2;

  Puyo_x[1] = 3;
  Puyo_y[1] = 1;

  Puyo_dir = 0;

  make_next();

  put_puyo(0);
  put_puyo(1);

  return 1;
}



/* ぷよを一ライン落す。できないときは、0 を返す。*/

int fall_puyo( void )
{
  int n;

  if( ismove( Puyo_x[0],Puyo_y[0]+1 ) && ismove( Puyo_x[1],Puyo_y[1]+1 ) ){
    del_puyo(0);
    del_puyo(1);
    Puyo_y[0]++;
    Puyo_y[1]++;
    put_puyo(0);
    put_puyo(1);
    return 1;
  }else
    return 0;
}



/* ぷよを固定する。*/

void settle_puyo( void )
{
  set_puyo(Puyo_x[0],Puyo_y[0],Puyo[0] );
  set_puyo(Puyo_x[1],Puyo_y[1],Puyo[1] );
}



/* ぷよの移動 */

void move_puyo( int d )
{
  if( ismove( Puyo_x[0]+d,Puyo_y[0] ) && ismove( Puyo_x[1]+d,Puyo_y[1] ) ){
    del_puyo(0);
    del_puyo(1);
    Puyo_x[0] += d;
    Puyo_x[1] += d;
    put_puyo(0);
    put_puyo(1);
  }
}



/* ぷよの回転 */

void rotate_puyo( int d )
{
  int dir,x,y;

  dir = ( Puyo_dir + d + 4 ) % 4;

  x = Puyo_x[0] + Dir_x[dir];
  y = Puyo_y[0] + Dir_y[dir];

  if( ismove( x,y ) ){
    del_puyo(1);
    Puyo_dir = dir;
    Puyo_x[1] = x;
    Puyo_y[1] = y;
    put_puyo(1);
  }else if( dir == 1 || dir == 3 ){
    x = Puyo_x[0] - Dir_x[dir];
    y = Puyo_y[0] - Dir_y[dir];
    if( ismove( x,y ) ){
      Puyo_dir = dir;
      del_puyo(0);
      del_puyo(1);
      Puyo_x[1] = Puyo_x[0];
      Puyo_y[1] = Puyo_y[0];
      put_puyo(1);
      Puyo_x[0] = x;
      Puyo_y[0] = y;
      put_puyo(0);
    }
  }
}
