先週から、ライブラリを用いずにコマンドプロンプト上で動くような
簡単なゲームを作ってみようかなと考えております。
画像ファイルを用いずに、文字だけで表現する感じです。
OSはXP、VisualStudio2010を使っています。
画面に描かれたものをすべて消去し、また必要なものを書く、
という処理を毎フレーム行おうと考えています
(フレームという言葉で合っているかどうかわかりませんが)。
まずは1秒間にメインループを実行する回数を揃えていこうと思い、
以下のコードを試しに書いて実行しました。
60回ループし、1回ループを実行するのにかかる平均tick数を表示するだけのプログラムです。
CLOCKS_PER_SECは1000だったので、1tick=1msecだと思います。
DXライブラリのように約60fps、1フレームを約16msecで処理したいと考えています。
実行してみたところ、計測される部分の行数は大したことがないはずなのに、
1回のループに36~45tickもかかってしまいました。
この「メインループで毎回system(“cls”)で画面のクリアを行う」という方式では、
Fps60のゲームを作ることは難しいでしょうか。
または、このようなコマンドプロンプトと文字だけのゲームを作るには
どのような方式(画面のクリアや画面出力に関して)をとるのがよいでしょうか。
よろしければご意見をお聞かせください。
#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #include "Screen.h" int main() { char KeyCode=' '; clock_t StartFrameTime,FrameTime; int count=0; long total=0; int ave=0; while(KeyCode!=27) //エスケープキーが押されるまで繰り返す { StartFrameTime=clock(); system("cls"); //画面のクリア if(kbhit()!=0) KeyCode=getch(); //処理を止めずにキー入力を得る FrameTime=clock()-StartFrameTime; total=total+FrameTime; printf("ave=%d\n",ave); if(count==60) { ave=total/60; count=0; total=0; } count++; if(FrameTime<16) Sleep(16-FrameTime); } return 0; }
