[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00533] -= 演算子の数式展開はバグ?解決篇



以下のように、御指摘に従い、すべてSTATICな変数として宣言したところ、
ロジック部分を変更せずに、正常に結果を出力し終了しました。

気持ち的には?な部分が多いのですが、このハード(いや、LSICか?)は、
こう言うこともある、という結論を自分なりに出しました。

と、いうことで、正常に動作したソースを掲載します。ゴミソースでしつれ
いします・・・。


/* WonderWitch用に修正 */
#include <stdio.h>
#include <sys/bios.h>


int key_scan()
{
		switch (key_hit_check()){
		 case KEY_START:
		  text_put_string(10,10,"STARTキーがおされたにゃん");
		  text_put_string(10,11,"しばらくで終了するにゃん");
		  sys_wait(100);
		  bios_exit();
		  break;
		 case KEY_A:
		  text_put_string(10,10,"Aキーが押されたにゃん");
			text_put_string(10,11,"ちょこっとウエイトっす
");
			sys_wait(50);
		  break;
		 case KEY_B:
		  text_put_string(10,10,"Bキーがおされたにゃん");
			text_put_string(10,11,"もいっかいBが押される
までまつっす");
/*			while(key_hit_check() <> KEY_B); */
		  break;
		 case KEY_X1:
		  text_put_string(10,10,"X1キーがおされたにゃん");
		  break;
		 case KEY_X2:
		  text_put_string(10,10,"X2キーがおされたにゃん");
		  break;
		 case KEY_X3:
		  text_put_string(10,10,"X3キーがおされたにゃん");
		  break;
		 case KEY_X4:
		  text_put_string(10,10,"X4キーがおされたにゃん");
		  break;
		 case KEY_Y1:
		  text_put_string(10,10,"Y1キーがおされたにゃん");
		  break;
		 case KEY_Y2:
		  text_put_string(10,10,"Y2キーがおされたにゃん");
		  break;
		 case KEY_Y3:
		  text_put_string(10,10,"Y3キーがおされたにゃん");
		  break;
		 case KEY_Y4:
		  text_put_string(10,10,"Y4キーがおされたにゃん");
		  break;
/*		 case KEY_SOUND:
		  text_put_string(10,10,"SOUNDキーがおされたにゃん");
		  break;
*/
		 default:
		  break;
		}
}


void	main()
{

	static int	capa[] = {88, 49, 18};
	static int	water[3], i, j, n1, n2, tmp;
	static char buff[256];

	text_screen_init();

	/* 2回繰り返す	*/
	for (i = 1; i <= 2; i++)
	{
		n1 = 0; n2 = i;
		water[0] = 88; water[1] = 0; water[2] = 0;

		/* 終了条件まで無限ループ	*/
		for (j = 0;;j++)
		{
			/* */
			key_scan();
			/* */

			/* 画面表示	*/
			/* printf("%2d:(%2d, %2d, %2d)\n", j, 
water[0], water[1], water[2]); */
			sprintf(buff,"%2d:(%2d, %2d, %2d)\n", j, 
water[0], water[1], water[2]);
			text_put_string(0, j%10, buff);

			sys_wait(20);

			if (water[n1] > capa[n2] - water[n2])
			{
				/* 注ぎ先がいっぱいになる	*/
				/* water[n1] -= capa[n2] - water[n2]; 
*/
				water[n1] = water[n1] - capa[n2] + 
water[n2];
				water[n2] = capa[n2];

				if (water[n1] < 0)
				{
					text_put_string(10,10,"water[
n1] < 0 !!!");
					sys_wait(100);
					bios_exit();
					break;
				} 

				/* 次の一手	*/
				tmp = 3 - n1 - n2;
				n1 = n2;
				n2 = tmp;
			}
			else
			{
				/* 注ぎ側が空っぽになる	*/
				water[n2] += water[n1];
				water[n1] = 0;

				/* 終了条件	*/
				if (water[2] == 9)
					break;

				/* 次の一手	*/
				tmp = 3 - n1 - n2;
				n2 = n1;
				n1 = tmp;
			}
		}

		/* printf("%2d:(79,  0,  9)\n", ++j); */
		sprintf(buff,"%2d:(79,  0,  9)\n", ++j);
		text_put_string(0, 1, buff);
	}
}

//*******************************
//  平田 敦  
//  a_hirata@siscom.or.jp
//*******************************


ML Archives