CUIゲームでの画面クリアなどに関して
Posted: 2010年5月20日(木) 12:38
いつもお世話になっております、山崎です。
先週から、ライブラリを用いずにコマンドプロンプト上で動くような
簡単なゲームを作ってみようかなと考えております。
画像ファイルを用いずに、文字だけで表現する感じです。
OSはXP、VisualStudio2010を使っています。
画面に描かれたものをすべて消去し、また必要なものを書く、
という処理を毎フレーム行おうと考えています
(フレームという言葉で合っているかどうかわかりませんが)。
まずは1秒間にメインループを実行する回数を揃えていこうと思い、
以下のコードを試しに書いて実行しました。
60回ループし、1回ループを実行するのにかかる平均tick数を表示するだけのプログラムです。
CLOCKS_PER_SECは1000だったので、1tick=1msecだと思います。
DXライブラリのように約60fps、1フレームを約16msecで処理したいと考えています。
実行してみたところ、計測される部分の行数は大したことがないはずなのに、
1回のループに36~45tickもかかってしまいました。
この「メインループで毎回system(“cls”)で画面のクリアを行う」という方式では、
Fps60のゲームを作ることは難しいでしょうか。
または、このようなコマンドプロンプトと文字だけのゲームを作るには
どのような方式(画面のクリアや画面出力に関して)をとるのがよいでしょうか。
よろしければご意見をお聞かせください。

先週から、ライブラリを用いずにコマンドプロンプト上で動くような
簡単なゲームを作ってみようかなと考えております。
画像ファイルを用いずに、文字だけで表現する感じです。
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;
}
