アクセスカウンタ

プロフィール

ブログ名
CrossSoft 開発者ブログ
ブログ紹介
PC用クイズゲームを作る男達のブログです。

タイトル: Quiz Hackers
ジャンル: 電脳対戦クイズゲーム
DLページはこちらから
zoom RSS

Quiz Hackers 公開!!

2013/03/11 00:26
お待たせいたしました、サークルCrossSoftがお届けする、電脳クイズバトル
Quiz Hackers
DLはこちら


画像

画像
画像
記事へブログ気持玉 / トラックバック / コメント


問題文描画処理の修正

2011/10/14 21:48
鯖です
息抜きに書きたいと思ったので書きます。


前回の問題文描画処理では、プログラムのループ回数を元に描画時間を設定していました。
ゲームは60FPSなので、5FPSぐらいで一文字描画かな みたいな感じでした


ここにきて気づいたことなのですが、パソコン自体の処理速度が低下した場合、安定して60FPSで処理することができません。
このことによって、問題描画時間がFPSによって左右されてしまうことに気づきました。
仮に、30文字を全て描画する際に150ループすることで描画が完了します。
これを秒単位に直すと、0.016*150=2.4s程度になります。
ここで、処理速度が半分30FPSになった場合の時間を計算してみます。
単純に処理速度が2倍になるので、1ループの処理時間は2倍の0.032sになります。
これを秒単位に直すと、0.032*150=4.8s程度になります。

よって、何らかの影響でパソコンの処理速度が半分になった場合、問題文を30文字描画する時間に2.4sの差が生じてしまいました。
問題文が描画される時間が、全ての状況で誤差なく提供できなければ、ユーザー体験が人によってそれぞれ変わってきてしまいます。
これは、ゲームを提供する側として問題があります。
また、クイズゲームとしての公正性が失われてしまいます。(そこまで厳密に必要かは不明ですが)


そこで、FPSに頼っていた描画の更新タイミングを、実際の経過時間から算出する様に変更します。
変更内容としては、今までFPSを元に呼び出していた描画関数を、経過時間から算出した文字描画数を満たすように変更します。

今までのプログラムの概要です
if(FPSの5ループに一回)
{
  描画する文字列に一文字追加
}
描画処理


今回の修正後の概要です
while(現在描画している文字数 < 経過時間から算出した描画しなければならない文字数)
{
  描画する文字列に一文字追加
}
描画処理


実際の細かな描画処理は共通のまま、文字列の更新タイミングを変更しました。
これによって、FPSの変動に関係なく、同じ時間経過で問題文が描画されるようになりました。
ゲームの制限時間の処理も実際の経過時間から算出しているので、FPSによる変化はありません。
(ちなみにこれは、ゲームの不正プレイ対策にも効果を発揮します)


今回は、こういう感じでした。
動画上げるといいつつ何もしてませんでした、すみません。
いつかね、いつか・・・

記事へブログ気持玉 / トラックバック / コメント


野望に萌える男達

2011/10/04 00:01
画像


お久しぶりでございます!
キャラクターデザイン担当のゼイタでございます。

ブログの方はある事情から放置してしまっていましたが…
開発の方は着々と進んでいるのでございますよ!…そりゃあもう!

そうそう、上の絵ですが…
記念すべき第1作、というか初期バージョンのアバター(=操作キャラ)達なんです!
残念ながら名前はまだないのですが、男の子と女の子から選ぶ、オーソドックスな形になります。

アバターはバージョンアップにつれて増やしていく予定で、
まだ出演を控えているキャラクター達はまだまだたくさん…やることはまだまだ多そうです。
それに着せ替えも加わりまして、なかなか楽しいことになります。

頑張ります…。


そうそう、キャラクターといえば、他にも「教官」と呼ばれる主人公(=プレイヤー=画面の前のあなた)
教育・補佐する頼れる?人たちも登場します。

そのうちお見せ出来ると思いますが、なかなかに個性的な面子が揃ってます!
そちらの方もお楽しみに。


それではこの辺りでアディオス!




ちなみにいつかのクイズの答えは×です。

『ほうちょう』はほぼ必ず9999ダメージを叩き込めるので、
頑張っても4000ぐらいの『エクスカリー』にはかないません。

ちなみにエクスカリパーは攻撃力が100で、命中率100%、ダメージは必ず1になるというのも覚えておきましょう。

アディオス!
記事へブログ気持玉 / トラックバック / コメント


進捗具合と思うところ

2011/09/06 14:14
雑務担当の一条と申します。
企画の他の2名にせっつかれてブログの記事を作ってみましたが、まあ特に言うことがないというね……。

それなりにプロジェクトは進んではいますが、まだやることは山積している状態で。
グラのレイアウトもなんだか某クイズゲーのをそのまま引っ張ったような感じになってしまって、もっとぶっ飛んだものにすればいいのかというと、それはそれで見辛くなるという難点があって難しい。

いっそ差別化を図るために、ある程度のものを犠牲にした方がいいのか悩みどころ。

とりあえずは完成に持ってくことが最重要なので、その辺は後回しでもいいかもしれない。
記事へブログ気持玉 / トラックバック / コメント


便利な共有ツール

2011/09/04 18:19
書く内容がないので、今回のプロジェクトで使用している便利なツールを紹介したいと思います。

私たちの会議では主にskypeを使用していますが、音声だけでは意思が伝わらないことがあります。
画面のイメージや、デザインなどを考える際は、どうしてもイメージを共有したいものです。

そこで登場するのが、FlockDrawというペイント共有サイトです。
ここでは、webサイト上で共通の画面に参加者が描くことができます。
http://flockdraw.com/

使い方はまず、公式サイトのCreate your sessionボタンをクリックします。
画像


次に、facebookアカウントをコネクトしますか?と聞いてきますので、facebookアカウントを持っていない方は、そんなの結構だよっ と書いてある方のclick here to cancel. ボタンをクリックしてください。
facebookアカウントをコネクトしなくても問題はないので、アカウントお持ちの方はどちらでも構いません。
画像


次にユーザー名を入力して、Joinボタンをクリックしてください。
ユーザー名は半角英数字のみしか入力できません。
画像


そうすると、真っ白なキャンパスが表示されるのでそこに描いていきます。
画像


画面共有の方法は、この画面が表示されている状態のURLを共有したい相手に伝えてください。
相手も上記と同じように参加できれば、画面が共有されるはずです。


記事へなるほど(納得、参考になった、ヘー) ブログ気持玉 1 / トラックバック 0 / コメント 0


マルチバイト文字の描画実装

2011/08/31 15:30
プログラム担当鯖です。
問題描画処理が一段落したので、前回更新したときの思惑通りにマルチバイト文字の処理についてつらつらとキーボードを叩いていきたいと思います。


まず、マルチバイト文字のお話から
ここからはCのプログラム知識がある程度あることを前提にしていきます。
Cで文字列を扱う場合は、char型の配列を用意します。
char型(1byte)ごとに、各文字と対応したACII文字コードが入ることにより、文字列として扱われます。
この場合、ACIIに準拠している文字の場合、何の問題もなく1byte1文字で扱うことができます。
123 abc ABC
などの半角英数字ですね。

では、日本語を扱うときはどうすればいいでしょうか?
普通に今まで通りでいいじゃん と思ってしまうかもしれませんが、
Cで日本語を表す場合(厳密には環境によって左右されると思います)、char型を2byte使用して、日本語を表します。

さて、そこで、困った問題が発生してしまいます。
文字列をある程度の間隔で、別々に分けたい場合があります。(今回のゲームに必要になる処理なのですが)
今までの、ACII文字列の場合は何も問題無く、分割することができます。
まず、6byteの文字列を3byte毎に分けていきます
ex: "abcdef" char[6];
abc char[3];
def char[3];

こんな感じに

では次に日本語の場合
ex: "あいう" char[6];
あ[82] char[3];
[A1]う char[3];

ここで、おかしなことになります。
日本語は2byteで表されるので、3byteで分割してしまうと、ちょうど間にある文字が、前の部分と後ろの部分で別れてしまいます。
今回の例では'い'が該当し、Shift-jisの文字コードが出てきてしまっています。
この場合は、もちろん日本語は正しく表示できなくなります。


だったら、偶数で区切るようにすればいいじゃん? と思いますが、
ACIIの半角英数字が文字列に紛れると日本語の文字もずれてしまい、ぴったし偶数のところで区切れなくなってしまいます。
さて、どうしましょう・・・
鯖は悩みました、うーんと悩みました、むむむと唸りました、ググりました、解決しました

setlocale( LC_CTYPE, "jpn" );
int len = mblen( buff.c_str(), MB_CUR_MAX );
この関数を使うことで、半角英数字なのか、全角文字なのかが判定できるようです。
詳しいことはググってみてください

というわけで、これを使って問題文の描画処理を実装します

const int STRING_X = 30;// 行の最大文字数(半角)
const int STRING_Y = 4;// ウィンドウに表示できる最大行数
const int REFRESH_STRING = 5;// 60Fpsでの何ループか

class QuizData{
private:
  std::string quiz_string;// 問題文
  std::vector<std::string> StringListY;// 実際に画面に描画する文字列
  int now_string_y;// 行数
  int i;// 文字列を一つずつ参照していくためのカウンタ
  int check_i;// 現在描画中の行の文字数を格納
  int count;// カウンタ
public:
  void drawQuiz();
}

void QuizData::drawQuiz()
{
  if(quiz_string.size() > i && count%REFRESH_STRING == 0 && count != 0){
  // 描画文字列が問題文を超えていなければ
    if(StringListY.size() < now_string_y+1){
    // もし、改行していれば、新たにstringをリストに追加
      std::string buff;
      StringListY.push_back(buff);
    }
    std::string buff = quiz_string.substr(i);
    // 問題文から1文字だけ抜き出す
    setlocale( LC_CTYPE, "jpn" );
    int len = mblen( buff.c_str(), MB_CUR_MAX );
    // 判定
    StringListY.at(now_string_y).append(buff.substr(0, len));
    /* 文字の大きさ分だけ、出力用のバッファへコピー */
    check_i+=len;
    i += len;
    /* 文字の大きさ文だけ、先へ進める */
    if(check_i>=STRING_X){
    // もし1行の最大文字数を超えたら改行
      check_i=0;
      now_string_y++;
    }
  }
  count++;
  for(int j=0; j<StringListY.size(); j++)
    DrawFormatString(120, 100+j*FONT_SIZE, 0x000000, "%s", StringListY[j].c_str());
    // 行数分描画
}


今回の一番要の部分は
  int len = mblen( buff.c_str(), MB_CUR_MAX );
  // 判定
  StringListY.at(now_string_y).append(buff.substr(0, len));
  /* 文字の大きさ分だけ、出力用のバッファへコピー */
半角文字か全角文字かを取得した後に、その文字バイト分描画文字列にコピーしています。
これによって、マルチバイト文字での改行処理が行うことができます。
画像

日本語と半角英語yが混ざってる文字列ですが、問題無く描画できています。
今回は画像のみになってしまいますが、時間があれば動画も上げられたらと思います。

記事へブログ気持玉 / トラックバック / コメント


草木も眠る

2011/08/22 02:59
画像


丑三つ時ですね。
こんばんは。CHEATER&GAZELLEの豆腐は生で食べるほう、ゼイタです!

今回は線画レイヤサボってないよとの報告でございます!
なんだかだんだん慣れてきました。人間やる気になればできるものですね!
これ以上は後で心が折れたときに証拠ファイルからつきつけられてしまいますのでやめましょうね…



さて、突然ですが今日から「きょうのもんだい」コーナーをおっぱじめようと思います!
スタッフの個性がにじみ出た偏ってる素晴らしいクイズになると思いますのでお楽しみに!
(完全に無断の為、企画は予告なく終了する場合があります)

コメントで、またはTwitterに貼ったりしながら回答して下されば幸いです。
それでは今日の日はさようなら。


<きょうのもんだい>
ジャンル: ゲーム - ○×クイズ
家庭用RPG「FINAL FANTASYW」のアイテム「ほうちょう」を『なげる』コマンドで投げたときのダメージと
「FINAL FANTASYX」の武器「エクスカリパー」を『なげる』コマンドで投げたときのダメージでは
後者の方が大きい
記事へブログ気持玉 / トラックバック / コメント


続きを見る

トップへ

月別リンク

CrossSoft 開発者ブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる