#ifndef COSMO_H
#define COSMO_H

/* main-loop を抜けるフラグの内容 */
#define GAMEOVER	1
#define LOOP_QUIT	2

/* 落下してくるブロック塊 */
static int block[3],nblock[3];	/* 現在のブロックと次のブロック */
static int di;			/* 向き */
static int bx,by;		/* window 上の座標 */
static int ax,ay;		/* array 中の座標 */
static int tb[3],ntb[3];	/* 下になった背景のテンポラリID */

/* ブロックの形状
     [ブロックの向き][ブロックの位置] */
static int xpos[4][3]={{0,0,SIZE},{0,SIZE,SIZE},{SIZE,SIZE,0},{SIZE,0,0}};
static int ypos[4][3]={{0,SIZE,SIZE},{SIZE,SIZE,0},{SIZE,0,0},{0,0,SIZE}};

/* ブロックを動かせるかチェックする位置
     [ブロックの向き][動く方向][チェックする位置] */
static int xcmov[4][3][2]={{{-1,-1},{1,2},{0,1}},{{ 0,-1},{2,2},{0,1}},
                           {{-1, 0},{2,2},{0,1}},{{-1,-1},{2,1},{0,1}}};
static int ycmov[4][3][2]={{{0,1},{0,1},{2,2}},{{0,1},{0,1},{2,2}},
                           {{0,1},{0,1},{1,2}},{{0,1},{0,1},{2,1}}};
static int xcmovstar[3]={-1,1,0}; /* ☆の時 */
static int ycmovstar[3]={ 0,0,1};

/* ブロックを回転できるかチェックする位置
     [ブロックの向き] */
static int xcrot[4]={1,0,0,1};
static int ycrot[4]={0,0,1,1};

/* 着地したブロックとその下の背景のテンポラリID */
static int c_buf[6+2][HEIGHT+1];
static int c_tmp[6+2][HEIGHT+1];

/* ブロックの落下スピード wait*(SIZE/t) (sec) */
static double w,wait1,wait2,wait3;
static int t;		/* t dot づつ落す */

/* ball の出る間隔と ball まであと何ブロックか */
static int ball,ballc;

/* star の出る間隔と star まであと cosmo を何匹殺せばいいか */
static int star,starc;
static int starf; /* 今回のブロック塊はスターか？ */

/* main-loop を抜けるためのフラグ */
static signed int loopf=-1;


#define movable_check(dir) \
 (c_buf[ax+xcmov[di][dir][0]][ay+ycmov[di][dir][0]]==None &&\
  c_buf[ax+xcmov[di][dir][1]][ay+ycmov[di][dir][1]]==None && starf==0) ||\
 (c_buf[ax+xcmovstar[dir]   ][ay+ycmovstar[dir]   ]==None && starf==1)


extern void init_block();

#endif
