敵の動きを遅くする小技(その1)
将棋やオセロなどのコンピュータ対戦型のゲームで、敵(コンピュータ)が打つ時にちょっと時間をかけるようにする小技を紹介します。
※数字の100は、状況に合わせて適当に変えてください。大きくすると、ゆっくりになります。
1.利用シーン
将棋やオセロなどのゲームを作ってコンピュータ対戦ができるようにした時、プレーヤーが打つとすぐに敵のコンピュータが打ってきてしまい、ちょっと違和感があることがあるでしょう。また、コンピュータがどこに打ったか見逃してしまった、ということがしばしばあるでしょう。しかし小技を使えば、プレーヤーが打ってからコンピューターが打つまでの時間を少し設けることができます。あたかも、コンピューターが少し悩んでから打っているような感じを演出できます。
このテクニックは対戦型ゲームに限らず、コンピュータの動きを遅くしたい様々なシーンで利用できます。
2.小技を使わない場合
下記のプログラムでは、マウスでクリックするとそこに黒丸が描かれ、コンピュータはその右隣に白丸を描きます。小技を使わない場合、黒丸とほぼ同時に白丸が描かれてしまいます。
float px, py;int turn = 0;
void setup() { size(600, 400); background(255);}
void draw() { compSet();}
void mousePressed() { if (turn == 0) { fill(0, 0, 0); px=mouseX; py=mouseY; ellipse(px, py, 100, 100); turn = 1 - turn; }}
void compSet() { if (turn == 1) { fill(255, 255, 255); ellipse(px+100, py, 100, 100); turn = 1 - turn; }}
3.小技を使った場合
小技を使えば、コンピュータは少し時間が経ってから白丸を描きます。コンピューターが少し考えているかのような感じになります。
float px,py;int turn = 0;
void setup() { size(600, 400); background(255);}
void draw() { compSet();}
void mousePressed() { if (turn == 0) { fill(0, 0, 0); px=mouseX; py=mouseY; ellipse(px,py, 100, 100); turn = 1 - turn; }}
void compSet() { if (turn == 1) { if (frameCount % 100 == 0) { fill(255, 255, 255); ellipse(px+100, py, 100, 100); turn = 1 - turn; } }}
※frameCount はProcessingにおけるシステム変数で、プログラムが開始されてからフレーム(画面)が表示されるたびに値が増加していきます。draw関数の中では、ループするたびに1ずつ増えていきます。
※frameCount を使わずに、もっと簡単に敵(コンピュータ)の動きを遅くする方法もあります。( 敵の動きを遅くする小技(その2) )状況に応じて、利用してください。