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

このエントリーをはてなブックマークに追加
1名前は開発中のものです。
入門書一冊終わったけどこれでどうやってゲーム作んだゴラー
って人のためのスレ

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

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

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

とりあえず、入門書から先に進めなくて涙目になってる人(俺含め)のためのスレです
2名前は開発中のものです。:2008/12/21(日) 10:06:03 ID:Z9YwqGtM
3Dそこそこできると思うんだが
コンソールは無理
3名前は開発中のものです。:2008/12/21(日) 10:07:17 ID:XeH+Z5e9
>>2
お前コンソールでphotoshopでも作る気か?
4名前は開発中のものです。:2008/12/21(日) 10:08:00 ID:Z9YwqGtM
入門書って何の入門書?
言語なのか、ゲームの入門書みてたら
コンソールはいらなくないか
5名前は開発中のものです。:2008/12/21(日) 10:14:28 ID:XeH+Z5e9
>>4
言語書いてなかったすんません
C言語を前提で話してます

つまり、「はじめてのC」とか一通り理解したけどこの知識からどうやってゲームつくんだよ・・・
みたいに途方にくれてる初心者(俺含め)を対象に、簡単なゲーム設計をやっていこうみたいなスレです

コンソールアプリケーションがらくだと思ったんだけどだめかな?
6名前は開発中のものです。:2008/12/21(日) 10:15:58 ID:XeH+Z5e9
ちなみに、簡単なコンソールゲームっていうのは数当てゲームとかそういうのね
簡単な戦闘ゲームなんかも作れるようになったらかなりgoodだと思うんだが
7名前は開発中のものです。:2008/12/21(日) 10:16:00 ID:Z9YwqGtM
ではお題
縦横50マスの範囲(何らかの形で表示)を
敵10体とプレイヤーを表示して
ゴールと通過しなければならない地点を
ランダムで表示、移動は上下と左右のみターン製で
通過地点を通ってゴールに行けばクリア。
障害物はない敵の動きは任せます。
8名前は開発中のものです。:2008/12/21(日) 10:17:27 ID:XeH+Z5e9
>>7
いきなり難易度が高すぎるよww
もっとほんと簡単なことろからやりましょうよ・・・
とりあえず数当てゲームを作ってます
9名前は開発中のものです。:2008/12/21(日) 10:21:25 ID:DkqFYwhE
C勉強したらAPIやライブラリについて勉強すればいいじゃん。

そうすりゃ>7だってできんことは無いだろう。
10名前は開発中のものです。:2008/12/21(日) 10:21:29 ID:Z9YwqGtM
多分大丈夫だよ
コンソールはやめてwindowにしなよ
部分的なコードでもいいからここに書いてみ
わからないのはここに答え書くよ
11名前は開発中のものです。:2008/12/21(日) 10:21:57 ID:XeH+Z5e9
とりあえず、お題は「数当てゲーム」だとして
そのお題にたいして自分なりに色々ルールや文言を決める
そんで軽くまとめて、あとは製作

■名前
数当てゲーム
■遊び方
1〜9の中からランダムに決められた数をユーザーが当てるゲーム
■仕様
ユーザーの入力値が10の時にゲーム終了
ユーザーの入力値が1〜10の範囲外のときは、再入力を促す
ユーザーの入力値が答え+-2なら「惜しい」的な表示を
ユーザーの入力値が答えより大きければ「大きい」小さければ「小さい」を表示
12名前は開発中のものです。:2008/12/21(日) 10:24:08 ID:Z9YwqGtM
自分でお題決めるのはどうかと思うぞ?w
できそうでないのに挑戦することに意味がある(覚えやすい)
開発環境は?
13名前は開発中のものです。:2008/12/21(日) 10:29:39 ID:ymFJ1v3a
PCが連投規制引っかかったorz

>>9
めちゃくちゃ考えたらわかるかもしれないけど、API?ライブラリ?な初心者(俺)にとっては正直厳しいです……
コンソールで簡単なゲームを作りつつ一歩ずつ進む感じでは難しいですかね?
14名前は開発中のものです。:2008/12/21(日) 10:32:50 ID:ymFJ1v3a
>>10
Windowだと絵とか色々用意しなきゃいけないんじゃ無いんですか?
ほかにもWindow自体を作るソースとかも必要なんじゃないんですかね…?
そういうの全く分からなかったので
自分の理解しているコンソールから始めようと思ったのです

>>12
ですよねwww
一応こんな感じでやっていきたい
みたいなやつです
XPPROでVC++です
15名前は開発中のものです。:2008/12/21(日) 10:39:55 ID:fqBa+KQb
http://wiki.game-develop.com/index.php?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%2F%BD%E9%BF%B4%BC%D4%B8%FE%A4%B1%2F%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB%2F%C3%CA%B3%AC%C5%AA%B3%D8%BD%AC%2F%BF%F4%C5%F6%A4%C6%A5%B2%A1%BC%A5%E0#re8e4485
ここの段階学習もウィンドウだからな
コンソールは意味ないよ
VCCなら新規プロジェクトでウインドウアプリ
ウィンドウにボタンとlabel5*5で25個設置
lebelの文字を変えることで敵とかを識別でどう?
16名前は開発中のものです。:2008/12/21(日) 10:42:49 ID:ymFJ1v3a
>>15
つまり、今更コンソールなんかやっても仕方ない感じですかね
17名前は開発中のものです。:2008/12/21(日) 10:42:55 ID:iV+BWt5y
■名前
今年の漢字タイピングゲーム
■遊び方
今年の漢字をひたすらタイプ
■仕様
クリアするとほんのりえっちなAAがお目見え
18名前は開発中のものです。:2008/12/21(日) 10:45:12 ID:ymFJ1v3a
>>17
そういうのが欲しかったwww
やってきます
まあAAないからクリア要素はないけど
19名前は開発中のものです。:2008/12/21(日) 10:48:51 ID:XeH+Z5e9
#include <iostream>//基本ライブラリ
#include <stdlib.h>//乱数取得に必要
#include <time.h>//rand()の初期化に必要
#include <math.h>//絶対値の計算に必要

using namespace std;

int main()
{
int n,rnd,flag=1;//n:ユーザー入力 rnd:答え flag:ゲームを続けるか否か

while(flag)//mainのループ
{
srand(time(NULL)); //乱数の初期化?よく分からないけどコレやら無いと値が固定になる
rnd = rand() % 9+1; //乱数を1〜9までにしてrndに代入
cout << "1〜9で当ててください(終了は10)" << endl;
while(true)//answerループ、当たるまでor10が入力されるまでループ
{
cin >> n;
if(n <= 0 || n >=11)
{ cout << "1〜9(終了は10)を入力してください"<<endl;
continue;}//もし1〜10の範囲外ならmainのループに戻る
else if(n == 10){flag=0;break;}//もしn=10ならflagに0を代入しanswerループを抜ける
20名前は開発中のものです。:2008/12/21(日) 10:49:22 ID:XeH+Z5e9
else if(rnd == n)//もし等しければ、正解
{
cout << "正解です" << endl;
break;
}
else if(abs(rnd-n) <= 2)//rnd-nの絶対値が2以内なら表示
{
cout << "惜しいです、";
}
if(n > rnd)
{
cout << "もっと小さいです" << endl;
}
else if(rnd > n)
{
cout << "もっと大きいです" << endl;
}
}
}

return 0;
}
21名前は開発中のものです。:2008/12/21(日) 10:52:37 ID:ymFJ1v3a
ちなみに数あてゲームはこんな感じです
テーマ
>>11
ソース
>>19>>20
動作は大丈夫だと思いますが
「ここはこうじゃね?」
とか
「こうしたほうが簡単にかける」
とか
「この処理いらなくね」
みたいなものがあったら指摘お願いします
22名前は開発中のものです。:2008/12/21(日) 11:09:42 ID:XeH+Z5e9
2chに貼るとめちゃくちゃ見にくい事に気付いたんで画像で貼ってみた
やっつけ仕事だけど幾分見やすくなったかと・・・
http://dounika.web.fc2.com/
それじゃ>>17作ってきますお題ありがとう!
23名前は開発中のものです。:2008/12/21(日) 11:14:02 ID:XeH+Z5e9
>>17
の仕様を決めねば・・・
■名前
今年の漢字タイピングゲーム
■遊び方
1995年〜2008年までの西暦を順番に表示
その年の「今年の漢字」を入力
■仕様
1995年〜2008年までの西暦をランダムに10個表示
一つずつ、その年の「今年の漢字」を入力
正解ならその旨表示
最終的に10問中何問正解したかを表示し結果によって表示内容分岐


こんなかんじかな・・
行ってきます
24名前は開発中のものです。:2008/12/21(日) 11:23:58 ID:fqBa+KQb
>>7は無視か
てか次のお題もはじめのと同じじゃん?
配列は使うだろうが
そういうの何個作っても同じだよ
25名前は開発中のものです。:2008/12/21(日) 11:34:33 ID:XeH+Z5e9
>>24
だから、現段階では無理ですって
文字が書けるようになったばっかりの人間に小説書けって言ってるようなもんですよ?
そんな大きなプログラム作って途中で挫折するなら小さいプログラムでも確実に作ったほうが少しは力になると思うんですが
そんなに、小さい努力は無駄ですかね?
配列を使うということはさっきのものより少しレベルアップしたと思うんですけどそれじゃだめですかね?

もし、俺の考えがとんでもなく考え違いで
「こんなことやっても意味がない」と重ねて言うなら>>7にとりかかろうと思います
26名前は開発中のものです。:2008/12/21(日) 11:41:27 ID:XeH+Z5e9
なんで俺こんな喧嘩腰なんだろう
すんません
27名前は開発中のものです。:2008/12/21(日) 11:47:28 ID:EtGJ5kM3
いや、>>24の言うことは正しい。

ちょろっとコード書いて、天狗になって、
似たようなモノをいくら繰り返し書き続けても、発展がない。
なぜなら、すでに出来ることをやってるだけで、新しい技術が何も身につかないから。

喩えれば、一桁の足し算を覚えた小学生が、
数字だけを取り替えながらいつまでも足し算ばかり解くようなもの。
先に進めないのだ。
28名前は開発中のものです。:2008/12/21(日) 11:55:26 ID:XeH+Z5e9
>>27
むしろ、足し算しか分からない子供に掛け算や割り算を自分で理論まで考えて解けって言ってるようなもんだと思うんですけど
それは、たしかにできることかもしれないけど考え付くまでにとても時間がかかるし
分かってしまえば簡単なことかもしれないけど現実的ではないと思うんですが・・・・

そういう意見ばっかりだからプログラミングの敷居を高くしちゃってるような気がするんですがね
別に「今すぐ早急に」を求めているわけではないんで、ゆっくり上達していけばいいと思うんですが
ここの人たちはみんなプロ志望かなんかなんですかね?

あなたたちから見たらクソみたいなものかもしれないけど
現に、数当てゲームを作るのだって乱数の知識を調べて身につけたし、今作ってる今年の漢字あてだって配列のポインタを身につけたし(みようみまねだけど)
そんなんじゃだめなんですかねえ・・・

まあ、俺みたいな駆け出しの考えが正しいはずないし、今作ってるの辞めて>>7に取り掛かります
ありがとうございます
29名前は開発中のものです。:2008/12/21(日) 11:59:04 ID:fqBa+KQb
>>15でしてみな
コンソールじゃだめだよ
30名前は開発中のものです。:2008/12/21(日) 12:00:40 ID:EtGJ5kM3
そういう意味で、Mentor の重要性を認識するべきなんだよ。

ネットで無責任な人に聞いたってロクなことはない。
必死に勉強し、できるだけ良い大学に入って、
同好の士が集まるサークルに所属して交友を深めるのが一番だ。

運が良ければ高校でも同好会はあるが、その時点でのめり込むと、
 専門学校・四流大 → 下層民  の転落ルート確定だから。
31名前は開発中のものです。:2008/12/21(日) 12:12:45 ID:rKpGztZG
【初心者】課題をクリアしていくスレ【講習会】
http://pc11.2ch.net/test/read.cgi/gamedev/1086858349/
32名前は開発中のものです。:2008/12/21(日) 12:18:31 ID:fqBa+KQb
成長するにはヒントを出されてといていく形式
がいいと思うんだがなこれができたら、
RPGまでいっきに行くつもりなんだがw
とりあえずコードはいいから
どういう考え(手法)でいくか書いてくれ
ここで方向を間違ったらもったいないしね
33名前は開発中のものです。:2008/12/21(日) 12:43:27 ID:PQUSz0Mp
aaa
34名前は開発中のものです。:2008/12/21(日) 12:44:16 ID:PQUSz0Mp
>>32
>>1いなくなったから代わりに俺に教えて
35名前は開発中のものです。:2008/12/21(日) 12:47:03 ID:fqBa+KQb
label5*5で25個とボタン配置してきて
できたらスクショよろ
36名前は開発中のものです。:2008/12/21(日) 12:49:19 ID:PQUSz0Mp
>>35
labelがよくわかんないんだけど
*****
*****
*****
*****
*****

こんな感じで四角形を並べればいいの?
37名前は開発中のものです。:2008/12/21(日) 12:52:02 ID:fqBa+KQb
ああそうそうlabelは左上から右に行って
一段下がって右にいってをやるんやで
コピーもできるが一個ずつやで
labelのnameに意味があるからね注意してや
38名前は開発中のものです。:2008/12/21(日) 12:52:06 ID:nqiZzAA2
俺がcinの罠で苦しんでる間にずいぶん話が進んでるな・・・(´・ω・)
数字以外入力すると、ふっとぶ。

他には難癖つけるほどでもないけど、気になったところ。
・srand(〜)はループの中に入れなくてもおk
・外側のループを while(n!=10){ で、flag変数いらない。

2重ループの構成を変えてみた。
ヘッダ>>19で。メイン以下

int main(){
int n,ans=0;srand(time(NULL));
while(1){
if(ans==0){ans=rand()%9+1;cout<<"1〜9で当てろ(終了は10)"<<endl;}
n=0;cin>>n;
if(n<=0||n>=11){cout<<"範囲外だ。"<<endl;cin.clear();cin.ignore(INT_MAX,'\n');continue;}
if(n==10){cout<<"これにて終了する。"<<endl;break;}else if(n==ans){cout<<"正解だ!"<<endl;ans=0;continue;}
if(abs(ans-n)<=2)cout << "もうちょっと";else cout<<"もっと";
if(n>ans)cout<<"小さい"<<endl;else cout<<"大きい"<<endl;}
return 0;}
39名前は開発中のものです。:2008/12/21(日) 12:57:49 ID:PQUSz0Mp
>>37
何言ってるかわかんないから一応ググって見たけどググってもでてこないから俺には無理そうだ

>>38
>>19-20のプログラムはそんなに短くなるのか・・・感動したよ
>>1のやりたいことがなんとなくわかった、けどもう>>1はいない
これは悲しいな
40名前は開発中のものです。:2008/12/21(日) 13:03:10 ID:fqBa+KQb
なにができないん?
フォームは表示してるか?自動でできてるやろ
41名前は開発中のものです。:2008/12/21(日) 13:09:06 ID:PQUSz0Mp
>>40
http://www2.uploda.org/uporg1871845.png
ここから先に進まない
42名前は開発中のものです。:2008/12/21(日) 13:19:22 ID:fqBa+KQb
見本や
http://www2.uploda.org/uporg1871862.jpg
ツールボックスからlabelを選んでそれをドラッグで配置やで
ツールボックスは表示から表示してな
43名前は開発中のものです。:2008/12/21(日) 13:21:52 ID:fqBa+KQb
ああそうかこれも知らんかもな
デザイン画面は左のプロジェクトの中のform1.hを
ダブルクリックで表示やで
44名前は開発中のものです。:2008/12/21(日) 13:39:26 ID:PQUSz0Mp
やっとできますた・・・
30分もかけちゃってすいません
http://www.uploda.org/uporg1871943.png
45名前は開発中のものです。:2008/12/21(日) 14:07:12 ID:fqBa+KQb
君失格やで!
label適当にクリックで選択してみ、んでプロパティの中の
上のほうにあるnameどうなってる?
左上から順にlabel1 label2になっとるかい?
46名前は開発中のものです。:2008/12/21(日) 14:09:58 ID:fqBa+KQb
それと君はレベルどれくらいなの?
入門書レベルはおkですかね
47名前は開発中のものです。:2008/12/21(日) 14:11:03 ID:49OkHcC6
ありがちだなあw
48名前は開発中のものです。:2008/12/21(日) 14:15:24 ID:PQUSz0Mp
>>46
入門書を数ヶ月前にやってそのまま堕落してる状態です
名前かえなきゃいけないのか・・
やってきます
49名前は開発中のものです。:2008/12/21(日) 14:17:16 ID:fqBa+KQb
それとボタンも配置してプロパティのtextでstartやで
50名前は開発中のものです。:2008/12/21(日) 14:19:53 ID:PQUSz0Mp
51名前は開発中のものです。:2008/12/21(日) 14:24:06 ID:PQUSz0Mp
start までできますた
http://www2.uploda.org/uporg1872067.png
52名前は開発中のものです。:2008/12/21(日) 14:36:10 ID:fqBa+KQb
おk
ここからはちょい、覚えないかんので
書くで

int main の下に自作関数

void mbox(void)
{
MessageBox::Show("aaa");
}
を書く
form1.h選んで右栗からコードの表示で
上のほうに#pragma onceがあるやろうから
そこに
void mbox(void);
これの意味はわかるか?
んでフォームデザインでstartをダブルクリック
すると勝手に
private: System::Void button1_Clickとかでるから
中に
mbox();
これでそれぞれ書く場所がわかるはずや
実行してみ
53名前は開発中のものです。:2008/12/21(日) 14:41:11 ID:PQUSz0Mp
>>52
できますた
クリックでaaaって描かれたウインドウが表示されました
54名前は開発中のものです。:2008/12/21(日) 14:50:08 ID:fqBa+KQb
labelをもう一個ボタンと上のボタン群の間の真ん中辺りに設置して

その名前->Text="なんでもええ/n改行した";
その名前->BackColor=Color::Red;
をmboxの中に書いてみプログラムで
プロパティで変えれるもんは変えれるって事や
これで状態をあらわすんや へぼいなw
55名前は開発中のものです。:2008/12/21(日) 14:55:30 ID:PQUSz0Mp
>>54
なるほどなるほど
56名前は開発中のものです。:2008/12/21(日) 15:03:58 ID:fqBa+KQb
じゃあ宿題な
ボタンを押したら毎回ランダムで3個の
labelの文字を敵という文字に変える
それ以外は何らかの文字にする。
ちゃんと前回の敵の文字は消すこと。

グローバル変数なんかは
void mbox(void);
あたりに書く
はっきりいうとswitch のおばけ文になる
あとはインテリセンスをググって調べとくこと
ほな(^^♪


57名前は開発中のものです。:2008/12/21(日) 15:09:04 ID:fqBa+KQb
ああもう一個だけヒントというか知っ得?情報
int rの時
r.ToString()で文字列になる
58おいちゃん ◆DlyW/s8ibQ :2008/12/21(日) 15:29:16 ID:fqBa+KQb
トリップ付けさせてもらう
学ぶならRPGとシュミレーションどっちが先がいい?
それと>>1はいないんか、なんか悪いことしたな
別スレのほうがいいかな?
59名前は開発中のものです。:2008/12/21(日) 17:56:00 ID:rKpGztZG
ID:PQUSz0Mpは変なおじさんについていくなって教わらなかったのか
悪いことは言わないからその人はやめとけ
60名前は開発中のものです。:2008/12/21(日) 17:56:32 ID:xa3Nwc9G
コンソールでゲームってGUIより難しくないか?
611:2008/12/21(日) 19:24:07 ID:ymFJ1v3a
帰省中なので携帯から

コンソールのゲームは本当にイメージが大事だから練習にはいいと思ったんですがね……
下手にGUIに手を出しても、よく分からないし
言われたことそのままハイハイやってても身に付くわけないし
だからお題だけもらって分からないところはヒントもらう、完成したらソースを見てもらってもっといい書き方を教えてもらったり他人のソースと比べて別なアプローチを知ったり〜
みたいな感じがいいと思ったんですが
62名前は開発中のものです。:2008/12/21(日) 19:29:26 ID:ymFJ1v3a
>>39
ありがとうございます
なるほど、数字の範囲外だけではなく文字も考えなくてはいけないのですね……
これはかなり大きいミスですね
以後気をつけます


そんなに短くなるのですか……
帰ったら自分のソースとよく見比べてみます
ありがとうございます
6338:2008/12/21(日) 20:30:45 ID:P2cMz3mF
ぶっちゃけ、>>38のソースの下3行=>>20
ロジック的にはなんの圧縮もしてないですから。
むしろ可読性悪くしてる気がする。if文羅列はこれ以上どうにもならなかったし。

インデントの無い縦長ソースよりは見やすいような気がするだけで。個人的に。
VisualStudioならコピペして、切れ目っぽいところで改行していけば
半自動で整形してくれる。
6438:2008/12/21(日) 20:50:05 ID:P2cMz3mF
なんか昔のメモ帳に
・ハノイの塔
・8王妃
・巡回セールスマン
・ナップザック
・安定的結婚

とか書いてあるページ見つけた。懐かしい。
このへんのロジックを自分で考えて作ることができれば
宿題スレで武者修行できるくらにはなれるんじゃないかと。

コンソールアプリではこのへんが限界。
テトリスとかの落ちもの作ろうと思ったら
コンソールでがんばるより次に進んだほうが早いと思う。
65名前は開発中のものです。:2008/12/21(日) 22:35:27 ID:psCLGrAG
プログラムは、中でどうやって動いているか理解出来れば
びっくりするほどどんどん出来るようになると思う

上手く説明できないのが悔しいが
windowsなら、こういう風にループしてるんだという流れがわかれば
あとは付け足すだけだし
スケルトンプログラムでもさっさと理解した方が早い気がする
66名前は開発中のものです。:2008/12/22(月) 00:40:10 ID:ASveWW9+
>>61
個人的にはコンソールはロジック部分(例えばRPGのダメージ処理とか)とかを
てっとりばやくテストしたい時に、検証用に使う。

逆に言えば文字列の入出力以外のUIを持たないので、UIが重要になるゲームを作りたい
ならコンソールを勉強しても大して意味は無い。angbandみたいなのが最終目標
とかいうなら別だが。
67おいちゃん:2008/12/22(月) 01:53:14 ID:mUNaomub
GUI系はどうすればいいか書くんでやれると思うけどな
応用効く宿題しかださんからやってみてや
仕組みとかも自分であとあと考えられる力、これをみにつけられると思うで、一番大事だと思う。
あとな、コードがこれのほうがいいとか、無用やで
こうしたい、でその通りに動くだけでいい、ただ他人のは読めないかんと思う
68名前は開発中のものです。:2008/12/22(月) 04:06:11 ID:75EKu/k5
初心者がRoguelikeを作るスレか。期待してるぞ
69名前は開発中のものです。:2008/12/22(月) 05:08:52 ID:goIQAPxA
ネットワークゲームを作りたいのですが、
予算の関係で、マッチングサーバーをレンタルサーバーにしようと
思っているのですが、もし、ある程度売れてしまった場合に
専用のサーバーに変えるとしたら、IPアドレスが変わってしまった場合
どうやって、対処すれば良いですか?
70おいちゃん ◆DlyW/s8ibQ :2008/12/22(月) 07:47:37 ID:e0/X2/aD
すれ違いだな
でも答えたる
あのな、よくレンタルサーバーとかいうけどな
それはweb関連用途に限って貸してくれるねんで
だいたいcgiでさえ自作の範囲限られるのに
そうでない場合も相手がソースが見れるんやから
見れない自前アプリなんか入れさせるわけないやろ。
この点サーバーてっのがゲーム用途と同じだと思う奴多いな。
hp式(データベースにsqlserver利用)のマッチングだったら
ドメイン引き継げばいいやん、後は前の奴から飛ばせばいい

あーあとな宿題の答えは2日以内に書き込んでな
答えは3日目に書くから
71名前は開発中のものです。:2008/12/22(月) 12:39:12 ID:7HSkpjqK
>>7とかむずかし過ぎだろわろた
72名前は開発中のものです。:2008/12/22(月) 12:46:37 ID:7HSkpjqK
>>19
randの使い方に問題があるね。
なぜなら、いくつかのrandの実装では下位ビットがそれほどランダムでは無いとかうんたらかんたら

rnd=1+(int) (9.0*rand()/(RAND_MAX+1.0));

とすることを推奨します。
でも初心者のうちは割とどうでもいいような気もするので、今のままでもおk。
73おいちゃん ◆DlyW/s8ibQ :2008/12/22(月) 13:32:16 ID:e0/X2/aD
>>7が難しいとか
自分らで勝手に難しくしてないか?

マップの表示 もうできたな
敵の位置ランダムで表示 今回の宿題や
自分とゴールと通過地点の表示 敵がいないとこに表示しないとな
移動は上下と左右のみターン製 ここか難しいのは?
マップの仕様よう見てみ ヒントは縦横同数やで
障害物はない敵の動きは任せます 別に時機によって来るなんていってないぞ?

こういう問題解くときは自分で紙に書いていろいろ試してみ
例えば一番上の行にいるときに上に行かれんよな
ではどうすれば今一番上にいるか?ってことがわかるかとか
規則さがしてみ 

74おいちゃん ◆DlyW/s8ibQ :2008/12/22(月) 14:04:46 ID:e0/X2/aD
すまんもう一個だけ書かせてな
考える力を見につけるのがゲームつくりでは一番大切やと
思ってる。これは>>1の言われたことそのままハイハイやってても身に付くわけないし
と同じや、考える力どれくらいあるのか試す問題出すな

三角形の面積は底辺*高さ割る2である

1行目に1個目の三角形の底辺を2行目に1個目の高さ
3行目に2個目の底辺4行目に2個目の高さ
を書くものとしたとき以下の場合どうすれば最速かつ簡易にどちらが大きいかわかるか?
プログラムとそれ以外(現実での方法)両方の方法を答えよ
一問目
1
2
1
3
二問目
12、00000012
144、5412478197
12、4512451
144、5412787
プログラムは読み込みとかかかなくていいよ
1行目を変数Aとかでおk
これで考える力あるかわかるで
75名前は開発中のものです。:2008/12/22(月) 14:45:11 ID:7HSkpjqK
>>73-74
「俺が好きなフルーツは何でしょう?」
「ええっと、バナナかな?」
「ぶっぶー。イチゴだよ。君には考える力が足らんな。滝にでも打たれて来い。」

っていう会話が頭に浮かんだ。

それはともかく>>7は説明が足りないよ。
GUIなのかCUIなのか?
GUIだとしたらWinAPI使うのか、何かのライブラリでラッピングするのかわからないし。
マスの表現方法についてだって、ドラクエみたいな表現なのか、クォータービューなのか
あるいは「敵1:右に3マス、上に2マス」みたいな文字による表現なのかわからない。
プレイヤーの移動はキーボードで行うのかマウスで行うのかさえわからない。
そもそも誰がプレイヤーを動かすのかについてさえ言及が無い。もしかしたらAIが勝手にゴールを探すのか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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







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

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

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


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

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


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

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

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

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

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

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

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

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

まずは、4桁の重複しない乱数を作成して表示することから始めよう。
それから、入力→判定。入力については難しいこと考えずにやりやすいように。
判定も、それっぽく動くようになってから矛盾する部分をつぶしていけばいい。
1051:2008/12/25(木) 11:45:26 ID:47eJt85M
>>104
それなら作れるよ
ちょっと作ってくる
1061:2008/12/25(木) 11:52:02 ID: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だっけ?
それであたりかどうか判定
}

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

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

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

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

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

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

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

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

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

まだ見ぬ弟子のこと考えて技術ブログ書くのなら
たいてい前もって完成させてからの、ログ追いトレース記事になってしまう。
完成すれば楽しい思い出の、ぐだぐだ設計迷走日記とはなかなか両立しない。
125名前は開発中のものです。:2008/12/27(土) 10:41:20 ID: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のロジックを組み立てる練習にコンソールゲーム作成はいいと思うので
面倒と思わずにまずはひたすら組んで実行してみることを勧める
126名前は開発中のものです。:2008/12/27(土) 10:44:28 ID:QMJ1Aqu3
TEAM NAVA分室 ゲーム製作講座 RPG
ttp://inu.harisen.jp/top.html
127名前は開発中のものです。:2008/12/28(日) 11:46:19 ID:Wm8cLO/2
C言語〜ゲームプログラミングの館〜
http://dixq.net/g/

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

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

出来た!と思って打ち込んだプログラムが1発で動いたことは1度もない
ゲーム作りがこんなに面倒だとは思わなかったよ
128名前は開発中のものです。:2008/12/28(日) 13:23:09 ID: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;
      }
    }
  }
}

かな。
129名前は開発中のものです。:2008/12/28(日) 13:39:04 ID: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ループほどで抜ける。
シンプルだけど可読性が悪い例だ。

ケアレスミスはご容赦。
130名前は開発中のものです。:2008/12/28(日) 13:50:34 ID: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
131名前は開発中のものです。:2008/12/28(日) 17:14:32 ID:zA6Xag1Z
どのみち10の配列を確保するならarray[i]=iにした後シャッフルして
必要な桁だけ使うという手もあるな
これだと重複ミスが起こりにくいし毎回決まった回数の処理で数字が決められる
それにトランプゲームとかにも応用できるし、定番のswapを作る機会にもなる
132名前は開発中のものです。:2008/12/28(日) 19:38:05 ID:DKMQoCt4
車輪の再発明をがんばらなくても、std::swapを使えばいいだけの話では?
それ以前に std::random_shuffle を使えば一瞬なのでは?
133名前は開発中のものです。:2008/12/28(日) 19:39:32 ID: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]
となっているはず

って。これシスアドのテスト範囲にあったような気がする
134名前は開発中のものです。:2008/12/28(日) 19:41:22 ID:LzwzO4A7
あ〜。なんか誤字脱字酷いけど気にしないでね〜
135名前は開発中のものです。:2008/12/28(日) 19:59:16 ID:zA6Xag1Z
>>132
Cユーザーじゃないからその関数を知らなかったのです
勉強になった
136名前は開発中のものです。:2008/12/29(月) 01:30:45 ID: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--;
  }
}
137名前は開発中のものです。:2008/12/29(月) 19:09:23 ID: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--;
  }
}
138137:2008/12/29(月) 19:10:15 ID:z5KMzts+
思いっきしミスった。ゴメン。
139名前は開発中のものです。:2008/12/29(月) 19:13:11 ID:z5KMzts+
あ。ミスッたのは、
指数が比較対照と同じになる部分で必ず等しくなってしまうから、
素直に数字を使えないんだって、
書いてる途中で気づいて自己解決したってことです。
重ね重ねゴメン。
140名前は開発中のものです。:2008/12/29(月) 21:42:14 ID: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;
}
141名前は開発中のものです。:2008/12/29(月) 23:10:08 ID:aUqRb6Dt
>>140
プログラムなんてのはトレードオフだからね。
何かを得れば、何かを失うもの。
確かに効率は良くない。
だが、見通しの良さ、わかりやすさは◎。
ところが、そのコードにはアレルギーを起こす人が多い。
なぜか?

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

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

たとえばそのコードだと、&&を&に間違えている。
それが原因になっても、どこで腐ったのか見えにくい。
142名前は開発中のものです。:2008/12/30(火) 10:21:17 ID: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;}
143名前は開発中のものです。:2008/12/30(火) 10:27:05 ID: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;}
144名前は開発中のものです。:2008/12/30(火) 10:34:18 ID:t9a5j063
ゲームつくりの本質とは関係ないことで
よくみんな書くよなw
145名前は開発中のものです。:2008/12/30(火) 14:31:15 ID:JKlPtp7s
長期的にみたら大事なことなのです

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

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

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

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

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

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

BVisual C++ 2008 設定

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

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

Eプロジェクト設定

Fウィンドウ作成

G画像表示

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

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

いずれにしても>>171
0.PCが使いこなせる
-1.日本語わかります
の段階さえあやしいような気がするが
173名前は開発中のものです。:2009/01/04(日) 16:45:09 ID:zQBmDULY
入門書はどの入門書を読めばいいですか?
174名前は開発中のものです。:2009/01/04(日) 16:46:17 ID:zQBmDULY
DxLib_VC2008_and_2005用.slnからVC++を開けない事に関しての対処法を知るにはどの入門書がお勧めですか??
175名前は開発中のものです。:2009/01/04(日) 16:47:24 ID:BrM7xX/4
>>1 は「はじめてのC」を一通り読んだだけ
176名前は開発中のものです。:2009/01/04(日) 16:48:15 ID:vNJyTbKi
【義務教育完了前提】初心者用段階的ゲーム製作スレ
177名前は開発中のものです。:2009/01/04(日) 16:51:04 ID:zQBmDULY
横槍を入れてる人はいったい何のためにこのスレをみてるのですか?
このソフト導入のところさえパスすれば後はここで聞くこともなくなるとおもうのですが・・
178名前は開発中のものです。:2009/01/04(日) 17:01:26 ID:vNJyTbKi
> 3.できるまで自分で調べて頑張る
これが出来ないような人間に絡まれちゃった><
179名前は開発中のものです。:2009/01/04(日) 17:10:00 ID:vNJyTbKi
> 横槍を入れてる人はいったい何のためにこのスレをみてるのですか?
ついでに答えておこう。
ただ煽りたいだけですから^^

書かれた通りにやってここまで出来ましたが
ここからは本に書いてないので出来ません^^;
自分で考えるのも面倒です><
180名前は開発中のものです。:2009/01/04(日) 17:11:38 ID:zQBmDULY
だから書かれたとおりにできなかったので別のやり方でやったらつまったということなんですが・・
181名前は開発中のものです。:2009/01/04(日) 17:11:41 ID:phKiW/kW
ここは下の上ぐらいのやつが初心者を馬鹿にして自尊心を満たすスレだから気にするな
182名前は開発中のものです。:2009/01/04(日) 17:14:35 ID:vNJyTbKi
自己紹介乙っす
183名前は開発中のものです。:2009/01/04(日) 17:18:38 ID:vNJyTbKi
つーか、場所ってどこでもいいんですか?
なんて聞いちゃうレベルの奴はDXライブラリ使う前に
コンソールでジャンケンゲームでも作ってろよ

質問したいだけなら他のスレがあんだろw
184名前は開発中のものです。:2009/01/04(日) 18:17:54 ID:f8v2HP5/
>>169
どこでもいいです。
私は「マイドキュメント」以下に保存しておくのが望ましいと思います。

画像ファイルが表示できないとのことですが、何かエラーメッセージは表示されていませんか?
画像ファイルのファイル名の指定を変更する必要があるかもしれません。
相対パスではなく、絶対パスで指定してみてはいかがでしょうか。
185名前は開発中のものです。:2009/01/04(日) 18:39:20 ID:c/UGKimf
「DxLib .sln」でググったらまったく同じ質問が引っかかるんだが
ちゃんと調べて試した上で質問しているのかな?
186名前は開発中のものです。:2009/01/04(日) 21:47:04 ID:y/OXv3G4
その程度自分で解決できないようじゃこの先絶対詰まると思うな
187名前は開発中のものです。:2009/01/05(月) 03:39:55 ID:+gOec/oi
初心者こそ2chじゃなくて、ぐぐる方に粘着力を発揮するべきなんだけどな
ぐぐって出て来ないのが続くと不安になっちまうのかしらねw
188名前は開発中のものです。:2009/01/05(月) 18:17:32 ID:bFiw377J
ゲームのループのところまで整えたけど何作ればいいかわからない
とりあえず画面に文字表示した
189名前は開発中のものです。:2009/01/05(月) 18:49:22 ID:8qPbFVnr
>>188
これなんてどう?
ゲーム名:ナベアツゲーム
ルール:
マウスをクリックするたびに数字が増える
3の倍数と3のつく数字の時には右クリック、それ以外は左クリックを正解とする
不正解の時には何らかのペナルティ(方法は自由)
制限時間内にできるだけ数字を増やす
課題の目的:マウス入力や時間処理の基礎を学ぶ
190名前は開発中のものです。:2009/01/05(月) 21:44:02 ID:TTfreMdG
なかなか面白そうw
191名前は開発中のものです。:2009/01/05(月) 22:28:31 ID:bFiw377J
そういうのってポトペタ出来るやつで作った方が明らかに効率的だよね
何か疑問抱き始めたんだけどwww
192名前は開発中のものです。:2009/01/05(月) 22:47:23 ID:TTfreMdG
ポトペタってなに?
193名前は開発中のものです。:2009/01/05(月) 23:07:11 ID:07Sg+bJ8
>>191
作るのが目的じゃなくて作り方を勉強するのが目的だからな
他の言語でやったほうが効率がいいとかの議論は無意味、
というかそれ以前に言語は指定していない(>>188の環境とか知らんし)
どんな言語でも画面に文字を表示できたら次の段階は入力で表示を変えることだ
194名前は開発中のものです。:2009/01/07(水) 15:57:35 ID:wOTyk9Ws
>>192
ポットペッター
色んなお店のクーポンがいっぱい付いてるやつ
195名前は開発中のものです。:2009/01/16(金) 11:49:40 ID:yiTw/vGB
http://dixq.net/g/#29
↑の跳ね返りの考え方1っていうところのソースを解説できる人いる??
主に
if(flag==1){
time2 = GetNowCount() ; // 現在経過時間を得る
t = (double)(time2 - time1) / 1000.000;
v0= sqrt ( 2.000 * g * y_max); //初速度を計算
for(i=0;i<j;i++) //j回跳ね返った時の初速度
v0*=e; //eは反発係数
y = (int)((v0 * t - 0.500 * g * t * t ) * 480.000 / y_max);
if(y>=0)
DrawGraph( 320 , 480-32-y , image[8] , TRUE );
else{
DrawGraph( 320 , 480-32 , image[8] , TRUE );
time1=GetNowCount();
j++;
}
}

このあたりとか意味不明すぎ
196名前は開発中のものです。:2009/01/16(金) 13:44:50 ID:eKNbfSz5
>>195
基本的には物理でよくある問題
「初速度v0, 加速度-g, の物体のt秒後の位置を求めなさい」
を地で解いてる

if ( flag==1 ){
   // 今は何秒後?
    time2 = GetNowCount();
    t = (double)(time2 - time1) / 1000.000;

   // 初速度v0 の計算
    v0= sqrt ( 2.000 * g * y_max); //(ジャンプの考え方1を参照 http://dixq.net/g/#27 )
    for ( i=0; i<j; i++ ) { v0*=e; }

   // 現在の高さy を計算
    y = (int)((v0 * t - 0.500 * g * t * t ) * 480.000 / y_max);

    if ( y>=0 ) {
      // 着地してなければ、順調に落ちる
       DrawGraph( 320 , 480-32-y , image[8] , TRUE );
    }
    else{
      // 着地したなら……
       DrawGraph( 320 , 480-32 , image[8] , TRUE );  // 画面下端にキャラクタを表示
       time1=GetNowCount();                // 時間をリセット
       j++;                            // 跳ね返った回数を1増やす
   }
}
197名前は開発中のものです。:2009/01/16(金) 15:05:07 ID:yiTw/vGB
なるほど!
v0*=e;の部分に{}がなかったからそこ以下が全部forの繰り返し処理にふくまれてるのかと思ってめちゃくちゃ複雑に考え込んでた
198名前は開発中のものです。:2009/01/18(日) 12:09:23 ID:CHnPFsm9
質問ですが、RPGの戦闘はif文を使っているんですか?
それだと多人数vs多人数の場合は処理を書くのがかなり大変だと思うのですが・・・
教えていただけたら幸いです。
199名前は開発中のものです。:2009/01/18(日) 14:32:01 ID:nMkjmCv8
>>195
参考にするにはちょっと…なソースだな
マジックナンバーだらけ
コメントで察しろというのは乱暴で嫌いだ
200名前は開発中のものです。:2009/01/18(日) 15:22:57 ID:0Ylj0E2s
>>198

ターン制の戦闘を想定する場合、
敵、プレイヤのデータをカードに書いて置いて、

「プレイヤのコマンド入力」→「敵のコマンド入力」→「攻撃順にカードを並べる」→
「カードの順番にカードに対応する各キャラクタが行動する」→「最初にもどる」

みたいな感じでどうよ。
敵が100人だろうと1000人だろうと問題ないね。

C++だと、カードっていうスーパークラスがあって、
プレイヤや敵はそのクラスを継承して、ポリモーフィズムを形成してうんたらかんたら
201名前は開発中のものです。:2009/01/18(日) 16:19:05 ID:p3BsxAdP
>>198
if文を使っているか使っていないかといわれれば使っているが
当然それだけで制御しているわけじゃない
あと、人数が増えてもキャラにIDをつけてforで回せばいいので大変さは変わらない

参考(javaのRPG戦闘ソース)
ttp://www.geocities.co.jp/SiliconValley-Cupertino/9261/source/index.html
C++でもアルゴリズムは同じ
202名前は開発中のものです。:2009/01/29(木) 07:20:21 ID:ETfSP+cE
http://dixq.net/g/#33
↑のs2. サウンドノベル風文字列表示法1にあるプログラムの

for(j=0;j<256;j++){
if(oldKey[j]==0 && Key[j]==1)
Key[j]=2;
oldKey[j]=Key[j];
}

って何を意味してるの?
203名前は開発中のものです。:2009/01/29(木) 10:03:40 ID:xirprjZ5
>>202
キー入力状態に変化があったかどうかを調べてる。
特に、「押してない状態(0)」→「押してる状態(1)」に変化しているなら、
「今押された(2)」ってことにしてる。

てかリンク先間違ってるだろそれ。
204名前は開発中のものです。:2009/02/19(木) 00:05:49 ID:YuEFv8kY
2Dのアクションゲームを作ってるんですが、斜め方向のマップの当たり判定はどうやったらいいんでしょうか
今までマップチップ単位でキャラとマップの当たり判定をやってたんですがこれだと傾斜のあるマップに対応できないです。
マップチップとは独立してドット単位で当たり判定のデータを用意するくらいしかないでしょうか
205名前は開発中のものです。:2009/02/19(木) 09:04:49 ID:CC1OIocp
>>204
難しいこと考えてるなあと。
マップチップでは管理しきれないと思う。ドット単位というのも無茶な話。
キャラ(オブジェクト)単位での当たり判定になるね。

「14歳からはじめるC言語ゲームプログラミング」
http://www.rutles.net/books/217.html
この本のサンプルが、そのものずばりで解決してくれると思う。
ソース無しのサンプルゲームはDLできるので、これ見て役に立ちそうならどうぞ。
206名前は開発中のものです。:2009/06/22(月) 23:33:49 ID:PR8N99oV
段階スレのまとめって今はどこなの?
207名前は開発中のものです。:2009/06/23(火) 01:02:00 ID:dkvBYAOU
gamedevは新しくなってる
ttp://wiki.game-develop.com/
208名前は開発中のものです。:2009/09/08(火) 11:21:57 ID:yapzJvXF
初学者にやさしいゲームってどういう順番で作るのがいい?

○1.○×ゲーム
○2.15パズル

敵が無い、思考ルーチン考えないでいいぶん2のほうが楽かな。

○3.マインスイーパー
  4.ブロック崩し
  5.倉庫番
  6.テトリス
    :
    :

○は作った。次は倉庫番かと思ってたけど、DXライブラリがバージョンアップして
描画改善に伴いマウスの反応が良くなったからブロック崩しに行こうかと。

7以降とか2.5相当とか、追加あったら応援おねがいしたい。
209名前は開発中のものです。:2009/09/08(火) 11:29:49 ID:6MhMNrx0
自分が作りたいゲームで作れそうなの作れば
210名前は開発中のものです。:2009/09/09(水) 12:09:38 ID:eLuVrXen
>>200
>C++だと、カードっていうスーパークラスがあって、
ここの所もうちょい詳しく
そういうクラスが標準で用意されてるのかと思ってググってみたんだけど、全然ヒットしないです
これは基底クラスを自前で作ってそこから派生させろという話?
211名前は開発中のものです。:2009/09/09(水) 14:17:10 ID:vKyxO6xF
>>210
自分で作るんだよ。

たとえば「戦士は敵Aを攻撃」「魔法使いは呪文で全体攻撃」とか、行動の記録を構造体の配列なんかで持たせて
全部出揃ってから素早さ順なんかでソートする。

200のやり方はこのカードからプレイヤーや敵のクラスを継承させるみたいだけど
俺はキャラデータからカードを完全に分離させて、カードの仕事は行動解釈だけに絞るほうが好み。
212名前は開発中のものです。:2009/09/09(水) 21:51:16 ID:UMpltBwW
>>211
ありがとうございます
>>200は「カードっていうスーパークラスを作って」の意味でしたか
213名前は開発中のものです。:2009/09/29(火) 05:17:35 ID:kGLDkUja
C言語でちょっと数値計算できる程度の実力ですがC++でゲーム制作に挑戦することにしました。
とりあえず数当てゲーム作ったけど、数字じゃなくて文字が入力された場合の例外処理がよくわからなくて棚上げ
ひとまず次頑張ってみます
214名前は開発中のものです。:2009/09/29(火) 05:56:42 ID:tenDfojw
標準関数のisdigit使えば何とかならん?
215名前は開発中のものです。:2009/09/29(火) 08:18:06 ID:kGLDkUja
aとかaaaとかは抜けれるようにできましたが1aとかがまだでした
一回寝てからもう少し頑張ります
216名前は開発中のものです。:2009/09/29(火) 13:45:22 ID:/Wz8dUNK
atoiの存在に今気付いた
isdigitなんか使う必要ねーじゃん
217名前は開発中のものです。:2009/09/29(火) 13:59:20 ID:yWA5tZHN
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9961.zip

けっこう連続入力とか嵌るんだよな
218名前は開発中のものです。:2009/09/29(火) 16:08:36 ID:ryAGnP+G
ご丁寧にありがとうございます
とても参考になりました
219名前は開発中のものです。:2009/10/12(月) 09:30:46 ID:fQgZRfDp
C言語暦約一ヵ月半、winapi暦2週間の初心者ですが、練習のために>>7に挑戦してみました。
http://www1.axfc.net/uploader/Sc/so/44791.zip
ソースはあまりにもぐちゃぐちゃなので恥ずかしいので載せてません。
載せたほうがいいですか?

いちおうそれっぽいのはできたんですが、一点うまくいってないところがあって、敵の動きがうまくいきません。

敵位置を配列にしてるんですけど、for文で、敵[i]をまず消して、敵[i]の位置情報を変えて、敵[i]を再描画する、という順序なんですが、
敵[i-n]が移動した先が敵[i]の移動前の位置だとするじゃないですか。
すると、敵[i]の移動に伴って、敵[i-n]が消えちゃうんですよね。
かといって、まず全部敵を消してから位置情報を変えて、改めて全部の敵を表示するようにすると、こんどは敵が消えている時間帯が多く発生するので、画面がなんかちかちかするんですよ。

どうやって解決したらいいんだろう?

220名前は開発中のものです。:2009/10/12(月) 10:41:42 ID:PNg7pEvy
>>219
後者のやりかたの発展になるけど、裏画面に画像を用意してWM_PAINTのタイミングで入れ替える。
ホワイトボードの裏側に回って絵を描いて、合図がきたら裏返すイメージ。

ダブルバッファリングとかオフスクリーン描画とかで調べるといい。
C系のWindowsでゲーム作るなら必須の知識になる。
しかし1ヵ月半でここまでできるのはすごいな。
221名前は開発中のものです。:2009/10/15(木) 06:26:55 ID:5kHMShZk
>>220
ありがとうございます。
http://www1.axfc.net/uploader/Sc/so/45746
こうなりました。
どうでしょうかね?
もとがぐちゃぐちゃなので直すのに結構苦労しました。
ついでに、敵に当たっても移動できてしまうのを直しました。

222名前は開発中のものです。:2009/10/23(金) 09:54:20 ID:r4hfvq6d
カソル
223名前は開発中のものです。:2009/12/07(月) 01:50:47 ID:cfqCdEHC
あのさ、ActionScript3で質問なんだが、
FLASHってゲームループの概念なし?
それともEnterFrameとかタイマーイベント使ってやるのか?
イマイチピンとくる説明が検索でけんかった。
224名前は開発中のものです。:2009/12/08(火) 17:07:56 ID:cuTUnnQj
空気を読まずにお題を出してみる。
下記のデータ(ソース)がある。

const int max_choice_num = 3;
/* シーン */
struct Scene {
const char* const message; /* メッセージ文 */
int choice_num; /* 選択肢の数(0= 終了, 1= 強制移動, 2> 選択) */
int next[max_choice_num]; /* 次のシーンID */
};
/* シーンデータ(添え字がID) */
const Scene scene_data[] = {
{ "よくきた、勇者よ\n", 1, 1, },
{ "魔物を退治してくれんか?\n0: 任せてください\n1: いやです\n", 2, 2, 3, },
{ "では、行ってまいれ!勇者よ!\n", 0, },
{ "そんなこと言わずに・・・\n", 1, 1, },
};
225224:2009/12/08(火) 17:09:39 ID:cuTUnnQj
実行すると

よくきた、勇者よ
魔物を退治してくれんか?
0: 任せてください
1: いやです
> 1 <- 入力待ち
そんなこと言わずに・・・
よくきた、勇者よ
魔物を退治してくれんか?
0: 任せてください
1: いやです
> 0 <- 入力待ち
では、行ってまいれ!勇者よ!

となるようなプログラムを書け。
226名前は開発中のものです。:2009/12/08(火) 21:47:41 ID:dR/37Ta8
プログラムつうより普通スクリプトでやる処理だわな
227224:2009/12/08(火) 23:54:51 ID:LCrDR7+W
>226
これができたら、データを外部ファイルに出して処理してみるとか
ステップアップしていくと勉強になるかなと思ったんだけどね。

少しがんばればコンソールで簡単なテキストADVが作れるってのが
分かればモチベーションも上がるかなと思ったんだ…

つか過疎ってるから模範解答を出すタイミングが難しいな。
228224:2009/12/12(土) 16:11:25 ID:W7i0pvEF
模範解答。エラー処理とか一切してません。

int main() {
const Scene* active = NULL;
const Scene* next = &scene_data[0];
do {
active = next;
printf("%s", active->message);
if(active->choice_num == 1) {
next = &scene_data[active->next[0]];
}
else if(active->choice_num >= 2) {
int index;
printf("> ");
scanf("%d", &index);
next = &scene_data[active->next[index]];
}
} while(active->choice_num != 0);
return 0;
}
229名前は開発中のものです。:2010/05/27(木) 17:19:08 ID:cXVnDiqT
保守age
230練習 ◆UzmAAu.XVo :2012/09/12(水) 14:21:04.39 ID:7I5dbz7q
XNAでの3Dゲーム製作を目標に少しずつ勉強していきます。
余裕があればモデリングやwebの勉強等も。

新スレを立てるようなことでもないので、こちらのスレを使わせて頂きます。
231練習 ◆UzmAAu.XVo :2012/09/12(水) 14:49:34.24 ID:7I5dbz7q
232名前は開発中のものです。:2012/09/16(日) 20:25:36.62 ID:3z6vfuIt
本当に何もなかった
233名前は開発中のものです。:2013/10/09(水) 07:12:23.02 ID:kPwojNB+
段階的にタワーディフェンスでも作るか
234名前は開発中のものです。:2013/10/09(水) 12:58:31.56 ID:86SiIj69
もうちっとゴールが明確というかシンプルな方がいいと思うが
235名前は開発中のものです。:2014/04/20(日) 09:17:28.53 ID:mdGDETTa
>>202のjと256の意味が分かりません。
jは何の変数ですか?
なぜ256じゃないといけないのでしょうか?
jが256になったらどうなりますか?

よろしくお願いします
236名前は開発中のものです。:2014/04/20(日) 09:53:20.16 ID:j9BN4KOd
>>235
>>202はリンク先の例文の一部だから、>>202のレスだけみてもわからないよ。

まず>>202の正しいリンク先はここ。
C言語〜ゲームプログラミングの館〜
http://dixq.net/g/50.html
>while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
key配列はGetHitKeyStateAll関数の戻り値を格納するために使われている。

GetHitKeyStateAllとは何かググってみると、
DXライブラリ置き場 リファレンスページ
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html
>概略 キーボードのすべてのキーの押下状態を取得する
>使うにはまず char 型変数 256 個の配列を宣言します。必ず char 型で、数は 256 個でないといけません。
>そしてその配列のポインタをおもむろに GetHitKeyStateAll 関数 に渡します。
>そうすると GetHitKeyStateAll 関数は char 型配列に すべてのキーの押下状態を格納してくれます。


jはkey配列を走査するための変数。256になったら走査が終わる。
237名前は開発中のものです。
>>236
ありがとうございます。

256の意味、わかりました。
決まっているんですね。
それから256になったら終了するのもわかりました。
最初のfor文を理解できていなかったようです。

説明が足りなかったようですみません。
プログラミングの館を見ていて、わからなかったので
ググったらこのスレを見つけて書き込んだ
という次第です。

丁寧に教えてくださってありがとうございました。