/* game main routine */
int game_main(void)
{
	int i;
	char para[64];
	int sr,ab,pd;
	int cx,cy;		/* メインキャラクタの位置 */
	int cdx,cdy;	/* メインキャラクタの移動量 */
	int dr;			/* メインキャラクタの前進(1)か行進か(-1) */
	float cr;		/* メインキャラクタのベクトルの長さ */
	float cw;		/* メインキャラクタのベクトルの角度 */
	float cdw;		/* メインキャラクタの角度変化量 */
	float cww;		/* メインキャラクタのスプライト用の補正角度 */
	int spr_dr;		/* メインキャラクタの方向(スプライトの向きを決める) */
	
	cx=START_CAR_X;
	cy=START_CAR_Y;
	cdx=0;
	cdy=0;
	cr=0.0;
	cw=PAI;
	
	/* バックの初期化(page0を塗る) */
/*	EGB_writePage(egb_work,0);
	EGB_paintMode(egb_work,0x22);
	EGB_color(egb_work,0,0x4321);
	EGB_color(egb_work,2,0x4321);
	WORD(para+0)= 32;
	WORD(para+2)=  0;
	WORD(para+4)=287;
	WORD(para+6)=239;
	EGB_rectangle(egb_work,para);
	EGB_color(egb_work,0,BG_COLOR);
	EGB_color(egb_work,2,BG_COLOR);
	WORD(para+0)= 32+3;
	WORD(para+2)=  0+3;
	WORD(para+4)=287-3;
	WORD(para+6)=239-3;
	EGB_rectangle(egb_work,para);
*/	
	SPR_display(1,8);		/* 全スプライトの表示 */
	
	do
	{
		pad_read(&sr,&ab,&pd);
		if(pd != 0)
		{
			SPR_display(2,8);	/* REDY待ち */
			
			if(pd & 0x01)		/* 上が押されたら､ */
				dr=1;
			if(pd & 0x02)		/* 下が押されたら､ */
				dr=-1;
			cr+=(float)dr*DR;
			if(cr > SPEED_MAX)
				cr=SPEED_MAX;
			if(cr < -SPEED_MAX)
				cr=-SPEED_MAX;
			cdw=0;
			if(ab & 0x02)		/* Bが押されたら､ */
				cdw=DW*dr;
			if(ab & 0x01)		/* Aが押されたら､ */
				cdw=-(DW*dr);
			cw+=cdw;
			if(cw >= 2.0*PAI)
				cw=cw-2.0*PAI;
			if(cw <= -2.0*PAI)
				cw=cw+2.0*PAI;
		}
		else
			cr=0.0;
		/* メインキャラクタの移動 */
		cdx=(int)( cos(cw)*cr);
		cdy=(int)(-sin(cw)*cr);
		cx+=cdx;
		cy+=cdy;
		if(cx < 0 || cx > 238 || cy < 2 || cy > 226)	/* 壁にぶつかったら */
		{
			cx-=cdx;	/* 値を元に戻しておく */
			cy-=cdy;
			cw-=cdw;
		}
		for(i=0;i < 8;++i)	/* 一応､全ての(自車の)スプライトを移動しておく */
			SPR_setPosition(0,1023-i,1,1,cx,cy);
		if(cw >= 0)	/* 角度を正の数にしておく */
			cww=cw;
		else
			cww=2*PAI+cw;
		cww-=2.0*PAI/8.0/2.0;	/* スプライトの向きの補正 */
		if(cww >= 2.0*PAI)		/* 2PAIから､はみ出さないように */
			cww=cww-2.0*PAI;
		if(cww <= -2.0*PAI)		/* -2PAIから､はみ出さないように */
			cww=cww+2.0*PAI;
		spr_dr=(int)(cww*8/(2.0*PAI)); /* 角度を0〜7に分ける */
		for(i=0;i < 8;++i)
		{
			if(i == spr_dr) /* 見せるスプライト */
				SPR_setAttribute(1023-i,1,1,128+4*i,     0);
			else			/* 見せないスプライト */
				SPR_setAttribute(1023-i,1,1,128+4*i,0x2000);
		}
	}while(sr == 0);
	
	SPR_display(0,8);	/* スプライト消去 */
	
	return TRUE;
}