1 :
1 :
04/10/14 01:24:15 ID:pcg5xJTZ ゲームを作りたい…! しかし、この歳にになっていまさら何からすればいいのかわからない。 C++? と解説ページに行ってもイマイチよくわからない。 (coutとか書いているとウィンドウがつくれるの?) こんな俺に課題を出して育成してくれ! 目標・2Dでよいのでゲームが作りたい。 ツクール系は試したが、イマイチ思ったとおりに出来ないので。 まずはシューティング。 以下、絶対守る俺ルール。 1・課題を出してくれ、解説してくれる人は師匠とあがめる。 2・わからなければ質問しまくるが、週に1度は最低1つの課題に対する成果を提出。 3・課題と回答、師匠の解説をまとめたページを作成する。 やる気と健康度だけは100(技術と知力は0)な俺を育成してくれ、師匠!
とりあえず、1がむかえるだろうエンディングを16パターン作ろうか。
1.ろくに相手してくれる人がいなくて、いきなり挫折。
4 :
1 :04/10/14 01:55:39 ID:pcg5xJTZ
1・ろくに相手してくれる人がいなくて、いきなり挫折。 2・数学ができずに挫折。 3・ポインタ(が難関らしい?)がわからなくて挫折。 4・結局ツクールに逃げる 5・ある日突然フェードアウト (以下挫折ネタが続く) 13・出来たものの出来は散々。失望して終了。 14・いいところまで行ったが…仕事が忙しくなってフェードアウト。 15・2Dシューティング完成! しかし燃え尽きて終了。 16・無事作成。2Dから3Dの世界へ幅を広げる。 こんなところか?
じゃあ課題。 とにかくなんでもいいからキャラクターを表示しれ。透過とかはまだ考えなくていい。 キー入力によってそいつを上下左右に動かせ。
6 :
1 :04/10/14 02:06:45 ID:pcg5xJTZ
師匠、質問です! それはC++とかを使えばいいのでしょうか? キャラクターを表示するにはDirectXが必要ですか? 教材の指針を示していただけると助かります!
5 とは違うが、何となく眠れないので付き合ってみる。
>>1 は全くプログラミングの経験がないのかな。
C, C++, VB, Java, Delphi, HSP とか、どれか使ったことはある?
8 :
1 :04/10/14 02:26:18 ID:pcg5xJTZ
>>7 ありがとうございます、師匠!
N88Basicを(大昔)少々。
VBに手を出したこともありますが、コンポーネントの配置とかよくわからず挫折。
せっかくなのでC++である程度本格的にがんばってみたいと考えています。
CharacterってString(文字)をDOS窓に表示なら少し勉強すればできるんですが…。
9 :
名前は開発中のものです。 :04/10/14 02:26:24 ID:+FGJJWUJ
>>1 の現在のパラメータ
やる気 :100/100
健康 :100/100
技術 :0
経験 :0
一週間後の予想
やる気 : 36/100
健康 :100/100
技術 :1
経験 :5
>>8 むらびと:
HSPをやっときなさい。BASICと同様の感覚で出来るから。
C++は止めときなさい。ライブラリ使わないと簡単に絵が出ないから。
ならHSPをするか
それでもC++をやります
> ころしてでも うばいとる
11 :
1 :04/10/14 02:31:46 ID:pcg5xJTZ
明日の仕事があるので今日は寝ます。 出る前にスレをチェックしますので、お勧め教材などがあれば 購入する所存。
一週間後の予想 やる気 : 0/100 健康 : 40/100 技術 : 0 経験 :-10
14 :
7 :04/10/14 02:37:18 ID:DqKWLhA1
なんで経験減ってるんだよw。 あと、1はそんなに頑張り屋じゃないから健康減らんよ。きっと。 やる気0と技術0はは当たってるかもしらんが。 まあ、楽しめそうなスレが立ったな。煽りもするが教えもするぞ。
最近はマシンが高速だからJava+eclipseでjavaアプレットとして作るというのも なかなか悪くない選択肢だと思う。
17 :
7 :04/10/14 03:00:47 ID:DqKWLhA1
確かに、最初は簡単なのが良いよね。 すぐに絵が出て、動いた方がプログラミングしていても楽しいし。 C や C++ で作ると、そこまで行くのに一苦労で、やる気なくすから……。 なので、手軽に作りたいのなら C++ は私もお勧めできない。 そして、C++ を使わないのなら、私がお手伝いできることは何もないです……。
いきなりC++に朝鮮して玉砕するのも悪くないかと C++を齧ったという経験が積めて本望だろうて
女と酒と自慰を絶つ覚悟はあるか? 話はそれからだ・・・
21 :
名前は開発中のものです。 :04/10/14 04:43:41 ID:FiEfKyZr
マジレスすると、最初の課題は「時間の確保」 3ヶ月で100時間、純粋にゲ製に取り組む時間割の計画を立てる …社会人になってからゲ製覚えようとすると、 仕事以外の全てを捨てることになりかねんよ
1.ゲームが作りたい 2.しかしPG初心者だ 3.といってツクールでは物足りない という人にはHSPが最適 BASICライクだしすぐに絵が表示できて動かせる CだとAPI通さないとウィンドウも出ないよ コンソール表示のゲームでも別にいいけど プロのPGになりたい訳じゃないならHSPがお勧め
24 :
1 :04/10/14 09:01:26 ID:JCaF8MRC
ししょー!出発前にレスを。
教材はとりあえず2chスレなんですね。
>>7 師匠 21師匠 23師匠
HSP、ゲーム用ベーシックのようなものでしょうか?
調べてみましたが、速度が大丈夫か少し心配(弾幕系シューティングを作りたいので)
C言語には厨房の頃からの憧れがあるのでしばらくHSPと平行で覚えて見ようかと
考えています。
Cに憧れるあまり他の言語が見えてなかったので、どんな言語があるか勉強して見ま
す。
俺の環境はWIN2000+Borand C++,Celeron1GHz。
C++はテキスト編集で四則演算・結果表示プログラムのコンパイルを通したことが
あります。
(1年ぐらい前)
そのときはウィンドウの出そうとしたものの、ちんぷんかんぷんで諦めました。
>>16 師匠
Java、これから調べて見たいと思います。
>>20 師匠
酒はもともと飲みません。
女はしばらく前に振られました。
性欲はそのときの自分の馬鹿さ加減に対するショックで(マジ)。
条件を満たしたくなかった…。
とりあえず、行ってきます。
漏れの予想 一週間後の予想 やる気 : 0/80 健康 : 60/101 技術 : 0 経験 : 0
資金 : ????
28 :
JAVA厨 :04/10/14 15:08:56 ID:TC+D/li2
VC++で周ティングやeピージー作ることはできますか?
ウィンドウ作成で挫折したらなウィンドウ作成を課題にすればいいんでないの?
VC++は最強だ!!!!!!byネレー@Ore1GP
1にアイテムが追加されました 「ロープ」「練炭」「睡眠薬」
>>24 HSPは弾幕STGもOK
>>28 C++はゲーム会社が使ってるんだからもちろんできる
34 :
1 :04/10/14 20:50:26 ID:YUMqY0bg
ただいま帰宅しました。
掃除やご飯などで開始はまだ遅れます…。
とりあえず、師匠に連絡を。
HSPを進める方が多いのでHSPも勉強してみます。
C++とHSPそれぞれを見ていって俺自身の適正を判断してみたいです(甘いか?)
>>22 師匠
実はすでにその見通しが立っています。
仕事が楽になってきたのでこのスレ立てました。
3ヶ月で100時間こなします!
ちなみに、俺にはもう捨てるものがありません…。
この上はゲームを作る夢に殉じるのみです。
>>21 師匠、23師匠
HSPですか…足を踏み入れて見ます!
>>25 師匠
そういって負けん気を起こさせてやる気をあおるつもりですね!
考えが深い。
35 :
1 :04/10/14 20:53:31 ID:YUMqY0bg
>>26 師匠
おお、これはよさそうなページ!
課題の参考に…したかったけどウィンドウ作成が省かれているような。
(まだ斜め読み)
あと、これは「俺育成ゲーム」なんですよ
よって師匠と俺との双方向性が重要、俺は独自に学習するが決して完全な独習では
面白くないわけで!
ほら、だんだんやる気0に近づくのを過程を見たい人もいるっしょ!
ついでに師匠が見て評価してくれること自体がやる気↑につながるわけですよ!
>>27 資金 : 0
>>29 師匠
おお、それは新しい発見!
たしかにウィンドウ作れないんですよね。
ネットで調べるとよくわからない関数(?)を使用しないといけないみたいで頭が…。
>>30 師匠
なるほど!
しかしVCは高い。
>>HOTsoUpxjY師匠
おお、ウィンドウだ!
さすが師匠、スゲー。
こんな
>>1 を育成するぐらいなら俺を育成してください。
>>36 馬鹿かお前は。このスレは1の成長と*挫折*を煽るスレなんだぞ。
二週間後に来たら多分誰も居ないから、第二期生として名乗りを上げろ。
>> 1さん
ウィンドウを作る仕組みを理解しようと考えてもしかたないぞ。
それと同じ労力でHSPでグラフィックと音楽バリバリ流したデモを作れる。
どうせウィンドウ作成なんて、上級者でも初心者でもスケルトンをコピペする
だけなんだから。
あと、この言葉を送ろう。
「関数の原理を理解しようと思うな。使い方だけ判ればいい」
>「関数の原理を理解しようと思うな。使い方だけ判ればいい」 マジでいってんのか?コレ
この手のスレは1、2ヵ月後には廃墟 定説です。
当たり前だろ。 今の1のレベルでライブラリの中とか追うなんて、気力の無駄以外の何者でもない。
>>39 連日書き込みがあるのは10日
一ヵ月後、仕事が忙しかったので、学業が忙しかったので、ちょっと病気して
二ヵ月後、
42 :
1 :04/10/14 22:05:28 ID:YUMqY0bg
今終了しました。
ついでにHSPインストール。
DIRECTXSDKインストール。
BCCデベロッパーインストール。
課題をこなすたびに↓更新予定。
http://f41.aaacafe.ne.jp/~grow/ >>36 さん
ふふふ、すでにレスが40件近く!
現在やる気140なので当分譲りません。
>>37 師匠
確かに!
俺は中身を知ろうとして意味がわからずに悩んで挫折する傾向があります。
「お呪いと思った方がいい」
昔の会社の同僚にも言われた…。
>>39 〜41
確かにこの速度のレスは最初の1週間程度だと思う。
だが、ほぼ毎日レスは(仕事で泊まらなければ)確保する。
ちなみにHSPでウィンドウを出すには↓これだけでOK stop
45 :
1 :04/10/14 23:02:46 ID:YUMqY0bg
>>◆HOTsoUpxjY師匠 HSPで画像が表示できました! 確かに楽です。 Basicのget putよりはるかに楽でした。 画面更新もらくなような…? N88Basicの記憶が薄れているのでもう比較もできませんが! 猫プロ、そのままコンパイル通してみました。 うーん、ウィンドウが出たけれどなにをやっているのか意味不明。 よくページを読んで理解します。 とりあえず、29師匠の課題をクリアした(のか?)ので明日か明後日 にはまとめてHPにアップしたいと思っております。 やはりHSPが楽でも低級
46 :
1 :04/10/14 23:03:44 ID:YUMqY0bg
う、興奮のあまりすっ飛ばしてしまいました! HSPが楽でもCとかの言語がかっこいいと思っている俺。 しばらくはCも地道に生きたいと思います!
48 :
名前は開発中のものです。 :04/10/14 23:24:06 ID:qA7nVnp4
>>1 よ
そんなこと言えるくらいなら金も出さないくせに育成してとか言うな。
無能だな。
HSPは動かすのが楽だけど、大規模・長期のゲーム開発ならC/C++の方が大局的に効率が良くなる HSPでもAPIやDirectX使えるし、そんなすぐ言語の限界にぶつかる訳じゃないけどね それで言語を二つ以上同時に覚えるのはしんどいと思うけどなあ 構文とかの記憶がゴチャゴチャになるからお勧めしない 特にC+APIは三ヶ月/百時間をまるまる当てる位の期間が必要かもしれない 1がBASICでプログラムの基礎をどれ位押さえてるかで時間は変わるとは思うけどね まあRPG二、三本クリアするのにそれ位掛かるから大したこと無いと言えばそうだけど
んじゃまた明日
C++はオブジェクト指向わからんと扱いづらいが、HSPをやるとC++覚えるのがめんどくなってきて結局どっちつかずになるという諸刃の剣。
■■■このゲームのルール1■■■ 1.1日10ポイントのやる気が下がります。 (ただし1の書込みが一日中ない場合は30ポイント下がります。) 2.1レスにつき1ポイントのやる気が上がります。 やる気 :141 健康 :100 技術 :0 経験 :1
HSP厨うざい
>>54 厨房にC++を勧めても無駄だからな。
厨言語HSPを教えるのが何か間違っているとでも?
さっさと挫折しろ
誰か僕を育成しろよ
それより幼女育成ゲーム作ってくれよ
とりあえず画像表示させてキーで動かすとこまではできた
じゃあ画像が画面の外に出ないようにしれ そん次は画面の中に四角を表示させて四角には入れないようにしれ
画面の外に出ないようにはできた。 が当たり判定がうまくいかね。んばる。
言語は知らんがあたり判定くらいはぐぐればすぐ出てくると思う。んばれ。
64 :
1 :04/10/15 20:13:11 ID:Sz/cdZ1A
ただいま帰宅しました。
>>47 さん
もしやそれは画像の差し入れ!?使わせていただきます。
>>48 さん
くっ、言い返せない…。
>>◆HOTsoUpxjY師匠
なるほど、わかっていましたがHSPの方が楽に作れるんですね…。
だが究極はC++と。
目的を果たすだけなら正道はHSPな感じですね。
しかし、自分のこだわりとしてはC++…。
師匠、C++で行かせてください! 覚悟を決めます!
>>51 師匠
心を決めました。
C++です。根性入れます。
>>52 さん
経験が1あがってる!
やったっ!
>>53 さん
AOWってDelphiだったんですね…(ちょっと思い出あり)
ありがたいですが、C++に決めたので!
65 :
1 :04/10/15 20:16:50 ID:Sz/cdZ1A
>>54 さん
そんなことないです。
目的を果たすだけならHSPでも十分なはず。
皆さん、書き込みを読んで適切なアドバイスをして下さってますよ。
>>56 さん
いやだ。
>>58 さん
同じ教材で一緒にがんばりましょう!
>>59 さん
ごめんなさい、幼女より立派な勇者(男)を育てるゲームのが好きです…。
>>60 さん
す、すげー!
>>61 師匠
か、課題だけが前に進む…って俺取り残しっ!?
66 :
58 :04/10/15 20:37:59 ID:7hVmvBX9
今日は時間ねえから明日また頑張る。ちなみに言語はVC++。 あとel使ってるからそこまではすごくない。卑怯とでも何とでも家!
C++で行くのか。道のりは遠いが焦らないで行こう 関数・ポインタ・構造体が分からないで API使う(コピペするだけ)のは無意味なんでCのマスターから始めよう 変数とか制御文とか基本的な部分はBASICと同じようなもんだから大丈夫 それでまずコンソールゲームから始めようか よくあるじゃんけんゲームとかそんなやつ
68 :
1 :04/10/15 21:07:50 ID:Sz/cdZ1A
師匠!
公式ページ更新しました!
デザインも何もまだまだですが、整理して資料的価値がでるようがんばります!
http://f41.aaacafe.ne.jp/~grow/ >>58 さん
いや、方法論を見つけてくるだけですげー!
利用できるものは素直に利用した方が得でしょ。
俺もDXLIBをつかって課題をクリアしようか悩んだ…。
>> ◆HOTsoUpxjY師匠
了解しました。
DOSプロンプト上でじゃんけんするようなゲームですか!?
文字でちょきとかでてくるよーな。
俺はC++はオススメせんなあ。
なんだかんだ言って結構古い言語なんだよ、アレは。
C++言語が作られた後で一般的になった設計思想もあるし、C言語との下位互換
という制約を負っているために、どうも垢抜けしない印象がある。
>>64-65 お前、そのレス書いてるくらいの時間あればHSPで
>>60-62 ぐらいまでの
作業できるぞ。
C++をやるなら、……楽に使えそうなグラフィックライブラリを探せ。
間違ってもWindowsSDK(API)でキャラ表示とかやろうと思うなよ。
見返りが無いわりに、やたら労力増えるからな。
71 :
1 :04/10/15 21:51:35 ID:Sz/cdZ1A
ぜぇぜぇ、58さんに負けてられない!
ということでがんばります。
>>◆HOTsoUpxjY師匠
http://f41.aaacafe.ne.jp/~grow/ ↑この課題ページ3に回答を出しました!
コンパイルも通ったし、ランダム関数もいけました!
次お願いします!!!
>>26 師匠
紹介してもらったページが役に立ちました!
ありがとうございます!
>>69 師匠
C++がだめと言うと、今は何の時代なんでしょう?
C#?
Javaはネットでアプレットゲームやったらしょぼい割に(俺では作れないLVだけど)
やたら重かったので止めておこうかと思っています!
グラフィックライブラリ…DXLIBのような?
DirectXでは駄目なのでしょうか!
なにやってるのか分からないところがあるのになんで次に進めるの?
解答みてみたけど、やっぱりHSPの方が作りやすいような気がするな… 初心者がゲーム作るには、グラフィック関連が簡単な言語にすべきだと思う。 HSPなら便利なライブラリも沢山あるでしょ。
>>71 はやっ! このタイプのスレではかなり優秀な1ですね
だけどincludeの後は何
あとvoid main(void)→int main(void)
>>74 s/</</
s/>/>/ してないんだろ。
76 :
75 :04/10/15 22:21:01 ID:cRGvPnjU
ぐあ、馬鹿なことやってしまった。 &を&と書いてなかったよ。 s/</</ s/>/&>/
>>cRGvPnjU 質問に答えてくれよ
78 :
1 :04/10/15 22:27:53 ID:Sz/cdZ1A
とりあえず、doubleとかの型は大体理解したと思います。
関数とクラスの差がちょっとよくわからない。
>>72 師匠
time関数はt_time型で現在時刻を返します。
それをunsignd intにキャスト(型変換?)してtime関数が扱えるようにしてるみたいです。
time_tは通常typedefでlong型を指定して返しているらしいです。
timeはlongを返すのにunsignd intを渡さないといけない関数randに値を渡せて
いるのはなぜかよくわかりません。
ついでにlongを返しているのにtypedefでわざわざt_time型を新規に作っている
のも意味不明。
何か意味があるのでしょうか。
>>73 師匠
確かに俺もそう思います!
HSP楽です。
でも、C++(低級言語)でゲームを作成すること自体が若かりし頃の
自分の夢だったので意地を貫きたいのです。
>>◆HOTsoUpxjY師匠
<>は>とかやらないと表示されないのを今知りました。
のでtime関数の説明とともに修正しました。
ちなみに、俺は頭悪いですが行動力はある方だと思います。
よって言っててやらないというより、やろうとしてできないタイプです。
今後ともご指導よろしくお願いします。
>>78 おぉそうか。夢なら仕方ないな。その姿勢にちょっと感動した。んばれ。
とりあえずテキトーに変数系を覚えたらさっさとグラフィック関係にとりかかろう。なんか面倒そうだし。
>>75-76 なる、タグで引っ掛かったのか
>>78 俺C++って高級言語だと思ってた、まあいいや
夢もいいけど、ゲームのプレイヤーを楽しませるのも忘れずにね
それで俺はHSP専門だし今コンテストやってるから、しばらくROMするわ
なんか立て逃げが多いこの手のスレで成長が凄い速いから楽しみだね
>>77 すまん。オススメはC#、Java、D言語あたりだ。
82 :
1 :04/10/15 23:09:21 ID:Sz/cdZ1A
>>79 師匠
がんばります!
ところで、課題なんか出していただけると短期的目標ができて非常に嬉しいのですが!
いや、ウィンドウに画像出すのが遠く見えすぎていてきついだけなんですが!
>>◆HOTsoUpxjY師匠
調べて見たらC++は高級言語でした…。
大学ではCが低級とか言われていたのに。
それはそうとお疲れ様でした!
なんとなくやる気も出てきたので妄想全壊でシューティング企画を考えております!
また見に来てください!
83 :
72 :04/10/15 23:10:49 ID:7MR3d+Hy
>>1 >time関数はt_time型で現在時刻を返します。
>それをunsignd intにキャスト(型変換?)してtime関数が扱えるようにしてるみたいです。
>time_tは通常typedefでlong型を指定して返しているらしいです。
t_time ? time_t ? うちの環境じゃ time_t しかないです。
この辺間違えると言ってることが通じないので気をつけませう。
あんまり深追いする必要はなくて、その関数が何をするのかだけ知っておけばいいと思います。
どういう引数をとってどういう値を返すのかはマニュアルを見ればいいんで。
で、あれは time() の戻り値を unsigned int にキャストして srand() の引数にしてます。
>timeはlongを返すのにunsignd intを渡さないといけない関数randに値を渡せて
>いるのはなぜかよくわかりません。
渡してるのは srand() ですね。
time() の戻り値を unsigned int にキャストして、それを srand() に渡しているので問題ないです。
(unsigned) は time() の戻り値にかかります。
>ついでにlongを返しているのにtypedefでわざわざt_time型を新規に作っている のも意味不明。
>何か意味があるのでしょうか。
time() が返しているのは long ではなくて time_t 型です。同じですが型としては異なるものです。
time_t を作る理由は、環境によって型の大きさを変えなくちゃいけないからです。
環境によっては time_t が long 以外である必要があるかもしれないでしょ?
でも time() が返す値を time_t で統一しておけば移植するとき何も考えなくていいんです。
>>82 課題→ウィンドウに画像出す
コレが最初の難関らしい?
とりあえずココだけさくっとやっちまおう。必要な計算なんかは後からいくらでも付いてくる。
目標がゲームなんで、画像出せないといつまで立っても変数処理ばっかりだし。
コンソールでもパックマンとか作れないこともないけどその後がしんどそう。
>>82 まあ、普通に機械語とアセンブラ以外は高級言語だし。
高級言語の中では、Cはかなり低級な(マシン語に近い)位置にあると思うぞ。
86 :
7 :04/10/15 23:20:22 ID:lbz+IkKK
おっ、凄いジャンケンゲームができてる。 次の課題としては、もうちょっと C の準備運動ということで、 コンソールでモグラたたきはどうでしょうか? *** *** *** と表示して、 *** **T *** ならテンキーの [6] を押す、みたいな簡単なものを。
87 :
1 :04/10/15 23:23:05 ID:Sz/cdZ1A
今からウィンドウに絵を出すため黙々と作業に入ります…。
>>72 師匠
なるほど、これから文章にも気をつけます!
time_t型は移植性とかの問題なんですかね、納得!
よくわからんですがオブジェクト指向にも関係ありそうですね。
説明が感動的なわかりやすさだ…!
>>84 師匠
さくっとですか!
出来る限りがんばって見ます。
とりあえず土日を目標に。
やるに当たってスケルトンとか、ウィンドウ出す関数はコピペじゃまずいです
よね、やっぱり?
88 :
72 :04/10/15 23:27:15 ID:7MR3d+Hy
>>1 >よくわからんですがオブジェクト指向にも関係ありそうですね。
残念だけどオブジェクト指向は全然関係ないぞ!
>>87 まずはコピペでいいと思う。
で、とりあえず表示できたら
「引数にどれとどれを渡す」とか「この引数は何に使う」とか、細かい部分を見てけばいい。
…で、詰まったら
>>86 で息抜きしよっか。
90 :
名前は開発中のものです。 :04/10/15 23:55:16 ID:pupEBzZi
C++でキャラクタが出て、キー操作で上下左右に動くなんて、 1時間ぐらい対話型の授業形式で教えればできるよ。 ただ、みんな面倒なので付き合わないだけだろ。
さっさと挫折しろ
92 :
1 :04/10/16 01:22:53 ID:8rTcDmlx
もぐらたたきゲームが何気に難しい。
どうやったら文字の表示位置を調整できるのか?
改行で画面を全部流すのは正解じゃない気がする…。
関数リファレンスとか探しまくるしかないのか。
とりあえず、今日はもう寝ます…寝不足は髪&記憶力の敵なので。
>>72 師匠
再利用性を考慮して…とかありそうだったのに!
そうだったのか!
>>89 師匠
了解です!
明日は用事があるので1日いっぱいは使えませんが、日曜は完全オフ!
両方ともクリアしますよ!
>>90 さんへ
マジですか…。
俺の頭悪さがいかんのか…。
>>91 無理。
むしろそのレスで俺は負けん気を燃やす。
頭きた。
とりあえずウィンドウに画像ぐらいは明日中(26時ぐらいまで?)にやるからみとれ。
93 :
7 :04/10/16 01:32:34 ID:n7AtejJd
ごめん。サンプルをさっさと書き込んでおくべきでした。 BCC なら conio.h をインクルードして、 gotoxy(x,y) で x 列, y 行にカーソルの移動 clrscr() で画面の消去ができます。 #include <conio.h> gotoxy(1,5); printf("5行目にカーソルが移動します"); gotoxy(1,1); printf("先頭にカーソルが移動します");
94 :
7 :04/10/16 01:40:25 ID:n7AtejJd
ついでに停止せずにキー入力を取得する方法も。 #include <windows.h> // GetTickCount() #include <conio.h> int main() { int anime, time, key; time = GetTickCount(); anime = 1; // キーの入力待ちループ while( !kbhit() ) { // 一定時間毎に点滅 if( 500 > GetTickCount() - time ) continue; time = GetTickCount(); gotoxy(1,1); if( anime ) printf("入力待機中"); else printf(" "); anime = !anime; } key = getch(); printf("\n %c が押されました", key); return 0; }
95 :
7 :04/10/16 01:52:37 ID:n7AtejJd
これでラスト。 #include <windows.h> GetTickCount() は Win32 SDK の API で起動からの経過時間をミリ秒単位で返す。 #include <conio.h> kbhit() はキーが押されていれば 0 以外、押されていたら 0 を返す。 押されたキーは getch() で取得できる。 ついでに、 _setcursortype(_NOCURSOR); でカーソルを消去できる。 ちなみに conio.h は BCC のコンソール制御ライブラリ。 フリーだとマニュアルが付いてないのが辛いね……。
まだ思いっきりC言語だな。C++への道は遠い。
97 :
7 :04/10/16 09:16:28 ID:pT3BuS7r
>>94 訂正
int anime, time, key;
の行を下記の様に修正してください。
↓
int anime, key;
DWORD time;
Cって凄い大変なんですね…。 HSPでも手間取ってるのに…。 >>1さん頑張ってください
99 :
1 :04/10/16 23:19:17 ID:wcib9JUA
ただいま帰宅。
しかし、現在のパラメーター
健康:20
91に負けるようで悔しいが、とりあえず今日はモグラ叩きを作って
今日はねる。
>>7 師匠
大量のコードありがとうございます。
ほぼ回答と同義な気もするので速攻で作ります!
>>84 師匠
すみません、画像だしは明日になりそうです。
>>96 さん
C++とCってそこまで違うものなのか…。
道は長いな。
>>98 さん
応援ありがとう。
Cでも画像処理ライブラリを使えば楽に出来るらしい。
>>99 お疲れさん。C++は完全にCを含んでいるからねえ。
明日は、ライブラリのサンプルコピペでもいいから、画像ファイル読んで表示とか
出来るといいな。
さっさと挫折しろ
もうゲーム作ってるってことは変数、構造化文、基本関数は理解してるんだよね?
うぅーんち うんち うんちうんち
106 :
名前は開発中のものです。 :04/10/17 14:16:56 ID:4m6YlnQo
頑張って下さい。と言ってみたり
107 :
1 :04/10/17 15:29:15 ID:fmtmZm4t
中間報告。 コピペで画像を出すのはできた。 が、やってることがわからないので読解中。 もぐら叩きはクラスを使って見たらちゃんと表示できなくなって しまったので必死にデバッグ中。
108 :
1 :04/10/17 19:27:06 ID:fmtmZm4t
うぅーんち うんち うんちうんち
>>1 もぐらたたきをちょっと触ってみた。
http://gamdev.org/up/img/1575.zip BCC使ったことなくてウェイトに sleep() 使ってるからゲームにならないけど
なーんかそれっぽくなったぞ。
できるだけ原型をとどめるようにしたから良かったら見てちょ。
キー入力、画面描画、ウェイト調整も考えると
ゲーム用ライブラリとか導入したほうが楽になれると思う。
111 :
1 :04/10/17 22:13:33 ID:jxLgr8xB
VC++を購入した方がいいのか?
ネットを見ているとVC++が圧倒的に多い。
>>100 さんへ
ありがとうございます。
とりあえず、出来たのですがやっていることが意味不明!?
>>102 まあ、これは義務なので。
>>103 さんへ
基本関数…たぶん理解できてないです…。
>>106 さんへ
ありがとうございます!
>>110 師匠
あ、ありがとうございます!
参考にします!!
ところで、HPにこれを乗せてもいいでしょうか?
とりあえず、基礎力がついたらライブラリは考えて見ます!
112 :
110 :04/10/17 22:19:54 ID:SJTqGlHN
>>111 もちろん構いませんです。
BCC でも msec, usec レベルでウェイトがとれればいいんだけどね。
修正前のがどうもビジーループっぽかったもんで、
ビジーループすべきでない派としては sleep(1) にさせてもらいました。
113 :
1 :04/10/17 22:20:08 ID:jxLgr8xB
>>110 師匠
師匠!
DLしたものの回答できないであります!
仕様ソフトはLhasaとLhazですがどちらも駄目でした。
114 :
110 :04/10/17 22:27:49 ID:SJTqGlHN
>>1 (;´Д`) マジデ?
Lhasa でも Lhaplus でも展開できたよ
115 :
1 :04/10/17 22:31:50 ID:jxLgr8xB
>>110 師匠
ダウンロードしなおしたら回答できました。
お手数をおかけして申し訳ありません。
116 :
1 :04/10/17 22:54:33 ID:jxLgr8xB
漏れも今C独学で覚えてる。 1がんがれー
120 :
1 :04/10/18 20:35:34 ID:gKooVcwv
ただいま帰宅。
今日はもぐら叩きで110師匠のコードを見ながら俺に足りないものを考えた…。
そして浮かんできた疑問。
・果たしてクラスはこんな使い方でいいのか?
本当にクラスってあれでいいのか?
あと、ソースコードは見やすくしないといけないことを実感。
110師匠のソースコードは見やすい。
>>117 師匠
ありがとうございます。
弾幕シューティングにはいろいろまだまだ障害があって
・絵はどうするの?
・音楽どうするの?
・俺の企画で人が集まるの?
・そもそもゲームの設計論とか、デベロップの基本とは?
とか、素人考えでもこれぐらい。
ウィンドウについては変更をやってみます。
資料提供どうもです。
>>118 さん
お互い競争だ!
>>119 師匠
ありがとうございます!
これは…ばっちりやりたいことに合致してますね!
ちなみに118の中=119の中=漏れだったりするよ。
>>120 >・果たしてクラスはこんな使い方でいいのか?
使わなくても可
>・絵はどうするの?
素材
>・音楽どうするの?
素材
>・俺の企画で人が集まるの?
既に集まってる
>・そもそもゲームの設計論とか、デベロップの基本とは?
動くものが無い段階では不要
>>121 IDで分かるよ
>>122 いや、別人に扱われてたから言って見ただけ。
このゲームクリアしたら・・・・なんか商品あるのかな
125 :
110 :04/10/18 22:27:50 ID:cj9tokKx
>>120 モグラはクラス化したほうが見やすいし、メソッドもあれでいいと思います。
126 :
7 :04/10/18 23:19:58 ID:bXK9FjqZ
127 :
7 :04/10/18 23:45:34 ID:BTTdGkZa
あと、「果たしてクラスはこんな使い方でいいのか?」という不安ですが、 それを解決するには、「オブジェクト指向の概念」と、「C++ がどのように オブジェクト指向を言語でサポートしているのか」を学ぶ必要があります。 これを一気にクリアするのは難しいので、 最初は構造体と関数を使ってプログラミングしながら、 合間にぼちぼち学べば良いんじゃないかと思います。 (そして上手くクラス化できたら組み込んでみる) C++ の勉強のためにやる気が 0 になったんじゃ、本末転倒だと思うので、 今はクラスに拘らずに、どんどんゲームのコードを書いて動かすべきです。 まずは、もう少し大きなプログラムを作って各部品をモジュール化に挑戦 してみることをお勧めします。 まあ、楽しみながら行きましょう。 課題の提出とホムペの更新、お疲れさまです。
128 :
1 :04/10/18 23:48:58 ID:gKooVcwv
師匠!!
もぐら叩きを更新しました!
110師匠のものを少し修正しただけですが!
(110師匠の元コードは許可がないのでアップしてないです)
…と思ったら7師匠もソースコードを!
早速見てみます。
http://f41.aaacafe.ne.jp/~grow/ >>121 師匠
何かを教えてくれた時点で師匠だ!
ありがとう!
◆HOTsoUpxjY師匠
おお、暖かい励ましのお言葉!
がんばります。
そのうち素材も集めはじめたいと思います。
>>124 さん
クリアするとゲームが出来る。
いやそれより、こんな密度で勉強するのは久しぶりで楽しい。
後、ゲームを作れたら「俺育成スレッド」の成功例を作ったことに。
(いや、過去の例は知らんが)
>>110 師匠
なるほど、ありがとうございます!
でも関数と構造体でもよかった気がする…。
129 :
1 :04/10/18 23:49:30 ID:gKooVcwv
>>7 師匠
ありがとうございます!
なんかゲーム作成系サイトに行ったらInitとか使っていたので真似して見ました。
privateで変数を作れとあったので外からいじる欲望を抑えてひたすらprivateに。
ただ、まだ意味はちゃんと理解してません。
うおぉぉ!ソース!
ありがとうございます。早速見ますよ!
130 :
110 :04/10/19 00:17:50 ID:YQYgiZF5
>>126 ウホッいいソース。
他の人が書いたソースってやっぱり面白いし勉強になります。
って読んでたら気づいたんですけど
漏れが書いたやつはキーとモグラの対応が正しくないですね。
ノートしかもって無いもので素で気づきませんでした。orz
ごめんよ1さん 。・゚・(ノД`)・゚・。
131 :
1 :04/10/19 23:09:03 ID:NPbZ6Dto
ただいま帰宅。しかし、明日が早いので寝ないと死ぬ罠。
>>7 師匠
電車の中で読んだ7師匠のソースはすごかった!
ヘッダを使って分けるだけですごくわかりやすくなるんですね。
HPに比較対照としてのせていいでしょうか?
ああ、HPも整理しないと…。
クラスについては現時点で下記のような理解にとどまっています。
<理解してるような気がするところ>
・関数を含められる構造体(構造体は変数の集まりを1つの型として定義するようなもの)
・クラス内部からしかアクセスできない変数・関数と誰でもアクセスできる変数・関数を設定可能
・外からいじれないので無茶な応用が利きにくい反面、なかで何をやっているのか気にせず一定の動作を期待できる。
よって外からあまりいじれないように上手く作れば大きなソースの中でも互いに干渉せずに便利な関数として使用可能。
<理解が怪しすぎるところ>
・クラスは継承ができるので、あ「基本クラス」から「派生クラス」へと分岐させられる。
分岐してもコードのなかで同じように振舞わせることが出来るのでそれを上手く利用する?
Basicできれいな(脳内基準)コードを書いていた頃に、スマートなサブルーチンを作ろうと
がんばっていた記憶があるので、結構こういう概念とかについて考えるのはすきなのかもし
れません。
>>110 師匠
大丈夫です。
そこは気づいて修正しましたし、なによりコードをみて勉強になりました!
これからもよろしくお願いしますっ!
初めて覗いてみたけど良スレですね。
漏れは良い課題を作ったりする能力はないけど、
C++は多少は分かると思う(とはいってもBoost実装なんかは半分理解が危うい程度 orz)
ので、初期の助言ぐらいは出来るかもしれません…
>>1 さんがんがってくださいな。応援しとります。
ちなみに漏れもPC9801EX時代のN88BASICから入ったけど、
昔を考えると、CになってもC++になっても、
プログラミングて結局、PCにやらせたいことをそのまま並べるんだな
なんて当たり前のことを再認識してしもた
スレ主が馬鹿みたいなアイディア出さないで、スレのスピードが適度というあたりも このスレが良スレである要因になってるな。 あとは、このままフェードアウトしないで続けてくれるといいぞ。
135 :
1 :04/10/20 21:23:51 ID:mCCeUcY9
◆HOTsoUpxjY師匠
なるほど、確かに素材を見ているとゲームで使う様が想像できて楽しいですね。
これから暇を見て探して見ようと思います。
>>133 さん
ありがとうございます。
学習成果は随時アップするのでなにかあったらよろしくお願いします!
>>134 さん
応援ありがとうございます。
ひたすら続けますよ!
136 :
1 :04/10/21 02:12:33 ID:zOcPz3kA
なんか…ウィンドウをフルサイズしたらそのまま帰ってこなくなりました。 今日はここで力尽きます…。
おつ〜 今は何の課題にチャレンジ中で?
可能性1.DirectX排他モード
139 :
1 :04/10/21 21:11:16 ID:wY6YFmxH
ただいま戻りました。 7師匠のもぐら叩きコード、俺では改造する点すら見つからなかった…orz とりあえず、現在画像動かし中。 キーボードのキー入力をとって画像を動かせました。 今日中には画面端判定をつけてUPしたいところですが結局明日も朝早く あまりいじれなさそうな感じ。 その分明日は17時帰宅を認めてもらっているので明日には必ず…
嫁とのエッチの時間は作る ↓ その動画をうp ↓ 神 ↓
141 :
1 :04/10/22 00:09:21 ID:JdM7p1I/
とりあえず、今日はもうむりぽ…。 明日4時出なので寝ます。 ごめんなさい。
142 :
7 :04/10/22 02:58:03 ID:mcq+TWuo
>>141 お疲れさまです。あんまり、無理しないように。
時々休むか、遊びなよー。
>>131 >HPに比較対照としてのせていいでしょうか?
自由に使ってもらって結構ですよ。
必要なら修正、加筆してもらっても構いません。
>>135 >7師匠のもぐら叩きコード、俺では改造する点すら見つからなかった…orz
もぐら叩きを改造するのなら、
練習として 110 さんのようにノートで遊ぶ人のために
テンキーを使わないバージョンを1から書き直してみたらどうでしょう?
(練習なので今あるソースを見ずに書き、バグも全部取る)。
あと、余裕があればゲームを拡張するのも良いかも。
例えば、プレイ中に難易度が変わるとか、ハイスコアがファイルに記録されるとか。
または、1 さんが思い付いたアイディアを何か一つ。
コードの構造的な改造なら、
メンテナンスをより容易にするために仮想関数や関数のポインタを使ったりする
方法があります。しかし、これにはクラスの継承やポインタを理解する必要があるので、
まあ、もう少し先の話ですね(この規模で導入すると逆に複雑になりますし)。
143 :
7 :04/10/22 03:46:10 ID:oH/2oYx0
続けて、ですが。 そろそろシューティングへの布石として、 簡単なマト当てゲームはいかがでしょう? (縦向きか、横向きはお任せします)。 * <- マト。右から左へなど一定パターンで動く .| <- 弾。自機から発射。 W <- 自機。ボタンで弾を発射。 最初はマト、弾の両方とも一つだけの状態で、 コンソールで正しく動くか試してみてください。 あと、モグラ叩きは今動いているバージョンをアップして、 上に書いた拡張版は飛ばして、こちらに移ってしまうのも良いと思います。 (……同じものを連続して何度も作るのは飽きると思うので)。 やり甲斐がある方をやってみてください。1 さんにお任せします。 どちらにせよ、今やっている課題が一段落するか、詰まったらどうぞ (〆切なんてないので、マイペースでね)。
もぐら叩き改がGUI版もぐら叩きなら、そのまま作って その上で、GUIマト当てゲーム作った方がよくない?
145 :
1 :04/10/22 23:06:34 ID:sIUDsE7s
今帰りました。
早起きしたのに結局この時間。
>>138 師匠
アドバイスありがとうございます。
調べて見ますね。
>>7 師匠
了解です!
それぐらいなら朝飯前で作れそうな予感。
やってみます。
>>144 師匠
GUI版はまだ無理そうです…。
CはわかってきてもWINAPIの使い方と作法が難しい…。
146 :
1 :04/10/23 01:43:14 ID:MSdMPRa5
一応、文字シューティングの基本(?)は作成しました。
べた書きですが、HPに課題6としてUPしておきました。
本来なら今まで習ったことを生かすべきなのですが、今朝4時出で
気力がつきました…。
今週までは時間に余裕があるはずが週末も埋まってしまった…。
http://f41.aaacafe.ne.jp/~grow/
ある意味リアル育成シミュレーションゲーだな
このスレに感動した! よっしゃ俺もソースファイルを晒す!みんな見てね
149 :
1 :04/10/25 00:01:30 ID:rXHULzlV
忙しいゾーンが過ぎました。 今日からまた再開できます。 課題が時間のかかるものになりつつあるので、今までより多少ペースが 落ちると思いますが、やり続けますのでよろしくお願いします。 次は水曜更新が目標です。
kono sure zitaiga game
良スレ発見! ■クラスについて 赤っ恥覚悟で言わせてもらうと、プログラムの構造を理解しやすくするための概念。 もぐらたたきはあれ自体それほど難しくないので、1つのクラスでも問題なし。 シューティングなんかを作っていく場合は、ShipClass(飛行機クラス)とかShotClass(弾クラス) なんかを作ることになる。 ■継承 ShipClass { // 飛行機のベースクラス int x; // X座標 int y; // Y座標 }; PlayerShipClass : public ShipClass { // プレイヤー飛行機クラス int ship; // 残機数 int bom; // ボムの数 }; EnemyShipClass : public ShipClass { // 敵飛行機クラス int type; // 敵の種類 }; こんな風にしとけば、アニメーションなんかの敵味方共通な処理はベースクラスに置いといて、 それ以外の個別の処理は継承先に書いておくと、コーディングが減らせる(←これ超大切)。
152 :
151 :04/10/25 03:17:29 ID:cGYf71f1
>>139 で画像の表示と移動なんかをやってるようなんで、
せっかくだからクラス・継承を使ってみてはどうでしょ。
// 動く画像のベースクラス。
// 座標の保存と表示処理だけを行う。
class MoveImageBase {
int x, y; // 表示座標
void draw() // 画像を表示
};
// 移動処理を外から受け取って移動する画像。
// move_???()をコールするとそれぞれの方向に移動する。
// キーボードの入力値でコールするメソッドを変える。
class MoveImageUser : MoveImageBase {
void move_left(); // 左に移動
void move_right(); // 右に移動
void move_up(); // 上に移動
void move_down(); // 下に移動
};
// 勝手に動く画像。
// move()をコールする度に移動量分移動する。
// 壁で跳ね返る。
class MoveImageAuto : MoveImageBase {
int move_x, move_y; // 移動量(-1〜+1)
void move(); // 移動量分移動
};
>>151 ,152氏に勝手に補足させて頂くと、
共通の処理を基底クラスにまとめる、というのは、複数のコードから重複する部分をサブルーチンにまとめて分離するのと似ていますから、あまりメリットを感じない”かも”しれません。
しかしここで大切なのは、処理をまとめたことだけではありません。継承することによって
「MoveImageUserもMoveImageAutoもMoveImageBaseの一種である」という関係が出来たことです。
これにより、クラスを利用する側(ゲーム本体)ではMoveImageUserもMoveImageAutoも同じ種類のもの、としてひとまとめに扱うことが出来るようになります。
簡単な例を挙げると、普通に書けば
MoveImageUser userImage; // ユーザ入力版画像オブジェクト
MoveImageAuto autoImage; // 勝手に動く画像オブジェクト
userImage.draw(); // 描画処理
autoImage.draw();
と書いていたのを、(敢えてポインタを使って書きますが、もちろん意味は気にしなくてOKです)
MoveImageBase* image[2]; // image[0]=ユーザ版 image[1]=AI版
// ... ここになにやらモニョモニョ ...
for (int i=0; i<2; i++) image[i].draw(); // image[i]を描画
のような感じで、どちらもMoveImageBaseの一種として、共通に扱うことが出来るようになります。
例えば新たに、「ギコが出てきて勝手に動かしてくれる画像クラス」を追加することになったとしても
同じMoveImageBaseから継承してさえいれば、ゲーム本体で変更する箇所は、上の例で言えば配列の個数だけで済みます。
これが2,3個の追加ならそのまま書いても良いのですが、実際のゲームで50種類の敵が出てきたりすると、各クラスごとにdraw描画命令を書いていたのではたまりませんね。
この他にも先人の知恵で、継承を使うことで様々なメリットがあり、複雑な処理が比較的簡単にできるようになるのですが、、
理解するには、最低限ポインタを理解していなければいかんので、今はあまり深く追求せず、今できる課題をこなすと良いと思います。
こういうことも出来るんだな、程度で、読み飛ばしてください。
ちなみに理解しやすくするためにかなりハショり、一部嘘を交えてます。逆に分かりにくくなってたらすみません(´・ω・`) 説明下手なもんで。゜(゚´Д`゚)゜。
最初はいつもの糞スレかと思っていたが だんだん良スレになってきたね おいらも負けじとがんがるぞっと
155 :
1 :04/10/25 21:48:09 ID:zJqKCX2T
>>MFC ◆xRgRnKA3e2さん
イエス。
このスレで育成した弟子は現実に残るのがいいところ…?
師匠はグッドエンドを迎えられるのか!?
>>151 師匠
なるほど、クラスの利点がわかってきた気がします!
弾・敵・自機に共通する点は…
・移動する
・当たり判定がある
・画像を表示する
あたりなので、それらを共通部品化しようとしてみます!
>>153 師匠
なるほど、ポリモーフィズムとかそんなやつですね!
とりあえず、ポインタをまともに勉強しないと使いこなせないのですね…。
>>154 さん
この手のスレには珍しくガチでクリアを目指しています。
ポインタはそこまで難しくないよ。 理解するだけなら簡単。泥臭い使いこなしをするには慣れがいるけど
>>155 親クラスのメソッドを使いまわして行きたいなら、そのうちSTLってのも使うことになるだろう。
STLってのはC++の標準ライブラリの一種で、文字列クラスやコンテナなどの
プログラムを書くのに便利な道具の集まり。
このゲームのエンディングはバッドエンドかグッドエンドか果たして
159 :
151 :04/10/26 00:44:04 ID:Pl5Fu1Ro
>>153 補足ども。自分は「クラスってポリモーフィズムのためにあるんじゃないの?」と思っちゃうくらい重要視してます。
>>1 >>151-153 の流れでよく「ポリモーフィズム」って言葉が出てきたなぁ。ポインタも分からんとは思えない。すごい。もぐらたたきでいきなりクラス使ってるとことろなんか見ても、やっぱそういう「概念」とかにモチベーションもつのね。
■ポインタ - ポインタでややこしいのは2つ(だと思う)。
【宣言と参照】
int num; // intの実態
int* ptr; // intのポインタ
int& ref; // intの参照
num = 5; // numに5を代入
ptr = # // ptrはnumのポインタになる。
ref = num; // refはnumの参照になる。
printf( "%d", num ); // num(つまり5)を表示
printf( "%d", *ptr ); // ptrの実態(つまりnumの5)を表示
printf( "%d", ref ); // refの参照先(つまりnumの5)を表示
// 結局どれも同じ。というように、*とか&とかがごちゃごちゃしていて分かりにくい(と思う)。
// 正直慣れるしかない。
【何に使うか】
int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int p = a; // pは配列aの先頭のポインタになる。
for ( int i = 0 ; i < 10 ; i++ ) {
printf( "%d", *p ); // pの実態を表示
p++; // 配列の次の要素に移動
}
// ※出力結果 ... 0123456789
// というように、ポインタは基本的に配列と絡んで使う。
この手のスレは開始そうそう1が叩かれてAA大量に貼られたあげく 1が逃亡して終了ってのが相場だったんだが、ここはがんばる1さんのいる良スレですね 1000までに果たして1は無事に育成完了するのだろうか…
>>159 あと、クラスの「参照」作るのに使うわな。
むしろ実体を宣言する必要性はあるのかという気もする。
いきなり使い方だけ示されてもなんのこっちゃだから、 作る仮定で覚えていけばいいさ
163 :
1 :04/10/27 21:54:22 ID:SIdHsNqi
今帰宅。 これから課題の残りを仕上げるので少し待ってください。
■現在の状況■ 1のやる気:30/100 技術 : 0 経験 : 5 スレのレベル :+1(-5〜+5) スレの活気度:-3(-5〜+5)
165 :
1 :04/10/28 01:24:53 ID:xrpkFgj6
まだつくってます…
166 :
名前は開発中のものです。 :04/10/28 01:56:39 ID:zWN7bqm5
あわてない〜ひとやすみ〜
167 :
1 :04/10/28 02:41:44 ID:xrpkFgj6
HPはちゃんと更新はしていませんが、今日の成果をここに。
http://f41.aaacafe.ne.jp/~grow/ ↑のトップにやりかけのシューティング課題ソースをUPしました。
コンパイルは通りますが、上手く動作してくれません。
(またか)
明後日修正版をUP予定。
継承したクラスがまともに動いていないのでなんともいえないのですが
気になっている点。
Stg_obj→シューティング基本クラス
MyShip→自機クラス、stg_objの派生
Enemy→敵基本クラス、stg_objの派生
Stg_obj stg[2];
stg[0]=MyShip ship;
stg[1]=Enemy enemy;
for (i =0;i<2;i++) {
stg[i].action();
}
などとすればaction内のコードがMyShipとEnemyで違っても
動いてくれるということなのでしょうか。
168 :
1 :04/10/28 02:43:06 ID:xrpkFgj6
あとは何で動いていないのか例によってよくわからない…。 師匠の皆様方、アドバイスありがとうございます。 レスは修正ソースというかたちで明後日に! あ、やりかけソースはトップページからリンク張ってあります。
169 :
153 :04/10/28 06:50:30 ID:4VEPRGpu
>>167 すんません、俺が変に書いたから逆に混乱してしまったかもしれませんね(´・ω・`)
(実は、そのようなコードを考えてくれたのですごい安心してたりもしますが、、矛盾してますね。)
継承についてですが、考え方は全くその通りで、後は書き方の問題です。
コンパイラから見ると、「MyShipとEnemyはStg_objの一種」であって、
Stg_objそのものではないので、直接の代入は出来ません。
(補足ですが、変数 = 型 変数名; のように、代入式の中で変数は定義できません。)
かといって、
MyShip ship;
stg_obj[0] = ship;
とも出来ません。
(強引に代入だけなら出来ますが、スライシングという現象が起きます。それは後々分かるかと)
で、これを実装するためには以前も書いた通りポインタを使う必要があるのですが、
ポインタをどこまで理解しているのか分からないので突っ込んだ説明は避けます。。
一応、「もしやるとしたらこうなる」という例を書いておきますが、意味は深追いしなくて結構です。
コードの枠組みが同じなのから分かると思いますが、
>>1 氏の考え方が間違ってるわけではないので…(´・ω・`)
Stg_obj *stg[2];
stg[0] = new MyShip;
stg[1] = new Enemy;
for (i=0; i<2; i++) {
stg[i]->action();
}
ところで
>>1 はポインタについてはどれぐらい理解してるの?
そろそろ学んでもいい頃だと思うが
>>168 というか、あんたはそんな時間まで起きていて大丈夫なのか。
>>170 まあ使い方だけ分かるのでも使えないことは無いが、理解しておいた方が
よいってのは確かだな。後に納得できないことが出てきにくいし。
ただ、注意して欲しいのは「使い方を覚える>原理を理解する」という
優先順位にしたほうがよいってことだ。
例えば、ポリモーフィズムがどうやって実現されてるかとか、そういう
ことは理解するのが難しい。それを理解するために一時間使いなら
使い方を一時間学んだほうがよいってこと。
>>171 ポインタに関してだけは1時間かけて使い方を10個覚えるより
1時間かけてでも原理を1個覚えた方がいいと思う。
使ってみて感覚を知って ポインタそのものに慣れることも重要だと思う 「習うより慣れろ、そして知れ」 なんつって
まあ、ポインタ議論は置いとこうぜ。別にこのスレで議論する ことでもないしな。 マターリ進行を大事に。
>>174 ( ゚д゚)
(つд⊂)ゴシゴシ
(;゚д゚)
(つд⊂)ゴシゴシ
_, ._
(;゚ Д゚)
176 :
1 :04/10/28 21:50:27 ID:R7SeH+zx
久々に早い帰宅。 ポインタ談義が出ているので自分のポインタに対する理解を。 ポインタはオブジェクト(変数や関数)に対するメモリ上の位置。 ポインタが指し示す位置を見ることで変数の値などを取得することができる。 &xなど&をつけることで変数などに対するポインタが生成され、int* ptxのように あらかじめ宣言しておいたポインタ型にアドレスを格納できる。 int x = 1; int* ptx = &x <<xのアドレスをptxに格納 で、配列を扱うときには配列がメモリアドレス上で連続して取られるため、 ポインタの進化が発揮される。 int x[10]; int* ptx = &x[0]; *(ptx+1) //これはメモリアドレスを1つずらす式になり、実質x[1] 関数に対する使い方、->についてはまだ勉強中。 有効な使い方も今日勉強予定。
177 :
1 :04/10/28 21:58:45 ID:R7SeH+zx
>>156 師匠
176が俺の理解で、泥臭い使いこなしはこの先と認識。
どうでしょう?
>>157 師匠
ほー。STLですね。今度調べて見ます。
>>158 さん
グッドエンドにもたどり着けないようなら俺は死ぬ。
>>151 師匠
int num; // intの実態
int* ptr; // intのポインタ=アドレスがptr。*ptrだとprtのアドレスが示す値を見る。
int& ref = num; // intの参照num=refの関係。
と理解しましたが問題ないでしょうか!
書き込みにも一応著作権があるという事を覚えておこう
179 :
1 :04/10/28 22:08:43 ID:pBgl6jh5
>>160 さん
実はベストエンド(3Dにも手を染める)のさらに上を行く妄想を持っているから
1000では終わらんかもしれん。
2Dシューティングは1000までにやりたい。
>>161 師匠
うはー、実体とか、なんとかまだわからんです。
勉強不足だー!
>>162 師匠
地道に覚えていきます…。
>>164 さん
むしろ健康が30ぐらい。
>>166 さん
ありがとう。だが、目標を達成するまで休みはない。
>>153 師匠
stg_obj[0] = ship;
↑やってみて死にました…。
とりあえず、->の理解を始めたいと思っています。
>>170 さん
>>176 参照で。
>>171 師匠
ゲームもつくれないようなら死にます。
というか、大それた妄想があるので2Dシューを作るまでに自分が定めた
期間(9ヶ月)を超えるわけにはいかんのです。
180 :
1 :04/10/28 22:09:38 ID:pBgl6jh5
>>172 師匠
171師匠の指令と逆だー! どうすればいいんだ!
>>173 師匠
慣れてから知れということですね! 路線としてはわかりやすい。
ということでこの路線でとりあえず行ってみます!
分岐処理が多い場合ポインタ関数の出番〜
>>178 だが、著作者を明示してない2ちゃんの書き込みに著作権なんぞ
発生しようが無いことも確かだ。
>>176 "->"は「ポインタからメソッドを呼び出す」ための記号。
つまり、、、
class Object {
public:
void func() { printf("hello.\n"); }
};
int main() {
Object *obj = new Object; //オブジェクトを指すポインタ作成
//この2行は、まったく同じ意味。
obj->func(); //ポインタからメソッド呼び出し
(*obj).func(); //「ポインタの指すクラス」からメソッド呼び出し
return 0;
}
# 見た目重視のため全角スペース利用してます
>>182 あ、2ちゃんの書き込みにも著作権あるよ、たしか判例があったと思うけど
メソッドだけじゃないとは思いますが、もっと単純に考えて (*obj).func(); (*obj).val = 10; と書くのがマンドイから obj->func(); obj->val = 10; と書けるようにしただけ、と覚えた方が良いかもしれませんね。 関数ポインタはポリモフィズムを使って代用できてしまうから、 C++でやってる以上は覚えなくても差し支えはない気もしますが… で、new (malloc) や delete (free) についてはまだ未開拓?
185 :
1 :04/10/28 23:08:52 ID:QLPnNbCt
>>182 師匠
まあ、訴えられたらそのときで。
で、->はクラスのポインタから関数を呼び出す、と。
ソースどうもありがとうございます。
大変参考になりました。
>>◆HOTsoUpxjY師匠
な、なんだってー!
>>184 師匠
なるほど、わかりやすい!
食事を作っている間にこれからやる部分の予習をさせてもらってしまった…
>関数ポインタはポリモフィズムを使って代用できてしまうから、
な、なんだってー!
ポインタを覚えたらポリモーフィズムも勉強しなくては…。
で、newで動的に生成したオブジェクトはdeleteでメモリを解放しないと
メモリリークが発生することはわかりました。
mallocとfreeについてはこれからですね。
186 :
名前は開発中のものです。 :04/10/28 23:15:15 ID:zWN7bqm5
勉強になります。
>>185 心配するな。"変数"ポインタと違って、"関数"ポインタは使い方を知らなくっても
死にはしない。
変数ポインタがだいたい理解できたら、new/deleteに行ってもいいんじゃないか?
私が無知なだけの可能性もあるが、関数ポインタのある言語って
Cファミリー以外知らないし。
188 :
151 :04/10/29 00:10:12 ID:cXoe97e1
>>177 (
>>1 ) 完璧。*と&でぱにくったら
>>159 とか見てもらうといいかも。
ちなみになんで ポインタ ポリモーフィズム って言葉が頻発するかというと、
// 配列確保
const int MAX_OBJECTS = 100;
Stg_obj* object_array[MAX_OBJECTS];
memset( object_array, 0, sizeof(object_array) ); // 初期化
// ---- 生成 ----
object_array[0] = new MyShip();
object_array[1] = new Enemy();
object_array[2] = new Enemy();
// ---- 初期化 ----
for ( int i = 0 ; i < MAX_OBJECTS ; i++ )
if ( object_array[i] != NULL ) // 配列にオブジェクトが登録されてたら
object_array[i]->init(); // 初期化する
// ---- 表示 ----
for ( int i = 0 ; i < MAX_OBJECTS ; i++ )
if ( object_array[i] != NULL ) // 配列にオブジェクトが登録されてたら
object_array[i]->draw(); // 表示する
というように、自機だろうが敵が何匹いようが初期化や表示なんかは一発でこなせるのだ。
シューティングなら敵や弾の表示順序なんかは、表示する時に優先順位でソートかけるだけで済むし、一時停止機能を追加したければ全オブジェクトのmove()メソッドを呼ばないようにすればいい。
if文一個で終わっちゃう。
「機能(Stg_obj、MyShip、Enemyクラス等)」と、「表示」と、「実装(main()のルーチン)」をきっちりわけると、仕様変更にタフなアプリが作れるようになる。
ちなみに
>>1 のソース見せてもらったけど、Stg_obj("シューティングゲームのオブジェクト")なんて名前のつけかたといい、色々な部分で関心したよ。
センスいいと思った。
189 :
1 :04/10/29 21:08:47 ID:UWs2GHSt
>>187 師匠
なるほど!
とりあえず、ポリモーフィズムを考えたシューティング作成してみます。
バーチャルで○○.ActionをStg_objに宣言、Stg_objの派生、MyShip,Enemyそれ
ぞれに違うActionメソッドをつくって動かす(でいいんですよね?)
幸い、土曜は完全FREE(Full Reactive Eyes Entertainment)うわ、なにをするやめ
>>188 師匠
オス! ありがとうございます!
ちなみに名前は他のサンプルプログラムがオブジェクトと言っていたので猿真似。
190 :
1 :04/10/29 21:13:24 ID:UWs2GHSt
現在の悩み。 当たり判定の実装方法どうしよう。 とりあえず、当面点と点のみの当たり判定を考慮するとしても同じような 配列に入れておくとどうループさせて当たり判定を行うのか…。 一般的な方法とかありますか? 次、メソッド名やファイル名の謎。 例えば、シューティングオブジェクトSTG_OBJECT クラスを作成するとして StgObjectとつける人もいれば、stg_object、stgObjectなどとつける人も。 どんなときに名前の頭が大文字になるのかプログラム技術と関係ないながら悩み中。 Javaだとクラスの名前は頭のみ大文字、メソッドは小文字、複数節からなる名前の 場合は単語区切りで大文字にするらしいが、C++の作法はどうなんだろ。
>>190 当たり判定は、最初だし一番基本的なとこで
for(i=0;i<MAX;i++){
if(enemy[i].hitChk(myShip.x, myShip.y)){ /* 当たった処理 */ }
}
みたいな感じでいいんじゃない。
こちらの弾と敵編隊とか、n対nの当たり判定の場合は
外側にもうひとつループ増やしてさ。
命名規則はコレという正解は無いので、自分なりに統一されてれば
どういう方法でもよいと思う。
あれはもう宗教論争の世界だから、今後も「正解」ってのは出ないだろうし。
192 :
1 :04/10/30 01:26:50 ID:T0bjQJ33
今日はこれにて轟沈。
193 :
151 :04/10/30 03:19:57 ID:5NzlD1F3
>>1 当たり判定も「機能」と「実装」で分けると理解しやすくなるよ。
>>191 の言うStg_obj::hitChk()メンバ変数は、
オブジェクトが任意の座標に接触しているかを判定する「機能」を持っている。
で、接触を判定してその結果どうなるかの振る舞いは「実装」になる。
接触したことによって爆発したり得点が加算されたりパワーアップしたり。それは実装次第。
>>191 が'一般的'な「機能」を示してくれたので、
>>1 は自分好みの「実装」をすればいいのだ。
(ちなみに「実装」を「一般化」すると「ツクール」になる)
命名規則も
>>191 の言う通り。
慣例的なものはJavaが引き継いでるから、Javaの命名規則を参考にするといいかも。
今日は一日フリーだったらしいが、進捗具合はどうなったんだろう……
195 :
1 :04/10/30 22:16:01 ID:KR7MrVzN
今日は一日中フリーだったが、起きたのがすでに15時…orz 抽象クラスの存在を理解し、文字シューに組み込もうとするが例のごとくちゃんと動かない。 (いつもこれかよ) 弾を複数出るように設計までしたんだが…。 StgObj(基本クラス・弾・敵・自機の基礎) MyShip,Enemy,Bullet(それぞれStgObjから派生した自機・敵・弾クラス) StgObj stg[100];の配列をつくってやり、 弾や敵が出るたびにEnemy,Bulletをnewして使用されていないstgに(StgObjは使用中フラグを持つ)割り当て。 StgObjがaction,hitChkという仮想クラスをもち、Enemy,MyShip,Bullet共に別々の実装を持つ。 で、stg[100].action()を全て実行して見ると画面上のオブジェクトが全て動いたり弾を撃ったりする。 で、一通り動いた後にhitChkを呼び出すとそれぞれに当たり判定をしてくれる。 (stg[100]の中から自機弾フラグを持つものの座標と敵フラグを持つものの判定、 自機フラグと敵フラグを持つものの衝突判定、敵弾フラグを持つものと自機の当たり判定) それでループ。
196 :
1 :04/10/30 22:21:14 ID:KR7MrVzN
あたり判定部分は for (i = 0;i<100;i++) { if (stg[i].flg == 2) { //2=自機の弾 for (l = 0;l<100;l++) { if (stg[l].flg == 1) { //敵機フラグ stg[l].hitChk(stg[i].x,stg[l],y); } } } } こんな感じでえらい力技ループなのでポリモーフィズムの恩恵を受けてない…。 連想配列を使うとここも上手く処理できそうな気がしたが、すでに十分設計に 溺れてプログラムが進まないので泣く泣く諦め。 今日の結論。 設計するよりとりあえず動かせ。
>>196 連想配列は、引数に文字列が指定できる配列ってだけなんで
別にそれ使ったからといってn:nのチェックが楽になるわけではない……と、思うけど?
迷ったらとりあえずコード書く、というのは私としては正解です。
ある程度書けば、どうすれば効率いい書き方が出来るかの方向性が見えてくるので
その時点で書き換える。というのが理想だが、実際は結構そのまま使ってしまう。
うう、こんなif文羅列してる場合じゃないだろ、とか思いながらな。
ソース見てないで言うのもアレだけど、
>>195-196 を読む限り、
全種のオブジェクトを一つの配列で扱ってるのかのう。
種類に応じて登録する場所を決めておけばフラグを調べる必要はないよ。(バケツソート)
例えば「StgObj stg[8][100];」みたいにして、0は敵、1は敵弾、2は自機弾…など。
これをヒントに色々改良してみてはどう?
効率の観点から言うと正解ではないんですけど、
hitChkを仮想関数にしてStgObjに定義(中身は空)しておいて、
自機弾だけに実装しておけばフラグはいらなくなりますね。
(自機弾以外は呼び出されても何も実行されない)
ただ後々描画順を考えるようになると、
>>198 氏のやり方が便利になってきますね。
200 :
名前は開発中のものです。 :04/10/31 10:44:47 ID:SmB4uQNL
おい、おまいら 俺のことも育成してみないか。 やる気 :100/100 健康 :100/100 技術 :1 経験 :3
201 :
200 :04/10/31 10:53:04 ID:SmB4uQNL
【プロフ】 ・現在カナダに留学中 Grade11th ・プログラム(C++)の授業を取っているが説明が英語なのでちんぷんかんぷん ・やる気と時間は充分 ・最終的にはロマサガ2,3みたいなゲームを作りたい
>>200 OKOK
漏れも育ててやるよ。
まずは全裸のままじゃあれなんで服買わないと…
203 :
200 :04/10/31 12:01:54 ID:SmB4uQNL
とりあえず<>を表示できる状態で上げてくれ。
>>200 今までのプログラミング遍歴を書くと、教えやすいかも。
何もやった事が無いならないで、そう書いてホスィ。
rand 使う時は、srand 使わないと毎回同じ数列になるので注意。
srand((unsigned) time(NULL));
みたいに、時間をシードにすればおけ。
名スレの予感
207 :
200 :04/10/31 21:48:04 ID:gxWW8Utq
>>204 スマセン
表示できるようにしておきました師匠。
>>205 師匠ご教授ありがとうございます。
srand(time(NULL));を入れたら、ちゃんとできました。
ところで、(unsigned)とは何でしょうか。これを入れたらエラーが出たので抜いたのですが。
プログラミングは何もやったこと無いです。
入門書をカジッタ程度。
209 :
1 :04/11/01 00:54:55 ID:jhYYwmHZ
ただいま帰りました。 この2日間、体調が悪かったので思ったこと。 夜型にすると多少無理でもやろうとしてしまうので朝方勉強がいいのかも。 師匠方、「これは!」と思う学習方法、「駄目だ!」と思う学習方法の例 等ありましたら教えていただけないでしょうか。
210 :
1 :04/11/01 01:08:40 ID:jhYYwmHZ
>>197 師匠
連想配列、ご指摘のとおり間違っておりました。
俺が考えたのは…
1・StgObjが前のクラス、後ろのクラスに対するポインタを持つ。
2・新しいものを追加するたびに最後尾のクラスに連結
3・終わったら自身をDeleteし、前のクラスと後ろのクラスを連結する。
連想配列と同時に、こんな感じのものが提示してあったので、これでいけるかも!?
と思ったわけです。
何をするかと言うと。
1・全クラス登録必須配列・敵配列・自機配列・弾配列・敵弾配列があります。
2・全部StgObjを元としたクラスで、全クラス登録必須配列にはnew した全てのクラスが
連鎖しています。
3・敵配列・自機配列などはそれぞれ敵だけ、自機だけが連鎖しています。
4・全部のクラス共通処理(移動など)は全クラス登録必須配列.action()などとひとまとめ。
5・自機に当たり判定があるクラス(敵弾クラス・敵クラス←敵本体との当たり判定もあるので)は敵弾配列にも登録、hitChkを自機に対して走らせる。
(自機対敵も同じ)
という処理で柔軟にいろいろな処理が出来て、必要ない処理が減らせるのかなと。
でもとりあえず、今は書くだけ書こうと思います。
>>198 師匠
イエス、その通りです!
二次元配列!
確かにその方がわかりやすくていいですね。盲点でした…
>>199 師匠
なるほど、その方法がいいかもしれませんね。
特に今は簡単な方がいい気がします(複雑なことをやろうとしてプログラムが動かないので)
その方法、使わせていただきます!
211 :
1 :04/11/01 01:10:52 ID:jhYYwmHZ
>>200 さん
む、ライバル出現!?
なんかゲーム的な展開だ。
も、燃える!
とりあえず以後よろしく。
>>202 さん
育成ゲームもゲーム名だけに買わないと服も着ていないのか…w
212 :
名前は開発中のものです。 :04/11/01 12:01:01 ID:rB5WZwI+
>>211 HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。
STL使えよ と言ってみる 管理凄く楽
とりあえず、皆さんに言っておきたい。 「荒らしはスルーの方向で」
>>213 リンクリストとハッシュを間違えて話題に上げてるあたり、
STLも調べてるっぽいぞ。
じゃあ 210のことやりたいなら、STLのlistを調べてみるといいよ と言っておこう この板人いないねえ
確かにlist使った方がよいとは思ったが…… イテレータの概念を理解できるなかーって思って。 いや、しかしポインタ使えてる大丈夫か。 よし、stl::listを使え! というか、HPを更新しろ!
218 :
1 :04/11/01 20:27:43 ID:iXqLIcaV
帰宅。
ようやくvirtualを使用してポリモーフィズム実現しました。
(いろいろ考えた挙句にプログラムは動いてなかった)
STLはまだわかりません。
>>210 で言っていたことはC++教本にあったコードを見て勝手に考えた
ことなので…。
219 :
1 :04/11/01 20:32:15 ID:iXqLIcaV
>>213 師匠
とりあえず、7師匠の課題が一段落ついてからSTLに取り組もうかと。
>>215 リンクリスト?
わからないので調べてみます。
>>216 師匠
了解!
>>217 師匠
イテレーターもわからないです…。
とりあえず、調べてみます。
HPは明日の午前7時までにはまともに更新します。
STLは7師匠の課題が一段落したらいってみます。
というか、久々にWindowつくって画像を動かそうとしたらできなかった…。
220 :
名前は開発中のものです。 :04/11/01 21:38:20 ID:AGV/fOCE
??
????(:)rz?????●rz????????????????? ??
222 :
1 :04/11/01 21:57:20 ID:iXqLIcaV
朝方勉強に切り替える実験のため、今日はもう寝ます。 明日朝に更新(&最新ソースUP)します。
ここのところの後回しにするパターンを見ていると、なかなか投げ出しそうな雰囲気が 漂ってて不安になってくるんだが。 ホントに朝には更新しろよ?
強要するのもなんか違う希ガス
とりあえず
>>1 が朝起きた時用に
/ヾ
ゝイ丿
/ /
/ /
/ /
∧ ∧ / // ̄ ̄ ̄ ̄ ̄ ̄
シコ ( ゚Д゚)、 / /<
>>1 おはよう!
/ ヽ、 / / \______
シコ ( ) ゚ ゚/ヽ、/⊂//
\ ヽ、 ( /⊂//
\ ⌒つ /
(  ̄/ /
| |O○ \
| | \ \
| ) | )
/ / / /
/ / ∪
∪
>>223 「俺育成ゲーム」なんだから、うまく
>>1 を誘導してやる気にさせなくちゃ。
逃げたら逃げたで代わりの
>>1 を(ry
さっさと挫折しろ
228 :
1 :04/11/02 07:12:42 ID:xVWcOq4C
http://f41.aaacafe.ne.jp/~grow/ 師匠!ようやく更新しました。
1・1対1シューvirtualクラス導入ソース
2・1対1シューvirtualクラス本格導入ソース(Bulletもクラス化し、複数弾を出せるよう変更)
がメインの更新です。
・ファイル名がクラス名と同一に(StgObjクラスならStgObj.cpp)
・クラスは頭が大文字に。
・メソッド・クラスは単語区切りで大文字化(StgObj>Stg+ObjなのでSとO大文字)
・変数は全て小文字、単語は_で区切る
などの自分ルールを決定、導入しました。
とりあえず、最低限の更新を行ったのでもう少ししたらまた変更されているかと。
229 :
1 :04/11/02 07:20:06 ID:xVWcOq4C
7師匠、1対1シューとしてはあれでいい気がしますがいかがでしょうか!?
まだ見ていてくれていればいいなぁ…。
今日は朝5時起き。
2〜3時に寝て9時に起きるより大分快調。
もともと8時間睡眠必須人間だったので22時就寝・5時起床のペースで
慣れていく予定。
起きてしばらくだるいが、そのうち慣れるだろう。
>>220 さん、221さん
それは俺のやる気が見えないという暗示か!?
あいにくやる気は十分。
健康が回復したらペースも取り戻すからまってろ。
>>223 師匠
更新しました。
期待に添えるほど進んでいるかはわからないですが…。
>>224 さん
言葉はありがたい。
が、無償で教えてもらっているからにはある程度期待に答える義務が
こちらにあると思っている。
>>225 さん
おはよう。
>>226 さん
逃げないよ。
231 :
200 :04/11/02 11:20:41 ID:xxBN9dM6
やぁやぁやぁやぁ、おまいらコンニチワ。
さっそく質問なんだが、
clrscrとgotoxyを使うと「定義されていない識別子です。」と言われるんだ。
conio.hをインクルードしてるのに何故よ?
VC++6使ってます。
初歩的な質問でスマソ。調べたのだが、どうしてもわからなかった。
ヘルプミー
>>1 今後ともよろしく。
もう少し頑張れ
せめてこのスレを全部読んでから始めなよ
>>1 とその師匠達に対して失礼
これは難易度の高そうなゲームですね
234 :
200 :04/11/02 12:18:11 ID:xxBN9dM6
>>232 だよね。
俺が間違ってたよ。
出直してきます。
初心者な231の為に言わせてもらえば、ctrl+Fで検索するといいぞ。
236 :
1 :04/11/02 20:54:28 ID:N1WmJFms
帰宅。 現在1VS1シューの敵複数化&ポリモーフィズムをさらに生かすため修正中。 今日中に出来るといいかな…。 ところで質問があります。 現在、基底クラスStgObjからBullet(弾)・敵・自機を派生させていますが、 弾・敵・自機にshootというメソッドをつくり、弾クラスのポインタを返却させ たいのです。 どれも共通の処理になりそうなので Bullet* MyShip::shoot() { Bullet* new_bullet = new Bullet; new_bullet->init(x,y - 1); return new_bullet; } などと書かずにStgObjに実装したいのですが、Bullet自体がStgObjから派生している ためか上手くいきません。 なにかよい方法はないでしょうか。
戻り値の型が違うから云々ってエラーが出る奴かね?
238 :
1 :04/11/02 21:30:10 ID:N1WmJFms
>>237 師匠
E2303 result6_3\Bullet.h 8: 型名が必要
ちなみに、StgObj.hに#include "Bullet.h"を入れ、もろもろのエラーを
解決して最後に残るのがこのエラーでした。
ソースUPはメインPCを家族が使っているので(パスワード不明のため)
今すぐできないのが残念です。
// 1.クラス名の宣言 class Bullet; // 2.クラス構造の宣言 class StgObj { public: Bullet* shoot(); }; class Bullet : public StgObj { public: Bullet(); }; // 3.クラスメソッドの実装の順で書く。 Bullet* StgObj::shoot(){ Bullet* new_bullet = new Bullet; return new_bullet; } Bullet::Bullet() { printf("bullet init\n"); };
C言語は、とにかく上からコンパイルするから、 「下の方で定義してあるもの」ってのは、Cコンパイラにとっては 未知の単語に過ぎない。 だから関数の宣言とかクラスの宣言と、その実装を別々に書けるように なってるわけ。
241 :
1 :04/11/02 22:28:19 ID:N1WmJFms
>>239 師匠
できました!
ありがとうございます。
これでヘッダの書き方を大分調べたつもりなのですが、ヘッダの書き方について
しっかり書いてあるサイトって少ないですね。
やはりC++本を別に買って見るのがいいのか。
242 :
7 :04/11/02 22:42:36 ID:v413qbLh
>>229 すいません、随分と間を空けてしまいました。
課題は受け取りました。
まだ、少ししかテストしてませんが、うまく動いているようですね。
実行ファイルは OK です!
要求を十分満たしています(複数弾などすでに拡張もされてますし)。
体調の悪いところを頑張ってもらえて嬉しいです。
しかし、ソースのほうは、まだまだ改善の余地があります。
これは、C++ の学習はまだ始まったばかりなので仕方ありません。
というわけで、今回は、動くものが出来ただけで素晴らしい!
と判子を押させてもらいます。
243 :
さすらい :04/11/03 04:06:57 ID:u5v4/sy+
>>1 さん開発終了おつかれさまです。
このすれ面白かったので読破しちゃいましたよ。
すごい上達っぷりですね。応援してます。
すごい余計なお世話と思いつつも、
勝手ながら
>>1 さんのソースをちょっといじらせていただきました。
すみません。
中途半端な修正ではありますが、
ちょっと小粋なテクニックみたいなものも織り交ぜてみましたので、
よかったら参考にしてみてください。
http://xxsasuraixx.hp.infoseek.co.jp/ ↑の(死んでる)ページの上のほうにある「1さんへ」というリンクがそれです。
かなり僕の趣味が反映されていますが、
ヘッダファイルとかもしかすると参考になるかもしれません。
それではがんばってください!
245 :
1 :04/11/03 09:45:54 ID:tC+TKpxi
今、修正中。
(とってもこれから出かけるが)
あと、皆さんのソースをHPに乗せたいがよろしいでしょうか。
>>7 師匠
オッス!
ありがとうございます!
現在更に改造中です!
>>さすらい師匠
ありがとうございます!
Constを別宣言して、さらに別ディレクトリにヘッダをまとめてありますね。
あとは仮想クラス導入ですか(まだ斜め読み)。
確かにStgObjは仮想クラスのほうがいいかもしれませんね。
>>244 師匠
おお、ありがとうございます。
複数人のソースを比べるだけで面白そう。
でも244師匠のソースが落ちてきません…。
246 :
1 :04/11/03 09:47:25 ID:tC+TKpxi
>>249 C++初めてでこれですかΣ(´Д`)
Javaやってると強いですねぇ。
細かいことですが、引数を一つだけ取るクラスのコンストラクタは
explicit指定しておいた方が良いかもしれません。
251 :
249 :04/11/03 15:17:41 ID:yuzJEfmb
>>250 恐らく、どこかにバグが潜んでいると思われます。
ていうか、MiniMax + αβ でAI作ったのにあんまり強くなくてショックです… orz
評価関数が悪いのかなぁ… (´・ω・`)
ご助言ありがとうございます。
explicit は知りませんでした。検索したら、C++固有の物みたいですね。
これを引数が1つだけのコンストラクタに指定しておくと、
勝手に型変換されるのを防ぐ、といった意味合いでよろしいでしょうか?
252 :
さすらい :04/11/03 15:33:29 ID:uuJHfnBc
ソースは載せていただいてかまいませんよ。
>>244 さんのソースも見たけど、ポイントはできるだけベースクラスにまとめよう
というところな気がします。
>>249 STLを導入するか、もしくはGUIに行くかが次のステップかも。
ためになるスレだなあ しかしコンパイルできないから、バイナリも一緒に載せてくれないかなあ と思ったり
254 :
1 :04/11/03 21:58:42 ID:jxa6uMV+
サイトの日記、えらくつまらないな…見返して思った。
現在、シューティングの敵複数化・弾を撃ってくる・移動パターンをもつなど修正中。
でも今日はもう寝る。
>>247 師匠
師匠、了解しました!
DIFF、いいですね。
そうそう、今作っているのは「敵が大量に出てくる」「時間で弾を撃ってくる」
「移動パターンが複数ある」感じなのでインベーダーに近いかと。
それでもいいでしょうか?
>>249 さん
ぶーッ!
俺より遥かにつえぇ!
よ、よろしく。
>>さすらい師匠
GUIもSTLもやってみたいですねー。
GUIにした瞬間、1対1シューの要領でシューティングゲームがつくれ
たりしたら…とっくにみんなシューティング作っているか…。
基礎も学ばなければと思っているのでSTLもいいんですよね。
>>253 さん
了解、次回よりバイナリも乗っけます。
255 :
1 :04/11/03 22:12:41 ID:jxa6uMV+
師匠! 寝る前にちと相談があります。 今、用を済ませた弾や敵が消え去るためのdelメソッドをクラスに 実装しようとしていますが、やはりmainでdelete処理を行うしか ないでしょうか。 状態・ 敵の行動パターンが3つ(クラスも3つ) これらはAction(移動方法)・shoot(弾の撃ち方と生成する弾クラス)に差異を 持っています。 弾のパターンが3つ(クラス3つ) これもActionメソッドが異なり、斜め弾・自機狙い・真下弾の3つがあります。 現在、弾や敵はそれぞれに同一配列に読み込んで処理をさせていますので、事前 に一種類の敵クラスを生成・使用の度に初期化という処理を行うことが出来ず、 毎度Delete・Newを行っています。 このあたりのスマートな解決方法はないでしょうか。 もしや、STLに進んでから考えることとか?
全てStgObjから派生してるから、派生してるクラスなら なんでも格納できるような あと初期化とか終了処理をまとめたいなら ゲームの流れを管理するクラスでも作ってはいかが
>>0 xFF
そーいうときは、敵管理クラスを作る。
敵管理クラスの中に、敵配列を入れておいて敵を登録・削除するのは
そのクラスにまかせるわけね。
敵の登録はmain関数かどっかから管理クラスに命令与えてやらなきゃ、
敵をいつ登録するのか判らんから、命令してやらねばならん。
でも、敵を削除するのは管理クラスに登録してある敵クラスを見れば判るんで
管理クラス内で自動的に出来る。
つまりmain関数とかでdeleteしなくてもいいいわけだ。
あ、登録ってのは別に特別なことやってるわけじゃなく
普通にnewして配列に入れてるだけね。
# STLは「配列を楽に管理する」ためのクラスの集まりかね。
# まあ正確には、STLの一部が配列を楽に管理するクラス群なんだけどさ。
クラスの中から自分自身をdeleteしたい時は delete this; でOK。
試したらエラー出ますた
>>260 これでもエラー出る?
class DeleteMine {
public:
DeleteMine() { printf("create\n"); }
~DeleteMine() { printf("destroy\n"); }
void DeleteMe() { delete this; }
};
void main() {
DeleteMine *delMe = new DeleteMine;
delMe->DeleteMe();
}
new するの忘れてますた。スマソ 再度試してみた #include "stdafx.h" #include <iostream> class DeleteMine { public: DeleteMine() { m_test=10;printf("create\n"); } ~DeleteMine() { printf("destroy\n"); } int m_test; void DeleteMe() { delete this; printf("無視されるかな%d\n",m_test);} }; void main() { DeleteMine *delMe = new DeleteMine; delMe->DeleteMe(); } 結果 create destroy 無視されるかな-572662307 デストラクタ呼ばれても、次の関数呼ばれるんだな でもメンバはちゃんと消えてるんだな C++難しい…
263 :
さすらい :04/11/04 01:24:04 ID:wYOf1GGX
>>1 GUIとSTLどっちが先がいいですかねぇ・・。
STL使わなくても物は作れますんで、
GUIを優先したほうがよさそうな気もします(GUI楽しいですし)。
敵や弾の管理は結構悩みますね。
今は敵とか弾は配列管理してますけど、
スレの上の方に出てきてた双方向リストの管理に置き換えれば、
オブジェクトが自分で勝手に消えてくれる実装ができるかもしれません。
class StgObj
{
StgObj* m_prev; // 前のオブジェクト
StgObj* m_next; // 次のオブジェクト
void del()
{
// 自分をリストから外す(nullチェック省略)
m_prev->m_next = m_next;
m_next->m_prev = m_prev;
// 自滅する(
>>259 のご意見頂戴しました)
delete this;
}
};
StgObj* object_list;
object_list = new StgObj(); // リストに追加
object_list->m_next = new StgObj(); // 2つ目追加
object_list->del(); // 1っこ目削除
俺も昔はそういうことばっか考えてたなぁ… 今はある程度のパフォーマンスの低下があっても楽に作れるほうを選んでるから こんな感じで作ってます↓ class StgObj { private: bool m_valid; public: bool IsValid { return m_valid; } void Invalidate() { m_valid = false; } StgObj() { m_valid = true; } virtual Update() = 0; virtual Render() = 0; }; typedef list<StgObj*> StgObjList; StgObjList objects; void UpdateAll() { for( StgObjList::iterator it = objects.begin(); it != objects.end(); it++ ) { StgObj* obj = *it; if( obj->IsValid() ) obj->Update(); } }
265 :
続き :04/11/04 01:42:21 ID:joRqK5+g
void KillAll() { StgObjList::iterator it = objects.begin(); while( it != objects.end() ) { StgObj* obj = *it; if( it->IsValid() ) it++; else it = objects.erase(it); } } まあUpdateAllとKillAllを同時に行う手もある
266 :
さすらい :04/11/04 01:43:53 ID:wYOf1GGX
すみません上のソースの最後にある使い方のとこですけど、 ちょっといい加減過ぎたので書き直します。 // リストを宣言 StgObj object_list_head; // リストの頭 StgObj object_list_tail; // リストの尾 // リストを初期化 // (最初は頭と尾だけのリスト) object_list_head.m_prev = NULL; object_list_head.m_next = &object_list_tail; object_list_tail.m_prev = &object_list_head; object_list_tail.m_next = NULL; // リストの最後に追加する。 // (最後というか尾の1つ前に挿入) void add( StgObj* obj ) { StgObj* prev = object_list_tail.m_prev; StgObj* next = &object_list_tail; prev->m_next = obj; next->m_prev = obj; } ・・・。 stl::list使ったほうが早いかも・・。
>>264 要するに今1がやってる実装ってことだよな。
268 :
さすらい :04/11/04 01:59:18 ID:wYOf1GGX
>>264 俺もそれでいいと思うんだけど、
それって結局今
>>1 がやってることなのよ。
あ、ほんとだ。(今ソース見ました) STLを使った実装例つーことで参考にでもしてくだせぇ
272 :
1 :04/11/05 00:21:16 ID:2k/tHsKT
月初一週間は忙しい…今帰宅。
そして寝る。
次回更新は土曜日の予感。
>>256 師匠
ゲームの流れを管理するクラス…それだ!
面クラス>敵・弾を管理
main>面クラス管理
おお、わかりやすい!…気がする。
>>257 師匠
なるほど、敵の配列を持った敵管理クラス内で処理してやることで操作がわかり
やすいし、mainもすっきりしますね。
新しいゲーム作るときも弾の管理とかをいじってやれば新しいシステムに簡単に
対応できそうです。
面管理>敵管理・弾管理
シューティングの構造が見えてきた気がします!
>>258 シオシオの24。
>>259 師匠
マジですか!
超便利。ソースコードありがとうございます!
273 :
1 :04/11/05 00:28:45 ID:2k/tHsKT
>>262 さん
検証ありがとう。
わかりやすい検証のおかげで安心して使える。
>>さすらい師匠
サンプルコードありがとうございます。
STLを使うのはとりあえずの実装が全て終わってからにしようかと思っています。
効率悪いやり方をした後にいいやり方を学んだ方が身につきそうな気がするので。
>>264 師匠
ソースコードありがとうございます。
まさにやろうとしていることにピッタリです。
自分流と比較して改良してみます!
…ところで、STLはこれに使われてないですよね?
>>270 さん
やろうとしていることの先取りであればソースを比較して勉強できるので
大分嬉しいです。
多人数とソースを比較できる機会なんてあまりなさげですし。
歩いている道が、そこで二本に分かれていた。 地図を見ると南へ続く道はWindowsSDKへ、東へ進む道はTextShootingへと 続いているらしい。 君は…… A.やっぱりグラフィックを扱えなきゃな。南へ行ってWindowSDKを学ぶぜ。 B.ここは基本を固めるために、TextShootingの東へと向かってみるか。 C.まてよ……。確か少し戻ったところにjavaへの分かれ道があったよな。
delete this の使用は(ごく特殊な状況を除いて)推奨できない。。。 削除の対象がクラスCのオブジェクトoとして、 ・oがnew C(...)によって確保された時しか使えない。 staticやauto、placement newなどでは結果がどうなるか分かったものではない ・oを参照している側にはoが削除されたか否かが自明ではない。 といった問題がある(他にもあったかも)。
>>273 >>264 だけど思いっきりSTL使ってるよ
typedef list<StgObj*> StgObjList;
で、リストの型名を定義しとる
>>1 に便乗してオレ育成ゲームを同時進行してます。
278 :
244 :04/11/05 00:56:42 ID:PZhRBaNW
>245 のせてもかまわんよ。 むしろ、こんな糞コード書いちゃいけねぇ、 と言いきってしまえるほどに成長しれ。 # 244でもSTL使ってたような気がするが気のせいだったかな。
STLを使うためにはテンプレートの知識が必要らしい。 噂の巻物は音を立てて消え去った。
あら?SDKとAPIって同意語だと思ってたのだが? いや、言葉そのものは開発キットとインターフェイスってことで 意味は違うんだが少なくとも、windowsアプリの開発では SDK使って開発 = API使って開発じゃないっけ?
素人な漏れにとっては Win32APIだろうがWindowsSDKだろうが 呪文にしか聞こえないわけでorz
ところで、1は朝型生活に切り替えたと聞いたような気がするのだが、 どうなったかな。
>>281 MFCだってAPI使うぞ
SDK使って開発=1から全ソースを書く
MFC使って開発=クラスライブラリをベースに作る
MFCはWindowsAPIラッパだろ
287 :
さすらい :04/11/06 00:34:18 ID:P5Kg8s/4
>>275 そうスね。
delete thisは結構イレギュラーだと思います。
ただgotoと一緒で使いようだと思ってますし、
「〜管理クラス」系のシステムよりなクラスを作るより、
StgObjで完結する仕組みを取り入れていってもらって、
サクサク実装進めたほうがいろんな意味で
>>1 さんにとって効率いいんじゃないかと、
ちょっと勝手に考えておりました。
>>287 まあ、これ以上は組み方の趣味の問題になるが
俺は管理しやすい部品使って長いゲームループ書くより
細かく分けるほうがすきだなあ。
289 :
1 :04/11/06 18:23:59 ID:NxSGjUhd
現在作業中。 というか、昨日は家に帰れず漫画喫茶で一夜を過ごしました。 よって、ようやく掃除などが終わったばかりです…。
290 :
7 :04/11/06 21:42:57 ID:/8hMrT4P
私も課題6をアップ。
http://gamdev.org/up/img/1805.zip *弾と敵機の数はそれぞれのヘッダで調整できます。
なるべくファイル同士の依存性を取り除いています。
手間は増えますが、後々手を加えるのが楽なので。
良かったら、一つの参考にどうぞ。
>>1 無理せず、進めてくださいね。
疲れているときに書くソースはよくこんがらがるので。
291 :
1 :04/11/06 23:24:59 ID:iVggyR0n
すみません、会社の仕事と平行してやっていましたが、 仕事が終わらないので仕事専念にいたします。 orz... 次の更新は月曜か日曜夜(予定) 大学生のときにもっと勉強しておけば…。
なんかこのスレだけ2chのスレとは思えないほどだなw マターリ度120%って感じだ。 1さんはどうせならトリップでも付ければ?
自分も便乗して、 育成よろしくお願いします。 開発環境は WIN & bcc C暦2ヶ月 です
>294 漏れも3か月で、できれば教育してもらいたいが、1さんはもともとPGだからレベルが違うと思われ。 スレの内容がサパーリなくせに常にROMってる者の独り言ですorz
すげぇトリップだなw 思うに1さんが頑張るからこのスレが伸びてるわけで、 今までのスレの内容はサッパリでも自分のレベル内で頑張れば、 それに応じてレスがついてくると思うんだがなぁ
>>295 もともとのプログラミングの能力なんかどうでもよくて、要は姿勢の問題です。
何がやりたいのか、そのためにどうしたのか、何が分からないのか
をはっきりさせればアドバイスがもらえないことはそうそうないです。
総じて受け身だと絶対にうまくいかないです。
298 :
1 :04/11/08 22:32:54 ID:XBmtzuLE
し、仕事がようやく完了。 朝方を目指していたのにしっかり夜型に戻された…。 とりあえず、レスと簡単な疑問をちょっと書かせてもらってから寝ます。 ああ、夜に寝られるようになりたい。
299 :
1 :04/11/08 22:37:43 ID:XBmtzuLE
>>274 さん
B.ここは基本を固めるために、TextShootingの東へと向かってみるか。
Javaへの分かれ道は携帯ゲームを作るまでパンくず落として見失いようにしておく。
>>275 師匠
うわ、staticとかplacementとか調べないと…。
とりあえず、delete thisは危険なんですね。気をつけます。
>>276 師匠
なんとー!?
stl.hとか宣言して使うものだとばっかり思ってました。
>>277 さん
便乗なんかやめていっしょにやろう。
>>278 師匠
ぐはっ! 無知な俺…。
ソースはまとめて公開させていただきます!
じゃあとりあえず
>>294 と
>>295 に課題をだします!
BCCでこのスレのコンソール出力(座標指定表示まで)をできるようになってから、
ライフゲームを作ってみましょ(ライフゲーム知らなかったらググってください)。
【ルール】
・70x20マスのフィールドを用意
・「*」が生物。
・空白のマスの周り8マスに「*」が3匹いたら空白のマスに「*」が誕生する
・「*」の周りに「*」が1匹以下もしくは4匹以上いた場合過疎/過密でその「*」が死ぬ。
開始直後の「*」の配置
*
***
良くわかんなかったら質問してくださいませ。
301 :
1 :04/11/08 22:47:58 ID:XBmtzuLE
>>279 の巻物
なんと、テンプレート!?
C++は覚えることがおおい…。
>>283 さん
宣言した当初は22時就寝を心がけていましたが今は26時まで仕事の日々。
今日から再度がんばる。
>>286 さん
ありがとう、超がんばる。
>>さすらい師匠
勝手じゃないですよ!
皆さんがいろいろな方向を示してくれるから自分もいろいろ組み合わせて
考えることができているわけで。
>>7 師匠
うわー、相変わらず見やすいソース!
なるほど、確かにソースの依存性を取り除いたほうが変更が楽な気がします。
拡張で可変判定のボスを作ろうとしましたが当たり判定に苦労して挫折しましたし。
>>292 さん
トリップ? ちょいと調べてみます…。
>>293 さん
ありがとう…身にしみる…。
302 :
1 :04/11/08 22:49:03 ID:XBmtzuLE
>>294 さん
よろしく、っつーかすでに先輩!?
差を広げられそうでがくがくぶるぶる。
>>モウダメポ ◆orzOTL/11Yさん
俺も最初は経験なしだったし、わけわかんなかったよ
むしろ重要なのはやる気があるかと踏み出せるかどうか。
俺の初期値ぐらいなら10日でいけるよ。
10の知識をもっていても何も行動しなければいないのと同じ。
意味を持つのは知識が0でも実際に行動してる人間だけ。
今やろうと思っているならそれが転機。
303 :
1 :04/11/08 22:54:14 ID:XBmtzuLE
現在考えていること(電車の中とかで考えただけでPCに向かって作業できていないが) ・敵と弾と自機は別クラスで依存性をなくすべきなのか? →敵と自機をかけ離れた仕様にしづらいから。 すでにaction(int key)としている時点で無理が出ている気がする。 敵は自機を基点に行動することもあるわけで、自機を変数として渡すべきだろうし。 そうすると共通actionにはできないよなぁ。 →でも弾は移動が単純な敵でもいいのかも? (衝突判定があるから) 一応、まったくやってない(?)わけではないことを示して寝に入ります…。 ごめん。
>>303 「ゲームとは自立的に行動するオブジェクトの集合体である」
ってのが俺のゲームに対する考え方だけど参考になるかな?
この一文をそのままクラス化したら
class Game
{
list<Object*> m_objects;
}
class Object
{
virtual void Action() = 0;
}
…ってなる。以下続く
>>301 あのさー、
typedef list<StgObj*> StgObjList;
^^^^^^^^
↑これがテンプレートだ。
306 :
304 :04/11/08 23:22:56 ID:eLVA3L2H
Game中でm_objectsに入れた全てのObjectのActionを呼び出せば、 ゲームの時間が一定時間だけ進んだことになる。 ここまでは、今まで1さんがやってきた内容について、 クラスを使って作業担当を明確にしただけね。 少し抽象的な話になるけど、 「全てのオブジェクトは自立的に行動する」っていうがコンセプトならば、 Gameは個々のオブジェクトに必要な引数などは逐一知っている必要はないのよ。 Gameは現在のゲーム内部の情報をそれらのオブジェクトに教えるインターフェイスだけあればいい。 例えば敵キャラに対してならば、「自機キャラはどこにいるのか」教えることができればそれでいい。 つまり class Game { list<Object*> m_objects; ... Vector2 GetMyShipPosition() { ...; } } みたいな。 設計の押し売りみたいだけどこんな感じに作ると綺麗にならんかな。 モロにclass MyShipへのポインタとかを敵キャラに持たせる手もあるけど… この類のはオブジェクトがdeleteされたりするのが厄介なのであまりお勧めはしない
良スレすぎてマジ泣けますた(;´Д⊂)
実は工房で、入試はまだですが進学校なのであまり来れなく、後述しますがプログラミングは超初心者で、それでも良いでしょうか?
このトリップは初心者板のトリ探し依頼スレでいただいたものです。
>>300 師匠様
ライフゲーム。。。と、とりあえず携帯カキコなのであとでググります(PCが使えるのは火水以外の17〜20時だけなので)
その前に、lcc試食版はNGですか?gccのインスコがどうしてもうまくいかないので…
ちなみに、3ヵ月というのはCばかりやっていた訳ではなく、
C(ポインタがなんとなく分かるくらい)とJAVA(オブジェクト指向でポカーン状態)とPerl(掲示板くらいならなんとか)とPHPとRuby(微妙)
を平行してやっていたんです。そして昨日VC#とVC++とVBとVJ#のくっついた.NETを買いました。
>302=>1様 貴重なお言葉ありがとうございます。今は1さん初期値のはるか下ですが、皆さんの書き込みを見ていると自分にもできそうな気がしました ところで、PGになるために工房の内からやっておいた方がいいことがあればご教授願います。
309 :
さすらい :04/11/09 00:37:40 ID:oD5Yfbm3
ライフゲームは昔、数学者の間とかで流行ったらしいねえ。 グライダーとか、ペンタミノとか有名なパターンもその頃に作られたらしい。 昔は永遠に成長するパターンとかは存在しないもので、長い時間のうちには 繰り返しの動きをするものに必ず落ち着くとか思われてたが、 いろんな研究で「永久に成長するパターン」とかも探し出されたし。 とりあえず作るなら上下左右をループさせると小さい範囲でも、それなりに 動き続けてくれてナイスだ。
311 :
名前は開発中のものです。 :04/11/09 04:18:50 ID:uOn7Ncmy
>>300 さん質問です。
ためしにライフゲーム(>309のリンク)をやってみましたが、
周り8マスでは無く真ん中のマスも含まれていて、
9マスで判定している気がします。
○●○ ○●○
●○● → ○●○
○○○ ○○○
こんな感じに(上段・真ん中は、黒くならないはず
どちらで製作したらいいですか?
課題、挑戦させていただきます。
312 :
294 :04/11/09 04:21:01 ID:uOn7Ncmy
下げ忘れました ごめんなさい
>294 なんか間違った発言したみたいですみませんor2 >311さんに追加して、*は1ターン終了したら好きな座標を指定して増やすことができるということですか?
314 :
294 :04/11/09 16:17:44 ID:uOn7Ncmy
>>313 いえいえ、お互いがんばりましょう
>>1 先輩ではないです、
実力も負けてると思いますし。
ライフゲーム完成しました。
315 :
さすらい :04/11/09 21:26:09 ID:Mkae7mrl
>>311 ルールの説明が一文足りませんでした。
・「*」の周りに「*」が2〜3匹いた場合は現状維持
です。
これでいくと、
>>309 のルールと同じになると思うんですけどいかがでしょうか。
○●○→123
●○●→456
○○○→789
とした場合、
(2)は周囲8マスに2匹いるので現状維持
(4)と(6)は周囲8マスに1匹なので死亡
(5)は周りに3匹いるので誕生
となります。
できたソースアップできるといいかもしれません。
>>313 今回のルールでは「好きな座標に増やす」というような
仕様は考えていませんでしたが、
追加仕様で実装してみるのも面白いかもしれませんね。
親の目を盗んでキーボードを叩いております
>>さすらい師匠
ライフゲームの意味がやっとわかりました!
携帯Java版は自分で●を置いていくので勘違いしてしまいました…
>>294 早Σ(゚Д゚ υ)
やる気はもちろんあるんですが,経験がほとんどないので完成予定の検討がつかないんですが,,,それでも構いませんか?
その前に忘れていましたが, >さすらい師匠 >BCCでこのスレのコンソール出力(座標指定表示まで)をできるようになってから とありますが,もう( ゚Д゚)ポカーン です…もう少し説明していただけませんか?
せめてこのスレを全部読んだ上で質問しないと、いままでいろいろな ヒントを出してくれて来た人に失礼だぞ。
319 :
さすらい :04/11/09 22:52:55 ID:Mkae7mrl
わ、ガイシュツOTL スレの座標の意味を激しく恥ずかしい解釈をしてました…
321 :
294 :04/11/10 17:02:12 ID:fcMU7Xeh
>>321 >>1 さんのサイトを見ると分かるけど、
どんなに小さいことでも良いから「新しく知ったこと」とか
「分からなかったこと」を書いておくと後で自分のためになるよ。
あと「できました」って言われても「ふーん」としか言いようがないので
その課題をこなす上で分からなかったことや曖昧に実装してしまったところなど、
つまり見てほしいところをはっきり書いた方がいいです。
でてきたものが動けばいいだけだったら
このスレでこういうことをする必要はないわけで。
とにかく「何がしたいのか/何をしてほしいのか」をはっきりさせると話が早いです。
>>321 ライフゲームの盤のサイズを入力して、
変更できるようにしてみたら?
動的メモリ確保の練習。
>>322 同意。
分からなくても、「全く分かりません」なんてことはないはずだから、
「ここまでは自分で考えました」程度に言ってくれればそれなりにアドバイスできるし。
324 :
294 :04/11/10 19:15:21 ID:fcMU7Xeh
う〜ん、 どこが駄目か、どのように実装したらいいかも分からないので、 関数、クラスは、こんな使い方じゃ駄目だってところを 指摘してもらえると助かります。 特に設計の仕方が分からないです、どのように設計してますか?
>>324 小ネタを一つばかし
if (key == 's' || key == 'S')
は、
key = getch();
を
key = tolower(getch());
にすれば、
if (key == 's') で済んだりするかも。
326 :
1 :04/11/11 21:37:33 ID:ubgrCf2V
久々に登場(ごめんなさい)。 最近の成果。 朝型生活になろうとする→残業で帰宅が深夜→早く眠れない→夜型に。 朝型生活は難しいのかもしれん。 よって、以前の生活に戻ることにした。
ガンガレ
328 :
294 :04/11/12 18:32:41 ID:2cazD5qg
>>325 さん
修正しました
指摘ありがとうございます。
ポインタについて質問ですが
>>159 さんの ポインタ型と参照型の違いがよく分かりません。
課題1−2動きはしますが、正常に動作しません。
複雑なポインタになるとお手上げです。
>1さん がんばれ
>>328 参照も内部的にはポインタで実現されているだろうけど、
一度参照先が決定されると変わらないって点が一番違うかな。
::ポインタ
int a, b;
int *p = &a; // pにaのアドレスを代入(pはaを指す)
*p = 10; // a に10を代入
p = &b; // p にbのアドレスを代入(pはbを指す)
*p = 10; // b に10を代入
::参照
int a, b;
int &r = a; // pはaの参照になる
r = 10; // a に10を代入
r = b; // 一度決めた参照先は変わらないので、これは aにbを代入という意味になる
参照は値そのもので、 ポインタはアドレスを格納する変数 と考えると分かりやすいと 何かの本にあったな
>>330 じゃあ、普通の変数はなにを格納してんだよ、とツッコミたくなる文だな。
参照は純粋なエイリアスで ポインタはアドレスを格納しているから、参照と同じような事もできる かな?
ふむ。エイリアスはいい表現だな。 まとめると…… 通常:普通の変数 参照:変数に「別名」を付ける ポインタ:メモリ上の位置を保存する ってことで。
なぁ。ポインタって何が難しいんだ?少なくとも漏れがC勉強したときはすんなり解ったよ。
はっきりいって
>>330 の考え方で十分理解できるでしょ?
>>334 概念そのものは難しくないんじゃないのでは。
ただ、アクセスしたい値に至るまでに変数名→アドレス→値というように
1つ余計なのが入るからな。
ポインタ使うと変数を一つ多く使ってるようなもんだ。そして、人間は一度に
意識下に置いておける変数の数はそんなに多くない。5、6個で限界では?
そんなわけで、
>>329 みたいな例ならいいが、プログラムが複雑になってくると
ポインタによってプログラムが読みにくくなる。
……って、これは俺がポインタ嫌いな理由だ。抽象度も下がるしな。
ポインタはメモリの仕組みさえ理解してれば、理解自体は難しくない。 けど、ポインタを多用したトリッキーなコードを読むのは難しい。
337 :
294 :04/11/13 09:07:56 ID:qedMZKEV
338 :
294 :04/11/13 09:11:05 ID:qedMZKEV
途中で書き込む押しちゃいました ポインタと参照の違いは大体分かりました。 ありがとうございます
>>337 それでも間違いではないんだけど、
この規模の場合は普通に多次元配列のポインタを使った方が分かりやすいんじゃないでしょか。
それとnew失敗時に、bccはstd::bad_allocを投げるようだから、
例外をtry〜catchで補足するようにした方がいいかも。
340 :
294 :04/11/13 09:51:44 ID:qedMZKEV
多次元配列のポインタを使おうとしましたが使えません。 p = new int[y][x]; としても出来ません。 try〜catchについて調べてきます
>>340 // 宣言
int **p_stage;
// 初期化
p_stage = new int*[sizeY];
for (int i=0; i<sizeY; i++)
p_stage[i] = new int[sizeX];
// 利用
p_stage[10][20] = 123;
// 解放
for (int i=0; i<sizeY; i++)
delete [] p_stage[i];
delete [] p_stage;
// 例外
#include <new> // bad_allocを使うのに必要
try {
p = new int[10];
} catch (std::bad_alloc &e) {
// newに失敗するとここに
cout << e.what() << endl;
}
ボーランドって、set_new_handler()サポートしてなかったっけ?
343 :
294 :04/11/13 15:09:29 ID:qedMZKEV
>>343 preタグで囲むとインデントできますよ。
exitしてプログラムが終了すると、基本的にそのプログラムが確保してるメモリは
全部OS側で開放してくれます。
だからと言って、メモリ開放しない癖をつけるのはマズイですけどね。
>>341 それって
int hoge[100][200];
のような動的配列を確保するのに101回newしなきゃならないよね。deleteも。
何とか一回で済ます方法はない?
int **hoge = (int**)( new char[ sizeof(int*)*100 + sizeof(int)*100*200 ] );
といった感じで確保して、前半部分に各2次要素列へのポインタを格納するとか。
>>345 多次元配列制御クラスを使うのが王道だろう。
boostというライブラリには、そういうのが存在するらしい。
boost使って書くとこんな感じか boost::multi_array<int, 2> p_stage(boost::extents[sizeY][sizeX]); p_stage[10][20] = STATE_STAGE; 解放いらない分楽かもしれんね。 STLとBoostは使えるなら使った方が良いかも
廃墟一歩手前sage
まあマターリ行こうじゃないか
で、1はどこへ逃げた?
ぬぉぉぉ...何が
>>1 を変えてしまったのか
それとも風邪でも引いて寝込んでるのか?
それなら治ったらまた帰ってこいよ!
多分流れからして忙しいんでしょ。 まぁマターリ進行でいこうや。
今後の課題の流れはどんな感じになるんだ?
>>1 含め、どこまでのゲームが作れればいいんだろうか…
>>353 おまえ、新参者だな。その書き込みで分かる。
355 :
1 :04/11/17 22:13:42 ID:8Xx5MksP
すみません、挨拶にだけきました。 現在仕事で死んでます。 事務の自動処理サーバーが壊れてすべての作業を手でやっています。 泊り込んでいるのに終わりません(T-T) 一応、頭の中で妄想だけしています。
356 :
1 :04/11/17 22:21:34 ID:8Xx5MksP
結局、7師匠の依存性を減らす案は一時置いておき、 「クラスを作って初期化すると勝手にあとは進む」 案を実現しようと努力中です。 具体的な構想。 1・クラスは敵弾・自機弾・自機・敵(敵の動きが3種で3クラス) 2・敵弾クラスは敵弾の配列を持つ。 3・自機弾クラスは自機弾の配列を持つ。 4・自機クラスは自機クラスと自機弾クラスのポインタを持つ。 5・敵クラスは敵クラスの配列を持ち、自機クラスと自機弾、敵弾クラスへのポインタを持つ。 6・どのクラスもactionメソッドを実行することで勝手に移動・弾生成します。 7・どのクラスもStgObjクラスの派生です。 8・actionは各クラスでvirtual実装。
357 :
1 :04/11/17 22:29:09 ID:8Xx5MksP
9・各クラスがactionした後にupdateメソッドを実行すると 自機弾クラスが敵との当たり判定を、敵・敵弾クラスが自機との 当たり判定を行い、状態が更新されます。 また、それぞれupdateメソッドは最後に得点を返します。 自機弾クラスの返却値・全ての撃破敵の合計スコア 敵弾クラスの返却値・全ての撃破自機(=自機が撃破されたら)のスコア 1以上が返ってきた場合は自機が撃破され終了。 敵の動きは斜め・自機と軸が合ったら弾を打つ・横のみ移動などそれぞれ好き勝手 actionを実装してみています。 実際は敵タイプ変数などを用意し、if (enemy_type==3)というような形で分岐して もいいレベルだと思うのですが、本格的に作る際にはそれぞれ特殊な行動をさせる と思うので今から実践。
358 :
1 :04/11/17 22:32:21 ID:8Xx5MksP
ちなみに、弾も敵も全て毎回newします(上限数を超えていなければ)。 7師匠(ソースはプリントアウトして会社で見ていますよ!)のソースを参考に exturn でMAX数をgeneral.hに宣言、各クラスで見るときもMAX_〜〜回ループで 見る感じに。 作られたらnew、撃破・画面外でdelete。 で、最後に終わるとき、自機・敵・自機弾・敵弾それぞれの配列を順に全てdeleteします。
359 :
1 :04/11/17 22:35:45 ID:8Xx5MksP
一応、STL系も調べてみたのですが使うのは少し先になりそうです。 使えたらやりたいこと。 自機当たり判定list 敵当たり判定list をつくり、それぞれに登録。 当たり判定はlistに対して行うだけでいい。 で、オブジェクトが消えるときにlistから削除。 (↑全てのlistを検索して消すと重そうな気がする…) これで自機にも敵にも当たる弾や、障害物(当たっても死なないけど 中に入れない、とか)を楽に実現できそうな気がしました。
360 :
1 :04/11/17 22:40:47 ID:8Xx5MksP
というあたりで寝ます。 すみません、ベッドがいつになく暖かいんです。 こんなにやわらかかったっけ…。
まぁマターリ時間のあるときに勉強汁。 体壊したら元も子もないからね。
自動処理プログラムを自前で作ってしまうとか。
つーか皆
>>1 にきつい事やらせ杉。
このままじゃ死んじゃうって。
いやまだまだだ。1よそろそろ3Dもいけるだろう。 機体を3Dでモデリングし、それをステンシルシャドウを用いて 影付きでレンダリングするまでとりあえず作りなさい。 3日以内にこの課題をクリアするように。
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
>>364 / ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
366 :
1 :04/11/18 19:18:28 ID:7Tuv59+u
ようやく(というか業者が作業にきて)サーバーが直りました。 そして久々の早帰り。 今から食事選択の後取り組みます。
がんがれ
よし、じゃあ俺は1を育成するゲーム作ってくる(`・ω・´)
プログラミングの教材になるかもしれんな<1を育成するゲーム
だれか、ケアルでもホイミでもメディでもキュアウーンズでも なんでもいいから1に掛けてやれ。 なんか瀕死だぞ。
「がんがれ」と一言かけよう。
373 :
1 :04/11/19 00:06:22 ID:1YgLlWbY
まだコンパイル通らないのですがとりあえず報告を。 (全レスは完成後ということで…) StgObjからPlayer,Enemy_A,Enemy_B,Enemy_C,Bulletの5クラスが派生。 CtlBaseからCtlEnemy,CtlBullet,CtlEBullet(敵弾)の3クラスが派生。 Ctl〜は全てEnemyならEnemy,BulletならBulletの配列を持つ管理クラス。 CtlEnemy.action()などと命令すると敵が全て行動したりします。 また、それぞれのCtlは内部パラメータに応じて敵をnewするなどの処理も行います。 CtlはPlayerクラスと1つのCtlクラスに対するポインタを持ち、 CtlEnemy.hit()などとすると当たり判定を持っているポインタの コントロールするクラスに対して行います。 例・CtlEnemyはCtlBullet(自機)のポインタを持ち、hitを行うと 当たり判定をして当たっていればEnemyが死亡、Playerの得点加算。 現在はCtlクラスが1つのCtlクラスに対するhit判定しかできませんが、 将来的には複数配列を扱っていけば画像版STGでも使えるか?と考えています。 PlayerはMyShipに変わって作りました。自機とプレイヤーデータ(得点など)を持つクラスです。
374 :
1 :04/11/19 00:07:14 ID:1YgLlWbY
心配をおかけしましたが、健康状態は良好です。 (倒れたほうがプログラミングから遠ざかってしまうので気をつけています) ということで、今日はこのあたりで。
さっさと挫折しろ
>>375 これだけ音沙汰がなかったのに、定時もなにも無いんじゃないかと。
378 :
1 :04/11/19 22:10:00 ID:ktFMLbsP
帰宅しました。 これより製作に入ります。 今までできなかった分、土曜日には絶対仕上げようと思っています。 とりあえず、連絡のみ。
379 :
1 :04/11/20 17:21:33 ID:nnMpuzPR
>>373 の構想がだいぶ形になってきましたが、やはりまだ動いていません。
今日中に見せられるものができるか…?
途中ソースでも日の境目ぐらいにはあげられるものを出したいとは思っていますが。
しばらく離れていただけで結構忘れてる…orz
380 :
1 :04/11/20 18:14:40 ID:lZ4tahCb
とりあえず、食事・掃除に入る前に一番悩んでいる点をメモ。 ヘッダにポインタ型を指定しているとコンパイル時に不明な型扱いされる 点が解決できず。 CtlBase.h -------------------- #include "StgObj.h" StgObj* obj; ---------------- CtlBase.cpp ---------------------- #inclue "CtlBase.h" void init(){ obj->init(1,1); } ---------------------
それだけじゃなんとも… 使う前にnewしてる?
mallocとかでも良いけど 兎に角領域を割り当てなきゃ
ヘッダとソースの分離って観点から見ると CtrlBase.h には class StgObj; StgObj* obj; //こいつはCtlBaseのメンバなのかな? CtlBase.cpp には #include "CtlBase.h" #include "StgObj,h" void init() { obj->init(1,1); } の方がいい希ガス
>381-382 よく読め。"コンパイル時に"と書いてある。
385 :
1 :04/11/20 23:59:42 ID:A5g65eTO
師匠! レスありがとうございます。 参考にしてやってみます。 new、そういえばしていませんでした…。 そのあたりももう一回試していってみます。
386 :
1 :04/11/21 02:51:12 ID:l4KFHtWv
いろいろ試してみたところ、根本的になにか間違っている模様。 CtlBase.hヘッダに public: int score; と宣言しても、 CtlBase.cppでは //コンストラクタ CtlBase::CtlBase(){ score=0; }; void init(int size) { score=size; } で「未定義のシンボル score(関数 init(int) )」が表示されてしまうので。 ただし、コンストラクタにscore=0と書くことにはエラーが表示されません…。
387 :
1 :04/11/21 03:02:49 ID:l4KFHtWv
書き込みを見直して気づきました。 CtlBase::CtlBase(){ score=0; }; ←「;」 ;を取ったらコンパイル通りました。 こんなのに今日一日悩んだのか…orz。
388 :
1 :04/11/21 03:16:03 ID:l4KFHtWv
↑ということで、結局今日に見せられるものはできなかった落ちに。 非常に申し訳ない気持ちでいっぱいです…。
構造がどうなってるのか知らないけど、 >void init(int size) { これって、 >void CtlBase::init(int size) { なのでわ…
共有するメンバ、メソッドはstaticに汁。
>>389 きっとソレダ!!ヽ(´∀`)9 ビシ!!
クラスの中に直接書いてる時は要らないからなぁ
392 :
1 :04/11/21 23:19:35 ID:/gsWytY+
うがー、すごいイージーミス。 首つってきます…。
こういう間違いは自動検出できるべきなんだがなあ。
>>393 本当にただの関数として書いたのか、
メンバ関数として書きたかったのかを識別する術はコンパイラにはないからな
こいつはもう駄目だな。 病気、仕事、絶対、などという単語が出てきたらあとは適当にごまかして逃げるだけ。 半年後に「実はやってたんですよ〜」とかsageで書き込んで自己弁護
何の役にも立たない煽りはいらねーよ
>>396 だが、1はそう言われても仕方ないだけの態度を取っている。
そろそろ、まとめてレスをするのと、HPに作りかけのソースを上げるだけでも
やっとかないと本当に見放されるぞ。
その気になればHPに作りかけのソース上げるのは10分だろう。
398 :
1 :04/11/22 22:02:47 ID:nfI2m+Ps
帰宅。 作業開始します。
>>397 >>1 は別に何日以内に成果を報告する義務も責任もない。
見放したければ見放せばいいだけでしょ。
漏れみたいに付き合いたい人だけ付き合えばいい。
あと事情も考えずに「それくらいすぐできるだろ」って自分の感覚を
押しつけるのは嫌われるよ。
400 :
1 :04/11/22 23:11:19 ID:nfI2m+Ps
パッと見ですが、クラスのメンバ変数がpublicになってるのが気になりましたね。
バイナリも挙げてくれよ…
class hogehoge{ ~hogehoge(); } は、デストラクタだと記憶してたんだが、ググると意外と デコンストラクタと書いてあるのもあってビックリである。
404 :
1 :04/11/23 01:20:41 ID:K1HVcn+2
バイナリあげてもろくに動ず。 しかもよくわからんエラーが出るので実行しないほうがいいかと思われ。
少なくともISO/IEC14882:1998には 「destructor」という言葉しか出てこない(当たり前
ちょろっと調べてみますた。 終了時のエラーはCtlBase::~CtlBaseが問題ですね。 ループカウンタとして機能してない(0と1しか消してない)のはおいといて、 h_selfにポインタをコピーしてdeleteすればh_selfはNULLになりますが、 my_obj[0],my_obj[1]の中身は変わらないので その後 h_self = getMyObj(1); // deleteされたはずのアドレスがコピーされてる(not NULL) なんてことになって、同じ領域を2度deleteしてしまってるようです。 やるとしたらこうかな? CtlBase::~CtlBase(){ for (int i=0; i<MAX_OBJ; i++) { if (my_obj[i] != NULL) delete my_obj[i]; } }
俺も育成してください C と DirectX でSLGを作ります
それより… deleteObj無限ループになってないか この方法だとdeleteしたらNULL代入しないとだめだろ deleteしたら意味不明なアドレスを指すはず
409 :
1 :04/11/23 14:26:49 ID:XB2K5hIB
いろいろ勘違いしていたようです。 脳内妄想 1・ポインタmy_obj[0]を同ポインタh_selfにポインタを渡す。 2・h_selfをdeleteした場合、my_objも同じところを指しているので双方が指しているオブジェクトが無効になる 3・h_selfをdeleteすると指し示す先が無効=NULLとなる(妄想) 4・よってmy_obj[0]=NULLとなる(妄想) 師匠方のおかげでだいぶ修正が進みつつあります。 感謝。 俺の理解もそうですが、休み時間にノートに書き散らしたコードをそのまま 持ってきて打ち込む現在の方法にも問題があるかなぁ…。 妄想を助長する気がする。
410 :
1 :04/11/24 19:40:20 ID:KTQqh+/q
これより作業開始します。 そろそろ見せられるものができそうです。
がんがれ
412 :
1 :04/11/25 13:59:13 ID:TYo74lb6
http://f41.aaa.livedoor.jp/~grow/ 師匠!
久々にまともに更新ができました!
といってもまだ途中ですが、シューティング関連オブジェクトを管理クラス
に管理させることはできつつあると思われます。
前回指摘された永久ループなどは解消しました。
修正しながら自分の才能なさにあきれる始末です…。
とりあえず、今回はまだまともに見えるのでバイナリもいれときました。
変な個所があるのはわかっているのですが、まだ修正中です。
(・∀・)チゴイネ! あとシールド追加できればもうインベーダーゲームが作れそう。
これがある程度できたら、もうちょっとゲームっぽく 「タイトル画面」:Press any key to start 「メニュー画面」:Game start、Hiscore ranking 「ゲーム画面」:そのまま 「ランキング画面」:過去のランキング を追加すると、コンソールのゲームとしては完結できるんじゃないかな。 mainにゲームループの処理をまとめて書くんじゃなくて、 それぞれを「シーンクラス」として独立させて、スマートにコントロールできる 方法を考えるのも面白いかもしれません。
404 ファイルが見つかりません …
リンク張りぐらいきちんとしとけ
あった。スマソ コンソールでここまでできるのか…凄いな 本当にインベーダーゲーム作れそうだな
418 :
1 :04/11/25 18:00:37 ID:TYo74lb6
感想ありがとうございます。 現在、敵に弾を打ち込むと挙動がおかしくなる原因がわからず止まっています。 あと、ファイルは時々見つからないことがあるので(直リンクも規制)、 トップページから入ってリンクをクリックして、見つからなくても少し リトライするのがいいみたいです。
移動がおかしいのは Enemyのmove_flgがグローバル変数になってて 各インスタンスに割り当てられてないからぽ。 どれか一つでも端に達すると他のも連動して動いちゃう
これもイージーミスの類だと思うけど、 EnemyのInitにHPの初期化が抜けてて、 HPが0の状態から始まるんでバグってるようです
421 :
1 :04/11/25 19:58:39 ID:AfaWolBE
public どこからでも実行できる private クラス内からしか実行できない protected クラス内及び、継承したクラス内からしか実行できない
423 :
1 :04/11/25 20:57:38 ID:hOm5jC7B
解説ありがとうございます。 残る疑問点としてOBJECT[i]の変数を変更するときに変数がpublicだと OBJECT[i]のほかの変数(この場合move_flg)がいっしょに変更されてし まうのかがよくわかっておりません。 move_flgだけ全体につられて、なぜhpが大丈夫だったのか。 現在調べているのですが、それについて書いてあるところが見つからずに おります。
424 :
1 :04/11/25 21:07:33 ID:hOm5jC7B
↑private やら classやらのキーワードで調べていましたが スコープとかグローバル変数で調べれば出てきそうですね。 ちと音を上げるのが早すぎでした。
class Enemy : public StgObj { public: bool move_flg; }; は、Enemyのpublicなメンバ変数 move_flg;を宣言していることになりますが、 class Enemy : public StgObj { … }; bool move_flg; これはclass Enemyとは関係なく、 ただのグローバル変数を作っているだけになってしまっています。
時間があったのでデバッグに協力しようと思って ncurses に移植しようと思ったんだけど、 コンパイルできねぇです。ファイルは result_7.2'.lzh です。 見つかった警告 CtlBase::update(), CtlBullet::updatte(), CtlEnemy::update() が値を返してないです。 見つかったエラー MyShip::init() 内で使われている show_flg がどこにもないです。
427 :
1 :04/11/25 23:16:20 ID:xMxvM+Qw
>>425 師匠
ありがとうございました。
privateとか、publicとかの話ではなくてスコープの話だったんですね。
スコープも理解しているといいがたいので勉強してみようと思います。
>>426 さん
ありがとうございます
ncursesはわからないので以下推測です。
CtlBaseなどのint update()メソッドが「return 0;」
文で終わっていないのが原因かもしれません(あくまで推測)
あとは現在Ctl〜系のupdateはint値を返す必要がないのでvoidに修正しても
いいかもしれないです。
MyShipは古いコードでもう使われていません(失礼しました)。
MyShipを削除して再度result7_2'.lzhをUPしておきます。
428 :
1 :04/11/26 19:43:56 ID:+Z7tAa+Z
ただいま帰宅しました。 忙しい時期の反動で早めに帰れています。 食事その他を済ませてから作業開始します。 とりあえず今日の目標→インベーダーゲーム (元のゲームやったことないけど)
がんがれ。 インベーダ完成したらコンソール卒業しても大丈夫かな?
>>429 コンソールと、GDI使った描画に本質的なレベル差は無いよ。
敵管理するとか、シーン切り替えをする部分こそ、レベル差が現れる部分だし。
描画モジュールをうまく分離出来るかどうかだな。
>>1 氏の今までの経過を見るに、案外すぐ出来そうだけど。
432 :
1 :04/11/27 01:29:27 ID:YOo7on7Q
とりあえず敵に弾を出させる処理&当たり判定を実装したのでUPしてみました。 比較用になるかな、程度のソースですのであまり意味はないですが。 とりあえず報告まで。
433 :
1 :04/11/27 02:29:30 ID:SkkWy47N
http://f41.aaa.livedoor.jp/~grow/ あとは急造ですが、敵を隊列で動かすようにしました。
また、敵がまともに弾を撃つようになりました。
これをもとに本家インベーダーゲームをプレイしてそれっぽくしていこうと思います。
この後は急がずにゆっくり変更を加えていこうと思っています。
具体的には以下のとおり。
コメントを整備する。
無駄にpublicになっているものをprivateにする。
オブジェクト配列をlistとする(STL導入)。
シーンごとにクラスに分ける(タイトルとゲーム画面とか)。
他にもやるべきことが何かありましたらご指摘お願いします。
434 :
1 :04/11/27 02:31:50 ID:SkkWy47N
でもって。
そろそろグラフィカルインターフェースに移ってみたいなーと考えています!
>>433 は基礎力増強なので平行して進めていく形で。
やはり、以前師匠から与えられたグラフィックを動かす課題から!?
エンド13:誰にも相手にされなくなって終了。 ゴールおめでとう。
一応見てるけど困ったときに登場するのが正義の味方
>>434 画像の表示はもうやってるようだからWinMain等は流用して、
今出来てるSTGのoutText部分を画像表示に書き換えるだけでGUI化できる悪寒。
もちろん細かい修正は結構必要になるけど。
438 :
1 :04/11/29 20:26:50 ID:4yU6Nc7i
帰宅。 現在、STLで苦戦中です。 基本は解ったと思いますが、クラスのリストがいまいち理解できていません。 テンプレート学習するのでしばらく手一杯かも。 お勧め書籍などあったら教えていただけないでしょうか。
STLならSTL標準講座が良さげ
STL使う上では、コピーや代入が発生するから、 コピーコンストラクタを定義しておかなければいけなかったり、 setやmap等のソートを使うコンテナでは operator<を定義しておかなければならなかったりするから、 最初はポインタを入れるだけにするのが無難かも。
アルゴリズム無視して純粋にコンテナとして使うだけなら ポインタと難易度変わらないのでは。
442 :
7 :04/11/29 22:27:08 ID:O2Y3t2Kd
443 :
1 :04/11/30 20:35:40 ID:Lovi2mTr
Effective STLを買ってただいま帰宅。
全レス再開します。
>>436 師匠
レスがなくてあせっていましたがそういうことだったんですね!
だいぶ安心しました。
>>437 師匠
なんか、
>>439 師匠
早速ありがとうございます!
しかし、本屋に置いていなかったのでとりあえずEffective STL買ってきてみました。
>>440 師匠
実は最初は〜のところで躓いていました(汗
StgObjのポインタを入れようとして失敗していました!
444 :
1 :04/11/30 20:38:08 ID:Lovi2mTr
>>441 師匠
結構難しいですよ、これが!
というか、テンプレートをすっ飛ばしてきたツケが回ってきた模様。
>>7 師匠
最大の本屋と名高いオアゾと秋葉を帰りがけに探しましたが見つからず。
泣く泣くあきらめました…。
地道に探していこうと思います>詳説C++
応援ありがとうございます!
気合で今年中にグラフィックで動くシューティングにしたいです!
>>444 アマゾンで郵送してもらったらいいんとちゃう?
446 :
1 :04/11/30 22:42:52 ID:Lovi2mTr
EffectiveC++は読んだの?
448 :
1 :04/12/02 22:32:41 ID:HKAoz9Im
>>447 さん
EffectiveC++は読んでいません。
というか、STL関連書籍がそれしか置いていなかったから買ってきてみたんですが、
どうやらSTLがすでにわかる人向けだった模様。
使う日まで秘蔵します。
STL…というか、テンプレートはようやくわかってきました。
でもあやしいところもあるので、HPに全てUP(試しソースも含む)
してまとめてみようと思っています。
それが土曜・日曜の作業になりそうです。
ポインタよりテンプレートに壁を感じる…。
>1さん がんばれよ 陰ながら応援してるから。
450 :
1 :04/12/05 21:43:43 ID:vRYhkX9u
>>449 さん
ありがとうございます。
現在作業中ですが、HTMLにまとめていたらだんだん理解できてきました。
以外に人に見せようとしてまとめるといい勉強になるのかも。
451 :
1 :04/12/09 01:26:59 ID:OQVn54xz
今更なんですが質問が。 STLのListで複数種類のクラスを扱うことはできないのでしょうか。 (例・基底クラスStgObjのListを作成。 しかし、Listに実際登録するのはStgObjから派生したクラスA・クラスB) ここまでやってきて、自分の結論としては出来なさそうという結果に落ち着きつつ あるのですが。
>>451 list<StgObj*> list;
list.push_back( new A() );
list.push_back( new B() );
名前がマズかった orz list<StgObj*> objList; objList.push_back( new A() ); objList.push_back( new B() );
できるよ
455 :
1 :04/12/09 20:31:57 ID:QvI2Awo3
>>453 師匠
ありがとうございます!
今やったらできました。
現在インベーダーゲームへ応用中。
自分の理解が完全に間違っていた模様…。
>>454 師匠
できました…。
百聞は一見にしかずというしな ソースを見て正確な理解ができればそれでいいさ
457 :
1 :04/12/10 23:17:50 ID:MH3CMNYz
>>456 師匠
ありがとうございました。
シーズン柄飲み会の連続でばて気味ですが、クリスマス・とイブの2日を
完全オフにしてある(というか必然)のでそれまでゆっくり行きたいと思
います。
…最近遅くてすみません
まだがんばってるのか
459 :
294 :04/12/13 11:19:35 ID:yNdEt/fD
ごめん、exe起動したらガクガクしすぎて何やってるんだかわからん。
461 :
1 :04/12/13 23:32:14 ID:D5VUahDp
>>294 久しぶり。
同じく何をやっているかわかりません…。
しかし、実は俺より先に進んでいるのか!?
現在、こんなことやってます。
1・自機に対して当たり判定が存在するものlist
2・敵に対して当たり判定が存在するものlist
1は敵と敵弾
2は自機と自機弾、敵自身(敵同士で重ならないように)を登録。
それぞれに処理をさせます。
障害物とかもこれで処理できるかな、と考えています。
2つのリストに同じオブジェクトを登録することがあるため(障害物や敵は双方
に登録を想定)、オブジェクトは自身の登録個数を持っています。
で、Listからeraseするときには必ず「stgObjErase」メソッド(listから
eraseした上でオブジェクトの登録個数を減算し、0になるとdeleteする)を呼
び、オブジェクトの登録個数が0になるとdeleteするようにします。
…と、例によって構想で現在はstgObjEraseメソッドがエラー出してます(汗
>>1 氏のようにCを極めずにWinAPIを勉強してる漏れはお呼びでないかな…
>>461 それは参照カウンタというブツで、ポインタの制御に良く使われます。
自分で作るのもいいのですが、boost::shared_ptrというのがまさに参照カウント型のスマートポインタで、
1氏が考えているように、自身の参照個数を保存して、参照がなくなった時点で自動的にdeleteしてくれます。
参照カウントの実装はコピー時に上げ下げしたり、マルチスレッド時にロックしなければいけなかったり…と面倒なので
とりあえずはshared_ptrを使うべきかと思います。
(ちなみにshared_ptrを使えば、明示的なdeleteはプログラム中からほとんど消すことが出来ます)
自作するのでしたら、More Effective C++に参照カウント型スマートポインタの構造が長々と書いてあるので
それを一読してみると良いかもしれません。
>>462 そういう方法もありでは。分からなくなってから勉強するのでも遅くはないです。
ただ効率が良いか悪いかは分かりませんが…
いや、それもありだと思う。 正直、絵と音が出ないとモチベーション下がるっしょ。
465 :
294 :04/12/14 08:07:54 ID:2k9wEzOX
説明が足りませんでした。 最大化すると動くはずなのですが、自分のパソコンに合わせて作ってあるので それでもがくがくする場合は、MAX_Y を小さくすれば動くと思います。 自分は先頭のリストは、消せないようにしているのですが、 消せたほうが軽くていいのかな? 参照カウント型スマートポインタ調べてきます。
スマートポインタやろうとしたけど よく考えたらC#でいいじゃんと思って 今に至る。
>>294 ちゃんとショットが弾幕になってるのに驚きました
(・∀・)イイ!!
>>467 ワロタ
確かに画面が弾幕で無茶苦茶だなw
>>468 縦に引き延ばせば普通のSTGのショットになるYO
470 :
294 :04/12/15 22:09:02 ID:x/IZ5sQ8
>1 さん、勉強が進んでるとかじゃなくて、 育成?された順番が違うだけかと思いますよ 自分のソースは、動くだけで中身ぐちゃぐちゃな気もしますし 自分も絵を出したくなってきちゃいました。 API勉強してきます
471 :
1 :04/12/15 22:15:01 ID:ITq1pLqg
今日は早めの帰宅(最近毎日報告じゃないですが)
>>463 さん
アプローチ方法は人それぞれ。
このスレでも「絵からいけ派」・「基礎をやれ派」がいたよ。
>>463 師匠
そんな便利なものが…というか、以前スレで師匠が紹介していた!
boost導入してみます!
>>294さん
くそ、追い越されないように気合を入れないと!
あと実は、例のプログラムがまだちゃんと動いていない…。
>>466 さん
C#…言語としてよく知らないが、ポインタ関連が便利になっているのかな?
472 :
1 :04/12/15 22:43:54 ID:ITq1pLqg
今日は早めの帰宅(最近毎日報告じゃないですが)
>>463 さん
アプローチ方法は人それぞれ。
このスレでも「絵からいけ派」・「基礎をやれ派」がいたよ。
>>463 師匠
そんな便利なものが…というか、以前スレで師匠が紹介していた!
boost導入してみます!
>>294さん
くそ、追い越されないように気合を入れないと!
あと実は、例のプログラムがまだちゃんと動いていない…。
>>466 さん
C#…言語としてよく知らないが、ポインタ関連が便利になっているのかな?
473 :
1 :04/12/15 23:30:04 ID:QDdj0b/w
うわ、2回送信している…orz
STL覚えつつboostまで手を出すとは。 いっそのことlambdaまでいっちゃおうぜ。
shared_ptrはとりあえず使っておいて損はないからな。
さっさと挫折し…… ……もう既に挫折していた ○| ̄|_
477 :
294 :04/12/20 21:24:35 ID:pboCxoIu
>1さん のソース見れました。 ノートンが邪魔して見れなかったみたいです。
478 :
294 :04/12/20 23:36:03 ID:pboCxoIu
LoadBitmapは既に旧APIとなりつつあります。 猫プロを参考にされたのかもしれませんが、LoadImageを使った方が無難でしょう。 ちなみにどうも気まぐれにIDI_STAGEという名前がコンパイルできないようです… (名前を変えて戻すと動いたりする) 試しに.rcファイルとmain内の「IDI_STAGE」という名前を変えてみてはいかがでしょう。
>>479 猫んとこでもLoadBitmapはLoadImageに取って代わったって解説してなかったっけ?
まだ使えるけど
>>478 これ、BCCFormで作ったでしょ?
自分も今日同じ事してたんだけど、どうも表示されないと思ったらリソースが原因だった。
BCC Developerを使うより、VisualC++2005 Expressを使った方がいい気もする… リソース管理等々が統合されてるし。
>>482 そりゃ当たり前でそ…
貧乏より金持ち、不健康より健康の方が。
いや両方ともタダなんだから、 同じ貧乏でも健康な方がってことデス
そういえばVisualC++2005 Expressはタダだね。 勘違いしてたVisualC++2005はまだ売ってないね…
486 :
294 :04/12/21 00:52:12 ID:GbpPB8D2
LoadImage に変えて、名前も変えましたが動きません。 ほかにもに間違えがあるのかも。 BCCForm使ってます >481さん どのように対処しましたか?
>>486 とりあえず、パスが
"C:\---\----…"
になってるようだけど、正しくは
"C:\\---\\----…"
だと思いマス
>>486 猫で使ってたリソースそのままコピペで貼ってファイル名だけ変えた。
要するにVC++のリソースエディタが生成した奴ね。
今のところそれ以外わからない…
>>487 それ直しても変わらなかった。
というより、VC++とBCCFormの作るリソースじゃあまりに構文が違い過ぎる気がする…
それでも今まで使えてたのも謎…
うちではパスを直して、名前を変更したら動きましたが
491 :
294 :04/12/21 01:35:34 ID:GbpPB8D2
解決しました。 MAKEINTRESOURCE の書き忘れでした。 ありがとうございます。
492 :
1 :04/12/23 16:34:32 ID:6+ofxhZh
ようやく形になってきました。 26日にはアップします。 294さんのおかげで自分のソースを根本から見直す気になりました。 ちなみに文字のみ弾幕シューになってます。 三角関数の再勉強が目下の課題(汗
493 :
1 :04/12/25 22:25:45 ID:MpQ27gIG
一応作成中、26日に間に合わせるにはスマートポインタ導入などを見送ったほうが よさげ…orz 最近遅くてすみませぬ。
>>493 年末だし急ぐ事はないでしょ
マターリがんがれ
495 :
1 :04/12/27 00:00:23 ID:nJs+mUuQ
まだやっているワナ… 俺才能ないのかも…。
>>495 ゲーム作りに才能なんて必要ない。
必要なのは知識と経験だけ。
続けていれば、そのうち頭に浮かんだものを簡単に形にできるようになる。
鉄棒や英語と一緒で、一足飛びに上達したりはしないもんだよ。
〆切も大事だが、続けることのほうがもっと大事だ。
焦らずいこう。
497 :
1 :04/12/27 01:54:41 ID:UKQVAaiv
>>494 さん、496さん
ありがとうございます。
今日はもうだめぽ…明日の仕事のため寝ます。
明後日までにできなければつくりかけをUPします。
と予告して自分を追い込むー。
498 :
294 :04/12/27 15:14:08 ID:92AJ3CZU
>>294 ムズい!けど面白い(*´д`*)ハァハァ
タイルのアニメーションはタイルを別クラスで管理した方がやりやすいと思いますです。
浅知恵ですが、タイル描画は
if (m_pStage[iy][ix] == 0) continue;
int bmpPos=0; // tile.bmp上の位置(y座標)
int mod=0; // 位置補正
int animation[8] = {0,4,6,4,0,4,6,4};
if (100 <= m_pStage[iy][ix] && m_pStage[iy][ix] <= 103) {
bmpPos = 128 + 16*(m_pStage[iy][ix]-100);
} else if (110 <= m_pStage[iy][ix] && m_pStage[iy][ix] <= 113) {
bmpPos = 192 + 16*(m_pStage[iy][ix]-110);
} else {
bmpPos = 16*(m_pStage[iy][ix]%8);
mod = animation[m_pStage[iy][ix]%8];
}
BitBlt(hdc_off, TILE_POSX+16*ix, mod + TILE_POSY+16*iy, 16, 16, hdc_mem, 0, bmpPos, SRCCOPY);
と書けるのではないでしょうか。(行数の関係で縮めたので見づらいですね…)
せっかくですから、オフスクリーン描画を使ってちらつきを無くしてみては
500 :
499 :04/12/27 16:08:48 ID:DotxQdES
何となくオフスクリーン使うようにした残骸が残っちゃってました・・・orz hdc_off→hdc で
語感からして、直感ヒトフデの移植版? ルールがわからん。
502 :
294 :04/12/28 11:49:46 ID:xU5Dc145
>>294 ところでSelectObject(hdc_mem, hBmp);のコメントが「?」になっていたので補足しておくと、
デバイスコンテキスト(DC)は、プログラムとデバイス(モニタやプリンタ)の橋渡し役で
「プログラムがデバイスに書き込む」 という直接の処理ではなく
「プログラムがDCに書き込む→デバイスはDCから読み込んで処理をする」
という流れにより、プログラムからデバイスを意識しなくて済むようにするための仕組みです。
このおかげで、対象デバイスがモニタだろうがプリンタだろうが意識せずに描画が出来るわけですが、
代わりに、どんな画像データを書き込む際にも、DCを経由しなければいけない
という制約が出来てしまいました。(GDIやGDI+では)
ビットマップ画像も例外ではなく、DCを経由してBitBltに渡さなければいけません。
ところでHDCはただの情報を格納する構造体で、
BitBltやTextOutといったAPIで画像データを書き込む際、実際のデータはHDCが持つ
ビットマップハンドルに書き込まれることになります。
ところが、DCをCreateCompatibleDCで作成した直後には
DCはビットマップ情報を持っていません(正確には1×1のモノクロの点を持っていますが)
何もないDCからデータを読み出すことはできませんから、
ビットマップ画像のデータをDCに割り当ててやる必要があります。
その操作が
SelectObject(hdc_mem, hBmp);
です。
これでhdc_memはhBmpを「実際のデータ」として持つことになり、
BitBlt等のAPIでhBmpの中身を読み込めるようになるわけです。
ってもう解決済みだったらスンマソン
504 :
294 :04/12/28 23:37:19 ID:/Pzi99YN
>503さん、ありがとうございます。 それで SelectObject を消すと1個前のbmpが表示されたわけですね。
505 :
294 :04/12/30 03:27:09 ID:Vdxbn1+8
オフスクリーン分かりません。
DirectX を使用するということですか?
>1さん、
>>472 の例のプログラムってなんでしたっけ?
記憶力ないもので。
えーと、画面がちらつくのは描画が逐一見えてしまうからなので、 一度オフスクリーン(裏画面とも)に書き込んで、最後にまとめて転送するようなやり方を指してます。 DirectXを使うわけではありません。 CreateCompatibleDC CreateCompatibleBitmap でウインドウと同じサイズの(メモリ上の)描画領域を作ってやって、 そこにデータを書き込み、最後にBitBltで本来のウインドウ上に転送してやる、というやり方を取ります
507 :
294 :04/12/31 05:59:26 ID:lhHQA28R
申し訳ないです。 まったく分かりません。 CreateCompatibleDC でオフスクリーンを作って CreateCompatibleBitmap でサイズを変更して BitBlt でオフスクリーンに描画して すべて描画し終わったら、 BitBlt でスクリーンに描画するということですか? CreateCompatibleBitmap の戻値がHBITMAPだからこれがオフスクリーンなのかな? 見当違いなこと言ってたら、ごめんなさい、
508 :
294 :04/12/31 07:19:15 ID:lhHQA28R
解決しました。 何度もアホな質問してしまって申し訳ないです。 来年もよろしくお願いします。
509 :
294 :05/01/07 15:53:09 ID:DjjHZ5Tz
何を読んでもわからないのですかね
ところで、1はあきらめたのか。
最後のレスが俺の誕生日だ…。
513 :
294 :05/01/12 18:12:51 ID:1EEi3oWF
レス遅れて申し訳ないです。 ブロックは、すきやきのアルゴリズム です。 リソースエディターは、実力不足?どの関数を使えばいいのか分かりません。 不勉強ですね。 探してきます
514 :
名前は開発中のものです。 :05/01/30 17:42:50 ID:M4/vu68b
age
515 :
名前は開発中のものです。 :05/01/30 17:49:27 ID:ItSOmYfP
誰かしゃべれよ
516 :
名前は開発中のものです。 :05/01/30 18:41:24 ID:Pe/S8lF7
518 :
名前は開発中のものです。 :05/01/31 02:11:04 ID:dk4MRPJZ
519 :
名前は開発中のものです。 :05/01/31 02:55:55 ID:dk4MRPJZ
最初はやる気があるようだったんだがなあ
520 :
(´Å`)無謀厨アラウサ ◆nbiQZRaAHo :05/01/31 21:43:38 ID:+TxjodOv
521 :
(´Å`)無謀厨アラウサ ◆nbiQZRaAHo :05/01/31 21:47:36 ID:+TxjodOv
さて次はロボット描かないと
>>520 このままでは挫折するのも時間の問題だが、優秀なリーダーのいる同人チームに
拾われればそれなりの活躍が出来るだろう。
523 :
(´Å`)無謀厨アラウサ ◆nbiQZRaAHo :05/01/31 22:20:00 ID:+TxjodOv
>>522 私の画力は製作レベルにぜんぜん達していないんで
まあ気長に頑張りますよ
なんかこの手のゲーム作るスレが無かったんですよね
>>525 プログラマじゃないのでノータッチ。
複数人で作るスレ立てようと思ったんだけどスレ立てれなかったんで
ここを再利用しますた
おいゲーム製作者の育成だろ
つーことはプログラマとセットじゃないといかんわけですか。 誰かいないかなぁ・・・ 誰かが名乗りをあげるまでここで画面の開発&練習しててもいいですか?
廃墟だしいいんじゃない
>>529 ゲ製板には着たばかりなのでそう言ってもらえると有難いです
腕前が腕前なので一気にってのは無理ですが頑張ってちょこちょこ更新します
まあ、期待しないで待っていよう。
スパロボ系か 作るならプログラマの腕がかなり要るぞ ほんとに期待しないでいるよ
534 :
名前は開発中のものです。 :05/02/01 14:12:36 ID:djMYk4yx
百式に見えるぞ
535 :
リルム :05/02/01 14:50:04 ID:/sjbLrZF
>>アラウサ とりあえず、どんなメンバーを募集しているか書いたらどうだ?
>>533 >スパロボ系か、作るならプログラマの腕がかなり要るぞ
個人的にはロボット描けるいろんな絵描きが参加できるようなものにしたいので
敵の思考ルーチンは要らんと思います
機能は極力絞ってシンプルなものに、しかし駆け引きが出来る感じのがいいですね〜
大航海時代2の戦闘みたいなの
>>536 プログラマーと曲作れる人と絵描ける人。
私の実力が実力なので練習しながら気長に待ったり探したりしますが
壮大な方向には絶対持っていかないという条件でなら何人でもOKだと思います
ちなみに私の住まいは北関東。 メアドは
[email protected]
>>537 システムはプログラマ任せ?
ある程度の叩き台用意しないと人はついてこないような。
叩かれ台なら用意してるようだがな。
541 :
(´Å`)無謀厨アラウサ ◆nbiQZRaAHo :05/02/03 21:28:22 ID:js2A7zKz
てめー! こんだけの色塗るのに二日もかけたのかよー!!!
時間がかかったのはむしろ描き直した線画。 Painter買って使い方を覚えてたのもありますけどね。 ワーク力はたしかにまだまだ高めないといけませんね Painterで手早く塗る方法も探さないと〜
Painterならまかせろ! わからない事があったらいつでも聞け!!!
そのSSだけで作れといわれてもな 対戦相手はどういうふうに画面にでるか 攻撃の際ロボットはどういう風に動くか 具体的に書いていかないと ○○みたいなのでお願いじゃ普通通用しない 人に頼むならね
要するに、俺の絵を使ったスパロボみたいなゲーム作ってください。 ってことだろ?
一日二日で企画するのも無理ですし、ま、ひとつずつ埋めてきましょ >対戦相手はどういうふうに画面にでるか 左右にスクロールする感じで画面切り替えが妥当じゃないでしょうか。 >攻撃の際ロボットはどういう風に動くか 動くのはロボットじゃなくて背景のほうがメインになるんじゃないでしょうか 攻撃は絵描きが頑張ってコマ送りで描く、と。絵描きが未熟なら >要するに、俺の絵を使ったスパロボみたいなゲーム作ってください。ってことだろ? 不特定多数のロボット描きが参加できるものが出来ればいいので 別に私の絵が使われなくてもまったく構いません
おっと、文章が途中で切れてる。 絵描きが未熟なら →絵描きが未熟ならまあ弾丸とかビームとか共用で使える素材を用意するとか
PGや絵描き次第では結構質素になるけど 育成スレッドだしそれもまぁいいかもしれませんね
つーか、素材集にしかならん気が。
>不特定多数のロボット描きが参加できるもの どういうこっちゃ? ネットワークで接続して、自分のロボ絵をアップロードしてオンラインロボット大戦すんの? それとも単に絵描きを多人数使った普通にオフラインな簡易ロボット大戦?
まぁ素直にSLGツクールでも使えといっておこう。
>ネットワークで接続して、自分のロボ絵をアップロードしてオンラインロボット大戦すんの? そういうのが出来ればいいけど休日使ってそういうのを作ってくれる奇特な人がいるかどうか・・・ >単に絵描きを多人数使った普通にオフラインな簡易ロボット大戦? 配布型であとからいくらでもキャラやらロボットを追加できるならそれもいいかもしれませんね もしくはシュミュレーションRPGもしくはカードゲーム。 戦闘画面を中心に組み立てるのがいいんではないでしょうか まぁいいや、今日はもう寝ます、おやすみなさいノシ
>>553 どれくらいのができるかちょっと調べてみますね
きっちりした全体の仕様を出して作ってもらうか。 他のディレクターの下で作業するか。 ツクール使って自分の好きなようにやるか。 いずれにしてもグラフィッカーやるつもりなら まだ絵の練習に専念するべき段階だよ君は。
うん 素材集が出来て終わりだろうなぁ アラウサはSLGツクールで製作を開始するも行方不明音信不通
558 :
漏れ太郎 :05/02/06 18:42:24 ID:3cMuB8A8
漏れも育成してほしいのだが、スレおわってるーか?
このスレみりゃわかるが 結局自分でやるしかないよ 幼女でもないのに 育ててもらおうなんて姿勢が腐ってる
560 :
漏れ太郎 :05/02/06 19:02:54 ID:3cMuB8A8
はぁ・・・・・。
561 :
漏れ太郎 :05/02/06 19:04:19 ID:3cMuB8A8
講座とか探しても、いきなりしらない言葉とかでてくるんです;;
562 :
漏れ太郎 :05/02/06 19:09:29 ID:3cMuB8A8
誰か一から教えて〜と終わったスレで言ってみる。
563 :
漏れ太郎 :05/02/06 19:10:19 ID:3cMuB8A8
そして、終わったスレとかいいながら、少し期待してみる。
564 :
名前は開発中のものです。 :05/02/06 19:25:33 ID:HfMk/eKX
教えるが、途中で挫折するのに50万ペリカ。
566 :
漏れ太郎 :05/02/06 19:51:09 ID:3cMuB8A8
HSPおせ〜て>>563
567 :
漏れ太郎 :05/02/06 19:54:25 ID:3cMuB8A8
ちなみに、いっちばん最初からお願いします。
まず
ttp://www.google.ne.jp/ へアクセスして、「hsp」という単語を入れて検索する。
出てきた検索結果の一番上のページに飛び、hspをダウンロードする。
次に「hsp 入門」という単語で検索し、検索結果を上から順にざっと見てゆく。
自分でも理解できるレベルだと思ったページがあれば、そこの講座を順に
熟読して、自習する。
まずは文字を表示するプログラムを作れ。
そしてアップロードするのだ。アップロードの仕方も分からなければgoogleで調べろ。
569 :
漏れ太郎 :05/02/06 20:02:11 ID:3cMuB8A8
あと、レス遅れスマソ。m(_ _)m
570 :
漏れ太郎 :05/02/06 20:03:46 ID:3cMuB8A8
それは、printや、mesのことでしょうか?
572 :
漏れ太郎 :05/02/06 20:15:00 ID:3cMuB8A8
アップローダー使ったら、そのファイルはアップロードできませんでした。;; だから、ここでかきます。 print "どうですか?" stop
573 :
漏れ太郎 :05/02/06 20:17:04 ID:3cMuB8A8
ここではtabkeyつかえませんでした。
574 :
漏れ太郎 :05/02/06 20:24:53 ID:3cMuB8A8
それをできるファイルさがすのが課題でしょうか!?((;゚Д゚))
575 :
漏れ太郎 :05/02/06 20:26:13 ID:3cMuB8A8
ファイルじゃなくて、アップローダーだった。^^; 一様、1さんルールにつき、師匠といいます。師匠。
>>572 合格。ただ作者はprintよりmesを勧めていたようないなかったような、間違ってたらすまん。
まぁmesもprintも中身一緒だから問題ない。
ロダは…必要になったら用意すればいい。しばらくはここに書けば事足りる。
次の課題、変数を理解せよ。
a="どうですか?"
mes a
stop
このソースの意味がわかるまで居残りな。
( ゚д゚ )
m9| y |)
577 :
漏れ太郎 :05/02/06 20:32:47 ID:3cMuB8A8
どうですか?と表示されます!居残り免罪か!?
578 :
漏れ太郎 :05/02/06 20:39:17 ID:3cMuB8A8
ちなみに、a="どうですか?"だから、ソースにaとするだけで、その、どうですか?が表示されるんですよね。
実行せずに結果がわかったのなら合格。免罪オメ HSPの変数には文字列型と数値型がある。 (゚д゚ ) (| y |) 次の課題 a=5 mes a+7 stop これでどう表示されるか、理解し、応用して何かソースを書け。
580 :
漏れ太郎 :05/02/06 20:41:45 ID:3cMuB8A8
a=7 mes a+9 stop ↓ 16と、表示されます!あってるかな・・・・。
>>578 ソース中で、aという文字が数字と等価として使える…というべきか、上手い形容が思いつかん。誰か補完頼む。
変数が入れ物であることを把握していれば良し。
582 :
漏れ太郎 :05/02/06 20:43:16 ID:3cMuB8A8
一個しか記憶できない用語登録の数字だけみたいなもんですかね?師匠!
583 :
漏れ太郎 :05/02/06 20:44:05 ID:3cMuB8A8
ていうか、意味不明だったかな。
>>580 正解。
次はちょっと特殊な文字列型だ
a="456"
mes a+"123"
stop
どう表示されると思う?
(゚д゚ )
(| y |)
585 :
漏れ太郎 :05/02/06 20:45:13 ID:3cMuB8A8
456123ですか?
586 :
漏れ太郎 :05/02/06 20:47:56 ID:3cMuB8A8
この、レスがくるまでの時間・・・・・。ミリオネアのみのもんたが難しい表情をしている時間のようだ・・・。((o(´∀`)o))ワクワク
正解。優秀だ。 (゚д゚ ) (| y |) これを応用して picload "graphics"+filename+".bmp" ということが可能なのをよく把握しておきたまえ。 ( ゚д゚ ) m9| y |) ところで、俺はSTGを作ることを最終目標に語ってるんだが…良いのか?
588 :
漏れ太郎 :05/02/06 20:54:19 ID:3cMuB8A8
はい。最初はシューティングや、落ち物がいいときいてましたから、どっちかを、希望してました! picloadとはどういうことだしょうか?師匠! \/ ,o/ lミiニ!
>>588 ふむ、好奇心旺盛ないい生徒だ。
picloadはファイルの画像を現在の画面に読み出す命令だ。
ゲームを作るときにまず使う命令なので真っ先に覚えておいて損は無いだろう。
(゚д゚ )
(| y |)
ついでに文法も覚えておくよう
( ゚д゚) picload p1,p2,p3
(\/\/
説明面倒だから自分でヘルプ引いてくれ。
590 :
漏れ太郎 :05/02/06 21:02:51 ID:3cMuB8A8
親てきに寝ます。スマソ。明日は5時から8時までいけます。
591 :
漏れ太郎 :05/02/06 21:03:54 ID:3cMuB8A8
ヘルプみときます。
592 :
漏れ太郎 :05/02/06 21:05:51 ID:3cMuB8A8
先生明日もこれますか?
ん、わからんことは遠慮せずに俺に聞くといい、向上心のある奴は好きだ。 (゚д゚ ) (| y |)
594 :
漏れ太郎 :05/02/06 21:10:32 ID:3cMuB8A8
では、おやすみなさい。 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ □□□□□□■□□□□□□□■■■■■■■■□□□□□□□□□□□■□□□□□■□□□□■□□□□□□□□□□□□□□□□ □□□□□□■□□□□□□□■□□□□□□■□□□■□□□□□□□■□□□□■□□□□□■■■□□□■■■■■■■■■□□ □■■■■■■■■■■■□□■□□□□□□■□□□■□□□■■■■■■■□■□□■□□■□□■□□□□□□□□□□■□□□ □□□□□□■□□□□□□□■□□□□□□■□□□■□□□□□□□■□□□□■■□□■■□■□□□□□□□□□□■□□□□ □□□□□■■■□□□□□□■□□□□□□■□□□■□□□□□□□■□□□□■□□□□□■■□□□□□□□□■■□□□□□ □□□□■□■□■□□□□□■■■■■■■■□□□■□□□□□□□■□□□■■■■□□■□□■□□□□□□□■□□□□□□ □□□■□□■□□■□□□□■□□□□□□■□□□■□□□□□□□■□□□□□■□□■□■□□■□□□□□□■□□□□□□ □□■□□□■□□□■□□□■□□□□□□■□□□■□□□□■■■■□□□■□■□■□□□■□□□□□□□□■□□□□□□ □■□□■■■■■□□■□□■□□□□□□■□□□■□□□■□□□■■□□■□■□■□□□□□□□□□□□□■□□□□□□ □□□□□□■□□□□□□□■□□□□□□■□□□■□□□■□□□■□■□■□■□■□□■□□□□□□□□□■□□□□□□ □□□□□□■□□□□□□□■■■■■■■■□□□■□□□□■■■□□□□□□■□□□□□■□□□□□□□■■□□□□□□ □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
595 :
漏れ太郎 :05/02/06 21:11:43 ID:3cMuB8A8
(ノ∀`)アチャー失敗。まあいいや。 ってわけで、うめるためにながいスレ〜〜。
596 :
漏れ太郎 :05/02/06 21:12:47 ID:3cMuB8A8
は ず か し
もって1ヶ月ってところだな
598 :
生徒。 :05/02/06 23:16:47 ID:xfkzeOM+
私にも教えてくださいな。漏れ太郎と一緒に頑張ります! とりあえず今までの部分は全て理解したので今日は寝ます。
おお、生徒が。先生こそよろしく。向上心があって良いな。 (゚д゚ ) (| y |)
>>597 馬鹿。一週間くらいだろ。
そもそも、本当に作る気があるならこんなところで変数の扱いとか、やりとりしてない。
まあ、その上に教えてと教えるのやりとりしてるんだから、別にいいんだがな。
自分で調べたほうが早そうだな…。 まぁ、動きがあって面白いからみてようっと。
>>601 んだな、リアルタイムで聞いているほうが頑張れるかも知れんけど
手っ取りばやく技術つけたかったらググったほうがずっと早い。
そういや、5時〜8時とか言ってたな、小学生か?
ところでアラウサはどうなった?
( ´∀`)∩ <先生、今回の課題は何ですか?
アラウサは何も出来ない厨房 いらね
607 :
生徒。 :05/02/07 19:11:04 ID:IH8buJZy
598です。名前入れてませんでした。
やる気のある良い生徒だ。
本来ならここで配列などもっと基礎的なことを覚えるべきなんだが
せっかくのHSPだし、まずは見えるものが作りたいことだろう。
よって始めの課題は画像を表示すること、とする。
(゚д゚ )
(| y |)
といっても、画像を用意するのマンドクセということにもなるだろうし、こっちでサイズも指定したいのでこちらで用意した。
(゚Д゚ )
ttp://with2ch.net/cgi-bin/pict/image-box/img20050207195011.png (| y |\/
自分でbmpに変換して使うように。 ワレナガラチュウクサイコトヲシテシマッタ
ソースが書けたらそのままここに書くこと。
( ゚д゚ )
m9| y |)
昨日言ったpicload命令を使うわけだが、実際に使えるかの課題だ。
全くわからなければヒントをだす
609 :
生徒。 :05/02/07 20:29:07 ID:IH8buJZy
画像の名前はjiki.bmpに変更しました。 picload "jiki.bmp" stop
610 :
生徒。 :05/02/07 20:37:12 ID:IH8buJZy
p2,p3要素は必要なさそうだったので省きました。
611 :
生徒。 :05/02/07 20:39:07 ID:IH8buJZy
連レスすいません、
>>610 はp1,p2,p3 でした
おぉ、優秀だ。ちゃんとそれで画像が表示されることは確認したな。 (゚д゚ ) (| y |) では次の段階に入る。 HSPには使える画面が31個ある。その画面はそれぞれウィンドウ、枠無しウィンドウ、バッファのどれかに設定できる。 ただし、初めから表示されている画面は0番目の画面であり、ウィンドウ以外の設定は指定できない。 screen bgscr buffer この3つの命令についてヘルプを読んで、簡単なレポートをまとめよ。 ( ゚д゚ ) m9| y |) 次の課題だ。
613 :
生徒。 :05/02/07 21:08:09 ID:IH8buJZy
screen ウィンドウIDを初期化して使用できる状態にする。初期化する画面サイズ、画面モードのほか、ウィンドウの大きさと、実際画面に表示される大きさを指定できる。 bgsrc ウィンドウIDを初期化して使用できる状態にする。枠なしウィンドウ。初期化する画面サイズ、画面モードのほか、ウィンドウの大きさと座標を指定できる。 buffer ウィンドウIDを初期化して使用できる状態にする。メモリ上につくられる仮想ウィンドウ。画面サイズ、画面モードは指定できるが仮想ウィンドウなのでbgsrcやscreen命令のような特殊な要素はない。
614 :
生徒。 :05/02/07 21:10:17 ID:IH8buJZy
ウィンドウID0は普通のウィンドウ。 bgsrc や buffer を使うときはウィンドウID2〜31のどれかを使う こんな感じです。
615 :
生徒。 :05/02/07 21:16:05 ID:IH8buJZy
>なお、screenで初期化されたウインドゥIDをbuffer命令で再初期化することはできません。 >buffer命令で画面を初期化した後はそのウインドゥIDが画面制御命令の描画先になります。 と書いてあったのですが、意味がよくわかりません。
ふむふむ。優秀だ。というか、すでにHSP使える人? そうでないのならgsel命令も併せて調べておくよう。簡単な命令だし。 1番ウィンドウはデバッグウィンドウだっけな。手を出さないのが正解だな。 (゚д゚ ) (| y |) では、次の課題だ、優秀なのでだいぶ端折る事にする。 jiki.bmpをbufferとした2番ウィンドウに読み込ませ。gcopy命令で、真ん中の機体のみ0番ウィンドウに表示する。 なかなか難しいが、質問は受け付けるのでがんばれ。
>>615 ふむ、課題を出す前にリロードするべきだったな。
既に表示されているscreenを隠すためにbufferに使って欲しくないんだろう。
隠すのが目的ならgsel ウィンドウID,-1とすれば可能だしな。
おそらくC言語で画像の扱いを統一させるのが面倒だったんじゃないかと推測する。
>初期化したあとはそのウィンドウIDが
buffer 2とすれば、次の画像操作命令(picload,line.psetなど)の描画先は2番のウィンドウになる、ということだ。
つまり、表示される画面(おそらく0番)には表示されない。
618 :
生徒。 :05/02/07 21:43:43 ID:IH8buJZy
buffer 1, 240, 240, 0
gsel 1
picload "jiki.bmp" ,0
gsel 0, 1
gcopy 1, 144, 0, 72, 64
stop
回答を書きました。
>>617 の先生の言葉を参考にすると二行目の gsel 1 は不要ってことですね。
619 :
生徒。 :05/02/07 21:46:42 ID:IH8buJZy
buffer 1 picload "jiki.bmp" ,0 gsel 0 gcopy 1, 144, 0, 72, 64 stop 訂正です。
よし、良いぞ。ただダメ出しをすると ・1番ウィンドウを使ってはいけない ・picloadの第二引数の0は要らない、他人が読むときに意味があるのかと思ってしまう ・gsel 0,1の1も不要。gsel 0でスマートに。 まぁ俺の文法を押し付けることも無いな、下二つは無視するよう (゚д゚ ) (| y |) では次の課題。そのソースに改変を加えて ・pos命令で画像の表示位置を適当な位置に変える ・gmode命令で、黒い部分を表示させなくする
621 :
生徒。 :05/02/07 22:02:01 ID:IH8buJZy
ご指摘ありがとうございます! 問題箇所を修正し、回答を書きました。 buffer 2 picload "jiki.bmp" gsel 0 pos 270, 400 gmode 2 gcopy 2, 144, 0, 72, 64 stop
よし、いいぞ、思ったとおりの回答をしてくれる。画像情報をちゃんと調べているあたりもいい感じだ。 次の課題は難しいぞ。 ・pos命令のp1,p2をそれぞれx,yに置き換える ・描画命令をrepeat loop命令で囲い、awaitかwaitを入れる。 心してかかるように。 ( ゚д゚ ) m9| y |) 質問は受け付ける。
623 :
生徒。 :05/02/07 22:10:33 ID:IH8buJZy
( ´∀`)∩・pos命令のp1,p2をそれぞれx,yに置き換える 先生、課題文の意味がよく理解できません。 これはどういうことですか?
624 :
生徒。 :05/02/07 22:15:17 ID:IH8buJZy
すいません、よく考えたらわかりました!
んー 課題の出し方が悪かったな。つまりは簡単なことだ、昨日の初めのときに mes "どうですか" と a="どうですか" mes a が同じ、というのと同じ要領でやるんだ。 変数を受け入れられるかがプログラマになれるかどうかの重要な一歩だ。
626 :
生徒。 :05/02/07 22:17:25 ID:IH8buJZy
すれ違いすいませんm(__)m 回答を書きました。 buffer 2 picload "jiki.bmp" gsel 0 x=270 y=400 pos x, y gmode 2 repeat gcopy 2, 144, 0, 72, 64 wait loop stop
ふむふむ。よくやっている。 buffer 2 picload "jiki.bmp" gsel 0 x=270 y=400 ここ←──┐ pos x, y │ gmode 2 │ repeat ──┘ gcopy 2, 144, 0, 72, 64 wait loop 後々のためにここに移動させておいてくれ。 君が間違っていたわけじゃない、先生が出した課題に対する君の回答は完璧だ。 (゚д゚ ) (| y |) ではつぎに ・ループ中にx++という処理を加え、次にy--という処理も試して結果を見る。 ・背景をcolor命令とboxf命令を使って黒に塗りつぶす。 ( ゚д゚ ) m9| y |) がんばれよ、質問は受け付ける。
628 :
生徒。 :05/02/07 22:35:33 ID:IH8buJZy
なるほど、xとyの加算と減算の処理をくりかえすためにrepeat命令を 上に持ってきたほうがいいわけですね。さっそく回答を書きました。 自機が動いて感激です! color 0,0,0 boxf 0,0,640,480 buffer 2 picload "jiki.bmp" gsel 0 x=270 y=400 repeat x++ y-- pos x, y gmode 2 gcopy 2, 144, 0, 72, 64 wait loop stop
うーん、ここいらで waitはawait 32ぐらいに置き換えておくべきかもしれん。 あと、colorとboxf命令はrepeat loopの中に入れておくと真価が出てくることだろう。 (゚д゚ ) (| y |) 次はそろそろキーボードに沿って動かすつもりだ。
630 :
生徒。 :05/02/07 22:45:31 ID:IH8buJZy
自機がスムーズに動くようになりました。 awaitについてはよくわからないのでとりあえずまず調べてみます。 時間が迫っているので今日はこの辺で失礼します。 どうもありがとうございました! よろしければまた明日お願いします。では・・・
じゃあまた。 (゚д゚ ) (| y |) awaitは、waitの1/10の細かさ、と考えれば良いだけだ。
>>631 ありがとうございます。
それから、一応トリップを付けておきます。ではまた。
ふむ…乙。 ところで、漏れ太郎は来ないのか。
先生、いますか。 今日の課題はなんでしょう?
おー、来たか。 んじゃ、今回は難しいぞ。 (゚д゚ ) (| y |) だが、ひとつ聞いておくことがある、x,y座標について理解しているか? 理解しているならそれで良い、理解していなければ教える。 それと、stick命令とif命令について予習しておいてくれ。 ( ゚д゚) (| y |)
いえ、理解していません。 stick命令とif命令ですね、わかりました。予習しておきます。
ふむ。ならば昨日の自機の位置は試行錯誤の賜物か。
教えるといっても大したことじゃない、横がxで縦がyと覚えれば良いだけでな。
他の言語では多少変えれるが、HSPでは一番左上がx=0 :y=0だ。そこから、右に1ドット進むとx=1 :y=0。
そこからさらに下に進めばx=1 :y=1となる、上ならyがマイナスになるわけだ。
(゚д゚ )
(| y |)
まぁ1ドットぐらいじゃ見た目にほとんどわからんけどな。
横(x) ( ゚Д゚) 縦(y)
\/| y |\/
この二つの数値によって
( ゚д゚)二次元
(\/\/
と、二次元空間のどの場所も表現できるわけだ。どれぐらいの位置になるかは
…本当にたいしたことにならなかった、ごめんな、ダメな先生で。
今日は必死に動かすぞ。キーボードに対応できるようにする。
先生からの手土産。まずはこれぐらいを目指すんだ。
(゚Д゚ )
ttp://www.hossy.flnet.org/s-bbs/wingmulti.cgi?bbsname=upbbs&mode=down&no=137&oyano=114&fileno=1 (| y |\/
一応こっちでウィルスチェックしてるが、exeを起動するのも怖い話だろうから無理して開かなくていいぞ。
詳しい説明、どうもありがとうございます! 先生からの手土産ですが、内部エラー(13)が発生して正常に起動できませんでした・・・ こちらの環境のせいでしょうか?
すいません、解決しました。 jiki.bmpと同じフォルダに入れたら無事起動できました。
ん、あ。しまった、言ってなかったな。以後気をつける。 (゚д゚ ) (| y |) では本題に入る。 pos x,yと書いてあるから、x,yという場所に自機が表示されるのはわかってるな。 つまり、x,yの値をキーボードにあわせて足し引きすれば、自機がキーボードにあわせて移動する、という理屈はわかるか? そこでキーボードの状態を調べるstick命令が役に立つわけだ。 ( ゚д゚) (| y |) わ、わかるかな、わからなかったら遠慮せずに質問しなさい、せっかくのマンツーマンだしな。
・画面をちらつかないようにする方法 ・キーを離したあと、自機がまっすぐ元に戻る時のアニメーションらしきものの表現方法 ・キーを同時に押したとき自機画像がちらつくのを防ぐ方法 この3点が分かりませんでした。
ふむふむ。感心な生徒だ。よく頑張った。 ソースを読んでポカーンとしてしまった。 (゚д゚ ) (| y |) プログラムは、最小限の労力で最大の効果を発揮するように組むよう心がけると良いだろう。 短いソースなら、バグが出た後も読みやすいしな。 質問に答えるぞ、上から順にな。 ( ゚д゚) (| y |) ・redraw命令を使う事でちらつきは回避できる。 redraw 2を実行し画面の描画を一時オフにしてからすべての画像処理を行い、redraw 1で一気に画面に表示する寸法だ。 ・アニメーションは…コツが必要だ。こちらでは変数を使うことで回避している。追って解説する。 ・一つ目の問題解決でおそらく解決することだろう。斜めに移動する場合それだけの回数自機を消して描画しているから発生している問題だ。
アニメーションについてはだな。 ・まず、gcopyの描画元のxの値を変数に置き換える。 ・その変数の値を自機移動の時のようにキーボードに対応して変化するようにする。 ・その変数の値が大きすぎたり小さすぎたりしないようにif命令で修正する。 こういう状態になっている。ソースを見せたほうが早いが、力をつけるため自分で考えさせる方針だ。 なかなか難しいぞ、変数をそのままは使えないからな。 ヒントはいくらでも出すし、ギブアップなら言ってくれればソースを見せよう。 それと、ifの移動判定の中はシンプルにしたほうが良いぞ。
この問題は難しいっす; 考える時間をください。今日はここまでしか無理っぽいです。 また次来るときまでに(おそらく明日かな・・)分からなければ質問します。 今日もありがとうございました。では、また。
おう。お疲れさん。 プログラムの技術を上げるには、悩むのが一番良いという先生の持論を押し付けてる形になってしまったな。 まったりとやっていくと良い。今週中には背景の星と自機弾までいけたら良いなと思っている。 ( ゚д゚) (| y |)
647 :
漏れ太郎 :05/02/09 09:08:11 ID:1g/9LXp5
テスト。
648 :
漏れ太郎 :05/02/09 09:18:35 ID:1g/9LXp5
ヤターーーー先生!!アクセス規制になってますた!!(荒らしにIDがにてるとかで。 生徒。の出来具合はどうでしょうか?漏れは、全然TOTpicloadが、できませんでした(´Д⊂グスン画像ファイルがありません。ちゃんと保存はしています。
うんうん、生徒くんが漏れ太郎に教えてあげなさい。
人に教えることでさらに自分の理解も深まるからな。
(゚д゚ )
(| y |)
そのソースを読んだのだが、変数の応用に付いて理解すればあとの成長は早いことだと思う。
ifを「もし〜なら…したい」という命令だと考えてそのまま使ってしまうとややこしいことになってしまうんじゃないか。
( ゚д゚)
ttp://www.hossy.flnet.org/s-bbs/wingmulti.cgi?bbsname=upbbs&mode=down&no=138&oyano=84&fileno=1 (\/\/
先生のソースだ、人に見せられるほどのものでもないが頑張ってコメントをつけて読みやすくしたつもりなのでじっくり読んで欲しい。
ここで先生が新たに使っている命令は dim rnd gosub だが、背景の星を流す処理を無視すればgosubのみだ、基本的な命令なので覚えておこう。
できる限り同じような処理を書かないように気をつけ、合理的なコードを書くよう心がけると良いだろう。簡単なほどデバッグがしやすい。
また、if命令で無茶をするというのはプログラムを始めたばかりの人がよくやる手段で、それによってコツがつかめたという人も少なくないので、君の苦労も無駄じゃないぞ。先生も昔は変数を把握しきれず500行以上の読みにくいコードを書いていたものだ。
( ゚д゚ )
m9| y |)わからないことは質問するよう。
質問です。
mx=key&4
>>2 -(key&1)
この行について、mxに代入しているというのは分かるのですが右辺の式の意味することが分かりません・・
ふむ…、そこに目を付けるとはなかなか感心だ。
無理に理解しなくても良いぞ。この場合。
if key&4 :mx=1
if key&1 :mx=-1
と同じ効果を出している。
key&4
>>2 は、keyの値に4が含まれていたら1と評価される。
key&1は、keyの値に1が含まれていたら、1と評価される。
この部分を良く考えれば、これで左右が検出できることがわかるはずだ、yの場合も一緒だ。
ビット演算という奴でプログラムをやっていくうちにいつか出くわすだろう。数値を2進数に直して考えるんだが…すまん、先生が教えるより検索したほうがずっとわかりやすそうだ。
( ゚д゚)
ttp://www.kumei.ne.jp/c_lang/intro/no_40.htm (\/\/ こういうところで解説している。
まだ2進数がわからなければ無理することも無いと思う。
なるほど、わかりました。ありがとうございます。 今はまだ使いこなせそうにないのでとりあえずifの形でソース書いていきます('0')
漏れ太郎はどこまで行ったかな。 では次に背景の星について説明する。 ここでの背景としての価値は低いかもしれないがこれにはゲームに必要不可欠な「複数のオブジェクトを扱う」という技術が使われている。 dim命令は配列変数を用意する命令だ。 例えばdim a,32と書けば変数がa.0 a.1 a.2 a.3 a.4…a.31と、合計32個の変数が作られる。 ( ゚д゚)a.0 a.1 a.2 a.3……a.31 (\/\/ と、a.32が出現しないのに注意だ .←の後の数字には変数が使用できる。 repeat loopの間ではcntという変数がHSP側から用意される、cntは「その処理がrepeat loopの何週目か」をあらわしている。 repeatのp1は、繰り返しの回数を表すぞ。repeat 32と書けば、32回処理が繰り返され、cntの値は0〜31へと増加する。 cntはcounter(カウンター)の略だと先生は踏んでいる。もし違っていたら誰か訂正してください…。 rnd はもっと簡単だ rnd a,32と書けば、aの変数に0〜31の32通りのうち一つがランダムに選ばれ代入される。 星の位置をバラバラに置くために使用している。 これまでの説明でわからないことがあれば聞きなさい、無ければそういってくれれば話を先に進める。 ( ゚д゚) (| y |)
おっと、continueという命令を新しく使ってるので覚えておくように。 dim shotf,shotmax //これは、ショットが存在するかどうかを表す変数だ(有る=1 無い=0) dim shotx,shotmax :dim shoty,shotmax //ショット画像の位置を表している dim shotmx,shotmax:dim shotmy,shotmax //ショットの移動量を表している、ここの値を変えることで横や斜めに飛ばすことも可能だ。
659 :
漏れ太郎 :05/02/10 11:40:11 ID:aaesb0mH
風邪気味です(||´Д`)o=3=3=3 ゴホゴホ まぁそんなことはおいといて、ソースファイルってどこですか?HSPを起動するやつですか??そこにおいたけどできません(´Д⊂グス
ソースファイルってのは、命令を書いたファイルだ、拡張子はas。 どこ…と言われてもスクリプトエディタで保存するものだから…。 ( ゚д゚) (| y |) デスクトップにでもフォルダを作り、そこにソースファイルを保存して、そこに同じく画像も置けばおそらく正常に動作するはずだ。
661 :
漏れ太郎 :05/02/10 19:59:43 ID:aaesb0mH
で・・・・できた〜〜(´Д⊂グスン
662 :
漏れ太郎 :05/02/10 20:01:19 ID:aaesb0mH
次々自習して、おいつくぞ〜〜!!(多分無理・・・。でも頑張る
( ゚д゚ ) m9| y |)わからないことがあれば遠慮せず聞くように。
先生やさしいな!
665 :
漏れ太郎 :05/02/11 00:34:02 ID:RZJwfUL8
いや、まったく。
666 :
漏れ太郎 :05/02/11 18:44:28 ID:RZJwfUL8
いや、まったく違うといういみじゃなくて、いや、まったくそのとおりっていみです。一様・・・・。
667 :
国語の先生 :05/02/11 18:56:07 ID:DKpo/0kM
( ゚д゚ ) <「一様」ではなく「一応」だ!気をつけろ! m9| y |)
668 :
漏れ太郎 :05/02/11 19:16:41 ID:RZJwfUL8
>>665は、いや、まったく違うといういみじゃなくて、いや、まったくそのとおりっていみです。一様・・・・。
669 :
漏れ太郎 :05/02/11 19:17:53 ID:RZJwfUL8
( ゚д゚)ハッ!二重レスしてしまった・・・。しかも時間差!!超(m´・ω・`)m ゴメン…
670 :
漏れ太郎 :05/02/11 19:18:45 ID:RZJwfUL8
( ゚д゚)ハッ!字間違えてた!
漏れ太郎くん、まずは落ち着くよう。先生も
>>667 の先生もちょっとやそっとじゃ気にも留めないぞ。
いちよう、じゃなく、いちおう、な。話し言葉と混同しがちな単語だ。
(゚д゚;)
(| y |)
ま、まぁチキンな先生はこんなスレが一度に6も伸びているのを見てびびっていたわけだが…
(;゚д゚)
(| y |)
まず、漏れ太郎くんはこれまでの解説を理解してもらおうと思う。何かわからない部分はあるかな、先生は何度でもわかるまで教えるぞ。
生徒くんは、複数のオブジェクトの扱い方を把握するまで待つつもりだ、ゲームに一番重要なところなんでここだけは外せなかったんだが…まだ早かった…かなぁ?>スレのみんな
( ゚д゚)
(| y |)
先生としては途中で挫折されるのも悲しいので、この二人がゲームを作れるようになるまで付き合うつもりだ。
( ゚д゚ )
m9| y |)わからないk(ry
672 :
漏れ太郎 :05/02/11 22:58:07 ID:RZJwfUL8
'`ィ (゚д゚)/先生k(ryの意味が分かりません!!(まだ2CH暦2ヶ月くらい まぁ、そんなことは置いといて、>>616の2番ウィンドウとは、どういうことでしょうか?
(略 の略だ。 (゚д゚ ) (| y |) HSPでは使える画面が31個あるんだ。それぞれに別々の用途を割り振れるし、当然使わないこともできる。 buffer 2と書けば、2番目の画面を仮想画面とできるし screen 2と書けば、2番目の画面をウィンドウとできる この二つは同時にはできないが。 この2とか3とかには深い意味は無く、プログラマで適当に決めてもかまわない、変数名のようなものだ。ただし自分で混乱するなよ。 ( ゚д゚) (| y |) ピンとこなければこのプログラムを実行して見ると良い title "0番" screen 2 :title "2番" screen 3 :title "3番" screen 4 :title "4番" screen 5 :title "5番" stop titleという命令は、ウィンドウの上の名前部分の文字を変更する命令だ。 ひょっとして先生は君の質問の意図が汲みきれていないかもしれない。その場合は言ってくれ。
674 :
漏れ太郎 :05/02/12 00:08:36 ID:DkHGmzY9
'`ィ (゚д゚)/先生!使える画面31個とありますが、数字によって、特徴があるのではなくて、ただの区切る番号みたいなものなんですか?
675 :
漏れ太郎 :05/02/12 00:11:57 ID:DkHGmzY9
先生!なんでかしらないけど、俺のIDちょこちょこかわってますが、全部俺です!(一応 >>667先生!修正しました!!(多分もういないと思うけど・・。
良スレsage 生徒も漏れ太郎も超がんばれ期待sage
そう、そのとおりだ漏れ太郎くん。 画面の番号に深い意味は無いぞ、気をつけなきゃいけないのは2つだ。 0番:screen以外にできない、screenの横幅最低値は100ぐらいだったと思う。 1番:HSP側の都合で使用不可、デバッグウィンドウなんだっけな。 大きいのを組むときは #define mypicture 2 ・ ・ ・ buffer mypicture :picload "jiki.bmp" //結局 buffer 2 :picload "jiki.bmp"と等価 のようにしておけば、どの番号がどの用途の画面か混乱しない事だろう。 あと、ID気にするならトリップを付けると良いだろう。
このスレの雰囲気、素敵です がんばってくれ!!
>>678 あ、ありがとう。
(*゚д゚)
(| y |)
ところで、最近生徒くんは忙しいのかな。
(゚д゚ )ノミ
(| y |
しまった、ID変わってる。
>>766 は私だぞ。
(゚д゚lll)
(| y |)
トリップ検討しようかなぁ…
(д゚ )
| y |) ,,,,,,,,,,
うわぁ、
>>677 のミスだし…。
漏れ太郎じゃないけど、先生もまずは落ち着こう…。
(・Д・)
(| y |ノ
先生のソースを見ながら勉強しています。 自分にはまだ難しいですが頑張って理解します。 先生もトリップ付けてもいいのでは?
うむ。感心感心。先生もうれしいぞ。 (-д- ) (| y |) 行番号で指定してくれればそこを分解して解説するぞー。 ヽ(゚∀゚)ノ ) ),, ,,( ( | y |
684 :
漏れ太郎 :05/02/15 19:04:42 ID:yEKGZsvf
ん〜説明できないけど、わかりません。
実はテスト期間中なのでしばらく休みます。 必ず戻ってきますので・・・待ってあげてください。
686 :
1 :05/02/15 22:37:22 ID:wXFw9pvi
1です。 今更顔を出せたもんではないですが、ケジメをつけるために 書き込ませていただきます。 極めて私的な理由でここに顔を出していませんでした。 今更ですがお詫びします。 人に師匠を頼めるほど自分の心根はまともじゃなかったようです…。 重ね重ね申し訳ありません。 最後に、私を育ててくれた師匠方、ありがとうございました。 それでは。
>>684 ・#defineとは
#define ○○ ××
と書いておけばソース中の○○がコンパイル時にすべて××に置き換えられる命令なのだ。
本来ならプログラム中に数字をそのまま使うのは好ましくないことなんだ。(マジックナンバーって言うんだっけな
(*゚д゚)
(| y |)
だから、理想では#defineを使用して、数字ではなく文字をソース中に使い、ソースを読みやすくするのだ。
本来なら、自機の位置すらも#defineで書いておくのが好ましいのだが、面倒なので省略した。
(-д- )
(| y |)
C言語などを学ぶときにも応用できる知識なので将来を考えれば覚えておきたい命令だ。
C言語のソース中での"NULL"はすべてコンパイル時に"0"に置き換えられていると考えて正しい。
こっちについてはまだ覚えなくて良いぞ。
( ゚д゚ )
m9| y |)
・bufferについて 画面番号は、裏画面の通し番号だ。実際は違うんだが、bufferはただの表示されないウィンドウだと考えて問題ない。 ゲーム中の画像は、まずは表示されないウィンドウにすべて描いておき、必要になり次第ゲーム画面にそちらからコピーしてくる、という手法を使う。 その"コピーしてくる"ときに通し番号が必要なのだ。 (゚д゚ ) (| y |) ゲームを作るときは、2番を自機画像にして3番を敵画像にして31番を背景にして…と前もって決めて置かなくてはならない。 番号についてプログラマの君が混乱することだけは絶対にダメだ。 どの番号をどの用途に回すかは君が好きに決めると良い。 ( ゚д゚ ) m9| y |)
・トリップとは
生徒くんの名前の◆XvC2oeEZWsの部分だ。
生徒君が名前を書くときに「生徒#********」と書くと、#以下の部分が暗号化されて特有の文字(XvC2oeEZWsなど)に化ける、という寸法だ。
これによって、********の部分を知らない人は生徒の名前を偽って名乗ることができなくなる→偽者防止ができる、というわけだ。
(゚д゚ )
旦\/| y |)
詳しいことは検索すればいくらでも出てくると思うので探して欲しい。
ちなみに、先生がトリップをつけない理由は、君たちに教えてくれるのなら私の偽者が出ても構わない、と思ってのことだ。
いつでも生徒&教師募集しているぞ。続ける気力のある人間は迷わず来てほしい。
(゚д゚ )ノミ
(| y |
>>686 へこたれず頑張れ。ゲームが大好きな先生はゲームを作りたいという人間を歓迎するぞ。
( ゚∀゚)
(| y |)
>>685 ん。先生も明日テストだ。こんなことしてる場合じゃないかもな。
ドーン!
,,...-:':::":~~ ,,.. .~~""''':::..,,,
て :::::, :..:::::::: ,
l[( ・д・);三||] ~"''-::..,,,. ;;;;;,,,...:::--''''"~
.|\/\/ ノ( y(
配列変数+繰り返し処理 で多数のオブジェクトを制御する、というのは
シューティングに限らず、アクションやRPG、はたまたパズルまで広く通用し、なおかつHSP以外でも役に立つ考え方だ。
ぶっちゃけ、この壁さえ乗り越えられれば遊べるゲームが作れると踏んでいる。
がんばれよ。この壁を突破したら次は敵キャラの処理に入るが、そちらでもこの方法を使う。
( ゚∀゚)
(| y |)
まずはテスト頑張れ。
1さん、サイトの置き土産見ました。 完全に投げ出したと思っていたのですが正直驚 きましたよ。 ここまで出来るならいっそ育成ゲームクリアを 目指してください。
692 :
名前は開発中のものです。 :05/02/15 23:43:00 ID:HfXXhT1b
>>1 すごいな。
ここまで出来れば、今後わからないことが出てきても、調べる手段を確立していることだろう。
ある意味クリアなのかもしれない。。。
のわ、あげてしまった。。。スマソ。。。orz
694 :
名前は開発中のものです。 :05/02/16 00:13:17 ID:kd6FkhxA
いや、むしろ1の旅立ちをageて見送る方向で。 1、よくやった、つらくなったら戻ってこいよ! 答えられる範囲で教えてやるから。 弾避けゲーム、結構楽しかった。
695 :
名前は開発中のものです。 :05/02/16 00:27:17 ID:bWw6cW3w
じゃあスタッフロールといくか もちろん最後は 1 で
696 :
7 :05/02/16 02:40:49 ID:Jkn6C0lS
>>1 お疲れ様でした。
そして、1 さんの Release がいつかどこかで見られることを祈ってます。
これからもゲーム作りを楽しんでくださいね。
私はサンプルソースが完成したらアップすると書いておきながら最後にフェードアウトしてしまいました。
アップされた作品を見て、私も負けてられません。
1 さんは良き弟子でした。でも、これからはライバルです。
最後に、課題を出したり、提出された方々のソースを見るのは楽しかったですよ。
私の課題に付き合ってくださった方々、そして 1 さん、本当にありがとうございました。
>>新しい生徒さんと先生さん
いきなりのエンディングムードでごめんなさい。
1 さんのケジメに応えたくて、書き込んでしまいました。
ここに生徒と先生がいる限りこのゲームは続きますよね。
テスト。
○番ウィンドウとはどういうことでしょうか?IDでしょうか?
>>698 buffer N や screen N,640,480
で初期化したモノを N 番ウィンドウと読んでるのだと横レス
>>699 横レスありがとうです。
そう、HSPヘルプ内ではウィンドウIDと書かれていたな。先生は勝手に脳内変換していたようだ、すまない。
(*゚д゚)
(| y |)
またぶった切ってしまってごめんなさい。 1さん、お疲れ様でした。 ポインタ関連のとき少し相談に乗っただけだけど、あのときみ せてくれたやる気が私にもやる気を出させてくれました。 私もReleaseまってますよ。
先生、いまからHSPをやるならver2.6系とver3.0系どちらがいいんでしょうか?
2.6系をお勧めする。 なぜなら、3.0への移住が楽な上に、現状では安定しているから。 プログラムの初歩の段階でバグに鉢合わせしたとき、いくら悩んでもわからず、真の原因が「β版の不具合」なんてのじゃ萎えると思う。 (゚д゚ ) (| y |)
ありがとうございます! 2.6では関数が使えないと聞いたのですが、大丈夫でしょうか?
関数…? モジュール機能が弱い(再帰が使えない)という話は聞いたが、基本的なゲームを作る部分には2.6で不自由しなかった。 ( ゚д゚) (| y |) 関数が使えない、としても、おそらく使えたところで初めから使いこなすのは厳しいと思う。 (゚д゚ ) (| y |)
3.0を使ってた漏れ。・・・・・・・・・・ 乗り換えた方がよいのでしょうか???
ところで、先生が使っているのは何ですか?
先生は2.6。いずれ3.0が完成したらそちらに乗り換えるつもりだ。
(゚д゚ )
(| y |)
>>706 わざわざ乗り換えるほどでもない。「どうしても謎エラーが出る」などの状況になってから考えたほうが賢明だ。
( ゚д゚)
(| y |)
言い忘れたが、C経験者なら3.0をお勧めするぞ。
( ゚д゚ )
m9| y |)
やっぱり漏れ太郎と生徒は一ヶ月続かなかったな。 負け犬プゲラッチョ 才能の欠片も無い消防や厨房がゲームつくろうったって無理なんだよヴォケ
続いてるしww(´゚c_,゚` ) プッ
>709 才能は持って生まれるもんじゃない。 とマジレス。
ところで、俺がゲーム作るって言ったら何人が信用してくれるかな。
お前の技術と、目指す高さによるだろうな。
今日やっとテスト終わったんでまたhsp頑張りますよ。
ガンガレ
おかえり生徒くん。 (゚д゚ ) (| y |) 先生はちょっと、出した課題が難しすぎたんじゃないかと心配になってな。 現在の課題はちょっと置いておいて、簡単な課題を出そうと思う。 (゚д゚ ) 宿題\/| y |) 100の大きさの配列変数varを作成し、中身をすべて1で埋めよ。 ( ゚д゚) / (| y |
生徒君がいくら待っても来ないので俺が答える。 dim var, 100 repeat 100 : var.cnt = 1 : loop
正解。 最小限かつ読みやすい良いコードだ、他の生徒の良い手本を示してくれた。ありがとう。 ( ゚д゚) (| y |) (;゚д゚) (| y |)"ゴソゴソ 次の宿題だ。 128の大きさの配列変数tmpを作成し、中身に偶数を小さい順に代入せよ。 (゚д゚ )ノ (| y |
720 :
生徒 :05/02/24 22:54:12 ID:7troqkrF
トリップないですが一応生徒です。
>>718 すいません、どうもありがとう・
次の宿題はこんな感じですか?
dim tmp, 128
n=2
repeat 64
tmp.cnt = n+2
loop
721 :
生徒 :05/02/24 22:56:13 ID:7troqkrF
あ。違う、、、 dim tmp, 128 n=0 repeat 64 tmp.cnt = n+2 loop
えーと、まずは落ち着いてみよう。 プログラムをするときには目標を見定めることが重要なんだ。 ( ゚д゚) (| y |) 0から128ある配列変数に偶数を順番に入れていくわけだから 中身は0から256まで入るはずだ。 先生の問題の出し方が悪かったのだろうが、それだと ・tmpの64番目までにしか代入されない ・最大値がtmp.63に代入される128と少ない。 (-д- ) (| y |) ただ、勘はなかなか良いぞ。ゆっくりと考えてみよう ( ゚д゚) (| y |)
>>719 ありがとうございます。
これからも精進していこうと思います。
724 :
生徒 :05/02/24 23:59:38 ID:7troqkrF
何故かrepeat loopの結果が128にならなきゃいけないんだと勘違いしてました・・・ dim tmp, 128 n=0 repeat 128 tmp.cnt = n+2 loop
確認のためのプログラムも書いてみよう。 今回の課題の確認用プログラムなら、 0から128ある配列変数に偶数を順番に入れていく処理の後に、 配列0から20までの内容を表示するプログラムを書いてみるのだ。 本当は、配列0から128までを表示するのがいいのだろうが、そうすると 長すぎて画面に収まらないので、とりあえず20個ほど表示して 自分の入れようとしたものが入っているか、自分で確認だ。
うむ。良いぞ。その調子だ。 ちなみに先生のソースは dim tmp,128 repeat 128 :tmp.cnt=cnt*2 :loop (゚д゚ )ノ (| y | となる。 次の課題だ。 今回作った配列変数tmpの中で、奇数番目の値すべてに、1〜6までの乱数を加えよ (゚д゚ ) (| y |) 新しく使う命令はrndだ。効率が良く、確実な処理を考えていこう。 ( ゚д゚ ) m9| y |)
>>725 書き込んでから気が付いた…すまん。
725先生が書かれた内容は、プログラミングとは切っても切れない関係であるデバッグの基本的な手法だ。
早期の段階で覚えておくのが良いだろう。適切な指南感謝する
>>725 師。
>>726 待て。待って、先生。
よい調子じゃないっすよ。724のコードじゃ、全部に2が入るっすよ。
tmp.cnt = n+2
の命令実行時には、nは常に0っすよ。
ぐぉっ!気付いてなかった。もうダメだ…orz
その意図があってデバッグの指南をしたんだな。
a+1がa+=1と等価で、なおかつ高速であるというHSPの仕様に甘えすぎて初歩的な見間違いをしてしまったようだ。以後気をつける。
…orz
重ね重ね感謝する
>>725 師
漏れ太郎どこ行ったのかなぁ・・・・( ´-`)y─~
731 :
生徒 :05/02/25 22:21:06 ID:m0qRW+vF
>>725 師
確かに実行してみると全て2が代入されていました。
指摘どうもありがとうございます!
なぜそうなるかがよく分からなかったんですが
n+2の結果をnに代入しなおしていないから値が全て2になる、ってことですよね・・
まじめにやれ先生!
(#・д・)⊃))Д´)・∵
(| y |)
すまなかった。
(゚д゚lll)
(| y |)
なぜそうなるかはしっかりと考えるんだ。
ソースを脳内でシミュレートして実行することはプログラムをする上でかなり重要な手段だ。
( ゚д゚)
(| y |)
それができたら
>>726 の課題に挑戦して欲しい。
・・・Cでの参加は認めれられますか?
>>733 ここの先生がCのスキルがどれだけあるか分からんが、
メジャーな言語だし誰か答えられるだろう。多分。
とりあえず、
>>717 とか
>>719 はできる?
これまで教えてきた内容までなら先生はCで作ったことがあるが そのさきどこまで教えられるかわからなくて申し訳ない。 (;゚д゚) (| y |) 他の先生方も答えてくれることに期待したい。すまん。 (д゚ ;) | y |) ,,,,,,,,,,
退屈なんで、MSN Messengerをもってる生徒は、それで話さないか?
誰もいないな……。
| | ゚д゚) そもそもここの生徒は漏れ太郎くんと生徒くんと受験生くんしかいないからな。 と ノ | ノ | それより、一星くんはゲームを作る気はあるのかい? (-д- ) (| y |)
>>739 おお、あるよ。…って言うか、今作ってるよ。
何つくってんの?
>>741 シューティングゲーム。
まだ開発中だから見せられないけどね。
メッセンジャで意見交換しようぜ、というのはなかなか面白い アイディアっぽいな。 捨てアドとってこようかな。。。
>>744 おお、3D画像か。これ自分で作ったのか?
おお、カッコイイじゃないか。敵画像。 ちなみに閲覧者は多くないと見る。というか、(゚д゚ )先生じゃない名無しの 書き込みは、ほぼ俺だし。
ちゃんと先生が自分で作ったものだから安心しなさい。出来は保障しないが。 (-д- ) (| y |) 使用ツールはDOGA L-1だ。前回の自機画像はDOGA L-2で作った。 どちらも簡単なツールで先生が作ったもの程度なら初めて触ってから一日以内に作れるようになることだろう。 ( ゚д゚) (| y |)
誰かしゃべれよ…。
すまん。だが、喋ることがないんだ。 ……一星さん話題振って。自分の作ってるゲームの 近況とか付けたいシステムとか。
そうだな。 生徒くんも漏れ太郎くんも来ないし。 (゚д゚ ) (| y |)
ここでjavaは教えてもらえますか?
教えてもいいけど。普通に解説サイトを見たほうがよいとは思うがな。
私もそう思う。そっちのほうが確実だし速い。 (゚д゚ ) (| y |) ちなみに、先生のjavaは 「メインはキャンバスから派生して…」 _, ._ (;゚ Д゚) …?! (| y |) 「すべてイベントドリブンで・・・」 _, ._ (;゚ ∀゚) …!? (| y |) 「あらゆるプラットホームで仮想マシンが…」 ドーン! ,,...-:':::":~~ ,,.. .~~""''':::..,,, て :::::, :..:::::::: , l[( ・∀・);三||] ~"''-::..,,,. ;;;;;,,,...:::--''''"~ .|\/\/ ノ( y( …という流れだったので教えられるレベルじゃないぞ。
Cもjavaも行けるけど、たまにしか見に来ないから教えられないな・・・
759 :
753 :05/03/01 01:57:19 ID:Sb43bM8Z
そうですか、残念です。ここの雰囲気好きで前から見てたんです、で「私も教えてもらいたい!!」と思ったんですが・・・仕方ないですよねぇ・・・
>>759 とりあえず解説サイトを追ってみて、わからないことがあったら
随時ここで聞けばいい。
761 :
753 :05/03/01 17:25:47 ID:Sb43bM8Z
ありがとうございます♪では疑問がわきましたらココで質問させていただきたいと思います。
それはそうと漏れ太郎も生徒もいねーな。逃げたか。
やっぱり小学s(ry
>>761 おう、ガンガレ。応援する。
まあ、あれだ。教える方が教えられる方より楽しいからなあ。 そりゃ確固とした目的の無い生徒は消えていくさ。
764 :
& ◆Wkmm45jlGo :05/03/01 22:38:32 ID:wvrkOZtT
俺も何か新しいゲームを作ろうかと思ってるぜ。
766 :
名前は開発中のものです。 :05/03/02 00:16:52 ID:aIGzcSK+
アクションゲームですね?
企画を考えよう。
768 :
saki :05/03/02 00:18:20 ID:aIGzcSK+
そうですね〜ていうか何人でやるんでしたっけ?
まあその辺は適当で。
770 :
saki :05/03/02 00:21:49 ID:aIGzcSK+
ぁぃ
>>765 待った。いま作ってるというシューティングゲームはどうした。
772 :
saki :05/03/02 00:33:07 ID:aIGzcSK+
何ですかそれは…。 おれらとは別かな?
774 :
saki :05/03/02 00:35:20 ID:aIGzcSK+
ワカンネェ… シューティングになったんですか?
いや742で、もともとシューティング作るって言ってたのよ。
776 :
saki :05/03/02 00:44:08 ID:aIGzcSK+
あぁそか。 出来たらやらしてねw
778 :
saki :05/03/02 01:05:07 ID:aIGzcSK+
風呂入るんで消えます。 また来ます。
スレを私物化するなよ。 ウザいから、チャットはメッセンジャーでやってくれ。
パスかかってて開けないんだけど。
>>779 納得できる意見だ。私もそう思った。
が、別にチャット化して困るほどの価値があるスレでもないから
別に構わんのでは。
まあ正直、sage進行でやった方がよいとは思った。
782 :
779 :05/03/02 01:25:47 ID:wKkCS3Kq
>>781 いや、ここを利用したいっていう人は現に(
>>733 >>753 )いるんだから、
それだけで価値がある。後々の情報資産にもなる。
なので、修行スレとして、成果や質問を書き込むのに利用して欲しいと思った次第。
もうちょっと遠回しに書けばよかったと反省。ゴメンポ。
去年の11月からスレを見ていますが、初めて書き込んでみるへへへ
785 :
saki :05/03/02 18:05:22 ID:HfwcFRM9
人集まらないですねw
786 :
saki :05/03/02 18:08:21 ID:HfwcFRM9
ところで、アクションゲームで決定ですか?>一星
>>786 そういうことはメッセンジャーで話そう。
788 :
saki :05/03/02 18:37:27 ID:HfwcFRM9
ぁぃ。 ここでは募集ですねw
な、なんの募集なんだ。 (*゚д゚) (| y |) それはそうと漏れ太郎くんや生徒くん来ないなぁ…。 (д゚ ) | y |) ,,,,,,,,,,
790 :
生徒 :05/03/02 22:14:57 ID:sUy0h/eh
忙しくてPCつける時間があまりないのでhspとにらめっこする時間が・・・グフ。申し訳ない・・
791 :
saki :05/03/02 22:16:31 ID:HfwcFRM9
おれらとゲーム作りませんか? 募集中〜
>>791 とりあえず、sageを覚えてくれ。
話はそれからだ。
あと、一星も同じだ。
794 :
saki :05/03/03 09:09:42 ID:10w2LJqG
な?>一星 やっぱり言われると思ったよ。 ごめんなさい。
分かっててやったのか。
796 :
saki :05/03/03 12:20:48 ID:10w2LJqG
ところでsageってのが全然分からないんですが…。
半年ROMれ
798 :
saki :05/03/03 13:04:22 ID:10w2LJqG
了解。
ただいま、頭が混乱していますので(゜A。)
病院池
>>794 「な?やっぱり」と言われても、俺は言われると思ったなんて一度も聞いていなかったぞ。
故意犯と思われると困るので言っておく。
>>792 sageる必要なんてないんじゃないか?一応
>>799 のページに目を通してみると、
「下がったまま内緒話をするのもまた一興。。。」と書いてあったが、
内緒話などしていないだろう。それとも、ここはやはり隔離スレということになるのだろうか?
803 :
名前は開発中のものです。 :05/03/03 21:07:08 ID:Xcv2GBR+
高橋友城を レイプしたい
804 :
saki :05/03/03 21:31:55 ID:10w2LJqG
>一星 あれはその場しのぎの嘘だ。すまん。 高橋友城て誰?
>>805 読んでますが。かってに決めつけないように。
807 :
saki :05/03/03 23:10:55 ID:10w2LJqG
空気は読めるほうだと思いますが…。 ていうか書き込みほとんどないじゃん。
こいつらの空気に従ってんだろ 面白くないから、俺はもうこのスレ見ないだけだな 少し前まで、いい感じだったのに急につまらなくなったな
>>808 >>807 と一緒にするなよ。そうするから俺が空気を読めていないように見えるわけだ。
まあ、確かに、俺が
>>807 を連れて来たのは問題だったかも知れないが…。
811 :
saki :05/03/03 23:26:14 ID:10w2LJqG
(*゚д゚)
軌道修正。
以後、学習以外に関する私語は厳禁だ。
ここは先生と生徒の学びの場だということを忘れるな。
今の膠着状態は、生徒たちの詰まっている点がわからなくて、進めないでいるのでは。
混乱中と言われても、実際どこどう説明していいかわからないからな。
>>717 に対する回答が
>>718 >>719 に対する回答が
>>726 なのは理解しているのか?わからないのなら、ここから質問してみるといい。
また、それ以前で詰まっているのであれば、その旨を伝えること。
ちなみに、今出ている課題は、
>>726 だ。
>>726 こう?
for マクロ使ってみますた。repeatでもできるけどね。
dim tmp, 128
for i, 1, 128, 2 : rnd tmp.i, 6 : tmp.i++ : next
; repeat 128 / 2 : i = cnt * 2 + 1 : rnd tmp.i, 6 : tmp.i++ : loop
; 確認用
notesel buf
repeat 128 : noteadd "tmp." + cnt + "\t= " + tmp.cnt : loop
objmode 1 : mesbox buf, winx, winy
stop
>>806 ,807
読めてねえよ。おまえら、こんなのほほんと話が出来るのは
たまたま、このスレがマタリな雰囲気だからってだけだぞ。
815 :
saki :05/03/04 11:31:29 ID:OuL/L3Ck
すいません。黙ります。
> 学習以外に関する私語は厳禁だ。 > ここは先生と生徒の学びの場だということを忘れるな。
>>813 完璧だ。
奇数という言葉から、カウンタの増分を操作できるforの使用を思いついたのはすばらしい能力だ。
HSPマクロに慣れていない先生は読むのに手間取ってしまったがな。
repeatで書かれた部分に関しては文句無しだ。
(゚д゚ )
(| y |)
その下の確認用の部分、noteaddの特性を生かした合理的な方法で先生は感動した。
先生が\tはタブであると知らなかったというのは内緒の話だ
(;゚д゚)
(| y |)
ともあれ、実力者であることは一目でわかった。素直に賞賛する。
( ゚д゚) /イエッサ!
(| y |
>>800 どこに混乱しているのか言ってくれれば解説するぞ。
それすらわからなければ…メッセのアドレス晒しなさい。
(-д- )
(| y |)
>>一星 saki sageは、メールアドレス入力欄に半角でsageと入れることによってスレッドの高さを変えずに書き込みをする方法だ。 このスレッドが上がることは君たちには迷惑ではないかもしれないが 漏れ太郎くんや生徒くん、それに私にとってはただの晒しあげだ。 ( ゚д゚) m9 |) 2chにはいろんな人がいる、そのことをしっかりと頭において2chを活動してもらいたい。 (д゚ ) | y |) ,,,,,,,,,,
>>818 > >>一星 saki
> sageは、メールアドレス入力欄に半角でsageと入れることによってスレッドの高さを変えずに書き込みをする方法だ。
いや、sageくらい知っているよ……。
だからsakiと一緒にするなと言っているのに。わからない人達だ。
>>802 でsageの必要性に疑問を呈しているのに、sageを覚えろと言われても、話が噛み合わない。
sageを覚えろと言う前に、なぜ必要なのかということを言うべきではなかったか?
age進行のスレも存在するし、俺は新しいレスが付いたスレが上がるのはごく自然だと思うわけだが、
察するに、幼稚な者達がその上がったスレを見て荒らしたりするわけだろう?
sageが必要であるという理由さえ説明してくれれば、すんなりとsageにして、解決したのだ。
えらそうに説教らしきことをしてくるが、その前に俺が書いたことをよく見てもらいたいものだな。
>>819 なぜあんたは先生さんが作ってくれた雰囲気を、一気にギスギスさせる書き込みをする。
しばらく、名無しに戻って頭を冷やしてきたほうがよいぞ。
>>819 で、晒しあげるな、といった先生の意思は伝わったのかな?
( ゚д゚)
(| y |)
>
>>802 でsageの必要性に疑問を呈しているのに、sageを覚えろと言われても、話が噛み合わない。
sageを覚えろというのは
>>792 、必要性に疑問を投げかけているのは
>>802 だ。
過去の書き込みと話が噛み合わなくて当然じゃないか?
>察するに、幼稚な者達がその上がったスレを見て荒らしたりするわけだろう?
それだけじゃない。幼稚でなくても住人が増えることを嫌ってのsage進行なところもあれば、単に人に見られたくない、板に迷惑をかけたくないなど様々な理由がある。
sageの意義についてしっかり自習してきなさい。
(-д- )
(| y |)
>俺は新しいレスが付いたスレが上がるのはごく自然だと思うわけだが
もしここがage進行のスレなら問題ない。しかし、普通2chではむやみにあげられることを嫌う。
なぜsageが必要であるかに詳しい説明は要らない、これは2chでの礼儀だ。
そういう意味でも「半年ROMれ」というアドバイスは適切だと思う。
(;゚д゚)
(| y |)
>>820 まちがったことを言っていると思ったから、反論したまでだ。
それによって雰囲気が多少悪くなってしまうのは、し方のないことじゃないか?
雰囲気を作ってくれたと言うが、それによって俺がまちがっていたということにして丸くおさめてしまうのはよくない。
そういうことなかれ主義の考えはよした方がいいぞ。
ちなみに、sakiくんのほうが空気が読めている。 もし一星くんのほうが空気が読めている、と思うのならその部分を詳しく説明してみなさい。 ( ゚д゚) (| ? | >えらそうに説教らしきことをしてくるが、その前に俺が書いたことをよく見てもらいたいものだな。 先生は書き込みを全部見ているぞ。 君の書いたどのレスをよく見てもらいたいんだ? (-д- ) (| y |) 長文を書いてしまうあたり先生もちょっと平静を欠いているな。頭冷やしてくるよ。 || || ( / ⌒ヽ | | | ∪ 亅| | | | ∪∪ : : ‐ニ三ニ‐
>>822 典型的な逆切れ荒しになってるな。叩かれるのも当然。
まあ、これも経験だから反泣きで必死に反論しろ。
>>823 > 先生は書き込みを全部見ているぞ。
> 君の書いたどのレスをよく見てもらいたいんだ?
例えば、
> sageる必要なんてないんじゃないか?一応
>>799 のページに目を通してみると、
> 「下がったまま内緒話をするのもまた一興。。。」と書いてあったが、
> 内緒話などしていないだろう。それとも、ここはやはり隔離スレということになるのだろうか?
の部分だ。sageの必要性に疑問を呈しているわけだな。
これを読んでいたとして、じゃあなぜsageそのものの意味の説明をするのだ?
>>824 俺は冷静に対処している。かってに理性を失っているような言い方をしないでもらいたい。
ああ、君はsakiくんと一星くんの同時にsageを教えた、の一点に関して怒っているだけか。 なんというか、リアルな小学生らしい。先生は久々に感動したぞ。 ヽ(゚∀゚)ノ ) ),, ,,( ( | y | 例えば、じゃなくて、それらしい書き込みはそれ一つだな。まさしく詭弁だ。 あれは面倒だったから同時に説明したまでだ。謝罪が必要か? (*゚д゚) (| y |) 君は知っていることをもう一度言われただけでキレて反論を続けるほど幼稚なのかな? そんな小さな事を重く受け取って反論を続けることに悲しくはならないのかな? (-д- ) (| y |) それと、君のほうが空気が読めている、という弁論は無しか? ( ゚д゚) (| y |)
例えば、
>>779 の
> スレを私物化するなよ。
> ウザいから、チャットはメッセンジャーでやってくれ。
に対する俺の返答だ。
俺は、
>>783 で
>
>>779 > そりゃすまんかった…。
と、しっかりと謝罪している。ところが、sakiは、
> 785 名前: saki 投稿日: 05/03/02 18:05:22 ID:HfwcFRM9
> 人集まらないですねw
> 786 名前: saki 投稿日: 05/03/02 18:08:21 ID:HfwcFRM9
> ところで、アクションゲームで決定ですか?>一星
と、私物化するなと言われながらもまだこんな話をしている。
また、俺はそれに対して、
>
>>786 > そういうことはメッセンジャーで話そう。
と、彼の心ない発言を食い止めようとしているわけだ。
しかし、彼はその後も、
>>791 で、
> おれらとゲーム作りませんか?
> 募集中〜
などと言っている。
以上で、俺がsakiよりも空気をよく読めているということがわかっていただけただろうか?
sakiを批判するような形になってしまったが、
> ちなみに、sakiくんのほうが空気が読めている。
> もし一星くんのほうが空気が読めている、と思うのならその部分を詳しく説明してみなさい。
と、2人を比べるような形で言われ、差がわかればいいわけなので、そうした。
_, ._
(;゚ Д゚) …?!
(| y |)
それは、空気が読めている、と言うのか?無駄なレスをしないようsakiに注意しているだけで、住人の皆さんへの配慮ではないな。
ここは、先生、漏れ太郎くん、生徒くんがゲーム作りの勉強をしているという流れだった。
そこに君が入ってきて空気を無視し、こちらと関係の無いことを話し続け、果てはsakiくんまで連れてきた。
そして、住人の皆さんに怒られたsakiくんは「これ以上発言しても墓穴を掘るだけだ」と空気を読み、ROMをし始めた。
対する君は、自分の株を下げ続けているという空気が読めず現在必死になって反論しているわけだ。
(д゚ )
| y |) ,,,,,,,,,,
あと、2chを利用するなら専用ブラウザを使ってくれ、暇があればUDにも参加してくれ
Mission UD:白血病等のがん患者を救え!191Ligands
http://etc3.2ch.net/test/read.cgi/entrance/1109502484/ ( ゚д゚) /
(| y |
829 :
saki :05/03/04 20:29:48 ID:OuL/L3Ck
>そういうことはメッセンジャーで話そう。 それはおれら二人の喋りのことだろ。 それから、おれは初めに新しいレスでやった方が良いんじゃないか? といったはずだが…。
ええと、必死で過去ログをあさってなんとか自分が正しいことに しようとしている姿は空気に沿っていると言えるのでしょうか?
>>一星、saki 単純な話、君は何も提供してないんだよ。わかるか?ここは、不特定多数に発信してる事を理解しろ。 先生さんや生徒の人らが、いい感じで雰囲気作って、見てるものが見て良かったって思える雰囲気になったのに、アホが迷い込んで、ぎゃあぎゃあわめいてるんだよ。だれがおまえの書き込み見て、見てよかったと感じる?だから、みんな怒ってるんだよ。 事なかれ主義?アホか。おまえは、人がどう思うか何も考えずに自分の言いたいこといいちらかしてるだけ。 sakiとおまえのどっちが空気読めてるかとか、誰も興味ないんだよ。 とりあえず、先生さん、キレないで。。。 でも、なんかもう元の雰囲気には戻りそうも無いな。
>>826 あなたはどうも人が怒っていることにしたいらしいな。
勘ちがいもほどほどにしてほしい。
わざとならば、悪質な個人攻撃だな。
>>828 > 無駄なレスをしないようsakiに注意しているだけで、住人の皆さんへの配慮ではないな。
もちろん、注意したのは住人への配慮だったわけだが?
それ以外に何があるのだろうな。
> そして、住人の皆さんに怒られたsakiくんは「これ以上発言しても墓穴を掘るだけだ」と空気を読み、ROMをし始めた。
> 対する君は、自分の株を下げ続けているという空気が読めず現在必死になって反論しているわけだ。
ふむ…。またかってに必死だということにしたいというのが伺えるな。
それは空気じゃなく、ただ単なる多人数による弾圧だ。
まちがっているものを放置しておいてはいけない、だから俺は反論しているのだ。
わかってくれる人はきっといるはずだ。
>>830 > なんとか自分が正しいことにしようとしている
その見解が既にまちがっているよ。それが君達の過ちの原因ではないかな?
何度も言うようだが、俺はちゃんと理性的に発言している。
こんなに香ばしいスレ久しぶりに見た
_ , -―-、 , 'ニニニ、::::(0::::::::::ヽ、  ̄ ̄ヽ'::::::::::::::: ヾ みてごらん一星 ◆Cppn/.YI3.を )::: .... \ あれが厨房だよ / ::::::::::::::::::ヽ / :::::::::::::::::| / :::::::::::::::::| / :::::::::::::::::::| / ::::::::::::::::::::| | :::::::::::::::::::::| . | :::::::::::::::::::::| _ , ―-、| /::::::::::::::/::::| \ヲ'⌒ヽ:| /:::::::::::::::/::::::| ト`_ ノ::| /:::::::::::::/::::::::| 人;;;;;;;::::;:| |:::::::::::::/::::::::/ /γ `:::::| |::::::::::::/::::::::/ / ( ヽ :::| |:::::::::/::::::::/ ふーん、なんだか { } ) ::| |::::::::{::::::::/ 頭悪そうだね、ぱぱ | / } ::| .ヽ::::|:::::::/ ) { / ::| .ヽノ ::::/ } | ( :λ :::| ( ヽ、 ) ノヽ ::::| ヽ, ~ 〈 ト、_ | ::::::ヽ、 ( ,' ノ | |~7 ::::::::::::::`ヽ、 ヽ,、,、,γ' ノ, -‐W~フ { ト、:::::::::::::::::::ヽ、 ∠____ト-┘z__,―' ̄Σ Z  ̄ヽ―-、_ノ '―z_,┴'~
836 :
saki :05/03/04 20:46:26 ID:OuL/L3Ck
>一星 明らかなスレ違いということを理解せずに迷惑なカキコしたおれらが悪いよ。 本当にすいませんでした。
ここまでスレッドにへばりついて反論を繰り返す姿はどう考えても必死で怒っている。
そうでなければこうも固執して自分の正当性を主張する理由が無い。
仮に、君が正しいと認められる事に何の意味があるのかな?君が満足するだけだな?
( ゚д゚ )
m9| y |)
ん、あ、しまった。私としたことが。
>>831 さんありがとう。平静を取り戻そう
<(゚д゚ )>
| y |
これ以降先生はこの一星を無視する。住人の皆さんは気が向いたら適当に煽って遊んであげて欲しい。
荒らし・厨の詭弁に付き合うとろくなことが無いのは先生も今日、身をもって学習した。
(゚д゚ )ノミ
(| y |
気を取り直して次の課題だ。生徒くんや漏れ太郎くんが見てくれているかはわからないが…。
( ゚д゚)
(| ? |
課題:64個の要素を持つ配列変数objx(中身はすべて0〜640の乱数)とobjy(0〜480の乱数)を作成し。
そのすべての場所にpset命令で点を打て。
( ゚д゚) /
(| y |
今回は非常に難しいので、バシバシ質問して欲しい。
( ゚д゚)
m9 |)
先生さんは偉いなあ。 ちゃんとスレの方向性を元に戻そうと努力してるよ。 褒めるべきところは褒めて、やさしく問題点を解説してあげてるし 教える側としては、かくありたいと思える姿だ。
> ここまでスレッドにへばりついて反論を繰り返す姿はどう考えても必死で怒っている。 > そうでなければこうも固執して自分の正当性を主張する理由が無い。 > 仮に、君が正しいと認められる事に何の意味があるのかな?君が満足するだけだな? まあ、一般人は、必死で怒っている反論者としか討論を交わしたことがないのだろうな……。 責めてもしょうがないのかも知れないな。 俺のように、正しいことを証明することが非常に重要と考えている者に会ったことがなかった、 もしくは、見過ごしていたのだろう。非常に残念なことだ。 きりがないので、この辺で終わらせておこう。
>>839 よしよし。いろいろ指摘したいことはまだあるが、ここで終わらせておこうと
判断するのはなかなか出来ないことだ。偉いぞ。
以下は、平常時進行に戻って書き込もうぜ。
先生がせっかく綺麗な幕引きをしようとしたのに>839で捨て台詞か。 馬鹿につける薬は無いとは、まさにこのことだな。
殺伐としたスレに救世主が! .__ ヽ|・∀・|ノ ようかんマン |__| | | ___ . __ |・/ ヽ.ノ∀・|ノ 食べる? |__| | |
ありがたくいただこう ( ゚〜゚)ムグムグ (| y |) それはそうと前回出した課題が意味不明だな。 白いウィンドウの中に黒い点がランダムに64個打たれた物を作るのが今回の目標だが わかりにくければこの課題の内容について詳しく言おうと思う。 遠慮せずに訊いて欲しい>漏れ太郎くん、生徒くん ( ゚д゚) / (| y |
先生!0〜639,0〜479だと思うのですがそこにつっこみはなし?
。 。
/ / ポーン
( д )
| y |)
また失念していたようだな…。
rndの引数に640を使えば0〜639になる、というだけで実際には0〜639と課題を出さなければならなかった…。
(゚д゚ )
(| y |)
うっかりの多い先生ですまない…。修正感謝する
>>844 師
(-д- )
(| y |)
846 :
名前は開発中のものです。 :05/03/04 22:43:22 ID:+8nD2gHc
これでどうですか? dim objx,64 dim objy,64 randomize redraw 0 repeat 64 rnd objx.cnt,640 rnd objy.cnt,480 pset objx.cnt,objy.cnt loop redraw 1 stop もしかして、いきなり参加はまずかったですか?
うーむ、この場が掲示板だという事実から仕方ないこととは言え 一人が回答してしまうと、次の人が純粋に問題を見れなくなってしまうよな。 答えには特定の単語とか決めて、それを含めてやったりすればどうだろう。 答えを見たくなければ2ちゃんブラウザでNGワード登録すればよしということで。
あっさりこなす846にはより高度な課題をこなしていただきたいと思う今日この頃
>>847 胴衣
あと問題見ただけで答えいきなり分かるようならスルーしる
出来る問題解いてもたいして経験値入らんから
んじゃー少し高度な課題。 まず、以下を data.txt として保存する。 10,10 40,10 40,40 10,40 10,10 このテキストは、「x,y」を1つの座標として、それを改行で区切ったものである。 このファイルを読み込み、1行目の座標から2行目の座標、 2行目の座標から3行目の座標…… と、最後まで線分でつないで描画しなさい。 ただし、テキストから読み込んだ座標群を一旦、数値型配列に収め、 その配列を元に線分の描画を行うこと。 データ読み込み、解析、描画の複合問題。
もうすぐ春休みだから、教える側はじっと待っていれば教わる側もやってくるさ。
>>842 こんなもんで。
全角スペースを使って無理やりインデントを入れてみた。コピペするときは注意。
sdim datas, 32000
bload "data.txt", datas
index=0
gosub *GetXY
repeat
old_x = x : old_y = y
gosub *GetXY
if x = "" : break
line old_x, old_y, x, y
loop
stop
*GetXY
getstr x, datas,index,',' : int x : index += strsize
getstr y, datas,index,',' : int y : index += strsize
return
>>851 まず、ファイルの読み込み。
このスクリプトだと、固定サイズ(約32K)の領域を確保しているが、
こういう定数(マジックナンバ)を書くのはなるべく避けるとよい。
例えば、この場合ファイルのサイズが小さすぎる場合は無駄なメモリを使うし、
大きすぎる場合は領域のサイズを超えてしまう場合がある。
これを避ける方法は、例えば exist によって、あらかじめファイルサイズを調べて、その分だけ確保する等。
次に解析。
実は課題文には、解析と描画を明確に分ける為に「一旦、数値型配列に収めて」と書いたが、
このスクリプトは、解析と描画を同時に行っている。もちろん今回のような例ならば、これでもいい。
だが、実際にゲーム製作をする際には、通常は一旦ファイルのデータを解析して、
利用しやすいデータ形式の変数に入れてから使う(何度も使う為)ので、留意しておくこと。
このスクリプトでは、getstr を使う事で、カンマと改行が入り混じったファイルを
シンプルに解析している。また、解析部をサブルーチンにすることで、
可読性・再利用性を高めている。素晴らしい。
共通部分を見つけたら、積極的にサブルーチン・関数にするのはいい事である。
最後に描画。
line で行っているのはいいが、少し残念な所は、カレントポジションを利用していない点。
例えば、最初の gosub *GetXY と repat の間に、pos x, y と書き、
line old_x, old_y, x, y を、 line x, y と書き換える。
これだけで、old_x と old_y は必要なくなり、よりシンプルに書く事ができる。
総評。
サブルーチンを使ったり、getstr を上手く利用したりと、基礎の応用ができている。
細かい点で難があったが、問題なく動作するので誤差の範囲。
この調子でがんばってもらいたい。
人によって、答えが変わると思うので、引き続き、他の人の答えも募集中。
すまん、「一旦、数値型配列に収めて」をすっかり忘れていた。
先生の望んだ流れになってうれしさのあまり言葉も無いぞ
(*゚д゚)
(| y |)
>>846 良いプログラムだ。先生もまさかここまで簡潔にこの処理が書けるとは思わなかったぞ。
目標に対し、最小限の労力で接近する。プログラマとしての素質を十分に持ち合わせているようだ
(-д- )
(| y |)
だがそのプログラムではわざわざobjx,objyを配列にする意義は薄い。
変数の準備と描画を別の箇所に分けることによって、今後の拡張の幅が大きく広がることだろう。
(゚д゚ )
(| y |)
て、もう既に他の先生が教えていらっしゃるな。感謝する。
(゚д゚*)>
(| y |
>>846 いきなりの参加でもまったく問題ない。
だが、ここはゲーム作りの勉強を目的とした場所であって、先生の課題をこなすことが最終目標ではない。
学びに対する真摯な姿勢と確かなプログラミング能力をもって、君からも生徒くんへと積極的に教えてあげて欲しい。
( ゚д゚)
(| y |)
ちなみに、今回のプログラムは一度配列変数に入れることによって、次の段階で縦方向に移動させるつもりだった。
先生のコードは
//変数の準備
dim objx,64 :dim objy,64
repeat 64 :rnd objx.cnt,640 :rnd objy.cnt,480 :loop
//描画
repeat 64
pset objx.cnt,objy.cnt
loop
stop
(゚д゚ )
(| y |)
となっている。
次の流れとしては 絵を表示→移動する絵→複数の移動する絵 というのがよさげかな?
858 :
名前は開発中のものです。 :05/03/05 21:57:58 ID:O3yTUuci
(;゚д゚) (| y |) ↑マジウザスwwwwwwwwwwwwwwwwww
859 :
名前は開発中のものです。 :05/03/05 22:00:35 ID:O3yTUuci
(;゚ д ゚) (| y | ) バラバラ死体↑
860 :
名前は開発中のものです。 :05/03/05 22:07:20 ID:O3yTUuci
(; ゚ д ゚) (| y | ) ↑マジ尊敬wwwwwwwwww
861 :
名前は開発中のものです。 :05/03/05 22:11:59 ID:O3yTUuci
(; ゚ д ゚ ) ) | y | ) ↑マジマヌケスwwwwwwwwwwwww
862 :
名前は開発中のものです。 :05/03/05 22:17:55 ID:O3yTUuci
( ; ゚ д ゚ ) ) | y | ) sage
863 :
名前は開発中のものです。 :05/03/05 22:49:47 ID:WgYqdTzs
何度も言うようだが、俺はちゃんと理性的に発言している。
(*゚д゚) (| y |)
頭がおかしいやつはほっとけ
新たな問題が発生したので書き込ませてもらうが、
>>858-862 の、ここの講師を中傷する書き込みは俺のものではない。
まあ、万が一だが警察沙汰になったような時は、俺がやったわけではないので
IPでもなんでも調査してもらって結構だが、あんな幼稚なことをするものかと否定しても、
俺は今回の議論で、ただ自分を正当化しようとムキになって反論を続けるだけの厨房という
レッテルを貼られてしまっているので、違うと言っても信じてもらえはしまい。
再び言っておくが、俺ではない。ほかの者が、俺を陥れようとしたのだろう。
この議論で俺がさんざんに煽られ、まさにイタズラの恰好の餌食となっているからな。
>>863 何度も言うようだが、俺はちゃんと理性的に発言している。
先生なんで照れてるんですかw でもさすが先生というだけあってしっかり動いてるな… なんか触発されたんで横シューでも作るか
>>867 なるほど!
先生が自機で、死んだらバラバラに飛んでいくんだな。
メッセンジャー使えなくなったwwうぇっwwwwww
先生、過去問まとめていい?
まとめてくれると助かる。 (;゚д゚) (| y |)
872 :
870 :05/03/07 02:32:44 ID:0g5pKTk/
まとめてみた
ttp://nama.ifdef.jp/ore/ 未整形。とりあえず課題と回答のみ。
まとめ方適当ですが後で修正します。
生徒君たちのソースが見れない、あるいは質問&応答で
課題がはっきりしていない部分は発展としてまとめました。
出来れば先生のソース等も載せたいのですがよろしいでしょうか?
独断と偏見で付け足したり削ったりるので、良いかどうかはわかりません。
問題があれば言ってもらえれば暇な時に直します。
とりあえず一応の形になるまでは作りますがそれ以降は無理しません。
他にやりたい方がいれば丸投げします。
以下とりあえずまとめてみての感想
生徒君たちに合わせてあって、流れが一定でないので
そのまま入門書的なものにするのは_
っていうかこれだけの箇所切り抜くだけでもだいぶ疲れたので今日は寝ますおやすみ
うわ文章長いごめん
875 :
ヤンキー :05/03/07 15:02:55 ID:npX/OuDk
VC++5.0持っているんだけど十分か? VC#とVC++どっちがいいのよ? なぁ?
876 :
ヤンキー :05/03/07 15:09:39 ID:npX/OuDk
あげ。 VC#とVC++どっちが簡単なんだ? VC#ってよぉ、プロンプトに文字表示するだけで行数多くねぇ?
>>876 Cには詳しくは無いが、いろんなプログラマの話を聞くに
C++ :本格的なゲームを作るのに適している
C# :そのゲーム製作に合わせたツールを簡単に作るのに適している
だそうだ。あくまで話を聞いたまでで私が実際に使ったわけではないので確かなことはいえない。
あまり役に立たなくてごめんな。
(;゚д゚)
(| y |)
C++ 速度重視 C# 作りやすさ重視 だと個人的には思いますね。確かに基本的なことをさせる時C#のほうが手間になる事がありますが、長く書いていくと、スッキリ出来るのはC#のほうだと思いますよ。
880 :
870 :05/03/07 22:49:28 ID:GR5o23SY
ttp://nama.ifdef.jp/ore/ サイト整形完了。
先生のサンプルや画像も置かせていただきました。
あと、生徒くんたちのサンプルも置かせていただいてますが、
もしここを見てて問題があるようなら言ってください。
削りますから。
にしても生徒くんたちが来ないとこのスレ動かない…。
>>880 おおお、綺麗にまとめられていて感謝感激。
品質が高くなるとさらに改良を求めたくなってくる先生の性分
・画像をpngにしてHPに貼り付けてくれるとソースが見やすくなると思う
・回答例を背景と同じ色にすれば勉強したい人にやりやすいと思うけど…正直これはどうだろう
無理はして欲しくない、もし暇なときに気が向いたらで良い、当然却下でも良い。現状ですごく感謝している
(゚д゚ )
(| y |)
や、偉そうでごめんな。本来は私がやるべきことだというのに。
(*゚д゚)
(| y |)
確かに、生徒君や漏れ太郎君来ないな…。
|
| ゚д゚)
と ノ
| ノ
|
882 :
870 :05/03/07 23:29:26 ID:GR5o23SY
今日は暇なんで弄る余裕あります。 で、自機の画像をpngで表示しました。 >回答例を背景と同じ色にすれば っていうのはHSPのエディタと同じ色という意味ですか?
>>882 よくあるじゃん。文字を範囲選択しなければ見えないようにするやつ。
つまりは
<div style="background-color=blue;color=blue">hello</div>
ってことだ。
884 :
882 :05/03/08 00:25:04 ID:Je5ieIEb
>>883 ああ、なるほど。
要は回答を見えないようにってことですね。
了解でーす。
ガンバレヨー
サンプルは、一番初め、自機が左に傾いているようだが、これはし様?
>>876 簡単(理解しやすい)かどうかと言うとC##
だが、ゲームを好きなように作るって言う意味ではC++
どっちにしろゲームを作ろうと思ったらどっちも難しいな。
いや、俺的にはHSPでゲーム作る方が難しいと思うのだが。 正直自分で大量の変数管理できるほど、頭の回転よくないです。 グローバル変数はやめて〜。
でもC系は何をどうしたらいいかいきなりつまづく可能性はあるのかなぁとかさ。 グラフック系のライブラリとかも自力でなんとかせんとだめだし、探すにしろね。 HSPはゲームを作れるようにできてるから簡単なのかなと思ったんだが、プログラム慣れしてたら逆に面倒臭いのかね?
890 :
名前は開発中のものです。 :05/03/08 02:23:47 ID:/GlJmWmv
今コンソールでタイピングソフトを作ってるのですが、 やはりGUIでタイピングやシューティングのゲームを 作ってみたいと思っていたところこのスレを発見しました。 HSPで進んでいるようですが、C++での新規参加はOKですか? GUI関係もそうですが、最近C++をはじめたのでクラスの設計など ソースにいちゃもん付けていただけるとありがたいです。 Cについては「猫でもわかる〜」や「WisdomSoft」で書いてあることは あらかたやりました。
>>890 その場合新たな師を募ることになる希ガス
それでもいいならいいんじゃない?
言語は限ってないみたいだし
892 :
名前は開発中のものです。 :05/03/08 19:36:21 ID:hcDGSq/E
>>886 m9(^Д^)プギャー
お前頭悪いな、さすが小学生
ビジュアル面を考えて狙ってやってるんだろ。直そうと思えば代入するだけで済むし
よっぽど先生の粗探しをしたくてしょうがないんだな。
>>890 先生が現れるかどうか、分からないがとりあえず歓迎しよう。
>>890 先生やるほど時間ないから簡単な事くらいしか答え返せないけど、先生現れる事を見越して質問とか出してみたらどうだ?
今行き詰まってる事とかある?
>>890 先生と名乗れるほど実力はありませんが、先輩としてアドバイスしましょうか。
良い人キタ━━━━━━(゚∀゚)━━━━━━ !!
先生、そろそろ新課題投下希望であります!
899 :
890 :05/03/10 02:10:33 ID:5ndxJFNa
>>899 SetCurPosとprintfを合わせた関数を
Consoleクラスに作ったほうがいいのでは
ここまでできてたらGUIに作り変えるのは余裕かも
実際面倒なのはアニメーション…
そういえばこれってAdapterパターンかな… クラス設計ならデザインパターンとかいいかもな 知ったかぶってごめんなさい
漏れ太郎くん生徒くん見てるか? ( ゚д゚)ノシ (| y |
903 :
896 :05/03/10 21:26:36 ID:2W6JaBHt
こんばんは、先輩++です。 >890氏が希望するいちゃもんを探すべく、ソースをチラチラと眺めてみました。 >900氏の言うとおりかな?と思います。 _getch、puts、printfなど標準入出力関数をConsoleのメンバに含めれば、 タイピングゲームロジックとユーザーインターフェースを分離できて 移植も簡単だと思いますよ。 ConsoleクラスをCreateWindow関連APIとDrawTextあたりで書き直せば そのままWin32アプリになる。とか、これこそオブジェクト指向の醍醐味だと 勝手に考えています。
904 :
先輩++ :05/03/10 21:42:24 ID:2W6JaBHt
>890氏 ”そろそろGUIに移行してみたい”との事ですが。 まずは、どんなGUIライブラリがあるか調べる事をオススメします。 そしてサンプルなどを試してみるといいでしょう。 使い心地をレビューしているサイトもあります。 そうやっているうちに、モチベーションも上がりますよ。 追記 >900氏 >>そういえばこれってAdapterパターンかな… 普通の所有関係にしか見えませんでした(汗
【GoFのデザパタ23個言えるかな?】 ポケモン103匹(だっけ?)言えるかな?という歌が昔あったけど。 それのパロディで、デザインパターン23個言えるかな?という歌。もともと英語な名前なので 歌には成りにくい気がするが、そこは気合でカバーだ。 ちなみに、この歌はインタプリンタ・パターンで処理される。
907 :
890 :05/03/10 23:15:03 ID:5ndxJFNa
>タイピングゲームロジックとユーザーインターフェースを分離 なるほど。CUIとGUIで違うのは入出力なんだから、分けた方が確かに移行しやすいですね。 905師匠,先輩++師匠ありがとうございます。 デザインパターンも気になりますが、とりあえず グラフィックスライブラリを探してみました。 wxWidgetsというのを見つけたので試してみようと思いますが、おすすめとかありますか?
俺いきなりDirectXから入ったな・・・ C++とWINDOWSでゲーム作るならありなんだけどな。 先生が現れにくいだ罠
910 :
先輩++ :05/03/11 22:43:52 ID:AbU1dJLg
>>907 wxWidgetsは、クラス設計がしっかりしていて良いと思いますよ。
オープンソースだしサンプルも豊富なので、勉強になるでしょう。
そしてマルチプラットホームなので、より多くの人に触れてもらえます。
そして、合わせてSTLを勉強するのがいいかもしれません。
先日のサンプルでstringを使っていたようなので、予備知識はあるのかな?
オススメのグラフィックスライブラリですが、
890氏のセンスと方向性から考えると”SDL”です。
でも、まだちょっと早いかもしれませんね。
911 :
890 :05/03/12 07:13:43 ID:NGSHnYXS
>>先輩++師匠
STLは知らないです(^^;
stringクラスが便利そうだったので、それだけ使ってみました。
>>SDL
なるほど。そういうものがグラフィックスライブラリなんですね。
wxWidgetsなんかはGUIツールキット(?)というらしいですね
課題もないようなので、とりあえず↓みたいなのを作ろうと思います。
ttp://yakumo.ifdef.jp/ 文字や画像の動かし方をまったく知らないので、頑張ります。
912 :
890 :05/03/12 10:08:53 ID:NGSHnYXS
wxWidgetsの環境整えるのに3時間もかかったorz
913 :
先輩++ :05/03/12 10:39:46 ID:YPDRX3sX
>>912 890氏おつかれさま。
demo/lifeをビルドして動かしてみてください。癒されますよ(笑)
>文字や画像の動かし方をまったく知らないので、頑張ります。
life.cppにヒントが隠されてますね。キーワードは"OnPaint"です。
#私はどうしても抽象的な表現になってしまうので、良く解らないときは指摘してくださいー。
>>991 STLはC++標準ライブラリで、C++のテンプレート機能を使った言語機能拡張用の
ライブラリだと思えばよい。
C++単体では難しい文字列の扱いや、連想配列、ソート処理などの
定型アルゴリズムの提供などがその機能だ。
知らないかもしれないが、既に使ったことがあるかもしれないぞ。
例えば cout << "hello"; のcoutは、STL提供のクラスだし。
SDLは、グラフィックスだけではなく音声や、他のマルチメディアデータも扱える。
915 :
890 :05/03/12 18:36:23 ID:5+dcY9mk
コンストラクタについて質問があります。 以下はwxFrameクラスを継承したmyFrameクラスのコンストラクタです。 MyFrame::MyFrame() : wxFrame(param) { ... } 上を MyFrame::MyFrame() { wxFrame(param); } としてしまうと、正常に動かないんですけどこれはどういう動作をしているんでしょうか? 基底クラスのコンストラクタを呼んでいるような気もしますが。
916 :
先輩++ :05/03/12 20:02:34 ID:YPDRX3sX
>>915 MyFrame::MyFrame() : wxFrame(param)
{
...
}
これはparamを引数にして基本クラスのコンストラクタを呼んでいます。
MyFrame::MyFrame()
{
wxFrame(param);
}
これは、 ↓※1
MyFrame::MyFrame() : wxFrame()
{
wxFrame(param); ←※2
}
※1の部分が省略されている、と考えていいと思います。
つまり基本クラスにparamが渡っていません。
そして※2では、thisの指す自分の基本クラスとは別の、wxFrameのインスタンスを生成してます。
(しかも受け取る変数がないので、捨てられるー)
#メンバ関数にも同様に出来たと思ったけど、忘れました(笑)
917 :
890 :05/03/12 21:54:13 ID:89LPNz6E
>>先輩++師匠
なるほど。ありがとうございます。
とりあえず文字を動かすことができたのでアップしてみました。
http://yakumo.ifdef.jp/ ちらつきがひどいです(^^;
ダブルバッファリングのヒントをいただけるとありがたいです。
もう一回訊いてみる 漏れ太郎くん、生徒くん見てるかい? (゚д゚ )ノミ (| y |
919 :
先輩++ :05/03/13 00:59:17 ID:U7rZXpXs
>>917 お疲れ様です。サンプル拝見しました。
えー残念ですがDLLが足りないようです(;´ω`)
配布するDLLの数・サイズを考えると、スタティックリンクの方がいいかもしれません。
試しにビルドしたのでUPします。かなり小さくなりますよ。
http://gamdev.org/up/img/2425.zip ↑VC++6.0スタティックリンク版
あと、text.cppで数箇所newしてるようですが、対応するdeleteが見つかりません。
スマートポインタであれば大丈夫かもしれませんが・・・
私もwxWidgetsを良く知らないので、確認してみてください。
>ちらつきがひどいです(^^;
>ダブルバッファリングのヒントをいただけるとありがたいです。
すでに自分でヒント発言しておりますが(;´ω`)
「ダブル バック バッファ GDI」この辺をキーワードに検索してみてください。
920 :
890 :05/03/13 01:23:24 ID:aR/cbc+l
>>先輩++師匠
>DLLが足りないようです
あれ?変ですね。wxWidgets入れてない別のマシンで試してみましたけど、
wx24_bcc.dllを同じフォルダに入れたら動きましたよ。
>対応するdeleteが見つかりません
完全に忘れてました(^^;
http://yakumo.ifdef.jp/ こんな感じかな?という微妙な具合で試してみました。
背景のちらつきはなくなりましたが、動く文字が微妙にちらついています。
なぜだろう・・・。
一応生きてます・・
922 :
890 :05/03/13 01:53:25 ID:aR/cbc+l
>スタティックリンク版 BorlandC++でリリースビルドしたあと、圧縮しても650kBでした。 でかいです(;;
923 :
先輩++ :05/03/13 02:06:12 ID:U7rZXpXs
>>920 私の環境だと
"CC3250MT.DLLが見つからなかったため・・・"で実行できないですねー( ´ω`)
原因究明中です。
>>922 DLLは3M近くになりますね。
単体を落としてテストするなら、上記の様な場合もあるし、
スタティックリンクの方が良いのかな?と思ったのでしたー。
924 :
890 :05/03/13 02:24:01 ID:aR/cbc+l
>CC3250MT.DLL すいません。BorlandのランタイムDLLも必要だったんですねm(_ _)m さっきのものとセットでアップしておきました。
925 :
先輩++ :05/03/13 08:33:34 ID:U7rZXpXs
>890氏 ダブルバッファリング版確認しました。 Borlandのランタイムだったんですね。 ちらつきも、気にならないレベルだと思います。 次はwordの本格実装とキー入力あたりでしょうか? (1を聞いて10を知る890氏に追い越されそう。)
926 :
先輩++ :05/03/13 09:49:09 ID:U7rZXpXs
927 :
890 :05/03/13 11:06:13 ID:aR/cbc+l
おはようございます。
ttp://yakumo.ifdef.jp/ STLのリストを使ってWordクラスを管理してみました。
結構いい感じになってきました♪はじめからレベル20なのはチェックのためです。
打てる自信はありません(笑
928 :
890 :05/03/13 11:07:37 ID:aR/cbc+l
リストで一つ疑問。
今は下のようにして全てのワード要素にアクセスしているのですが
list<Word>::iterator p = wxGetApp().m_word.begin();
while(p != wxGetApp().m_word.end()){
p->GetS(str);
mdc.GetTextExtent(str,&width,&height);
//文字がDEADLINEまで行ったとき
if(p->Move(width,height)==FALSE){
p = wxGetApp().m_word.erase(p);
wxGetApp().m_status.ExpUp();
}
mdc.DrawText(str,p->GetX(),p->GetY());
++p;
}
はじめは
p = wxGetApp().m_word.erase(p); を
wxGetApp().m_word.erase(p); と書いていていて、
なんだかかくかくした動きになっていました。
ttp://yakumo.ifdef.jp/arc/04_2.zip eraseで指定する「p番目の要素」をlistがはじめから数えていくのであれば、
要素を消してチェーンをつなぎ変えた後に同じ番号でアクセスしようとすれば
「p+1番目の要素」にアクセスできると考えたのですが、違うみたいですね。
エラーで落ちてくれれば、明らかに間違いなので分かった気にもなるんですが
微妙に遅くなるだけなので、余計に気になります。
listは双方向リストだよ それに対してvectorは動的配列
931 :
890 :05/03/13 21:21:24 ID:1p4RFzkw
ぱんぱかぱーん☆とりあえず一段落ついたのでアップ。
一応ゲームになってるのでやってみて感想いただけるとありがたいです。
ttp://yakumo.ifdef.jp/ ちょっとHTMLに力を入れているのは一緒にやる人を募っているから(汗
ようやくゲームっぽいものになって、ゲームレベルの設定にちょっと悩みました。
レベルアップで急に速くなっても焦るし、ずっと遅いままでも飽きるし。
難しいところですね。
次はタイトル画面を作成してみたいと思います。
932 :
890 :05/03/14 03:01:28 ID:+duNXoLo
勢いで「ぱんぱかぱーん」とか書いてる自分が恥ずかしい。
タイトル画面作成にあたって、現在のクラス設計を見直してみました。
今ウィンドウ関係で存在するクラスが
MyAppクラス
MyFrameクラス
MyCanvasクラス
MyAppクラスでMyFrameのインスタンスを作成してウィンドウ枠を作っています。
MyFrameはMyCanvasのインスタンスを作って、MyFrameにMyCanvasを貼り付けています。
(MyCanvasはwxWindowの派生クラスでwxFrameクラスの基底クラスもwxWindowクラス
なので、こういう考え方でいいのかちょっと自信がない)
そこで、今まで必要なメンバ(Statusクラスなど)をMyAppクラスで持っていたのですが
ゲーム自体はMyCanvasクラスで完結しているので、全部MyCanvasに持ってきました。
本題のタイトル画面はもう一つwxWindowを継承したTitleCanvasクラスを作って
MyFrameクラスから切り替えようと考えているんですが、
設計はこういう感じでいいのでしょうか?
毎回長文ですいません。
>>929 すいませんが、どういった意味合いでvectorを引き合いに出されているのか
いまいちつかめません。
933 :
先輩++ :05/03/14 07:39:01 ID:WaNF1Fa4
>>890 氏
個人的意見ですが、
MyCanvasクラスは描画クラスで完結し、
MyAppまたは別のクラスでゲームロジックを実装するかな。
現在MyCanvas::Drawがゲームロジック+バックバッファ処理になっているのを
ProcGame() //キー入力によるゲーム処理
Update(bitmap); //バックバッファへ描画の更新
Flip(dc,bitmap); //バックバッファをDCに転送
に分ける
時間がないので、またゆっくりソース見たいと思います。
934 :
漏れ太郎 ◆SQ2Wyjdi7M :05/03/16 18:38:49 ID:8Jv2NPFo
こっちもかろうじて・・・・
ぉ、見てるのか。 | | ゚д゚) と ノ | ノ | では課題を出すぞ、漏れ太郎くんも好きなところから始めて欲しい。 max=100 //準備 dim x,max :dim y,max repeat max rnd x.cnt,640 :rnd y.cnt,480 loop //描画 repeat max pset x.cnt,y.cnt loop stop このソースの意図を汲みなさい。 ( ゚д゚) / (| y | 実行しても良いし改変するのも良い。 わからない命令や用法があればここで訊きなさい。 大体で良い、大体でいいんだ。何が起こっているのかわかれば。
936 :
生徒 :05/03/16 23:02:33 ID:Wbdg++QN
>930 まとめサイトがあっただなんて!感謝です。 メッセはMSNとヤフーどっち派ですか?
呼び込み乙
>>936 MSN派。
私と会話する程度の用法なら捨てアドで全く差し支えない。
(*゚д゚)
(| y |)
まとめサイトを作ってくれた
>>870 =
>>872 さんには感謝の言葉も無い。
(-д- )
(| y |)
それはそうと、935さんが私に代わって課題を出してくれたようで感謝。
「理解しろ」というのは良い課題の出し方だと思う。これからは見習わせてもらおう。
く(;゚д゚)
| y|)
以前javaの指導を希望した753です。 これからAA作成ソフトを作ろうと思っていますので、わからなくなったら聞きにきますので師匠どの(誰?)よろしくお願いいたします。
動きがないね・・・
943 :
生徒 :05/03/20 01:05:31 ID:Dr+aazqG
春休みに入りました。時間に余裕ができるはずなので >870さんのまとめサイトを活用しつつ 判らないことがあればここで質問させていただきます、よろしくお願いします
こちらこそ、よろしくお願いします。
>>943 どうかがんばってくれ。
(゚д゚ )
(| y |)
IDがなんだかかっこいいな。ドクター。
(*゚д゚)
(| y |)
946 :
名前は開発中のものです。 :2005/03/24(木) 21:32:14 ID:DQbzum5c
保守sage (д゚ ) | y |) ,,,,,,,,,,
それは自分が賢者という自惚れですか
あめゆじゆとてちてけんぢや
なかなか進まんね…
そうだな…生徒くんにはがんばってほしいところだ。 ( ゚д゚) (| y |)
あ、普通のブラウザからだと人大杉で書き込めなかった。。。
952 :
名前は開発中のものです。 :2005/04/07(木) 14:18:49 ID:Eed41nA+
保守
953 :
名前は開発中のものです。 :2005/04/07(木) 15:16:39 ID:Gn25ways
こんなスレがあったのか 僕も最近HSPを始めたんです参加していいですか?
やりたいことがはっきりしてるならそれを言って先生を募ればいいと思う。
HSPでシューティングならとりあえずまとめサイトから?
>>930
955 :
名前は開発中のものです。 :2005/04/07(木) 15:59:18 ID:Gn25ways
ゲムデブにあったテトリスのをやろうかなって考えてます。
段階的学習?このスレでやるのん?まあいいか。
>>955 はHSPどの程度できるのー?
957 :
名前は開発中のものです。 :2005/04/07(木) 16:39:19 ID:Gn25ways
>>956 すいません。嫌ならやめときます。
段階的学習スレに活気がなかったので・・・
HSPは1週間前に始めたばかりなのでもぐらたたきを作ったくらいです。
いや、別に嫌なわけではなく。 スレ違いだとか言われるとめんどうだなぁとか思っただけだから別に良いよ。 助けになれるならここでやろう。 もぐらたたき作れるなら結構良い感じだとおもう。 Level1はHSPだから問題ないとして、Level2〜3ぐらいはおk?
959 :
名前は開発中のものです。 :2005/04/07(木) 17:18:29 ID:Gn25ways
3はよくわかんないけどできそうだと思う。
960 :
958 :2005/04/07(木) 17:23:08 ID:XKS6z519
じゃあとりあえずそれを。 わからないところがあれば出来る範囲で答えます。 …教えるほうが分からんとしゃれにならんのでとりあえずこっちもテトリス作ろう。 他の先生いればカモーン。
961 :
名前は開発中のものです。 :2005/04/07(木) 17:27:08 ID:Gn25ways
がんばります。どもです。 と言っても今から用事があるので明日になるかも知れないです。
962 :
958 :2005/04/07(木) 17:40:59 ID:XKS6z519
むしろゆっくりの方がこっちも気が楽でいいです (`・ω・´) b!
963 :
名前は開発中のものです。 :2005/04/07(木) 19:40:05 ID:GZ9ot05X
なんかSDK入れないとだめっぽいですね… よくわからんですがデバッグ版かもしれないです ちともうちょっと改良してからまたうpしてみます
次スレは980に任命する。
操作方法とか何も載せてなかった(´・ω・`) 左右は←→、落下は↓、回転はスペースとCtrlですよ、と。
(´・ω・`)さて、一々後で確認するのも面倒なのでHSPでのテトリスについて
>>961 君に伝言ですよ、と。
とりあえず貴方のレベルが分からないので、分からないところに答えるというところから始めようと思います。
その際、このスレの流れを汲んで課題&回答で進めていくつもりです。
分からないところを解決できるよう誘導するつもりですのでご心配なく。
それで出来れば以下のコトを教えてください。
・他のプログラミング言語に触れたことがあるか
・HSPの配列は自由に扱えるか
・ラベルとgosubを使ったルーチンがわかっているか
・HSPのモジュールが扱えるか(これは使えなきゃべつにいいです)
自力でもぐらたたき作ったそうなので調べる力や構成力は僕なんかよりあるんじゃないかと踏んでます。
HSPの基礎の基礎からやる必要があるのかちょっと分からないです。
要望等あれば言ってください。
あと、僕からの希望。
テトリスできるまでやりましょう。
んでは、よろしくおねがいします。
…次スレか、早いもんだね(´・ω・`)
7行プログラミングスレで発表されたHSPテトリス。80桁×14行。 ただし、短くする為に外法をいくつも使っているので、真似してはいけません。 (といっても、解読すら難しいと思いますが…) V=20:screen ,200,400:title "0":dim B,4:dim C,10,V:dim D,10,V:randomize:F=2:boxf dim A,4,7:A=1,4,5,6,5,6,10,14,5,6,9,13,5,6,9,10,2,6,5,9,1,5,6,10,1,5,9,13:repeat wait 1:if G=0{rnd N,7:memcpy B,A,16,,16*N:H=3:I=-4:J=0:G=1}J-F:if J<0{K=0:L=1 gosub Z:if M=0{N=0:repeat 4:O=B.cnt\4+H:P=B.cnt/4+I:if P<0{N=1:break}C.O.P=1 loop:if N{break}dim Q,V:R=0:repeat V:S=cnt:N=0:repeat 10:N+=C.cnt.S:loop:if N>9{ Q.cnt=1:R+:palcolor 255:boxf 0,cnt*V,200,cnt*V+18}loop:if R>0{wait 50:color:boxf E+R*R:title ""+E:N=19:repeat V:S=19-cnt:if Q.S=0{memcpy C,C,40,N*40,S*40:N-}loop memset C,,N*40}G=0}J=100}stick T,8,1:K=T&4!0+(T&1!0*-1):L=T&8!0:gosub Z:if T&16{ dim U,4:memcpy U,B,16:repeat 4:N=B.cnt\4:B.cnt=N*4+3-(B.cnt/4):loop:K=0:L=0 gosub Z:if M=0{memcpy B,U,16:gosub Z}}redraw 0:repeat V:S=cnt:repeat 10:K=cnt*V palcolor D.cnt.S*9:L=S*V:boxf K,L,K+18,L+18:loop:loop:redraw:loop:dialog "over" end:*Z:M=1:repeat 4:O=B.cnt\4+H+K:P=B.cnt/4+I+L:if (P>19)|(O<0)|(O>9):M=0:break if P<0{continue}if C.O.P=1{M=0}loop:if M=0{return}memcpy D,C,10*V*4:H+K:I+L repeat 4:O=B.cnt\4+H:P=B.cnt/4+I:if P>=0{D.O.P=1}loop:return
>>967 回転についてなんですが
自分は4x4で7つのブロックを作り、そのまま90度回転させた方法でやってるんですが
967のテトリスの回転の仕方は違いますよね。
本来その回転が正しいと思うんですが、その回転を作る方法が思いつきません
配列であらかじめ作る、くらいしか思い浮かばないんですが…
よかったら教えてほしいです(´・ω・`)
>>971 残念ながら、お察しの通り配列にあらかじめパターンをいれちゃってますよ、と。
最初は普通に回転させてたんですけど、どうにも違和感があったので
いくつかフリゲのテトリスをやってみて動かしやすいものを採用してみました。
回転させるなら、それぞれのブロックのサイズに合わせて4x4,3x3,2x2等を使い分ければ同じような感じになると思いますけどめんどくさいですし(´・ω・`)
それに全部配列で保持しておくと、回転、移動、落下が可能かどうかのチェックで
同じ処理が使いまわし出来るのでちょっと便利かなと思ってみたり。
でもまあこの辺は人によって作り方変わっちゃうんでしょうけど。
>>970 はじめて見ますた。興味しんしんです(`・ω・´)
バラして解読してみよっと。