人気雑誌が読み放題♪

コンパイラはVisual C++で、ライブラリ→DXライブラリを使っています。

まさか、処理は一々
このとき文字列出して、キー待ち、画像フェードインして、キー待ち、文字列出して、キー待ち、背景フェードバックして、キー待ち、文字列出して、キー待ち、文字列出して、キー待ち、選択させて....
というのを全てソースに書くんじゃないですよね?

実際にはどうなっているんでしょうか。

ついでですが、ツールを使った参考サイトが多く、中々参考サイトが見つかりませんのでお奨めの参考サイト等あれば紹介していただけると幸いです。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

経験者として言うなら、シナリオの制御とWindowsの制御のC++の部分は分離したほうが作りやすいです。


まず、簡単なスクリプト言語を作成します。
別にCSV形式でも良くて、
コマンド,[テキストとかラベルとか画像ファイル名とか]
コマンドで動作を記述します。テキストを画面に出すとか、ここで入力待ちとか、条件フラグを知らべて分岐とか、指定された画像を表示とか。
で、C++ではこのコマンドに基づいた動作を制御するプログラムを記述します。
rinmaneさんの言われるとおり、Windows周りの制御はC++とDirectXで記述するしか無いですね。

>やはりC++はゲームのようなものには向いていないのですか・・・
>クラスを扱ったことがないのですが、自分なりに頑張ってます!
C++のクラスは、ゲームを作るのに向いていると思いますよ。
    • good
    • 0
この回答へのお礼

スクリプト言語ですか。
丁度Perlの本を持っているので勉強してみたいと思います!
ご回答有難う御座いました。

お礼日時:2009/02/11 22:49

回答No.4とNo.6のzwiですが。


とりあえず落ち着いてください。
何でも言葉の表面で受け取らないで、じっくり考えたり調べたりしてから返事してもらって良いですから。

>スクリプト言語ですか。
>丁度Perlの本を持っているので勉強してみたいと思います!
いや、スクリプト言語と言っても言語仕様を自分で決めて自分でエンジンを作るスクリプト言語なので、Perlを勉強しても意味はありませんよ。Perlの仕様に似せようとしたならスクリプトの作成難易度が高くなりますし。
それこそ、下記サイトの様な高度な世界に。
http://kmaebashi.com/programmer/devlang/index.html
こんなスクリプトまでは必要ないと思うんで簡易型で良いんでよ。No.6で紹介したスクリプトプレーヤー程度で十分です。rinmaneさんが紹介しているExcelを使うのは入力ツールとして便利だからです。別にテキストでも問題は有りませんよ。
    • good
    • 0
この回答へのお礼

はい、落ち着きました。
何しろOKWaveを利用するのは始めてだった為何故か焦っていました。

プログラミング言語...サイトを拝見してきました。
折角ですし、これにも挑戦してみたいと思います。
態々何度もご回答有難う御座いました。

お礼日時:2009/02/12 22:36

DXライブラリのサンプルの中にシナリオのスクリプトエンジンのサンプルがありますよ。


http://homepage2.nifty.com/natupaji/DxLib/dxsamp …
「スクリプトプレーヤー」ってのがそれです。ソースコードが含まれてますので参考になると思いますよ。
まったくC++のクラス化されていないのでC言語記述ですが。
    • good
    • 0

No.3です。



他の方のご回答を拝見していて、
ご質問を勘違いしていたことに気付きました(汗

キーイベントや文字列表示等はもちろん1カ所書くだけですよ。

他の方も書かれている通りに、まずはデータをどう持たせるか…
その部分の設計からです。

私の場合なら…

1.エクセルで画面ページ単位のテキストを作る。
この時にキーワード(用語説明画面に飛びたいワード等)は
太字等にしておきます。

2.1を元にExcel VBAでキーワードを独自のタグで囲み、
テキストを出力。

3.上記のテキストをVC++で必要に応じて随時読み込む。

というような感じです。

テキストをバイナリにしたり、暗号化したり…
というのは必要に応じてご自由に。

こうしておけば、
キーイベント処理、読み込み処理、表示処理、フェード処理、等々…
1つの関数で済みますよ。

No.4の方が仰る通り、
ある程度複雑なことをしたい場合はC++のが断然良い…
というか、それ以外の選択肢はほぼないと思います。

まあ、Flash等でもできますが^^;

以上、少しでもご参考になりましたら幸いです。
    • good
    • 0
この回答へのお礼

やはり一つの関数ですむものでしたか!
ではデータの設計の方から頑張りたいと思います(正直Excelは苦手ですw
ご回答有難う御座いました。

お礼日時:2009/02/11 23:04

VC++ & DirectXで商用ゲームを何本か開発したことがあるプログラマです。



実際そのまさかですよ(笑)
全て手作業で、ユーザのあらゆる動作を想定してコーディングします。
ウィンドウモード、フルスクリーンモード両方とか、
ユーザが最小化してから、元に戻した場合だとか…全てです(笑)

だからゲーム開発には金と時間がかかるんですよ。
徹夜当たり前の業界だというのがお解り頂けたでしょうか(笑)

ちょっとだけ余談で愚痴(?)を書きます。
しかもゲーム会社の場合だとディレクター等が企画したものを
実現させていきます。
「それはないでしょ」ってな仕様も力関係によっては、
実現させなきゃいけません。

こういう実情を知らないユーザが
「クソゲー」だの「プログラマが悪い」だの言うのを聞くと
ちょっとだけイラッとします(笑)
まあ、そんな実情知らなくて当然なんだから仕方ないんですけどね(笑)

参考にするのはDirectX関連の書籍ですね。(高いですが)
膨大なソースになるので、参考になるサイトは無いと思います。
もちろん、処理の一部ならあると思いますが。

簡単なノベルゲームなら1人月といったところでしょうか。
ある程度、自作のライブラリを作られているなら
もっと早いと思います。
ノベルゲームならデバッグ期間もそんなにかからないと思います。

以上、少しでもご参考になりましたら幸いです。
    • good
    • 0

ノベルゲームを作成したことはないのであくまで推測ですが、


システムとデータは分離するのが一般的だと思われます。

すなわち、シーンごとの文字列と呼び出す画像番号、次のシーン番号などをデータとして置いておく。

システム側ではシーン番号に応じて、
・対応する画像を読み込みフェードイン表示させる
・文字列を読み込み表示する(必要なら1文字ずつ)
・キー入力を待つ(このときに特殊なキーが押されたら保存等のルーチンへ飛ぶ)
・次のシーン番号を読み込み、次の処理へ回す
などの機能を実装するのでは。
    • good
    • 0
この回答へのお礼

システムとデータは分離するものなのですか!
危うく一緒にするところでした。
ご回答有難う御座いました。

お礼日時:2009/02/11 14:29

ノベルゲームを作るというのが目的なのでしたら、やっぱりNScripterみたいな、そういうゲームを作るためのスクリプトを使った方が良いですよ。


C++は関数とかもかなり細かいレベルで扱う事が出来るから、単調なソースを書こうとしたら、無駄に長くなってしまう。

それでもC++で作るのでしたら、基本的なパターンの処理をすべてクラスとして作っておいて、外部のデータファイルを読み込み、クラスで解析をして、ゲームとして動かす、とか。
そんでもって、実際にノベルゲームの内容そのものは
テキストファイルに書いたりするとか、データファイルを作成するための簡単なプログラムでも作っておくとか、
そんなところじゃないですかねぇ
    • good
    • 0
この回答へのお礼

やはりC++はゲームのようなものには向いていないのですか・・・
クラスを扱ったことがないのですが、自分なりに頑張ってます!
ご回答有難う御座いました。

お礼日時:2009/02/11 14:29

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qノベルゲームを作ろうとおもっています。

はじめまして。
私はゲーム(RPG)を将来的に作ろうと思っています。
まずはノベルゲームを作ろうと思い、
「0からのゲームプログラミング」(サイト)
「明解C言語 入門」(柴田望洋著)
「明解C言語 実践」(柴田望洋著)
を参考にしています。

ところがこの「0からはじめる…」のサイトは、シューティングゲームを作ることを例にしています。
私が作りたいのはノベルゲームですので、「ちょっと違うかな…」と思っていました。
私が理解している範囲は、「0から…」の言語編あたりまでです。
将来を考え、C言語でノベルゲームを作りたいのですが…

■C言語(C++)で作るノベルゲームの、ガイド的な参考サイトはありますか?
(検索すると、LiveMaker、吉里吉里等が検索されてしまいます)

こちらの質問1点をよろしくお願いします。

Aベストアンサー

質問内容からややそれますが、
初心者の人がノベルツール作成に着手する際の指針を。

---
Windowsで作ると過程して、

0.まずC言語に習熟。
文字列の扱いやファイル操作に慣れましょう。

1.Windowsアプリケーション作成の基礎を身につける。
・ゲームで使うのは、ウインドウ表示、文字表示、画像表示、
描画、タイマー、ファイルの扱い、イベント処理など。
・サイト「猫でもわかるプログラミングWindows SDK編」その他
・本「Windowsゲームプログラミング 」
(http://www.amazon.co.jp/gp/product/4797325453/)
ゲームでまず使うであろうAPI群だけがコンパクトに収録されていて
非常に良い本。

2.アドベンチャーゲームで使う、「シナリオスクリプト」の処理の
基本的な流れの感触をつかむ。
以下サイトは、"コンソールベースの"アドベンチャーゲームのソースコード。
http://www.marchen.to/_old/works.html
貴重なチュートリアル的資料ですね…。ありがたや…
(※ちなみにこれはベーマガの記事)
----

これらは「とりあえず」必須。
で、ここまで身につければ、
「Windowベースの」、非常に簡単なノベルゲームなら自力で作れると思います。
---

これ以降はちょっとレベルが上がるかも。
解説文章のみならず、ソースコード自体から処理を読みとる力も必要になってきます。

・すでに上がっている坂本千尋さんの本など。(C++。C++入門者の"実践用"にいいかも)
・「Cマガジン」(休刊)のバックナンバー(C++)。
 単行本化してくれないかな~。
・http://hobbyland.sakura.ne.jp/HLS/Seminer_B/Seminer_top.html
(C言語+WinAPI)
・ネット上にある「簡単なノベルゲーム」のソースコードを見る。
---

残念ながら、簡単なノベルゲームといえど、やることはそれなりに多いです。
とりあえず0~2。

質問内容からややそれますが、
初心者の人がノベルツール作成に着手する際の指針を。

---
Windowsで作ると過程して、

0.まずC言語に習熟。
文字列の扱いやファイル操作に慣れましょう。

1.Windowsアプリケーション作成の基礎を身につける。
・ゲームで使うのは、ウインドウ表示、文字表示、画像表示、
描画、タイマー、ファイルの扱い、イベント処理など。
・サイト「猫でもわかるプログラミングWindows SDK編」その他
・本「Windowsゲームプログラミング 」
(http://www.amazon.co.jp/gp/produc...続きを読む

Q【Cか】ノベルゲーム【Javaか】

情報工学科(進学予定)の大学1年生で、専門的なことはまだやっていません。
1年のうちに趣味と学業をかねてプログラムを少しやっておこうと思い、
ビジュアルノベル系のゲームが好き、フォトショップなども使えることから
ノベルゲームを1から作ろうと前々から思っていました。
ですが、どの言語にするかきっちり定まらず、結果CとJavaの入門書を終えた段階にいます。
要はどっちつかずな状態です。
ちなみにプログラムのお勉強という意味合いも含め、NScripterなどは使うつもりはありません。
――初めはCをやっていたのですがCでGUIを扱うにはWin32API?なるものが必要だと知り、そして
Javaだと比較的簡単に扱えると知って、Javaをはじめ、
しかし今振り返ってみてCとJava、どちらにするか絞りきれません。
なにかアドバイスいただけたらと思います。
よろしくお願いいたします。

Aベストアンサー

ノベルゲームって、シナリオをC/C++やJavaで直接記述する事は少ないと思います。これは、チームでの開発において、シナリオを担当する者がプログラミング言語で記述するのでは手間がかかりすぎてしまうのが理由だと思います。
そこで、いわゆるオーサリングツール(Flashほど高度ではないにしても、そういうもの)を自作したり、スクリプトと呼ばれる比較的簡単な言語(NScripterというのは使った事が無いですが、名前から想像するとそういうものだと思う)で解りやすい形式で記述し、コンパイルしてシナリオデータを作成するわけです。
プログラムはそのデータを読み込んで再生する役割になります。java.exeがバイトコードを実行するのと同じような仕組みを自分で作成します。

そういう手順を踏襲するのであれば、オーサリングレベルではJavaを使い、実行環境はC/C++というのが面白そうです。
力業で絵を表示して文字を表示して音を出すの繰り返しよりも、切り離してしまった方が設計する力が身に付くと思いますし、C/C++とJavaは両方使えた方がいいと思いますので、お勧め出来ます。

個人的にはJavaCC等でコンパイラを作るのが面白そうだと思います。卒論にも使えそうなネタを盛り込んでいくのがいいんじゃないでしょうか。

ノベルゲームって、シナリオをC/C++やJavaで直接記述する事は少ないと思います。これは、チームでの開発において、シナリオを担当する者がプログラミング言語で記述するのでは手間がかかりすぎてしまうのが理由だと思います。
そこで、いわゆるオーサリングツール(Flashほど高度ではないにしても、そういうもの)を自作したり、スクリプトと呼ばれる比較的簡単な言語(NScripterというのは使った事が無いですが、名前から想像するとそういうものだと思う)で解りやすい形式で記述し、コンパイルしてシナリオデー...続きを読む

Qゲーム開発がしたい。学ぶべきはC++かC#か。

現在、小さな事務系ソフトウェア開発会社でプログラミングをやっている者です。

思う所あって、ゲーム系の会社への転職を考えています。
応募にあたって作品の提出が必要なことは存じていますが、
どの言語を勉強し、開発すべきかで迷っています。

開発したいゲームとしては、STGかRPGで考えています。
2Dか3Dかは特にこだわりがありません。

過去に行ったプログラミングは、ゲームの関係の薄いものばかりで、
「ゲーム開発」について本格的に学んだことはありません。
学生の頃はロボットを制御するために、C言語のプログラムを書いていました。
PCとマイコンのシリアル通信のために、C#でwindowsアプリケーションも作りました。
C++もほんの一時期だけ使っていました。
卒業してから日が浅いので、これらの知識はまだある程度あります。
会社ではaspxとJavaScriptでWebページの外面、内部の動作をVBで行なっています。

触れたことのあるプログラミング言語を理解度順に並べたら多分こんな感じです。
VB≒C#>C>JavaScript>>>C++

C#とVBは似通った言語なので、VB中心の現在でもなんとなく理解できます。
現在最もメジャーらしいC++が最も経験が少なく、自信がないです。

軽く調べた感じでは、現在のゲーム開発はC++が多いが、
今後はC#やJavaも増えるかもという感じでどちらでゲーム開発を本格的に学ぼうか迷っています。

最もメジャーなC++を改めて学ぶべきか、
それともある程度使えるC#での開発方法を学ぶか、
あるいはその他の言語か、助言をお願いします。

また、開発の参考文献なども教えていただけると幸いです。
よろしくお願いします。

現在、小さな事務系ソフトウェア開発会社でプログラミングをやっている者です。

思う所あって、ゲーム系の会社への転職を考えています。
応募にあたって作品の提出が必要なことは存じていますが、
どの言語を勉強し、開発すべきかで迷っています。

開発したいゲームとしては、STGかRPGで考えています。
2Dか3Dかは特にこだわりがありません。

過去に行ったプログラミングは、ゲームの関係の薄いものばかりで、
「ゲーム開発」について本格的に学んだことはありません。
学生の頃はロボットを制御するために、C...続きを読む

Aベストアンサー

今後の動向不明なソーシャルならPHPとかJavaScriptとかWEB系です。
家庭用ゲームのメインの開発は今後もしばらくはC++が続くと思いますが、C#もツール開発用としては導入されていますし一部のゲームはC#で開発されています。
家庭用ゲーム機なら両方共出来ないとダメじゃないかと思いますね(片一方はある程度出来る程度で良いと思いますが)。

>開発したいゲームとしては、STGかRPGで考えています。
>2Dか3Dかは特にこだわりがありません。

こちらが拘るんじゃなくて向こうの会社が拘る問題ですが、今時は家庭用ゲーム機は3Dじゃないと厳しいと思います。
あと応募作品でSTGだとすごく多いので、それだけで評価が下がります。
逆にRPGは、規模が大きくなるためプログラミングスキルが直に反映されるので応募課題としては悪くないですが市販レベルの操作性に合わせて作ること事態が大変です。
WEB系をやっていたのならオンラインゲームを作るスキルも期待されるでしょう。

とりあえず、どのぐらいのものが作れるかリアルタイム性のあるものを作るということがどういうことなのか理解するためにDXライブラリをご紹介しておきます。
これでラクラクとゲームを作れるようなら本格的にC++とDirectXやC#とXNAで応募作品を作れば良いのでは無いでしょうか?

「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/

同サイトのこっちの掲示板には業界人の回答者も出没します。
「C言語何でも質問掲示板 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewforum.php?f=3

今後の動向不明なソーシャルならPHPとかJavaScriptとかWEB系です。
家庭用ゲームのメインの開発は今後もしばらくはC++が続くと思いますが、C#もツール開発用としては導入されていますし一部のゲームはC#で開発されています。
家庭用ゲーム機なら両方共出来ないとダメじゃないかと思いますね(片一方はある程度出来る程度で良いと思いますが)。

>開発したいゲームとしては、STGかRPGで考えています。
>2Dか3Dかは特にこだわりがありません。

こちらが拘るんじゃなくて向こうの会社が拘る問題ですが、今...続きを読む

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

QC言語で簡単なゲームを作る方法

僕はC言語を学び始めた程度ですが、一番簡単に作れるゲームとその作り方(ソース)を教えて下さい。お願いします。

Aベストアンサー

★じゃんけんゲームのソースです。

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

// じゃんけん定数
#define JKN_GOO  (0)
#define JKN_CHOKI (1)
#define JKN_PA  (2)

// 勝敗の定数
#define TYP_KATI (0)
#define TYP_MAKE (1)
#define TYP_AIKO (2)

// じゃんけんの判定関数
int check( int human, int computer )
{
 if ( human == computer ){
  return TYP_AIKO;
 }
 switch ( human ){
  case JKN_GOO:  return ((computer == JKN_CHOKI) ? TYP_KATI : TYP_MAKE);
  case JKN_CHOKI:  return ((computer == JKN_PA) ? TYP_KATI : TYP_MAKE);
  case JKN_PA:  return ((computer == JKN_GOO) ? TYP_KATI : TYP_MAKE);
  default:   return -1;
 }
}

// じゃんけんゲーム
int main( void )
{
 // ゲーム変数
 int count;  // 勝負回数
 int kati = 0; // 勝ちカウンタ
 int make = 0; // 負けカウンタ
 // 一時変数
 int human;  // キー入力の一時変数(人間用)
 int computer; // 乱数発生の一時変数(コンピュータ用)
 
 // (6)じゃんけん勝負を10回行う
 printf( "★じゃんけんゲーム(10回勝負)\n\n" );
 for ( count = 1 ; count <= 10 ; count++ ){
  // (1)人間:3つの状態を入力
  printf( "%2d回目…[1]グー [2]チョキ [3]パー を入力して下さい:", count );
  do {
   // (2)キー入力
   switch ( getche() ){
    case '1': human = JKN_GOO; break;
    case '2': human = JKN_CHOKI; break;
    case '3': human = JKN_PA; break;
    default: human = -1; break;
   }
  } while ( human == -1 );
  
  // (3)コンピュータ:3つの状態を乱数で決める
  computer = (rand() % 3);
  // (4)人間vsコンピュータの勝負
  switch ( check(human,computer) ){
   case TYP_KATI:
    kati++;
    printf( "⇒勝ち。\n" );
    break;
   case TYP_MAKE:
    make++;
    printf( "⇒負け。\n" );
    break;
   case TYP_AIKO:
    printf( "⇒引き分け。\n" );
    break;
   default:
    printf( "⇒エラー。\n" );
    break;
  }
 }
 // (7)結果表示
 printf( "\n★じゃんけんゲームの結果\n" );
 printf( "人間    :%d 回勝ち\n", kati );
 printf( "コンピュータ:%d 回勝ち\n", make );
 printf( "※引き分け回数は %d 回でした。\n", (10 - kati - make) );
 return 0;
}

注意:全角空白をタブ文字に変換して下さい。

★じゃんけんゲームのソースです。

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

// じゃんけん定数
#define JKN_GOO  (0)
#define JKN_CHOKI (1)
#define JKN_PA  (2)

// 勝敗の定数
#define TYP_KATI (0)
#define TYP_MAKE (1)
#define TYP_AIKO (2)

// じゃんけんの判定関数
int check( int human, int computer )
{
 if ( human == computer ){
  return TYP_AIKO;
 }
 switch ( human ){
  case JKN_GOO:  return ((computer == JKN_CHOKI) ? TYP...続きを読む

Qfatal error LNK1120: 外部参照 1 が未解決です

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
  char tel[20];
  char address[20];
};

void message( void );
void input( FILE *fp, int cnt , struct meibo *a, int *end );

void main( void )
{
  struct meibo a[20];
  FILE *fp;
  int cnt, end;

  if( (fp=fopen( "meibo.dat", "w" ) ) == NULL ){
    printf( "Can not open the meibo.dat.\n" );
    exit( 1 );
  }

  message();

  fprintf( fp, "番号, 名前, TEL, 住所\n" );
  fflush( fp );

  cnt = 0;
  end = 0;
  while( end == 0 ){
    input( fp, cnt, &a[cnt], &end );
    cnt++;
    fflush( fp );
    if( cnt == 20 ){
      printf( "人数が一杯です.終了します.\n" );
      end = 1;
    }
  }
  fclose( fp );
}

void message( void )
{
  printf( "名前, TEL, 住所, endを入力してください.\n" );
  printf( "継続の時はend=0," );
  printf( "中止の時は,end=1と入力してください.\n" );
}

void input( FILE *fp, int cnt, struct meibo *a, int *end )
{
  printf( "名前-->" );
  scanf( "%s", a->name );
  printf( "TEL -->" );
  scanf( "%s", a->tel );
  printf( "住所-->" );
  scanf( "%s", a->address );
  printf( "Exit? Continue:0 Exit:1 -->" );
  scanf( "%d", end );
  printf( "\n" );
  fprintf( fp, "%2d, %s, %s, %s\n",
    cnt+1, a->name, a->tel, a->address );
}

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
...続きを読む

Aベストアンサー

http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_2005/man/faq.html
にある現象と同じではないでしょうか、一度お試しください。

QDirectX png画像でx軸回転について

D3DXCreateTextureFromFile関数でpng画像を読み込んで、LPD3DXSPRITEのスプライト機能で描画しています。
float rad += 0.005f;という感じでラジアン値を変えつつ回転の様子を調べているのですが、どうも予想通りに動いてくれません。

D3DXMatrixRotationZでz軸回転させると、一定間隔でくるくる回ってくれて、これは予想通りです。
しかしD3DXMatrixRotationXでx軸回転させようとすると、一瞬で画像が縮んでしばらく消えてから、また一瞬の内に伸びて縮んでしばらく消える、という事の繰り返しになります。

なぜx軸(y軸もですけど)の時だと、上手く回転してくれないのでしょう?
そして、どのように値を与えれば、一定間隔でくるくる回ってくれるようになるのでしょうか?
どうかよろしくお願いします。

Aベストアンサー

>3D としてレンダリングしていない
スプライトの描画時に Begin をしているはずです。
参考:DirectX SDKドキュメント日本語版
 DirectX Graphics >
  リファレンス >
   D3DXリファレンス >
    ID3DXSprite >
     Begin メソッド

D3DXSPRITE_OBJECTSPACE を指定してワールド座標行列を
設定してやればできた気がします。
(できなかったらごめんなさい)

Qfgetsで拾われる改行文字を削除したい

お世話になります

 C言語初心者のものです。今課題でC言語を用いたプログラミングを
Fedora上でやっています。問題は、fgetsでテキストファイルから、取得
した文字列の中から改行文字を削除できないことです。文字変数のアド
レスはわかっているのですが、終端文字に置換しようとすると、セグメ
ントエラーになってしまいます。これは如何にして解決すべきでしょう
か。よろしくお願いします。

Aベストアンサー

ポインタとかアドレスとか、C言語の用語としてあるものを別の意味に使うとまぎらわしいです。

「ポインタ」「アドレス」と言われたら、 この例なら str, str+i が思い浮びます。
「文字変数のアドレス」だと
char c ;
に対しての
&c
が思い浮びます。

配列なら「添字」、意味的には「x文字目」ですね。

> for(i=0;;i++){
> if(*(str+i)=='/n') {
> *(str+i)='\0';
> break;
> }
> }
/nが\nの間違いなら、この方法で半分正解です。もう少し広い範囲(可能なら全体)で見ないことにはなんとも言えません。
fgetsが最大文字数に達したり、ファイルの最後になったりで、strに改行文字が含まれない場合には、このループは止まりません(Segmentension Falutになって止まる)

・そのような状態になってないか、予めチェックする
・ループを終了させる仕組みを用意しておく
: forの終了条件を記述する、for中で if(*(str+i)=='\0') { break;} 等としておく、等
といった対策が必要です。


あと細かいところを言えば
・strを配列で用意したなら *(s+i)じゃなくてs[i]でいいんじゃないかな
・あるいは char *pみたいにしておいて、 iのループでなく pでループを組む( for(p=str;*p!='\0';p++) )とか。

ポインタとかアドレスとか、C言語の用語としてあるものを別の意味に使うとまぎらわしいです。

「ポインタ」「アドレス」と言われたら、 この例なら str, str+i が思い浮びます。
「文字変数のアドレス」だと
char c ;
に対しての
&c
が思い浮びます。

配列なら「添字」、意味的には「x文字目」ですね。

> for(i=0;;i++){
> if(*(str+i)=='/n') {
> *(str+i)='\0';
> break;
> }
> }
/nが\nの間違いなら、この方法で半分正解です。もう少し広い範囲(可能なら全体)で見ないことにはなんとも言えません。
fgetsが...続きを読む

Qchar str[256]の256の意味は?

よく入門者などにchar str[256]という記述があります。

この256という数字には何か特別な意味があるのですか?
勿論2の8乗から来ているのでしょうが。

charって1バイト=8ビット=256ですよね。
str[256]というのを良く見かけるので、最初strは最大256個しか確保できないと思っていました。
でも、実際は1000でも良いのですよね。


ということで、どうして256という数字を使うのですか?
意味ありげな数字を使われると、初心者は混乱するので100とか200とかの方が良いと思うのですが。
特別な理由があるのでしょうか?

Aベストアンサー

ちょっと一言。

1バイト(8ビット)で表現できるのは、
符号なしの場合
 0(00000000)~255(11111111)
符号ありの場合
 -128(10000000)~127(01111111)
です。
256は表せません。

ついでにもう一言。
char str[256];
って「ファイルの名前」とか「ファイル中の1行」を
格納するために定義されることが多いでしょう。
私の場合は、
「名前(or 1行の文字数)が256文字もあるファイルは滅多に無いだろう」
「でも128文字ぐらいならあるかも。ちょっと不安」
「かといって512文字は多すぎるかな」
ってことで256にしてます。
はじめから文字数がわかってるときは32とか64にしたりもしますが。
(なんで2のべき乗なのかはNo.1の通りです。)

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。


人気Q&Aランキング