トップページgamedev
1001コメント348KB

Kazukiの同人3DRPG制作【第二話】

レス数が1000を超えています。これ以上書き込みはできません。
0001Kazuki2010/09/19(日) 04:46:22ID:6P+qj1XK
Kazukiの同人3DRPG制作 公式サイト
ttp://www.kazuki-sendo.com/game/


発展途上中の素人Kazukiを中心として
DirectX9による3DRPG制作に挑戦します。


開発言語は、C++です。
長く苦しい戦いになると思われますが、
同人ゲーム制作の限界への挑戦が、当企画のテーマでもあります。
0932名前は開発中のものです。2010/09/22(水) 04:46:23ID:N6b8LlOZ
>>1よ、ちょっとしたコードを試したいなら
ここが便利だぞ☆
http://codepad.org/
恥かく前に試せよ?
0933名前は開発中のものです。2010/09/22(水) 04:53:50ID:KlyUHZKS
ややこしいのでまとめる。

#define A(a) {a=a+1;a=2;a=a+3;}

1.}を最初に読む
2.{を探しにいく
3.{ }の中に入ったら右向きに読む
4.;を探しに行く
5.;を見つけたら、元の左向きに戻る
6.終わったら{ }内のルールに戻って右向きになり次の;を探す
7.;を見つけたら、またそこから左向きに戻る
8.{ }内は全部読むので、最後のは別に;はいらない(入れてもいい)
0934名前は開発中のものです。2010/09/22(水) 04:57:18ID:N6b8LlOZ
てかさ、>>1は自説に自信満々みたいだけど
C言語のプリプロセッサとかコンパイラでそういう順序で処理をしてるってのは
どこから知識を得たの?
0935名前は開発中のものです。2010/09/22(水) 05:01:15ID:KlyUHZKS
#include <stdio.h>

#define A 10 + 1

int main()
{
printf("%d\n", A);
printf("%d\n", A + 1);
printf("%d\n", A * 10);
return 0;
}


1.>を読む
2.<を探しに行く
3.中に入ったら最後に行く
4.hを読む
5..を読む(ここでhファイルであることを理解)
6.oを読む
7.iを読む
8.dを読む
9.tを読む
10.sを読む(ここでファイル名「stdio」が判明
0936名前は開発中のものです。2010/09/22(水) 05:08:22ID:KlyUHZKS
#define A 10 + 1


これも後ろから読んで理解。

int main()
{
printf("%d\n", A);
printf("%d\n", A + 1);
printf("%d\n", A * 10);
return 0;
}


これは

int main(){printf("%d\n", A);printf("%d\n", A + 1);printf("%d\n", A * 10);return 0;}


こんな風に一行にして読む。

1.}を最初に読む
2.{を探しに行く
3.{ }の中に入ると右向きになり、最初の;を探す
4.;を見つけたらそこから左向きに読む
5.全部読んだら右向きに戻り、次の;を探す
6.それを繰り返して、printfは終了
7.リターンの0を読む
8.n r u t e r の順に逆に読んで、returnであることを理解
9.終了
0937名前は開発中のものです。2010/09/22(水) 05:11:46ID:MuuXCIIp
なんという非効率なスキャンプログラムwww
0938名前は開発中のものです。2010/09/22(水) 05:18:19ID:KlyUHZKS
>>931
コードの中身の意味は、

#define A 10 + 1


ここで、Aは「10+1」になる。

printf("%d\n", A);
printf("%d\n", A + 1);
printf("%d\n", A * 10);


よってここは、

1.printf("%d\n", 10+1);
2.printf("%d\n", 10+1+ 1);
3.printf("%d\n", 10+1 * 10);


こんな風になる。

公式サイトで散々解説していた内容。

1.は、11が表示
2.は、12が表示
3.は、+よりも*が先に計算され、10+10になり、20になる。


宿題にもなりません。
全部、公式サイトで解説している内容。
0939名前は開発中のものです。2010/09/22(水) 05:29:57ID:ZhuFa4Bc
>>913は?
0940名前は開発中のものです。2010/09/22(水) 05:37:43ID:ZhuFa4Bc
> int main(){printf("%d\n", A);printf("%d\n", A + 1);printf("%d\n", A * 10);return 0;}
>
> ↑
> こんな風に一行にして読む。

なんで?

> 1.}を最初に読む
(略)
> 9.終了

なんでそんなややこしいことするの? 普通に前から読んだらいいじゃん。

 「前から読んだらどこで終わるかわからない」

って説明は「;」を区切りだと認めた時点で崩れてるよね。

何度も言うけど、キミの説明は、

 「こうやって後ろから読むんだ」

と言ってるだけで、l「後ろから読む必要がある」ことの説明には全くなってないんだよね。

それに言ってることがコロコロ変わってるよね。

最初は

 「ファイルは最初の行から一行ずつ読んで、各行それぞれは右から左に読む」

って言ってなかった? なんで複数行をまとめて後ろから読む事になっちゃったの?
0941名前は開発中のものです。2010/09/22(水) 05:41:29ID:ZhuFa4Bc
例えば>>913

#define BEGIN {
#define END ;}

はどう読まれるの? {から} の中身を一行にして

#define BEGIN {#define END ;}

にして後ろから読むのかい?
0942名前は開発中のものです。2010/09/22(水) 05:48:01ID:KlyUHZKS
一度、コマンドプロンプトを表示してご覧よ。

「プログラム」の「アクセサリ」の中にあります。
昔は、この黒い画面が当たり前だったのですが、

そこに

C:\Users\owner>


こんな風に表示されているはずです。

一番右側が現在地点で、
一番左側がゴール地点、つまりそれより先はない地点です。

そこで「dir」を入力して、enterキーを叩いてください。

なんか出てきます。

それもそういう構造になっています。


なので、コンピュータは右から左に向かって考えています。
0943名前は開発中のものです。2010/09/22(水) 05:48:55ID:h9k+fC0i
>>938
defineで確保されたAのメモリの中身はどうなってんの?
0944名前は開発中のものです。2010/09/22(水) 05:55:50ID:MuuXCIIp
>>942
文字を入力したら左から右に画面に表示されるよね?
右から左に向かって考えるなら、なぜ右から左に入力しないの?
0945名前は開発中のものです。2010/09/22(水) 05:58:45ID:5x8WBkL6
C言語等の話してて何得意げに「コマンドプロンプト」とか言っちゃってるの?
このスレでcmd知らない人は稀だと思うんだけど

もしかして、初心者がそのトンでも理論を理解出来なくて
自分に質問しているとか思ってるの?

ありえん(笑)
0946名前は開発中のものです。2010/09/22(水) 06:30:37ID:ZhuFa4Bc
> 一番右側が現在地点で、
> 一番左側がゴール地点、つまりそれより先はない地点です。

はぁ? 馬鹿だろお前?

単に木構造の「根」を先に表示する形式になってるだけ。ドメイン名とかは逆に
「枝」→「根」の順になってる。

で、例えば c:\User\owner ってパス名を示されても、いきなりそのディレクトリの情報が
ディスクのどこにあるのかはわからない。

 ・まずc:のルートディレクトリを読んで、その中の User を見つける
 ・見つけた User の情報から User のディレクトリがディスクのどこにあるのかがわかる
 ・User ディレクトリを読んで、owner を見つける
 ・…

という順番でc:\User\ownerにたどり着くんだよ。だから話は全く逆

コマンドプロンプトを開いたときに特定のディレクトリに既に移ってるのは、既にそこに
移動した状態でプロンプトが開くようになってるから。

> なので、コンピュータは右から左に向かって考えています。

パス名については「根」→「枝」の順になってるってだけで、それが右→左の順ってこと
にはならないし、ましてそれが「コンピューター全般」の話になんかならん。

デタラメにもほどがある
0947名前は開発中のものです。2010/09/22(水) 06:50:11ID:VAUtS0z/
Cの代入演算子の使い方は必ずしも「数学とかけ離れた」ようなものではなくて、もちろん
数学における等号とは意味が違うけども、単にこの使い方は算数ではしないだけなんだけど…

y=x^2+2x+1; って書いたら

・Cでは変数yに式x^2+2x+1が代入される
・数学ではyとxの関係が定義される

じゃない。この数学的使い方だけを抜き出したのがCにおける代入演算子なんだよ。
数学では"="が代入と等号の両方の機能を持っていると考えれば、x=x+1という書き方を
Cでしてもいい理由が分かるかな。

http://ja.wikipedia.org/wiki/%E8%87%AA%E5%B7%B1%E6%84%9B%E6%80%A7%E4%BA%BA%E6%A0%BC%E9%9A%9C%E5%AE%B3
0948名前は開発中のものです。2010/09/22(水) 07:22:39ID:uXUhUOYT
寝て起きたらどんどんややこしい事してやがるのw
>>936
とか素直に前から読むのの二倍走査してるし
流石に無理があるって気づかないのかねぇ
0949名前は開発中のものです。2010/09/22(水) 07:33:44ID:VAUtS0z/
優先順位が人と違うんだよ
事実はどうあれ自分が正しいんだろう
0950名前は開発中のものです。2010/09/22(水) 07:37:04ID:uXUhUOYT
ていうかこの後ろから前に読むってのの「読む」の主語は何なんだろう
コンパイラならプログラムする上で全く関係無いし
(例え後ろから前に読む変態的なコンパイラがあったとしても、ソースと出力は変わらない)
人が読むならどう考えても前から読む方が楽だし
実行ファイルになった上でCPUが、なら
そんな事最適化やら何やらされまくってソースの書き順なんて意味をなさないし

言語仕様として処理が後ろから前に「進む」のは
>>936で無理して前から実行される様にしてるから分かってると思うが、間違ってる。
0951名前は開発中のものです。2010/09/22(水) 07:48:49ID:ij0YiTqO
寝てる間に面白い流れになってたじゃん
参加出来なくて残念
0952名前は開発中のものです。2010/09/22(水) 08:28:20ID:ZhuFa4Bc
それにしてもいつになったらプリプロセッサとコンパイラの区別がつくんだろうな
0953名前は開発中のものです。2010/09/22(水) 08:30:39ID:VAUtS0z/
主が間違いを認めたことはないんじゃないかな
だいたい「ミス」で通してる
0954名前は開発中のものです。2010/09/22(水) 09:02:54ID:cPiQEDdY
ミスって間違いの事だけどね。
0955名前は開発中のものです。2010/09/22(水) 09:10:56ID:uXUhUOYT
単なるミスと理解の間違いなんて簡単に見分けられるのにな
>>1の場合はミスじゃなくて理解の間違い
0956名前は開発中のものです。2010/09/22(水) 10:11:39ID:ECFrVm3B
Kazuki 様

貴方のサイトでC言語のプリプロセッサの解説をして頂け
ないでしょうか? ぜひお願いいたします。

C言語を学ぶうえで、プリプロセッサの理解は避けて通れ
ません。ぜひ、バKazuki様の分かり易い解説をお願いいた
します。
0957名前は開発中のものです。2010/09/22(水) 10:12:50ID:ng3sPQSM
1つの間違いを1スレ以上に渡って説明しても理解しない、か
解説の間違いを全部説明しようとすると何スレいるのやらw
0958名前は開発中のものです。2010/09/22(水) 10:23:35ID:VAUtS0z/
× 解説の間違いを全部説明しようとすると何スレいるのやらw
○ 主が間違いを犯すことを理解させようとすると何スレいるのやらw
0959名前は開発中のものです。2010/09/22(水) 10:42:29ID:go2dVt0W
もう無理だよ。
根本的な所から理解できてないし
理解しようとしないんだもん。

むしろ自分で奇天烈理論展開して正当化しちゃうとか笑うしかないw
0960名前は開発中のものです。2010/09/22(水) 11:28:25ID:VAUtS0z/
事実は二の次三の次、自分の成功体験が第一
0961名前は開発中のものです。2010/09/22(水) 13:18:18ID:2NPM2eme
>>854
やっぱり「 理 論 」演算子って書いてるじゃないか
0962名前は開発中のものです。2010/09/22(水) 13:49:46ID:VAUtS0z/
間違いを認めると死んじゃうんだろ
理論はtheory
論理はlogic
気づいても現実との不整合があったときは自己が優先
0963名前は開発中のものです。2010/09/22(水) 15:37:28ID:KlyUHZKS
>>946
いや。だから、

一番右が現在で
一番左が過去です。

現在から過去に向かって読むとき、
右から左に向かって読む。

なので、一番左が0地点である。

C:\Users\owner>


int a = 0;

C言語の文法も一番右が現在で、
一番左が過去。

現在から過去に向かって読むので、
右から左・・後ろから前になる。

コンパイラがコードを読むは、
時が動いています。

解りやすくジョジョで例えると、
コードを書く時点では、DIOが時を止めている。
そして、読む時点になると、「そして、時が動き出す・・」ってなって、
現在をスタート地点、過去をゴール地点に定めて、
そこに向かって読むから、右から左になる。
0964名前は開発中のものです。2010/09/22(水) 15:40:40ID:ECFrVm3B
ずいぶん活発なスレですね。

ゲームの完成が楽しみです。
0965名前は開発中のものです。2010/09/22(水) 15:43:21ID:kfs4f4gp
したらば、これはどうなる?

c=1+2*3;
0966名前は開発中のものです。2010/09/22(水) 15:43:38ID:KlyUHZKS
■←これをカーソルとする

C:\Users\owner>■

■は↑の場所から、←左にむかって読む。
なので、行の0列目が、ゴール地点。

なのでどこが文章の終わりなのかが、
コンピュータは理解できる。


int a = 0;■


これもカーソルはあの場所から、←左に向かってよむ。
0967名前は開発中のものです。2010/09/22(水) 15:47:06ID:MuuXCIIp
>>963
>>966

素朴な質問だけど、初心者のためを思って独自に工夫して説明してるの?
それとも、コンピュータ内部でそういう動きをしているから、その説明をしてるの?

どっち?
0968名前は開発中のものです。2010/09/22(水) 15:47:30ID:ij0YiTqO
>>966
面白いギャグですね。今度友達に使ってみます。
0969名前は開発中のものです。2010/09/22(水) 15:50:43ID:KlyUHZKS
c=1+2*3;

1.;
2.3
3.*
4.2
5.+
6.1
7.=
8.c


こんな感じに後ろから読んで
一覧にする。

この中で一番優先順位の引くのはどれ?
とコンピュータが考えた時、=が一番低いと判断し、
7.の=と8.のcを後回しに考えるように判断。

行の最後まで読んだら、
次に今度は逆に読む。

1.c
2.=
3.1
4.+
5.2
6.*
7.3
8.;
0970名前は開発中のものです。2010/09/22(水) 15:52:08ID:ij0YiTqO
>>969
もういいよ、見てて悲しいから…
誰にだって誤解はあるんだから、もう諦めてよ。
0971名前は開発中のものです。2010/09/22(水) 15:52:51ID:BJ6LqzHu
>>966
C言語の勉強し直そうよ。

ネット上でも一から説明してあるところ結構あるよ。
ttp://qurl.com/4jrvj
0972名前は開発中のものです。2010/09/22(水) 15:55:27ID:KlyUHZKS
1.c
2.=
3.1
4.+
5.2
6.*
7.3
8.;

後ろから前に読んで
=が理解できたら、
今度は、前から後ろに向かって読み。

今度は優先順位の一番高いのはどれ?と
コンピュータは考える。

*が一位
+が二位

なので、6.を先に計算してから、
4.を計算する。

各演算子には、「左の値を右の値に」という意味があるので
2×3をやってから、1+6をやる。
0973名前は開発中のものです。2010/09/22(水) 15:57:02ID:VAUtS0z/
>>972
a=
a
+b;

こういうCソースの一部はどう解釈されるの?
0974名前は開発中のものです。2010/09/22(水) 15:58:43ID:ECFrVm3B
C言語では、文字列はNULL終端で、NULLのある場所は前から探して見つける。
って習いました。
だって前から見ていかないと、そもそも後ろ(NULLのある場所)が
何処なのか分からないから。
VBなんかは、文字列の先頭に文字列の長さを持っていて最後の位置が何処なのか分かるみたいですけどね。
0975名前は開発中のものです。2010/09/22(水) 15:59:10ID:go2dVt0W
kazukiはどんなコンピュータを使ってるんだろう。
0976名前は開発中のものです。2010/09/22(水) 16:01:12ID:KlyUHZKS
うわ・・やべwww

気が付いたら、
もう埋まりそうだ・・(^^;
0977名前は開発中のものです。2010/09/22(水) 16:02:39ID:VAUtS0z/
>>976
int a; a=0; a=a++; a=2; printf(a);
これはどうなる?
0978名前は開発中のものです。2010/09/22(水) 16:04:19ID:kfs4f4gp
演算の順番は、ANSI規格で規定されている。
この順にする。
@演算子の優先順位に基づいて 順に演算される。
A演算子に基づいて結合規則が当てはめられる。(その部分だけの向きを意味する)
B演算子の優先順位が同じ場合は、向きはどちらからでもよい。

Bの説明は、
c=1+2+3
この場合は、 1+2+3でもよい、 3+2+1でもよい。
順番に依存するコードは機種依存があるので悪いコードである。

もし、最新のANSI規格で変更になったのならば、教えてください。
0979名前は開発中のものです。2010/09/22(水) 16:06:28ID:N6b8LlOZ
大丈夫!安心のKAZUKI企画だよ!
0980名前は開発中のものです。2010/09/22(水) 16:07:11ID:6Sww9jS9
KAZUKI規格に厳密に準拠したKazukiコンパイラです
0981名前は開発中のものです。2010/09/22(水) 16:12:04ID:KlyUHZKS
int a = 0;


これを入力するとき、

1.i
2.n
3.t
4.スペース
5.a
6.スペース
7.=
8.スペース
9.0
10.;

こんな感じに一文字ずつキーボードから入力しているでしょ?
だから、入力している地点で、ゴールはすでに解ってる。

もっと細かく言うと、
キーボードのキーを押して「文字がディスプレイに表示」もプログラムが動いています。
キー入力もリピート状態で、
次の入力をコンピューターが待っている状態です。

そこでキーを押すと一瞬でプログラムが動いて終了し、
押したキーがディスプレイに表示される。

なので、どこがゴールなのかは、
すでにコンピュータは解ってる。

知りたいのは、スタート地点。
0982名前は開発中のものです。2010/09/22(水) 16:13:12ID:6Sww9jS9
突っ込みどころ満載
0983名前は開発中のものです。2010/09/22(水) 16:15:47ID:go2dVt0W
そろそろ釣り宣言を出して終わらせて欲しくなったw
0984名前は開発中のものです。2010/09/22(水) 16:16:13ID:6Sww9jS9
>>983
コイツ絶対次スレ立てるぞ
0985名前は開発中のものです。2010/09/22(水) 16:16:20ID:VAUtS0z/
>>981
なんでスタートが分からないのにゴールが分かるの?
ソースを他から持ってきてもゴールは分かるの?
0986名前は開発中のものです。2010/09/22(水) 16:16:25ID:MuuXCIIp
>>981
>>967 の質問に答えてよ。またスルーですか?
0987名前は開発中のものです。2010/09/22(水) 16:16:44ID:KlyUHZKS
じゃあ、これを
次回までの俺からの宿題にしておくよ。

俺が言っている「右から左=後ろから前」を詳しく調べて、
次回までに納得しておいてください。

上の宿題よりもこっちの方が面白いかもね。(^^
0988名前は開発中のものです。2010/09/22(水) 16:16:50ID:kfs4f4gp
したらば、

Kazukiは、どのコンパイラを使っていますか? Borland C++ですか?
0989名前は開発中のものです。2010/09/22(水) 16:17:11ID:6Sww9jS9
>>988
Kazu...いや、VCしか使えないと思う
0990名前は開発中のものです。2010/09/22(水) 16:22:18ID:kfs4f4gp
30年ほど昔のPCはカセットテープしかなくて、
カセットテープから一文字づつ読み込んでコンパイルしていた。
2パスだから2度読みする。それはアセンブラコンパイラ。
0991名前は開発中のものです。2010/09/22(水) 16:23:18ID:KlyUHZKS
それでは、皆さん!

ここまで付き合ってくれてありがとうございます。

次回スレはもちろん立てますが、
当スレでは現スレ完結でいきますので、
このスレはこのスレで完結です。

なので、次スレのリンクは貼りません。

次スレを立てたなら
そこから新たなスタートです。

このスレを知らない人が、
次スレから参加することもありえます。


では、皆さん。
また会える日まで、お元気で!(>▽<
0992名前は開発中のものです。2010/09/22(水) 16:23:35ID:VAUtS0z/
このバカにも「目を背ける」以外の逃避ができなくなるような反例がないもんかな
0993名前は開発中のものです。2010/09/22(水) 16:24:27ID:KlyUHZKS
ume

ほ〜た〜るの、ひ〜か〜り〜♪
0994名前は開発中のものです。2010/09/22(水) 16:24:29ID:m4G9jaBa
>978
結合は同一順位の演算順序じゃなかったっけ
もし勝手に演算順序変えられるとover/underflowしたり誤差が捨てられたりして困るんだが
>981
ゴールもスタートもわかんねーよ
cpuに全てを見渡す能力はついちゃいねーよ
0995名前は開発中のものです。2010/09/22(水) 16:25:01ID:go2dVt0W
「そんなのは俺にはどーでもいい」
これで逃げるから無理w
0996名前は開発中のものです。2010/09/22(水) 16:25:39ID:6Sww9jS9
「動けばいい」とか言ってたしねえ
0997名前は開発中のものです。2010/09/22(水) 16:25:50ID:VAUtS0z/
動かないんだけどね
0998名前は開発中のものです。2010/09/22(水) 16:26:29ID:KlyUHZKS
アナウンス:このスレは終了しました。
 まもなく、このスレは閉幕いたします。

 皆さん、当スレの御アクセス御投稿、まことにありがとうございました。
0999名前は開発中のものです。2010/09/22(水) 16:26:42ID:MuuXCIIp
結局都合が悪いのはスルーかw
1000名前は開発中のものです。2010/09/22(水) 16:27:03ID:6Sww9jS9
1000ならbakazuki
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。