トップページgamedev
229コメント109KB

【入門書クリア前提】初心者用段階的ゲーム製作スレ

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/12/21(日) 10:01:44ID:XeH+Z5e9
入門書一冊終わったけどこれでどうやってゲーム作んだゴラー
って人のためのスレ

入門書おわた
    ↓
コンソールでゲーム製作
    ↓
DXライブラリでも使ってゲーム製作

こういう順番で段階的にやって行きたい

基本は
1.詳しい人がコンソールのゲームでお題を出す
2.初心者が作る
3.できるまで自分で調べて頑張る
4.どうしても無理ならソース晒して教えてもらう
5.完成したらソース晒して、他の製作者のものと比べてウマー

とりあえず、入門書から先に進めなくて涙目になってる人(俺含め)のためのスレです
0076名前は開発中のものです。2008/12/22(月) 14:48:23ID:w5ew+bX6
本当なら今頃ほんのりえっちなAAが表示されたコンソール画面がうpされてたんだろうな
0077おいちゃん ◆DlyW/s8ibQ 2008/12/22(月) 15:01:29ID:oKMTflVf
だからw
勝手に難しくしてるって
何らかの形で表示って書いてありますがな
勝手にゴールを探すのか?も何ぜ難しくするの?
自分であれに当てはまるってやつでいいんよw
上下の移動でも一番上からしたに移動してもいいんやで
自由だ
>>74の答え書いてみないか?
ヒントはな、答えは小学生が解いても俺と同じ時間で説ける方法や
0078おいちゃん ◆DlyW/s8ibQ 2008/12/22(月) 15:34:38ID:oKMTflVf
あとなホントは書きたくないって思ったんやけどな
>randの実装では下位ビットがそれほどランダムでは無い
rnd=1+(int) (9.0*rand()/(RAND_MAX+1.0));
これおかしいとおもうんやけど
おいちゃんの知識が悪いんかな
よかったら書籍かホムペ教えてくれへんか?
0079名前は開発中のものです。2008/12/22(月) 15:38:16ID:or3ZWGZi
>>75
むしろ
「君は何のフルーツが好きだ?」
「ええっと、バナナかな」
「ぶっぶー。食事の時にバナナなんて食べてはいけません。ちゃんと、ごはんと味噌汁を食べましょう。君には常識と考えが足りない」
「・・・・・」
こうだと思う
前提条件も何もかもすっ飛ばしていきなり、GUIを使わせたりキチガイとしか思えない
コンソールが駄目ならそれなりの理由を提示すべきだし
こいつのやらせようとしてることのほうがよっぽど敷居高いよね
0080名前は開発中のものです。2008/12/22(月) 15:48:29ID:7HSkpjqK
>>77
そりゃ、何を求められてるのかさっぱりわからないからなあ。
初心者はその簡単な方法さえもボキャブラリとして持ってはいないし、
自分で考えるにしても、最初から簡単な方法を思いつくとは限らない。
むしろ、自分で考えてしまったがためにおかしくて複雑な設計をしてしまうことは良くある。

>>74
最速とか簡易とかってよく分からない概念だよね。
意地悪な事言うとintは何ビット?とか書かれる数値は整数?小数?まさか分数とか無いよね。有効数字は?とか

とりあえず「一行目×二行目 > 三行目×四行目」 を満たすなら一個目が大きい。逆なら二個目が大きいって書くね。
1問目も2問目も同じ。プログラムも現実も同じ。

どう?俺の頭ってよさそう?

>>78
あ、何かおかしかった?
http://www.pinkdragon.net/DocumentsLibrary/contents/ja/Linux_man/rand.3.html を見るとそう書いてあったから
そうなのかーって思ったんだけど。
0081おいちゃん ◆DlyW/s8ibQ 2008/12/22(月) 15:54:45ID:oKMTflVf
意地悪な事言うと
またか問題はそこにかいてあるやんかw
、は小数の意味やで
おしいな現実でそれでは遅いで
/2はなぜぬいたんやその理由が次のステップやで

サイトありがとなちょい見てみるな
0082おいちゃん ◆DlyW/s8ibQ 2008/12/22(月) 16:40:30ID:oKMTflVf
初めて知ったよありがとな

俺なりの答え書くな
ちょい意地悪問題だったんだけどな
論理ミスあったら言ってな
現実では底辺と高さの整数の桁数を足す大きいなら大きい
問題文で、で少数になる桁あわせてるやろ3桁区切りでないのは
他がないのでわかる、
あとは掛けるでなくて足す

この問題な3Dで自分からAとBどっちが近いかの
コード友人に見せたら訂正された時に出されたんや
真面目に公式当てはめないってな
なるほどって思うたで、あってるよな?
おいちゃん騙されてないよな?w

0083名前は開発中のものです。2008/12/22(月) 17:29:36ID:7HSkpjqK
>>82
俺は君の同僚じゃ無いんだから、そんな職場のローカル言語話されても意味分からんぞよ。
それに「3Dで」、「リアルタイムにオブジェクトの距離判定するけど」、「精度は適当でいいや」みたいな前提条件も
言ってもらわなきゃわかるはずないよ。

あってるかどうかは、その前提条件にモロに左右されるから何とも言えんね。
そのやり方だと、さっきの問題文ではどれも「大きさは同じ」って判定されるけど、それでいいの?
0084おいちゃん ◆DlyW/s8ibQ 2008/12/22(月) 18:16:55ID:oKMTflVf
>精度は適当でいいや
まず「どっちが近いか」であってどれくらいか?ではないよ
3D距離測るので√ぬきはてきとうでないとおもうけど
要点は共通なのは省ける場合がある
面積問題だと*は+でもいい

、の場所は意地悪問題だよw
しかも間違ってるなホントにごめんな

面積なんだから各長さはかならず+の値
従って A*B>C*Dの場合
必ずA+B>C+Dよって現実でもプログラムでも
+で判定すのが簡単って事、
これに例外はないでしょ?

言いたいのはあなたが/2を抜いた理由を
>>7にも当てはめて見ればいいってこと
もちろんおうようとしてね
きっとなんて単純にできるんだって思うよ

あとはホントに難しく考えすぎだと思う
市販レベルのゲームが頭にあるから
難しいと想像してるだけでしょ。
当たり判定も入れろとは書いてないんだよ?
あって当たり前とは言わせないよ、
勝手に仕様追加して難しいとか言ってるんだから
でも実際はゴールに着いたかの判定と同じだけどね
何度も言うけど>>7に当てはまれば何でもいい
てかあなたは作れると思うw
0085名前は開発中のものです。2008/12/22(月) 18:44:14ID:bQrlLW0A
>>84
3*4>1*10
3+4>1+10???
ならねぇ・・・
0086名前は開発中のものです。2008/12/22(月) 18:46:14ID:LFKaa8W/
>従って A*B>C*Dの場合
>必ずA+B>C+Dよって現実でもプログラムでも
>+で判定すのが簡単って事

3×2>1×5
つまり3+2>1+5ってこと?

揚げ足取りだけで終わりたくないから書いておくけど。

モデルの単純化による効率化・高速化はもちろん重要。
だけど、動くものが作れるようになった先の話で十分間に合うと思う。

おいちゃん氏、かなり優秀な人だと思うけど、天才様発言すぎる。
やりたいこと、もって行きたい方向が俺にも見えるだけに
TPOに合ってないというか空回りしてるなあと。
0087おいちゃん ◆DlyW/s8ibQ 2008/12/22(月) 18:57:04ID:oKMTflVf
ごめんwww
ほんとだ何これ結局/2抜くだけだったのか、
俺も実は初めこれだけだったんだよ、んでこれ教えてくれた
なんかサルみたいに図形切り貼りして
確かめとかやらされたんだけどなw
実は人を信用するなって教えてくれたんかなw
昨日も飯おごったのになw
やべっひょっとして√抜きもそうなのか?
誰か教えて;;
>>7も一応考えたんだがもう一回考えるんでまだ作るなよw
0088名前は開発中のものです。2008/12/22(月) 23:24:49ID:IFN4Pi9+
>>7
やりたいようにやってみた。自分のソース見ながら考えて進む感じ。
まさか3時間200行超えるとは。見積もり(想像)の1.5倍かかってる。
自分でも言いたいこと突っ込みどころは山ほどある。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8439.zip

クラスはなんとなく、関数ポインタは明らかな苦手意識あるんで
そのへんうまく使ってイベント処理をキレイにまとめられたらかっこいいかも。
0089名前は開発中のものです。2008/12/22(月) 23:35:30ID:v8weaYQN
流れをぶった切るけど段階学習でコンソールなら数当て(ハイアンドロー、
コードブレイカー)、4択クイズ、タイピング、しりとり(英語、日本語)の順が
いいとおも
初心者向けなんだから(特に最初は)1ステップは小さいほどいい
0090名前は開発中のものです。2008/12/22(月) 23:52:10ID:IFN4Pi9+
数当ては>>19-20でやらせた。ていうか勝手にやった。

次はヒット&ブロー(コードブレイカーby女神転生)か山崩しあたり。
タイピング→4拓クイズで、ファイル処理やら構造のカプセル化なんかを意識させて。
0091名前は開発中のものです。2008/12/22(月) 23:55:22ID:7HSkpjqK
>>88
うまくできてるね。乙。
0092名前は開発中のものです。2008/12/23(火) 06:44:34ID:1QOnu95u
かんたんな数当てとかは良いね
ってもう終わったみたいだけど
まあ一行表示で済むようなものならいっそのこと
windowのタイトルバー使っておなじことやったりするといいかも
0093おいちゃん ◆DlyW/s8ibQ 2008/12/23(火) 07:40:42ID:brrxgnQX
>>88見させれいただきましたで
int gMap[HEIGHT][WIDTH];
で事象の全て管理してるんですよね?
ちょっと言い方違うかな、前回の分を保持してるものを使うのは
上記だけですよね?
そしてこのゲームは、敵の移動はしない時があるが自分は必ずする。

これだとゲーム性として緊張感とか戦略性が薄いので
(勘違いしないでくださいね次の課題のためにステップアップ
できるところをわざと問題で作って、それをあなたが次の問題だせるように
解いてくれたってことですんで)
次の課題は敵は動かない時は次回に移動量を貯めこめる
移動は同じく単一方向のみで溜め込んだ分は使い切る(範囲制限は今のまま)
でどうでしょ?
これで管理のしかたが変わる修正しないといけない問題になると思うんやけど

問題の出し方としてソクラテスの問答法をしてる感じなんやけど
こういうやり方ではだめかな?







0094おいちゃん ◆DlyW/s8ibQ 2008/12/23(火) 10:25:56ID:brrxgnQX
>自分は必ずする。
間違いでしたごめんなさい
0095882008/12/23(火) 11:32:37ID:7Tc//R3b
>>93
俺に課題出してどうするんだ。
ここまででも結構気を使うポイント多いよ実際。
>>1氏の>>19-20見て、その今の実力で>>88は作れないだろうと思う。

200行のソース書ける人相手に、本質にかかわらない十数行の改変させても意味無い。
今回のだったら、敵Pow2、敵Pow3までenumで増やして、敵移動ルーチンで消化する。
個々にLvやHPなんかのステータスが必要になるまで、意地でも構造体作らねえ!

RPGっぽい感じで、作った自分でも結構気に入ってしまってたりするんだこれ。
敵に当たったとき戦闘モードに切り替えて、そのときに敵の能力設定しても十分間に合うし。


気にしてるのが、通過点・イベントの書き方。
個別処理してるので、このままではどうしてもイベントが増えるたびに肥大化していくのが避けられない。
うまいことラッピングできればいいんだけど。
0096名前は開発中のものです。2008/12/24(水) 06:12:29ID:O6ch0loZ
かわいそうな>>1
0097名前は開発中のものです。2008/12/24(水) 09:07:07ID:pKNbMfli
>>1にもちっと根性ありゃ良スレだったかもね。
0098名前は開発中のものです。2008/12/25(木) 01:19:22ID:dzWiyeO4
>>94
そうそう。君はそうやって人の言うことを聞いとくべきだよ。
中学生とは思えないほど稚拙な文章だったけど、面白かったよ。
0099名前は開発中のものです。2008/12/25(木) 08:14:49ID:ldpXmL3C
俺がつぶしたようなもんだな。
正直、すまんかった。

この手のスレでは、ソース出せない奴に文句言う資格ないって信念あるから、
ちょっとからかってみたかった。


きのうVIPで拾ったやつ。ソース入り。
WinMain(笑)でも、発表できるやつが正しい。

64 名前: 以下、名無しにかわりましてVIPがお送りします 投稿日: 2008/12/24(水) 12:33:44.10 ID:coeGrU4s0
ステージ間違えてた
http://www.dotup.org/uploda/www.dotup.org13272.zip.html

ちらついてた人テストプレイお願いします
010012008/12/25(木) 08:26:15ID:gHJk9aT1
俺がC++とイチャイチャしてる間に一体何が………
0101名前は開発中のものです。2008/12/25(木) 09:13:42ID:+jZFnaM/
>ソース出せない奴に文句言う資格ないって信念あるから、
ちょっとからかってみたかった。

ぜんぜんわからないんだが
文句はどれも言ってないし
誰もからかわれてないように見えるんだが
>>88なのか?誰と戦ってるんだ
0102名前は開発中のものです。2008/12/25(木) 10:19:14ID:4QWifqYX
>>28>>7作ると言っている
作ってるのか?>>88を見てしまったのか

010312008/12/25(木) 10:41:23ID:47eJt85M
>>102
俺に聞いてるのかな?
コンソールやっていいのか、よくわからなかったんでC++を勉強してましたよ
数当てゲームから先は何も作ってません
0104名前は開発中のものです。2008/12/25(木) 11:34:37ID:ldpXmL3C
Hit&Blow作ろうぜ!

【ルール】
相手側に隠された4桁の数字を当てるんだ!
隠された数字は1〜9までで重複していない。
プレイヤーの提示する数字に対して、マスターがヒントを出していく。
ある桁に対して、答えの桁と一致したら1Hit。
桁は違うが、その数字を使っているなら1Blow。

答え 2468
入力 3456 のとき、
4のところで桁一致1Hit、6は両方に含まれているので1Blowとなる。

4Hitなら「おめでとう」表示して終了。

まずは、4桁の重複しない乱数を作成して表示することから始めよう。
それから、入力→判定。入力については難しいこと考えずにやりやすいように。
判定も、それっぽく動くようになってから矛盾する部分をつぶしていけばいい。
010512008/12/25(木) 11:45:26ID:47eJt85M
>>104
それなら作れるよ
ちょっと作ってくる
010612008/12/25(木) 11:52:02ID:47eJt85M
と、おもったけどめんどくさいから理論だけ
int ans[4]

for(it i=0;i<4;i++)
{
ans[i] = ansrand() % 9 + 1;
if(ans[i] == ans[i+1])
continue;
}

これで重複しない数字作って

int game(int x)
{
;xを4分割
;fscanfだっけ?
それであたりかどうか判定
}

あとはメインループ
こんでいいんじゃないのかな?
0107名前は開発中のものです。2008/12/25(木) 12:49:09ID:D78e/bq5
ソースはすでにバグってるけど、考え方組み立て方は大丈夫っぽいね。

入力は最悪1桁目から4桁目までバラバラに入力させてもいい。
今、そこで悩むのは時間の無駄だと思う。
0108名前は開発中のものです。2008/12/25(木) 13:13:31ID:4QWifqYX
即答できるの作って意味あるのか疑問だな
某本は最初からソウコバんが題材だし
プロで2時間素人で2日かけたら遅い
って書いてるみたいだし。
>>88が理解できないわけがない

1は言ってることがおかしいな
言語そのものは本で学んだくせに
ゲームの仕組みは人から教えてもらえるチャンスを
自分から放棄してる、これだと後々クレクレ君になるよな
0109名前は開発中のものです。2008/12/25(木) 13:24:25ID:4QWifqYX
>>107
ある桁に対して、答えの桁と一致したら1Hit。
桁は違うが、その数字を使っているなら1Blow。
にたいして
>それであたりかどうか判定

この課題の出題意図おもいっきり
飛ばしてるじゃねえかw
0110名前は開発中のものです。2008/12/25(木) 13:41:17ID:tZ3uaTxD
俺もゲーム作りたいからプログラム始めて、入門書は済んだけど何しようって時期はあった
最初はGUIで四角形を表示できるようにして、それを入力で動くようにするっていう風に少しずつSTGに近づけていって完成まで行ったよ
俺は「Windowsゲームプログラミング」って本でGUIに入ったけど、これはあんまりオススメできない
>>1を見る限り「14歳からはじめる C言語わくわくゲームプログラミング教室」とかがいいんじゃないか?
俺は「Windowsゲームプログラミング」を初めて見たとき、「なんだこれ…全く分からない」と思った
でも原因は入門書の内容を理解してるつもりで、してなかっただけだった
DXライブラリのサンプルなんかすごい丁寧に書いてくれてる
分からない分からないって言ってたら進まない
何で分からないのか原因を考えて、それを潰していけばいい
0111名前は開発中のものです。2008/12/25(木) 13:57:08ID:4QWifqYX
出題意図も書いてあげなきゃいけないんだろう
4桁はランダムで重複はない

入力もじが同じ桁で同じ数字hitなら
Blowかどうかは判定しなくていい(重複はないから)
hitでないなら別の桁でBlowかどうか判定する
そこでBlowならそれ以外の桁は、数字の違うランダムだから
(重複はないから)判定しなくていいことになってる。
でいいのかは、ルールがはっきりしていないので実はわからない。
プレイヤーは同じ数字に対して挑戦できるんだろうがすべて同じ数字に
してもいいのかわからない。
出題意図以外の部分書き込んでなんになる?
始めの問題でcin>>n;だけ書くのと同じだろ
正直課題でなくて、なになに作って解説してくださいの方がいいと思う。
0112名前は開発中のものです。2008/12/25(木) 14:09:59ID:HaMdn/9b
ゲームってC/C++じゃないと駄目なの?
0113名前は開発中のものです。2008/12/25(木) 14:14:10ID:8FA5a+hY
>>106
この程度のプログラムが面倒だと感じるならまともなゲームは作れないよ
それに後半部分が曖昧だから「できると思っているけど実はできない」可能性が
あるから作ってみて損はない
逆に>>7は「できないと思っているけど実はできる可能性」もある
とにかくたくさん試してみないと自分のレベルはわからないもんだよ
0114名前は開発中のものです。2008/12/25(木) 14:19:37ID:zLYK7Trd
>>112
そんなことはないけどメジャーだからいろいろアレでナニだね
0115名前は開発中のものです。2008/12/25(木) 14:21:08ID:aRJ94ifJ
>>112
別にJavaでもHSPでもツクールでも構わないよ
0116名前は開発中のものです。2008/12/25(木) 15:53:49ID:dcJ2PyO9
速度が遅い
ユーザーに新たにランタイムを入れてもらわないといけない

この2つが許容できない場合はC/C++やDで作る
0117名前は開発中のものです。2008/12/25(木) 16:00:18ID:aRJ94ifJ
ランタイムを同梱するという技もあるけどね
昔のJava(1.4世代)ならそういう手が使えた。今のライセンスは知らない。
0118名前は開発中のものです。2008/12/25(木) 16:09:10ID:Bjb9Ga/u
Hit&Blowつくってみた
意外と長くなってしまった

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8476.zip
0119名前は開発中のものです。2008/12/26(金) 20:55:42ID:PhPwcMia
c言語とかからのゲーム作成を解説しながらやってるお勧めのブログを教えて
0120名前は開発中のものです。2008/12/26(金) 21:02:02ID:S9F3mZ1U
>>119
君だったら、勉強しながら、後進のために作るかい?
面倒くさがって作らないだろ。

この世には、君のような奴だらけなのさ。
0121名前は開発中のものです。2008/12/27(土) 00:17:12ID:GD7+RbfX
コンテンツとして需要があるなら作ってもいいと思うけどな。
というかそんなようなのを作ったことがある。

結局ホームページ自体を公開しなかったが。
0122名前は開発中のものです。2008/12/27(土) 00:23:21ID:BgZGJ+VY
Cから説明するのはだるいな
せっかく気合入れて作るくらいなら、本にして印税もらいたい
0123名前は開発中のものです。2008/12/27(土) 00:30:31ID:q0mgxuEr
なぜ>>119はブログにこだわるのか。ブログ専用ブラウザでも使っているのだろうか
ttp://racanhack.sourceforge.jp/rhdoc/
0124名前は開発中のものです。2008/12/27(土) 08:53:55ID:8o0sem2Y
>>119
ブログで製作のライブ中継やると、完成しないというジンクスが。
ってか、実際に実況製作やってみると、ブログに思考中断されてうっとおしくなる。

まだ見ぬ弟子のこと考えて技術ブログ書くのなら
たいてい前もって完成させてからの、ログ追いトレース記事になってしまう。
完成すれば楽しい思い出の、ぐだぐだ設計迷走日記とはなかなか両立しない。
0125名前は開発中のものです。2008/12/27(土) 10:41:20ID:44v0/Te5
>>106
重複しない数字作成に関して

ループの中で
ans[0] == ans[1], ans[1] == ans[2],
ans[2] == ans[3], ans[3] == ans[4]
の比較を行っているが、右辺は何も値が代入されていないので、
その条件は絶対に成立しない
ans[4]は定義されていないので、i = 3 のときに実行しようとすると多分落ちる
ループの最後に実行される continue 文は何も意味を持たない
多分勘違いしていると思うが、continue 文を実行しても i の加算処理は実行される

PGMの製作経験が不足している気がする
PGMのロジックを組み立てる練習にコンソールゲーム作成はいいと思うので
面倒と思わずにまずはひたすら組んで実行してみることを勧める
0126名前は開発中のものです。2008/12/27(土) 10:44:28ID:QMJ1Aqu3
TEAM NAVA分室 ゲーム製作講座 RPG
ttp://inu.harisen.jp/top.html
0127名前は開発中のものです。2008/12/28(日) 11:46:19ID:Wm8cLO/2
C言語〜ゲームプログラミングの館〜
http://dixq.net/g/

12月2日から↑このサイト見ながらゲーム作り始めた
「不可思議2」みたいなゲーム作りたくてダンジョン自動生成と
マップスクロールとキーコンフィグは何とか作った

でもC言語は1ヶ月くらいしか勉強してないし
ゲーム製作の経験もないので悪戦苦闘中

出来た!と思って打ち込んだプログラムが1発で動いたことは1度もない
ゲーム作りがこんなに面倒だとは思わなかったよ
0128名前は開発中のものです。2008/12/28(日) 13:23:09ID:iZvh/mGa
重複しない数字作成だったら

int ans[4];
int flag = 1;

while(flag){
  flag = 0;
  for(i = 0 ; i < 4 ; i++) ans[i] = rand() % 10;
  for(i = 0 ; i < 3 ; i++){
    for(j = i + 1 ; j < 4 ; j++){
      if(ans[i] == ans[j]){
        flag = 1;
        break;
      }
    }
  }
}

かな。
0129名前は開発中のものです。2008/12/28(日) 13:39:04ID:iZvh/mGa
こんな方法もあるか
int used[10];
int arr[4];
int n;

for(i = 0 ; i < 10 ; i++) used[i] = 0;
for(i = 0 ; i < 4 ; i++){
  n = rand() % 10;
  if(!used[n]){
    arr[i] = n;
    used[n] = 1;
  }else{
    i--;
  }
}
乱数が当たらないとループを抜けられないことを嫌うなら
int num[10];
int arr[4];
int n;
for(i = 0 ; i < 10 ; i++) num[i] = i;
for(i = 0 ; i < 4 ; i++){
  n = rand() % (10 - i);
  arr[i] = num[n];
  for(j = n ; j < 9 ; j++) num[j] = num[j+1];
}
最大でも30ループほどで抜ける。
シンプルだけど可読性が悪い例だ。

ケアレスミスはご容赦。
0130名前は開発中のものです。2008/12/28(日) 13:50:34ID:iZvh/mGa
十分大きな乱数は重複しないという前提で。
あるいは、重複しても極めて小さな誤差として無視する。

int r[10];
int arr[4];
int n_max = -1, rand_max;

for(i = 0 ; i < 10 ; i++) r[i] = rand();
for(i = 0 ; i < 4 ; i++){
  rand_max = -1;
  for(j = 0 ; j < 10 ; j++){
    if(r[j] > rand_max){
      rand_max = r[j];
      n_max = j;
    }
  }
  arr[i] = n_max;
  r[n_max] = -1;
}

選択ソートの応用。
この場合はコード的にも計算量的にも誤差的にも使い物にならないけどw
0131名前は開発中のものです。2008/12/28(日) 17:14:32ID:zA6Xag1Z
どのみち10の配列を確保するならarray[i]=iにした後シャッフルして
必要な桁だけ使うという手もあるな
これだと重複ミスが起こりにくいし毎回決まった回数の処理で数字が決められる
それにトランプゲームとかにも応用できるし、定番のswapを作る機会にもなる
0132名前は開発中のものです。2008/12/28(日) 19:38:05ID:DKMQoCt4
車輪の再発明をがんばらなくても、std::swapを使えばいいだけの話では?
それ以前に std::random_shuffle を使えば一瞬なのでは?
0133名前は開発中のものです。2008/12/28(日) 19:39:32ID:LzwzO4A7
手順1
intで10個の要素を持つ配列を用意する
(1から9までの数字しか使わないなら0の分抜かして9個の配列で)
各要素に0から9までの数字を入れておく

手順2
ランダムで0から9個までの数字を作る
そのランダムの数字の要素を取り出す
そのランダムの数字の要素を
最後の要素と入れ替える

手順3
ランダムで0から(9−1)までの数字を作る
そのランダムの数字の要素を取り出す
そのランダムの数字の要素を
(最後ー1)個目の要素を入れ替える

この時点で
例えば1度目のランダムが3、2度目のランダムが5の場合、
intの入っている要素の数字は
[0,1,9,3,8,5,6,7,5,2]
となっているはず

って。これシスアドのテスト範囲にあったような気がする
0134名前は開発中のものです。2008/12/28(日) 19:41:22ID:LzwzO4A7
あ〜。なんか誤字脱字酷いけど気にしないでね〜
0135名前は開発中のものです。2008/12/28(日) 19:59:16ID:zA6Xag1Z
>>132
Cユーザーじゃないからその関数を知らなかったのです
勉強になった
0136名前は開発中のものです。2008/12/29(月) 01:30:45ID:hfGjo2/l
やり方は人によって千差万別やね
自分は>>106の考え方が一番好きだ

int ans[4];

for(int i = 0; i < 4; i++){
  ans[i] = rand() % 9 + 1;
  if(ans[i] == ans[(i+1)%4] || ans[i] == ans[(i+2)%4] || ans[i] == ans[(i+3)%4]){
    i--;
  }
}
0137名前は開発中のものです。2008/12/29(月) 19:09:23ID:z5KMzts+
配列の指数にどうして素直に数字を使わないの?

int ans[4];

for(int i = 0; i < 4; i++){
  ans[i] = rand() % 9 + 1;
  if(ans[i] == ans[0] || ans[i] == ans[1] || ans[i] == ans[2] || ans[i] == ans[2]){
    i--;
  }
}
01381372008/12/29(月) 19:10:15ID:z5KMzts+
思いっきしミスった。ゴメン。
0139名前は開発中のものです。2008/12/29(月) 19:13:11ID:z5KMzts+
あ。ミスッたのは、
指数が比較対照と同じになる部分で必ず等しくなってしまうから、
素直に数字を使えないんだって、
書いてる途中で気づいて自己解決したってことです。
重ね重ねゴメン。
0140名前は開発中のものです。2008/12/29(月) 21:42:14ID:hCBOt5BE
条件6通り程度なら並べて比較してダメならやりなおせばいい、か。
素人くさいけどヘタウマというかカコイイ!!
アリだと思います。

int i,a[4];
for{;;}
 for(i=0;i<4;i++)a[i]=rand()%9+1;
 if((a[0]!=a[1])&(a[0]!=a[2])&(a[0]!=a[3])
  &(a[1]!=a[2])&(a[1]!=a[3])
  &(a[2]!=a[3])) break;
}
0141名前は開発中のものです。2008/12/29(月) 23:10:08ID:aUqRb6Dt
>>140
プログラムなんてのはトレードオフだからね。
何かを得れば、何かを失うもの。
確かに効率は良くない。
だが、見通しの良さ、わかりやすさは◎。
ところが、そのコードにはアレルギーを起こす人が多い。
なぜか?

特定の条件でループを抜ける、というのは、
無限ループを仕込む典型的な原因だからだ。

失敗にも、上手な失敗と下手な失敗があって、
  明示的にエラーを吐いて終了 > 動くが挙動不審
     > 無限ループ > 突然クラッシュ
の順。
で、上手な人ほどよりよい失敗に落ちるようにする。

たとえばそのコードだと、&&を&に間違えている。
それが原因になっても、どこで腐ったのか見えにくい。
0142名前は開発中のものです。2008/12/30(火) 10:21:17ID:4Lg4VVtC
いっそのことこれでいいじゃんもう

int ans[4];
retry:
ans[0]=rand()%9+1;
ans[1]=rand()%9+1;
ans[2]=rand()%9+1;
ans[3]=rand()%9+1;
if(ans[0]==ans[1]){goto retry;}
if(ans[0]==ans[2]){goto retry;}
if(ans[0]==ans[3]){goto retry;}
if(ans[1]==ans[2]){goto retry;}
if(ans[1]==ans[3]){goto retry;}
if(ans[2]==ans[3]){goto retry;}
0143名前は開発中のものです。2008/12/30(火) 10:27:05ID:4Lg4VVtC
読む人に対する嫌がらせ

while(1){flag=0;for(i=0;i<4;i++)ans[i]=rand()%9+1;for(i=0;i<3;i++)for(j=i+1;j<4;j++)if(ans[i]==ans[j]) flag=1;if(!flag)break;}
0144名前は開発中のものです。2008/12/30(火) 10:34:18ID:t9a5j063
ゲームつくりの本質とは関係ないことで
よくみんな書くよなw
0145名前は開発中のものです。2008/12/30(火) 14:31:15ID:JKlPtp7s
長期的にみたら大事なことなのです

ねえな
0146名前は開発中のものです。2008/12/30(火) 15:22:16ID:J3AJ9cNy
>>1はいなくなったし>>118みたいに課題をだしても批評されないし
(118のソースはこなれていて突っ込むところがないが)
次の課題もないから話題がないせいだな
>>1じゃなくてもCじゃなくてもちょうどいいレベルの初心者がいれば
良スレになる可能性があるのに
0147名前は開発中のものです。2008/12/30(火) 15:56:56ID:+lVIynAg
実は、>>118

memset(input,0,sizeof(input));
sprintf(fmt,"%%%d[1-9]",digits);
scanf(fmt,input);
scanf("%*[^\n]%*c");

の意味が分からなくて悩んでいるんだけど。
こういうの正規表現っていうんだっけ?
こういうのを解説しているサイトみたいなのある?
0148名前は開発中のものです。2008/12/30(火) 16:07:44ID:JKlPtp7s
scansetでぐぐればいいんじゃないか
正規表現のサブセットみたいなの
0149名前は開発中のものです。2008/12/30(火) 16:56:17ID:k/oqyFbB
digits = 4だとして
sprintf(fmt,"%%%d[1-9]",digits);
で次の文字列が得られる
char fmt[]="%4[1-9]";

scanf(fmt,input);
でinputに'1'から'9'の文字を4文字だけ読み込む
他の文字や、4文字より多くの入力があると入力バッファに残るので

scanf("%*[^\n]%*c");

で読み捨てる。入力文字の最後は改行文字なので
"%*[^\n]"で改行文字まで読み捨てて、"%*c"で改行文字を読み捨てる。
入力バッファを空にすると次の入力もスムーズにおこなわれるってわけ。

wikipediaのscanfの項目によくまとまってるよ。
0150名前は開発中のものです。2008/12/30(火) 17:02:39ID:+lVIynAg
>>148-149 ありがとう。これで心安らかに年を越せます。
0151名前は開発中のものです。2008/12/31(水) 15:24:44ID:VYxP3E09
ゲームの画面ってどうやって作ればいいんですか??
0152名前は開発中のものです。2008/12/31(水) 15:25:43ID:VYxP3E09
オブジェクトとかを配置する画面の作り方がわかりません
ちなみにC言語です
0153名前は開発中のものです。2008/12/31(水) 16:45:26ID:xHQ2htSH
ゲームとかツールちょこちょこ作ってるけど
ここに書き込まれているプログラムの内容とか難しく感じる
0154名前は開発中のものです。2008/12/31(水) 16:49:09ID:nhGJ70sb
>>152
もう少し詳しく聞いたほうがいいかも?
オブジェクトの配置ってことは、
それ以前の普通に画面表示するところはできてるのかな?とか。
絵的に複数のマップチップを背景画に配置するようなことなのかな?とか。
宝箱や扉のイベント用オブジェクトの作り方なのかな?とか。
手持ち品の入れ替えする時とかに別に開くような、
操作用別ウィンドウみたいのを配置するののことなのかな?とか。

>>153
ここはゲーム作りそれ自体よりも、ゲーム作りを通じて、
プログラミングの言語を理解するのが主目的みたいだね。
っていっても。まだ参加者少ないからこれから、
これからどうなるか分からないけど。こっそり勉強させてもらってます。
0155名前は開発中のものです。2008/12/31(水) 17:44:21ID:VYxP3E09
いろいろなものを表現する土台としての画面です
キャラを表示したくてもどこにどのように表示するのかさえわかりません。。
入門書はゲームに無関係なC言語のものを読んでたのでまったくわかりまへん
0156名前は開発中のものです。2008/12/31(水) 18:21:06ID:MMS8KoX5
windowを表示したり、画像を表示したりする方法がわからないレベル?
だったらまず>>127のリンクのページを読むか
「Windows API」をググって出てくるHPを読むといいよ
0157名前は開発中のものです。2009/01/01(木) 04:39:05ID:LU3n6Iul
>>127のサイトからVisual StudioっていうソフトをDLしたんですけど
そのファイルの中のサンプルプログラム実行用フォルダに入ってるファイルがほとんど開けない状態になってるんですが
どうすれば開けるようになりますか?
0158名前は開発中のものです。2009/01/01(木) 10:04:51ID:MDNTZvu6
>>127のサイトは説明が不十分だ
ここ↓でDXライブラリの設定をしないと使えない

DXライブラリの使い方解説
http://homepage2.nifty.com/natupaji/DxLib/dxuse.html
0159名前は開発中のものです。2009/01/02(金) 14:45:45ID:2uMBMwue
@VC++用DXライブラリダウンロード

AVisual C++ 2008 Express Editionダウンロード

BVisual C++ 2008 設定

CWindowsプロジェクト(Win32プロジェクト)作成

Dプロジェクトにcppファイルを追加

Eプロジェクト設定

Fウィンドウ作成

G画像表示

流れはこんな感じ?
0160名前は開発中のものです。2009/01/03(土) 01:00:46ID:cGzTJz3u
VC++2008の中の2つのファイルが何度やってもインストールに失敗してしまいます・・
それとDxライブラリとかいうソフトの中のサンプルファイル実行用フォルダの中にあるDxLib_VC2008_and_2005用.slnっていうファイルが開けません・・
システムの復元とかやったり何度もやり直してみたけどだめですた
0161名前は開発中のものです。2009/01/03(土) 01:30:21ID:8KicIl/n
slnはvcインストールしないとだめだろ
てかさ、だから何?
解決策が欲しいのか?それだとしても
>2つのファイルが
はないだろ。
0162名前は開発中のものです。2009/01/03(土) 16:51:04ID:cGzTJz3u
VCはあきらめてborlandでやり直しました
っていうかもうすでにborlandを過去にインストールしてたのでこれが原因でVCをインストールできなかったのかもしれないです
それで
http://homepage2.nifty.com/natupaji/DxLib/dxuse_bcc.html
の手順で”8.プロジェクトのビルド、実行”までいったんですけど実行すると6で作ったDrawPixel.cppが開けないというエラーが出ます
ちなみにDrawPixel.cppを4で作ったtestファイルから出すとエラーではなくてfatalという表示が出て
またDrawPixel.cppのところでdoes not exist - don't know how to make it
とかいう常時がでるんですがどうすればいいのかさっぱりわかりません++;
0163名前は開発中のものです。2009/01/03(土) 16:52:16ID:cGzTJz3u
常時 ×
表示 ○
0164名前は開発中のものです。2009/01/03(土) 17:39:20ID:cGzTJz3u
今プログラムからVC++2008エクスプレスエディッションとかいうのを起動してみたんですが起動できました
これはインストールできてると思っていいんですか?
でも相変わらずDxLib_VC2008_and_2005用.slnは開けません
ダブルクリックすると一瞬砂時計は見えるんですがその後何も起こらないような状態です
それとborlandに変更するときにDxLib_VCを削除しようとしたのですが他のユーザーかプログラムが使用しているので削除できませんという表示が出て削除できませんでした
何のプログラムが使ってるんですか?
0165名前は開発中のものです。2009/01/03(土) 18:18:16ID:cGzTJz3u
VC++の方の問題が解決しました
とりあえずこっちでやっていこうと思います
0166名前は開発中のものです。2009/01/03(土) 18:28:48ID:LXo4lpsC
入門書クリア前提と書いてあるのに、入門以前の奴がいつく不思議。
低学歴ってこういうところが図々しいんだよなぁ。
0167名前は開発中のものです。2009/01/04(日) 05:47:47ID:8iog1RSe
ゲ製クオリティですね
0168名前は開発中のものです。2009/01/04(日) 08:50:13ID:je6HotHc
ツール?に振り回されて全然進まないとか、よくあるパターンだなあ
本質理解せずにやり方だけ憶えたって、たいして上達しない気がする。
まるでツクールでゲームを作ってるような
0169名前は開発中のものです。2009/01/04(日) 14:27:38ID:zQBmDULY
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html
↑これの3.プロジェクトの作成のところのCにある”場所”ってどこでもいいんですか?
デフォルトでまったく関係ない場所にあるVC2008のフォルダの中のプロジェクトっていうフォルダに保存されるんですが
その後プログラムを組んでいくとDXLibのサンプルプログラム実行用フォルダに入ってる画像ファイルを表示できないのですが・・・
0170名前は開発中のものです。2009/01/04(日) 14:34:04ID:gz3s55od
入門書をクリアしたかどうかもあやしい>>1
上級者気取りのチンカス野郎
PC入門書から読んできた方がいいハゲ

もうだめだ
0171名前は開発中のものです。2009/01/04(日) 15:09:39ID:zQBmDULY
表示する画像をvisualstudio内のプロジェクトフォルダにあるtestフォルダに入れると画像が表示されました
これはDXlibとVC++がリンクできてないってことですか?
一応設定ガイドのとおりに進めてきたんですが唯一設定ガイドのとおりにできなかった点は
DxLib_VC2008_and_2005用.slnからVC++を開けなかったことぐらいです
なのでVC++を直接開いたんですがこれが原因だったんでしょうか・・・
0172名前は開発中のものです。2009/01/04(日) 16:38:36ID:WqEDI8cx
スレタイにあるCの入門書クリア状態って
1.Cの文法を知っている状態
2.標準ライブラリを一通り知っている状態
3.APIを一通り知っている状態
4.その他、適切なライブラリを選んで使える状態
のうちのどれなんだろうか?
Java、VB、HSPなどは1〜3まで切れ目なく1冊の
入門書に書いてあるけど
Cの場合、1だけっていうのも結構あるような気がする

いずれにしても>>171
0.PCが使いこなせる
-1.日本語わかります
の段階さえあやしいような気がするが
0173名前は開発中のものです。2009/01/04(日) 16:45:09ID:zQBmDULY
入門書はどの入門書を読めばいいですか?
0174名前は開発中のものです。2009/01/04(日) 16:46:17ID:zQBmDULY
DxLib_VC2008_and_2005用.slnからVC++を開けない事に関しての対処法を知るにはどの入門書がお勧めですか??
0175名前は開発中のものです。2009/01/04(日) 16:47:24ID:BrM7xX/4
>>1 は「はじめてのC」を一通り読んだだけ
■ このスレッドは過去ログ倉庫に格納されています