サイコロ占い

ホームC#入門講座第2章:疑似サイコロ > サイコロ占い

サイコロ占い

サイコロを振って遊ぼう

余りとifを使うことによって、一応疑似サイコロはできました。もちろんまだまだ改良の余地がありますが、ひとまずそのサイコロを使って遊んでみたいと思います。

サイコロというのは確率を楽しむツールです。確率といえば、占いでしょう。サイコロを利用して、簡単な占いを作ってみます。

(問)

大吉と小吉が 1 / 6 の確率で、
中吉が 4 / 6 の確率で現れる占いゲームを作れ。

今回はこの問題をまずif構文で記述してから、その後swtich構文という新しい構文を使って記述することにします。それほど深い内容はありません。

if構文の場合

using System;
namespace NewWorld
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			DateTime dt = DateTime.Now;
			int x = dt.Millisecond;
			
			int y = x % 6;
			if (y == 0)
				y = 6;
			
			if (y == 1)
				Console.WriteLine("小吉");
			else if (y == 6)
				Console.WriteLine("大吉");
			else
				Console.WriteLine("中吉");
			
		}
	}
}

途中までは前回のプログラムと同じです。サイコロの元になる数字は、現在時刻のミリ秒です。特に理由はないですが、1を小吉に、6を大吉にしてみました。

ここではifとelse ifとelseの使い方を直感的に理解してくだされば十分です。

switch構文の場合

using System;
namespace NewWorld
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			DateTime dt = DateTime.Now;
			int x = dt.Millisecond;
			
			int y = x % 6;
			if (y == 0)
				y = 6;
			
			switch (y)
			{
				case 1:
					Console.WriteLine("小吉");
					break;
				case 6:
					Console.WriteLine("大吉");
					break;
				default:
					Console.WriteLine("中吉");
					break;
			}
			
		}
	}
}

条件分岐が単純でしかもたくさんある場合は、else ifをたくさん使うと見づらくなってしまいます。そのため、switch構文を用いることが多いです。

このプログラムの場合、「条件」になるのは y == ? の?の部分だけですから、switchを使うと非常に見やすくなります。case の後に?の部分がきて、どれにも該当しないものだけdefaultになります。それぞれにbreak;が入っていることに注意してください。

コラム:占いの真実

テレビでよく見かける占いですが、あれは本当に占い師が毎日せっせと占っているのでしょうか。もしかすると、「占いソフト」というものがあって、それを使っているのかもしれません。

人間は非常にあやふやです。「今日はいいことがある」と言われたら、ふとした瞬間にそのことを思いだし、無意識のうちにいいことを捜し出しています。そのような特性を利用し、占いの内容にはあいまいな内容をインプットさせ、複数のデータを組み合わせてプログラムにすれば、占いソフトになるのかもしれません。

占い師はそれを印刷し、テレビ局に見せているのかもしれません。あくまで可能性の話ですが、そのような事実がある確率は何%あるでしょうか。占いの内容を細かく調べ、統計をとればもしかすると規則性が発見できるかもしれませんが、データの内容を頻繁に変えていれば規則性は非常に発見できにくくなります。

このように考えて占いを信じないという人もいるでしょう。ですが、ちょっと考えてみてください。

上のプログラムで「小吉」と出る確率は1/6です。それは、現在時刻のミリ秒が6で割って1余る数だったときに起こる現象です。ではなぜ、あなたがたまたまこのプログラムを実行したときに、ほかの数字にならなかったのでしょうか。もっと言えば、「1になった理由」というのは存在するのでしょうか。

あなたがたまたま残りの5/6の確率ではなく、1/6の確率に当たった時、その時刻のミリ秒とあなたの運命はどのような因果関係があって1/6になったのでしょうか。別に大吉でも中吉でもいいのに、あえて小吉になったのです。それが、「偶然」の神秘です。

たとえプログラムが占いを作っていたとしても、そのプログラムがある占いの結果を吐き出すのはすべて「偶然」という神秘によって導かれています。その偶然を支配するのが「確率を支配する神」なのであって、ここで作ったプログラムは神とみなさんとの架け橋になっていると考えることはできないでしょうか。

偶然とはどのようなものであれ、神秘です。それが「運命の出会い」の偶然であろうと、「疑似サイコロ」の偶然であろうと、「確率を支配する神」によって導かれたのがパートナーであるかサイコロの目であるかの違いです。

コンピュータはしばしば冷酷なイメージをもたれます。ですが、コンピュータには神秘的な面もたくさんあります。それらの多くは、プログラミングをすることによってしか実感できません。ぜひ、そのようなコンピュータの神秘性を味わってください。