トップページgamedev
295コメント113KB

厨房なおいらにプログラム教えるスレ

■ このスレッドは過去ログ倉庫に格納されています
000102/05/28 20:36ID:pts0IQX6
ゲームの改造、製作等のプログラムに興味をもっています。
厨房に分かる程度優しく教えてくれた方にはお礼をイイマス
0002名前は開発中のものです。02/05/28 20:39ID:???
>>1
#include <stdio.h>
main()
{
 printf("1:ぐー 2:ちょき 3:ぱー\n");
 getchar();
 if (0)
  printf("あなたの勝ちです\n");
 else
  printf("あなたの負けです\n");
}

じゃんけんプログラム
000302/05/28 20:40ID:pts0IQX6
プログラムってワードでやるんですかい?
0004202/05/28 20:41ID:???
ぼくは
copy con janken.c
でやりました
000502/05/28 20:57ID:pts0IQX6
ふむ俺は一回だけAOCってゲムでコンピューターのAI作りにチャレンジした
のですが基本はやっぱどのプログラムもオナジなんですか?
0006名前は開発中のものです。02/05/28 21:05ID:???
>>5
2にあるじゃんけんに勝てたら教えてあげます
0007sage02/05/28 21:16ID:ss8Cyg9U
http://www.vector.co.jp/vpack/filearea/win/prog/lib/by_trend.html
0008名前は開発中のものです。02/05/28 21:20ID:9aQkf712
>>1頑張レロ( ゚д゚)レロ 目標はどのへんなんの?
000902/05/28 21:23ID:???
CDチェックやプロテクトを解除したり、やりたいゲームと
同じ物が作れるくらいになりたいんですけど
0010名前は開発中のものです。02/05/28 21:36ID:???
>>9
毎日6時間以上みっちり勉強したとして1年以上かかりますね。
それくらいの覚悟はありますか?
0011名前は開発中のものです。02/05/28 21:41ID:???
>>10 んな肩肘張らんでも・・ ユクーリ マターリと
0012 02/05/28 23:26ID:???
こういうスレを立てる1の中で、
プログラムが組めるようになった人っているのでしょうか?
0013名前は開発中のものです。02/05/29 00:05ID:???
>>12
たいてい根性なし=無理
0014名前は開発中のものです。02/05/29 00:10ID:???
>>1
このサイトがおすすめだよ。全部解決すると思う。
http://www.google.com/
0015 02/05/29 00:42ID:???
>>14
オマエ親切すぎ。
0016名前は開発中のものです。02/05/29 01:04ID:???
ここの方が親切だよ
http://game.2ch.net/gamedev

>CDチェックやプロテクトを解除したり、やりたいゲームと
>同じ物が作れるくらいになりたいんですけど

とにかくコピーしたいんだね。素晴らしいこころざしだよね。板違いだろうね、きっと・・・・・・
0017あぼーんNGNG
あぼーん
0018名前は開発中のものです。02/05/29 13:14ID:???
>>1
シネチンカス
0019名前は開発中のものです。02/05/29 23:30ID:???
>>9
>CDチェックやプロテクトを解除したり

ワロタ。
真性ですね。
0020名前は開発中のものです。02/05/31 02:34ID:cnKSAeAU
エクセルで偽さめがめ
http://plaza28.mbn.or.jp/~Q_A_Q_A/same.lzh
0021名前は開発中のものです。02/10/08 23:58ID:???
漏れら極悪非道のageブラザーズ!
クソスレもageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧   ∧_∧    age
 (・∀・∩)(∩・∀・)    age
 (つ  丿 (   ⊂) age
  ( ヽノ   ヽ/  )   age
  し(_)   (_)J
0022名前は開発中のものです。02/10/30 18:33ID:???
漏れら極悪非道のageブラザーズ!
レス30以下のゴミスレはageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧   ∧_∧    age
 (・∀・∩)(∩・∀・)    age
 (つ  丿 (   ⊂) age
  ( ヽノ   ヽ/  )   age
  し(_)   (_)J
0023あぼーんNGNG
あぼーん
0024あぼーんNGNG
あぼーん
0025あぼーんNGNG
あぼーん
0026名前は開発中のものです。02/11/17 07:07ID:???
             人ヾ
           / ゚o\
          (´Д`O )
           (⊃o⊂゚)              
             U U
    ______∧_______
    自動age
0027あぼーんNGNG
あぼーん
0028あぼーんNGNG
あぼーん
0029あぼーんNGNG
あぼーん
0030あぼーんNGNG
あぼーん
0031名前は開発中のものです。02/11/26 06:21ID:6H6WKYg4
>1
は矢口。
0032名前は開発中のものです。02/11/26 06:22ID:KxMnxrQw
                ___
              /´,,,._`ヽ
             ( ノ _.ヾ、)
              f、 ,_.ノゞ´   このスレが邪魔だと思うならここへ逝きなさい・・・
             _| ー,´_    http://qb.2ch.net/test/read.cgi/saku/1032639736
            / / /__ ヽ、
           / 〈"`´   ,/ミ)━・~~~
           / __,,.-'' ̄/ノ ヽ、 ヽ
           (__,,.-'' ̄ | / ./
             ゝ  彡⌒〉/
          /⌒ヾ   ^ヽ
          / ''"γ⌒ヽ   i""'';;
          /  /;|゙ "i_)_ノ,,,,.;;''ミ
         /  /,,|  |      ,,;;;ミ
        / /  |  |'┰""""""
        / 〈   .|  |.┃
      /_ノ )  | .| ┃
     <二-'"l」   /  |)┃
             |_ノ/」 ┃
           <__ノ  ┃
                ━━┻━━
0033名前は開発中のものです。02/11/27 23:45ID:urwDlVOm
                ___
              /´,,,._`ヽ
             ( ノ _.ヾ、)
              f、 ,_.ノゞ´   このスレが邪魔だと思うならここへ逝きなさい・・・
             _| ー,´_    http://qb.2ch.net/test/read.cgi/saku/1032639736
            / / /__ ヽ、
           / 〈"`´   ,/ミ)━・~~~
           / __,,.-'' ̄/ノ ヽ、 ヽ
           (__,,.-'' ̄ | / ./
             ゝ  彡⌒〉/
          /⌒ヾ   ^ヽ
          / ''"γ⌒ヽ   i""'';;
          /  /;|゙ "i_)_ノ,,,,.;;''ミ
         /  /,,|  |      ,,;;;ミ
        / /  |  |'┰""""""
        / 〈   .|  |.┃
      /_ノ )  | .| ┃
     <二-'"l」   /  |)┃
             |_ノ/」 ┃
           <__ノ  ┃
                ━━┻━━
0034あぼーんNGNG
あぼーん
0035あぼーんNGNG
あぼーん
0036あぼーんNGNG
あぼーん
0037あぼーんNGNG
あぼーん
0038あぼーんNGNG
あぼーん
0039あぼーんNGNG
あぼーん
0040あぼーんNGNG
あぼーん
0041 02/12/11 03:31ID:tWeRlQcw
cout << "氏ね!" << endl;
0042あぼーんNGNG
あぼーん
0043名前は開発中のものです。02/12/12 06:14ID:7TpbOwlK
(・∀・)
0044あぼーんNGNG
あぼーん
0045あぼーんNGNG
あぼーん
0046あぼーんNGNG
あぼーん
0047あぼーんNGNG
あぼーん
0048名前は開発中のものです。02/12/20 03:03ID:QffIE8Jm
>>1
終了厨やアホどもには構わずがんばれ
0049あぼーんNGNG
あぼーん
0050名前は開発中のものです。02/12/22 17:47ID:X4FB4gsc
test
0051あぼーんNGNG
あぼーん
0052あぼーんNGNG
あぼーん
0053あぼーんNGNG
あぼーん
0054あぼーんNGNG
あぼーん
0055あぼーんNGNG
あぼーん
0056名前は開発中のものです。03/03/17 10:12ID:aY1zWYZF
タタタタタ ・・・((((ノ~ 〓~)ノちゅ〜して〜ん♪
0057名前は開発中のものです。03/03/17 15:09ID:e6EJtBay
>>41
std::cout << "namespace付いてない!" << std::endl;
0058あぼーんNGNG
あぼーん
0059あぼーんNGNG
あぼーん
0060あぼーんNGNG
あぼーん
0061あぼーんNGNG
あぼーん
0062名前は開発中のものです。03/03/28 10:26ID:/PXM+L8Q
日 凸  ▽ ∇ U
≡≡≡≡≡≡≡  ∧ ∧   / ̄ ̄ ̄ ̄ ̄
 U ∩ [] % 曰 (゚Д゚ ;) < こねぇなぁ。
_________|つ∽)_  \_____

―――――――――――

 ━┳━   ━┳━
 ̄ ┻  ̄ ̄ ̄┻ ̄ ̄ ̄ ̄
0063あぼーんNGNG
あぼーん
0064あぼーんNGNG
あぼーん
0065あぼーんNGNG
あぼーん
0066あぼーんNGNG
あぼーん
0067あぼーんNGNG
あぼーん
0068あぼーんNGNG
あぼーん
0069あぼーんNGNG
あぼーん
0070あぼーんNGNG
あぼーん
0071あぼーんNGNG
あぼーん
0072あぼーんNGNG
あぼーん
0073あぼーんNGNG
あぼーん
0074あぼーんNGNG
あぼーん
0075あぼーんNGNG
あぼーん
0076あぼーんNGNG
あぼーん
0077あぼーんNGNG
あぼーん
0078あぼーんNGNG
あぼーん
0079あぼーんNGNG
あぼーん
0080あぼーんNGNG
あぼーん
0081あぼーんNGNG
あぼーん
0082あぼーんNGNG
あぼーん
0083あぼーんNGNG
あぼーん
0084あぼーんNGNG
あぼーん
0085あぼーんNGNG
あぼーん
0086あぼーんNGNG
あぼーん
0087あぼーんNGNG
あぼーん
0088名無しさんは14才04/04/02 17:51ID:1AJKyAtY
このスレもらいま〜す♪
気に入らなかったら言ってね。また引っ越すから。

前にいたスレはこちら。
http://pc5.2ch.net/test/read.cgi/gamedev/1074347252/l50
0089名無しさんは14才04/04/02 17:52ID:1AJKyAtY
作ろうとしているもの。
・5人以上のパーティが作れる2D-RPG。
・WinでもMacでも動く。Java1.4で動かす予定。
・最低スペックはセレロン400MHz。にしたいけど、無理ならG4-700MHzくらい。

今できていること。
・画像の合成とスプライトの表示。
・レイヤ数はメモリの許す限り。

目標
・今年の冬くらいまでにシステム作って、来年の夏休み頃にゲーム完成。

サポートWebサイト
・ありません。ごめん。
・わたしの作業がある程度進んだらシナリオ担当の子が作ってくれるはず。
・今動いてるものはあるけど、素材の版権問題で表に出せないんです。

あいことば
・まったりまったり。
0090名無しさんは14才04/04/02 17:55ID:1AJKyAtY
まったりと、マップ作りを再開します。

なんだかんだで一ヶ月もあいちゃったなあ。
なんかもうだいぶ忘れてるような……。
0091名無しさんは14才04/04/05 12:48ID:bdlvMmxL
サイトにエロゲー置いたよ、
と言われて、そんなのわたしに言わないでよ、とか思いながら見てみると、
脱衣ブロック崩しでした。

でもそのアプレット、Macでは動きがへん。
納得いかないのでちゃんと動くようにバグ取りました。作者さんには言ってないけど。

そんな感じで週末が終わってしまった。……ゲームづくり進んでません。
0092名無しさんは14才04/04/06 16:33ID:tqG4sRiY
2DRPGでも橋の上通ったり下くぐったりはあるわけで、
ただチップを並べるわけにもいかないなあと悩む今日この頃。

ツクールの通行方向設定もいいアイデアなんだけど、
それだけじゃ見た目が変になっちゃうケースもあるんだよねぇ。

うーん。困った。
0093名前は開発中のものです。04/04/08 17:55ID:FOOsZfjV
保守
0094名無しさんは14才04/04/08 20:45ID:EYc/VHke
……ひどい。こっそり使ってたのに。
0095名前は開発中のものです。04/04/08 21:08ID:zYUiyYGS
nanikonosure?
0096名前は開発中のものです。04/04/08 23:12ID:f/FOzfPE
>92
マップを2層にして、下の層はキャラより下になる物、上の層はキャラより上になる物って感じにして、キャラは上の層と下の層の間を歩く。
橋を上の層にしておけば、キャラは橋の下をくぐれるよ。
0097名無しさんは14才04/04/14 15:03ID:1Ri/Hh0o
>96サンありがと♪

実はもう一個悩んでたのがあって、
ツクラーで物好き(?)な人なら試した人あるかもしれないけど、
ドアを開けて中に入ろうとすると、ドア枠の上に乗ってしまうという現象が!
高さと奥行きをいっしょに扱おうとするからややこしいんだと思うんだけど、
別々に扱うのはめんどうで……。
0098名無しさんは14才04/04/14 21:16ID:WVF8F4l8
……結構下がってたと思うんだけど、なんで上がってるんだろ。
0099名無しさんは14才04/07/06 16:21ID:JRkAJNZ1
xcodeでcvsを使う方法がよくわからない……。
CVSROOTはどこに書くのかしら。

1.2は2で1.5は5?
えらい人の考えることはよくわからないですね。
わたしは当分1.4でいきます。
0100ハーピィ2005/08/06(土) 05:18:59ID:rEkfsggh
E・∇・ヨノシ <100ゲット♪♪
0101名前は開発中のものです。2006/05/30(火) 18:07:50ID:1w90onBH
>939
一応横スク。
メタル ヴァり〜知らん 知らん
マリオみたいな感じで。

>940
何もやらんよw
リーダーみたいなもんだわさ。
0102名前は開発中のものです。2006/06/04(日) 00:13:51ID:SVxQmFAG
ステフが〜だった場合

・絵師
他のメンバーは絵に引かれてやってくる人多し、
生産低いOR逃亡で一気に崩壊の危険高い
逆、絵師がみんなをリードしていき完成まで行く可能性が高い。

・PG
他のメンバーを素材をして利用、
企画としては長く続く。
会話は、 材料の指示などでつまらない。
あと、精神的に異常がある人多し、問題多々。

・音や
どうでもいい。
フリーで十分なのが得られるので、
神音ではないかぎり必要性を感じない。
モチベは低いだろう。

・シナリオ
神シナリオでないと集まらない。
シナリオは批判など多いので、タフなやつではないと生き残れない。

・無能
本人のやる気なし。
一番、終わりやすい。
逃亡率100%
0103名前は開発中のものです。2006/06/04(日) 19:09:16ID:SVxQmFAG
0104名前は開発中のものです。2006/07/14(金) 12:27:43ID:zYRCrdZI
age
0105名前は開発中のものです。2007/08/06(月) 00:23:03ID:iEhcOMmo
age
0106名前は開発中のものです。2010/08/29(日) 10:55:58ID:JxxRNzCC
age
0107社内ニート ◆OpY5DDvqSw 2011/01/24(月) 23:12:11ID:Ipp1jCxA
勤務時間中、暇なんでC++ってやつを勉強してゲームを作ってみたい。
プログラムはほぼ初心者。
今、Kagでゲームを作り始めて、TJSをすこしだけ理解した。

言うまでも無いと思うが、俺がゲームを作り上げることが出来るかどうかはお前達しだいだ。
どうか力を貸してほしい。

作りたいゲームは、「ポトリス」「アサルトギア」「ガンバウンド」などに代表されるタイプの
放物線を描く弾を敵に当てるゲーム。
どういうゲームなのか、知らない人は以下のURLの「対戦!ねこ戦車」をプレイしてもらえばすぐに分かる。
ねこ戦車はブラウザゲーなので、すぐに始めることが出来る。
アカウントの作成も必要ないのでぜひ一度おためしあれ。

ttp://mogera.jp/gameplay?gid=gm0000000578
0108社内ニート ◆OpY5DDvqSw 2011/01/24(月) 23:24:23ID:Ipp1jCxA
まずはこれだけのことをこなしたい。


@ウインドウを表示する。
A地形を表示し、その上に戦車を置く。
B地形の凹凸に応じて戦車自体の角度が変わる。
C車体角度とは別に砲台角度を変更できる。車体角度+砲台角度が発射角度になる。
Dスペースキーを押す時間に応じて弾の発射力が変わる。弾は放物線を描いて飛ぶ。
E弾のぶつかった地形が、着弾点を中心に円形にえぐれる。
F一定以上の角度の地形は移動できない。
0109社内ニート ◆OpY5DDvqSw 2011/01/24(月) 23:27:51ID:Ipp1jCxA
その前に、C++をやるためにコンパイラとかいうものが必要らしいが、
いろいろあってよく分からない。
ネット対戦を前提にして、なにを使えばいいか教えてくれ。
0110社内ニート ◆OpY5DDvqSw 2011/01/24(月) 23:34:59ID:Ipp1jCxA
ネット対戦を念頭に置くならこれを使って勉強を始めればいいのか?

.NET Framework SDK
0111名前は開発中のものです。2011/01/26(水) 00:44:33ID:kFO3lhjv
誰か反応してやれよw
0112社内ニート ◆OpY5DDvqSw 2011/01/27(木) 00:43:21ID:KMchEVI+
そう、誰か反応しなさい。
すべてお前等の努力にかかっている。
0113名前は開発中のものです。2011/01/27(木) 01:44:02ID:XFrHSXwq
>>109
http://www.microsoft.com/japan/msdn/vstudio/express/
ここからVisualC++をダウンロードして使え
0114社内ニート ◆OpY5DDvqSw 2011/01/28(金) 05:32:21ID:q5eIDIBU
VisualC++インストールしました!
今日の勤務時間中にC++の入門ページを読んで
画像の表示方法でも調べてみます。
帰宅後、また教えてください。

まずは、地面の表示とキャラクターの表示をしてみようかと思うのですが、
これには、地形とキャラクターの当たり判定と、キャラクターにかかる重力の計算が必要になると思います。
このあたりから教えてもらっていいですか?
一般的なプログラムの勉強の仕方としては、
もっと別のことから段階を踏んでステップアップしていくべきなのかもしれませんが。
0115名前は開発中のものです。2011/01/28(金) 13:54:30ID:vQFViJxG
>>114
キャラクターの下側の座標が地面の座標を超えたら
キャラクターの下側の座標を地面に合わせる。
重力はキャラクターのY座標に速度を常に足していく。
キャラクターが地面についてなかったら
速度に加速度を足していく。
地面についたら速度を0にする。
0116名前は開発中のものです。2011/01/28(金) 16:30:22ID:Wmo75Tax
スタート地点がおかしいw
0117社内ニート ◆OpY5DDvqSw 2011/01/28(金) 21:56:26ID:q5eIDIBU
>>116
スタート地点がおかしい?俺にはわからん。

>>115
そういうこと。
で、具体的にどうすればいいかが分からない。


今日の勤務中にVisualC++の説明をしたホームページで勉強したが、
基礎の部分が長すぎて読みきれなかった。
今週いっぱいくらいかかるだろう。

ところで、地形の素材を作ってみた。
背景と地形の画像は別々に用意している。
ほかに、白黒2色の画像で、地形だけ黒くした画像も、当たり判定つけるときに役に立つんじゃないかと
思って用意した。

ttp://www.dotup.org/uploda/www.dotup.org1388328.jpg
0118社内ニート ◆OpY5DDvqSw 2011/01/28(金) 22:06:03ID:q5eIDIBU
よーし!それではVisual C++を発起動するぜ。
0119社内ニート ◆OpY5DDvqSw 2011/01/28(金) 22:10:15ID:q5eIDIBU
フォームを開いたぜ。
プロジェクト名は 2tank だ。
とりあえずは仮名で。
そのうちかっこいい名前を考えるぜ。
0120社内ニート ◆OpY5DDvqSw 2011/01/28(金) 22:25:53ID:q5eIDIBU
ちなみに、ステージの広さは横がウインドウサイズの3倍、縦が2倍になるんですが、
画像を表示させるのはpictuerboxを使えばいいんですか?
このさい、pictuerboxの使い方も教えてほしいけど、そこは自分で調べます。
pictuerboxってのがどうも、画像を表示させるのに使う道具らしいってのは感で分かりますが、
こういう場合は他の道具で表示させたほうがいいのかもしれないから、やるまえに教えてください。
0121社内ニート ◆OpY5DDvqSw 2011/01/28(金) 22:54:10ID:q5eIDIBU
ピクチャーボックスを二つ使って地形と自機のJPG画像を表示させた。
今日はここまで。
この後当たり判定をつけるにはどうするか教えてもらえるまで待ちます。
01221152011/01/28(金) 23:48:52ID:vQFViJxG
>>121
定期的に処理を呼び出す方法は調べたの?
ゲームは1秒間に30コマくらいは処理を繰り返さないとだよ。
あとpictuerboxって処理が重い気がするな。
まあ俺も初心者だけど知ってる限りアドバイスする。
0123名前は開発中のものです。2011/01/29(土) 00:39:05ID:4JzBtMNC
地形をビットマップにするか折れ線で定義するかによって
実装の難度が変わってくると思うよ

>>108のEを入れるか入れないかが分かれ目かな
0124社内ニート ◆OpY5DDvqSw 2011/01/29(土) 01:57:18ID:4jAEgNIs
>>122
pictuerboxって重いのか。
それじゃあ、どうやって画像を表示させたらいい?
あと、定期的に処理を呼び出す方法とかも知らないので教えてください。

>>123
E=着弾地点を中心として地形が円形にえぐれる
これは絶対にはずせません。
穴を掘って敵をうめたり、穴の中に隠れたり、敵をフォールアウトさせたりと
細かい戦略がこのゲームの面白いところですので。
地形を折れ線で定義するとか、ビットマップで定義するっていうのはどうやるんですか?
今、私が出来るのは描いた絵を貼り付けることだけです。
調べるヒントになることだけでもいいので教えてください。
01251152011/01/29(土) 02:11:40ID:Heb2U9Yg
>>124
windows用のゲームはだいたいdirectXが使われてるよ。
まあ使い方は結構めんどくさいけどね。
定期的に呼び出すのはスレッドを作ってsleepするか
WM_TIMERを使うといいよ。
ビットマップで地形を表示したいなら
ビットマップのフォーマットを調べて
座標に変換するようにすればいいと思う。
0126社内ニート ◆OpY5DDvqSw 2011/01/29(土) 11:25:08ID:4jAEgNIs
>>125
一度に言われても分からない。
とりあえずビットマップのフォーマトを調べてみます。
0127社内ニート ◆OpY5DDvqSw 2011/01/29(土) 11:29:27ID:4jAEgNIs
あ、そうだ。
pictuerboxを使うと重いって話もあったんで、他の画像の表示方法も教えてください。
01281152011/01/29(土) 11:37:38ID:Heb2U9Yg
>>126
一度に聞いたのはお前じゃんw
ビットマップより先に画像表示が先だと思うよ。
俺は画像表示にdirectX9のスプライト機能使うのがいいと思う。
0129社内ニート ◆OpY5DDvqSw 2011/01/29(土) 11:51:52ID:4jAEgNIs
わかりません
01301152011/01/29(土) 12:16:07ID:Heb2U9Yg
>>129
何が分からないか書かないのかよw
0131名前は開発中のものです。2011/01/29(土) 12:54:49ID:DhIF6aTX
>>127
アクションゲームじゃなくてターン制のゲームだったら
とりあえず描画が重くてもなんとかなるんじゃないかな

>>124
やりたいことを完全に実装したいなら、
まず、ステージの広さ分の仮想画面で地形を定義して、
ウィンドウサイズ部分を切り出して表示する処理が必要だよ
0132社内ニート ◆OpY5DDvqSw 2011/01/29(土) 15:23:40ID:4jAEgNIs
とりあえずdirectx9をダウンロードしました。
説明はまたあとで読みます。
>>131
これまでのこれ系のゲームはターン制だったけど、
それって先行がかなり有利な場合があるんです。
そういう不平等をなくすために、ターン制は半分廃止にします。
なので、リアルタイムの通信が必要で、軽く出来るところがあるなら軽くしときたいです。
で、

>ステージの広さ分の仮想画面で地形を定義して、
>ウィンドウサイズ部分を切り出して表示する処理

この部分、具体的にVisualC++でどうやったらいいかとか、教えてもらえません?
01331152011/01/30(日) 00:25:05ID:oIfYeeKo
>>132
1枚の画像の表示はできたの?
それをただ地形の形になるように並べるだけだよ
0134社内ニート ◆OpY5DDvqSw 2011/01/30(日) 15:28:26ID:EOf3QC/a
>>133
pictuerboxでJpg画像を表示することは普通に出来ました。
地形の形になるよう並べるって言うのはどういうことですか?
まったくわかりません。
0135名前は開発中のものです。2011/01/30(日) 15:50:20ID:doNhUFz6
ビットマップで地形を表そうとしているのだとすると
背景画像と地形とマスク(地面の有無)の3枚の画像があるんだよね?

pictureboxとやらでちゃんと合成できるの?
できるとしたら、処理速度的にどうなの?
0136社内ニート ◆OpY5DDvqSw 2011/01/30(日) 16:20:50ID:EOf3QC/a
>>135
知らない。
やっぱり地形の有無を示すためのマスク画像ってのが必要なんだな。
で、それをどうやったら表示させることが出来る?
01371152011/01/30(日) 17:19:35ID:oIfYeeKo
>>136
jpegでやるんなら透過使えるんだからマスク画像なんて必要ないでしょ。

処理速度がpictureboxだと遅くてアクションだときついって言ってるのに
そこは考えないの?

directXの場合地形を1枚の画像でやろうとすると
ビデオカードが大きいサイズに対応してなかったりするから
512pix以内に地形画像を分割して並べて表示するのがいい
0138社内ニート ◆OpY5DDvqSw 2011/01/30(日) 17:58:42ID:EOf3QC/a
>>137
だから、具体的にやり方を言え能無し。
01391152011/01/30(日) 18:02:43ID:oIfYeeKo
>>138
directX9のスプライト機能使えって言ってるだろ
教えてあげてるのにその態度はなんだよ
01401152011/01/30(日) 18:17:09ID:oIfYeeKo
>>138
お前は馬鹿だからもっと具体的に教えてやらないとダメみたいだな
directX9 スプライトで検索しろ
0141名前は開発中のものです。2011/01/30(日) 18:22:47ID:1iJSsxNE
こんなスレばっかりだな
0142名前は開発中のものです。2011/01/30(日) 20:14:11ID:hpGZU6lP
こんなだから会社でも仕事もらえないんだろうな
人間として生きる価値ないよお前
0143社内ニート ◆OpY5DDvqSw 2011/01/30(日) 20:27:12ID:EOf3QC/a
>>142
新店舗をまかされたはいいが、客が来ないだけだ。
0144社内ニート ◆OpY5DDvqSw 2011/01/30(日) 20:34:53ID:EOf3QC/a
>>139-140
最初からそういいたまえ。
0145名前は開発中のものです。2011/01/31(月) 00:02:20ID:dpE+y+Ks
なんだこいつら

まずは気負わないで出来そうなことから部分的にやると良いと思うよ
平坦な地面を左右に動くだけのプログラムを作るとか

あといきなりDirectX9は敷居が高い気もする
11は簡単らしいけど知らん
0146社内ニート ◆OpY5DDvqSw 2011/01/31(月) 00:40:03ID:XYfTEsg4
>>145
なに、directx9は敷居が高い?
使わなくてもやれるの?
平坦な地面の上をキャラクターが左右に動くだけのプログラム。
それでもいいからやり方教えてくれ。
0147名前は開発中のものです。2011/01/31(月) 00:49:28ID:GHHyFSyz
>>146
つDXライブラリ
画像程度なら簡単に表示できる。
まずはこれをインスコして動かすだけでもやってみ。
01481152011/01/31(月) 01:21:01ID:1vMX8mjp
DXライブラリ使ったことないから分からないな
directX9でもスプライトならサンプルコピペで簡単に画像表示できるはずだよ
0149社内ニート ◆OpY5DDvqSw 2011/01/31(月) 02:26:57ID:XYfTEsg4
>>147
それ、DXライブラリっての聞いたことがある。
ゲームを作りやすいものだって、ニコ動で誰かが言ってた。
仕えるようになるまでの設定もめんどくさそうだけど、詳しく説明してくれてるページがあるんで
ちょっとやってみる。
0150名前は開発中のものです。2011/01/31(月) 11:17:45ID:Sn2Wsqmc
お前には無理だ
0151社内ニート ◆OpY5DDvqSw 2011/01/31(月) 23:56:32ID:XYfTEsg4
あるホームページで、以下の様な説明がありました。


> まず適当なグラフィックファイルを以下のフォルダにコピー等で入れてください。
>
>    VisualC++6.0 又は VisualStudio.net の場合
>       サンプルプログラム用フォルダ( DxSample ) の中の『VC』というフォルダ。


VisualC++2010Expressの場合、どこのフォルダに画像を入れればいいですか?
01521152011/02/01(火) 00:10:29ID:7s78HQyQ
>>151
作られたexeファイルのあるフォルダに入れて実行すればいいんじゃない?

あとDXライブラリ使うならやり方しらないからアドバイス出来ないな
俺はPCでのゲーム作りはdirectX9のコピペから初めた。
まあコピペだからdirectXの本質はあまり理解してないが
とりあえず形あるゲームは作れた。
0153社内ニート ◆OpY5DDvqSw 2011/02/01(火) 00:37:51ID:rB9l6gPH
DXライブラリうめぇwww
これなら俺にもなんとかなるんじゃねw
>>151にあるような『VC』とかいうフォルダ探すのをあきらめて
ためしにプロジェクトフォルダに入れてみたら出来た。
でも画像サイズがでかすぎる。
調節しないと。
ってか、説明ページを読みながらやったら、
ウィンドウじゃなくて全画面表示されるようになったし。
次はウィンドウを表示させよう。
0154社内ニート ◆OpY5DDvqSw 2011/02/01(火) 00:38:59ID:rB9l6gPH
>>152
せっかくだけど、DXライブラリでやるわ。
わるいね。
協力ありがとう。
01551152011/02/01(火) 00:41:18ID:7s78HQyQ
ちゃんとお礼を言えたのか
とりあえず傍観しようかな
0156社内ニート ◆OpY5DDvqSw 2011/02/01(火) 00:48:18ID:rB9l6gPH
>>155
お前の書き込みは一切役に立ってねぇんだよ。
いてもいなくても同じだからとっととうせろwww
とか言ったら荒れるからな。
俺大人すぎwww
0157社内ニート ◆OpY5DDvqSw 2011/02/01(火) 01:47:16ID:rB9l6gPH
というのは冗談です。

水平な地形を表示して、
自機を表示して、
自機が左右に動くようにしました。

自機が残像みたいになるので、
1ループするごとに画像が消えるようにしました。
そうしたら地形も消えました。

地形画像と自機を別のレイヤーに表示させることって出来ませんか?
レイヤーってのがないんでしょうか。
0158社内ニート ◆OpY5DDvqSw 2011/02/01(火) 02:28:37ID:rB9l6gPH
>>145の、水平な地面を移動させるのと、地面と画面の端の当たり判定はできた。
0159社内ニート ◆OpY5DDvqSw 2011/02/01(火) 02:31:32ID:rB9l6gPH
次は、ぎざぎざの絵との当たり判定をつけることだな。

しかし、関係ないが腕が痛い。腱鞘炎?
力が入らん。
0160社内ニート ◆OpY5DDvqSw 2011/02/01(火) 03:01:59ID:rB9l6gPH
ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110201025729.jpg

右のような画像との当たり判定をつけるにはどうすればいいの。
DXライブラリで使用するべき関数とか教えて。
0161名前は開発中のものです。2011/02/01(火) 10:05:09ID:XHAImUt7
>>160
透明な小さい四角をギザギザと同じような形に並べといて
その四角と当たり判定つける
01621152011/02/01(火) 12:56:55ID:7s78HQyQ
>>160
int grandY[地面の幅]; //地面のY座標
getGrandY(grandY); //地面のY座標取得
//当たり判定:charactorXは地面の左端からの座標 charactorYはキャラの下側の座標
if(charactorY>grandY[charactorX])charactorY=grandY[charactorX];


void getGrandY(int *grandY)
{
地面のY座標取得の方法
案@(難易度大、スマートさ大)
地面の画像ファイル(jpg?)を解析して座標を求める。
案A(難易度中、スマートさ中)
地形が記憶された白黒のビットマップを用意して、そこから座標を求める。
案B(難易度小、スマートさ小)
手で入力
}
0163社内ニート ◆OpY5DDvqSw 2011/02/01(火) 20:01:32ID:rB9l6gPH
>>161
縦×横 1x1ピクセル の画像を並べるというような手作業はムリ。
もっとおおざっぱでもいいんじゃないかって思うかもしれないけど、
ミリ単位の地形の凹凸が戦略に影響するゲームだから、それはちょっと困る。

>>162
肝心の部分が分からないんですが

案@ 画像ファイルを解析して座標を求める
って具体的に何をするんですか?

案A
こういう方法を今日思いつきました。同じことですか?

今日の勤務中に、 GetPixel という関数を発見しました。
指定点の色を取得できるらしい。
これを利用して、自機の下の座標が白なら当たってる。
黒なら当たってない。
というふうにやれば複雑な地形でも当たり判定をつけることが出来ると思ったんですが、
レイヤ表示させることができないとこの方法は無理です。
白黒の地形画像の上に本物の地形画像を重ねるわけですから。
逆に言えば、レイヤ表示ができればなんとかなると思うんで、どうにかできる人がいたらどうにかしてください。

B
>>161と同じ方法ですか?
そういう書き方されても分かりません。
0164社内ニート ◆OpY5DDvqSw 2011/02/01(火) 20:15:27ID:rB9l6gPH
レイヤ表示の仕方はお前らがどうにかしてくれるだろうから、
白黒画像の地形に当たり判定をつける作業に入る。
01651152011/02/01(火) 20:55:51ID:7s78HQyQ
>>164
@のやり方
http://ex.osaka-kyoiku.ac.jp/~j099608/test/text11.html
ここを参考にして考えよう。
ただし俺も分からんから頑張れ。
まあこの方法が完成したら白黒画像作る必要がなくなる。

Aのやり方
http://www.kk.iij4u.or.jp/~kondo/bmp/
ここを参考にして考えよう。
@より簡単だけど結構むずかしいと思うよ。

Bのやり方
grandY[0]=1px目の地面のY座標
grandY[1]=2px目の地面のY座標
.....
地面の幅の分だけこれを繰り返して入力しろ。

1番簡単だからおすすめはBだよ
0166社内ニート ◆OpY5DDvqSw 2011/02/01(火) 21:02:22ID:rB9l6gPH
>>165
ほんとに分かってんの?
01671152011/02/01(火) 21:04:29ID:7s78HQyQ
>>163
getPixcel調べたらGDIの関数みたいだね。
GDI使ったことないから使えるか分からん。
01681152011/02/01(火) 21:06:30ID:7s78HQyQ
>>166
@は俺にも分からんって言ってるじゃん
Bがお前が1番できる確率が高い方法
0169社内ニート ◆OpY5DDvqSw 2011/02/01(火) 21:13:29ID:rB9l6gPH
Bは>>161と同じ理由で却下。
ネコ戦車であそびおわったからそろそろ作業開始するわ。
0170社内ニート ◆OpY5DDvqSw 2011/02/01(火) 22:39:05ID:rB9l6gPH
 //色コードを取得 
 int Cr ;
 Cr = GetPixel( tankX , tankY ) ;


GetPixelで取得した 色コード ってのがどういうもんなのかよくわからん。
#FFFFFF とかってやつかと思ったんだけど、良く分からん。

なので、取得した色コードがどんな物なのか、表示させてみたい。
どんなふうに書けばいい?

それか、白の色コードをいきなり教えてくれてもいい。
0171名前は開発中のものです。2011/02/01(火) 22:50:51ID:OfaZ5sGu
>>162
上4行の方法だと水平な洞穴は作れないのと違う?

>>163
白黒画像を地形画像のαチャネル扱いしておけばレイヤー合成できるよ。

っていうか、着弾するごとに地形が変化するようにしたければ
仮想画面の取り扱いは必須だと思うよ。

>>170
COLORREFで検索するといいよ。
01721152011/02/01(火) 23:10:20ID:7s78HQyQ
>>171
>>108に洞穴作るなんて情報書いて無いじゃん
0173社内ニート ◆OpY5DDvqSw 2011/02/01(火) 23:24:11ID:rB9l6gPH
>>171
ありがとうございます。
さっそくCOLORREFで調べてみます。

今現在、白黒画像をαチャンネルとして用意して、
背景が見えるようにしてるんですが、
getpicxelでαチャンネル画像の色コードを取得することは出来ないので・・・
まあ、これについては後でかんがえます。
0174社内ニート ◆OpY5DDvqSw 2011/02/02(水) 01:29:59ID:QU1cQpLp
>>171
ありがとうございました。
DXライブラリ総合スレをみたり、いろいろ試して、
なんとか地形の上を動くようになりました。

方法は、
自機の下の座標の色を取得して、
黒(地形以外の場所)なら自機の位地を下げる。
白なら(地形の中にめりこんだら)自機の位地を上げる。
というものです。
一応地形の上を動いてはいますが、まったく納得がいかないので
しばらくは地形の当たり判定をうまくする方法と画像をレイヤ化する方法を探します。

それと、ここに居てもあまり有用な情報が得られ無いので
今後はDXライブラリ総合で名無しとして質問しながら製作を進めます。
進展があれば報告くらいにはきます。

ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110202012444.jpg
01751152011/02/02(水) 08:15:48ID:XeB+1toB
せっかく俺が教えてゲーム完成させようと思ってたのに詰まらん奴
0176社内ニート ◆OpY5DDvqSw 2011/02/02(水) 20:03:29ID:QU1cQpLp
>>175
いや、まじでちゃんと教えてくれよ。
教えてくれるならここでやる意味もあるってもんだけどよ・・・。


ところで、今日の16時30分ころにひらめいた。
仕事中だったのでメモ帳に書いて自宅にメールを送って、今実行。
こういうふうにやった。

なお、
機体の下の地形の当たり判定を調べる座標のことは 接地判定点 と呼ぶことにします。
用意した画像は @背景 A地形 B地形とそれ以外の部分の白黒画像 Cタンク

-----------------------------------------------------------------
・描画先を裏画面にする

以下ループ
・B白黒地形を読み込む
・接地判定点の色を得る。
・画像を消す
・@背景、A地形画像を読み込む。
・接地判定点の色が黒ならタンクの座標Yを下にすこし移動させる。
・Cタンクを表示する。


ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110202200118.jpg
0177名前は開発中のものです。2011/02/03(木) 02:38:59ID:twk/nf1h
これが人にモノを聞く奴の態度かよ
クズ過ぎワロタ
0178社内ニート ◆OpY5DDvqSw 2011/02/03(木) 08:46:28ID:/1zp6P08
じゃあ、態度を改めるのでちゃんと教えてください。

接地している地形に応じて機体の角度を細かく変更させたい場合はどうすればいいですか。
01791152011/02/03(木) 10:57:46ID:UjEDRWhX
>>178
atanで地面の傾きの角度を求めてそれを機体の角度に反映させる。
0180名前は開発中のものです。2011/02/03(木) 15:01:09ID:vhC2F1F2
設置点を2点にする。
0181社内ニート ◆OpY5DDvqSw 2011/02/03(木) 19:23:19ID:/1zp6P08
ただいま。巻き寿司かってきたぞ。恵方向きながら食おう。
ところで恵方ってどっちだ。

>>179
atanの存在を教えてくれてありがとう。
でも、角度を求めるには2つの点が必要だけど、
それをどうやって求めるかってところでなやんでる。

>>180
 おれもそれを考えた。
でも、getpixelって重いらしいから、多様しちゃだめだって書いてたので気になる。
しかも、実はこれが3つ目の接地点。
 いつの間に2つ目の点を作ったかっていうと、
接地点が黒の場合、機体の位地はどんどん下がって、白に1ドットめり込んだ状態でとまる。
その後、横に移動して、山みたいな地形にぶつかると、中にもぐりこんでしまうので、
今度は接地店が白の場合、機体の位置をどんどん上げていくようにする。
そうすると、接地店が白と黒の間でいったり来たりする結果になるので、
接地点を縦に2つ並べて、上の点が黒で下の点が白なら機体の上下を中止するっていうふうにした。
 これで、タンク1つにつき3つのgetpixel。
4:4の対戦なら12のgetpixel。
……
まあ、かんがえても仕方ないから、接地点とタンクを増やしてやってみる。
これでだめなら、当たり判定のしかたを根本的に改める必要がある。
0182社内ニート ◆OpY5DDvqSw 2011/02/03(木) 19:52:37ID:/1zp6P08
あと、総合スレで

Getpixel より GetPixelSoftImage のほうがいけてるぜぇ〜。

との助言をいただいたので、そっちに変更しました。
GetPixelSoftImage って、 赤 緑 青 透過度 の4つを得ることが出来ますが、
これらのうち、一つだけを得ることってできるんでしょうか。
1つだけなら処理も軽くなる気がするんですが。
0183社内ニート ◆OpY5DDvqSw 2011/02/03(木) 19:58:52ID:/1zp6P08
後一つ、
atanを使うには、一番最初に

#include "math.h"

って書けばいい?
必須ヘッダとか書いてたけど、良く分からん。
0184社内ニート ◆OpY5DDvqSw 2011/02/03(木) 20:00:57ID:/1zp6P08
さらに質問。
while
{ }

の中に、さらにwhileって入れていい?
01851152011/02/03(木) 20:27:36ID:UjEDRWhX
>>182
GetPixelSoftImageの重さが気になるなら
配列用意してロード時に読み込んじゃえばいい

>>183
#include <math.h>
標準ライブラリだからこう書く

>>184
自分でややこしくならないなら入れてもいい
0186社内ニート ◆OpY5DDvqSw 2011/02/03(木) 20:38:59ID:/1zp6P08
whileの中にwhile入れてもいいのか。
じゃあ、エラーが起こってる理由は別だな。

配列って、
000000000000000
000011111100000
001100000011000
001100000011000
000011111100000
000000000000000
みたいな感じで構造体ってのを並べてマップ表示するやつだろ?
構造体の縦×横が1ドットのものを全部並べるとしんどいからだめだって
>>161の時に言ったじゃん。
0187社内ニート ◆OpY5DDvqSw 2011/02/03(木) 23:15:39ID:/1zp6P08
地表での上下動をふせぐために、
接地点を縦に2つ増やし、
タンクを8つに増やした。
Getpixelは全部で16個。
5ミリ秒ごとに16のGetpixelをやったけど特に問題なかった。

地形との接触角度を求めるために1タンクごとにGetpixelを3つにするのは問題なさそうだぁ!

というか、やりながら思いついたんだけど、
各タンクの角度を1台のPCにやらせる必要はない。
それぞれのプレーヤーのPCに自分のタンクの角度を計算させ、
計算後の機体角度と位地座標を他のプレーヤーに渡せばいい。
01881152011/02/04(金) 00:15:14ID:zvmJIej4
>>187
http://www.kk.iij4u.or.jp/~kondo/bmp/
ここを見て作れって言っても全然理解できてないみたいだったから
しょうないから俺が白黒画像読み込み関数を作ってやった。
俺も情報系じゃない大学生だけどC言語の基本をちゃんと勉強すれば
このくらい作れるんだよ。
http://www.nigauri.sakura.ne.jp/src/up17895.zip.html
0189名前は開発中のものです。2011/02/04(金) 00:15:33ID:kBxB8dJD
技術的に面白そうなので、自分も同じゲームを作ってみようかな
01901152011/02/04(金) 00:21:25ID:zvmJIej4
>>188
ミスってた
fp=fopen(fileName,"r");
をfp=fopen(fileName,"rb");に直して使ってくれ。
0191社内ニート ◆OpY5DDvqSw 2011/02/04(金) 00:59:07ID:3/Y06AUg
>>189
ポトリス系のゲームはやったことある?
プログラムできるんなら君に任せて、
俺が画像や音の素材作りをして、共同制作しませんか?

>>188
それを使えばだいぶ軽くなりそうだな。
実際使ってみてどうなるか分からないけどわざわざありがとう。
0192社内ニート ◆OpY5DDvqSw 2011/02/04(金) 01:05:30ID:3/Y06AUg
>>188でいただいた物の中身を見たら、
getImagePixel(x,y)
0193社内ニート ◆OpY5DDvqSw 2011/02/04(金) 01:10:44ID:3/Y06AUg
失礼、途中で書き込んでしまった。

>>188でいただいた物の中身を見たら、
getImagePixel(x,y)
って言う物があったんですが、これって
getpixelみたいに重くないんですか?
弾が当たったら、その部分が大きく円形にえぐれるんで、
着弾するごとにそのマップデータを書き換える必要があるんですが、

白黒画像に塗りつぶした円を描画

getimagepixelを利用して配列を作る

ってやってたら死ねると思うんですが、
1と0で出来た配列に、直接円形に変化させることもできますか?
できたらかなり助かりますが。
0194社内ニート ◆OpY5DDvqSw 2011/02/04(金) 01:51:38ID:3/Y06AUg
          /|
         /  |
       /   |
      /     | x
    /      |
   /        |
 /θ        |
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ 
      y        

この角度、θを求めるためには

θ = atan2 ( y , x ) ;

って書けばいけるかと思ったんですが、だめでした。
どう修正すればいいですか?
0195名前は開発中のものです。2011/02/04(金) 03:33:52ID:IKXR4Y/u
ぶっちゃけ、重いかどうか考えずに作ったほうがいいよ。
今のマシンじゃちょっとやそっとじゃ重くならないし。
速度が気になるんなら関数をラップして、
完成して余裕ができたら速い処理に置き換えるよう工夫するとかしたほうがいい。
0196社内ニート ◆OpY5DDvqSw 2011/02/04(金) 03:43:43ID:3/Y06AUg
>>195
初心者に分かるように言えYo!ファッキュー!
でも、重いかどうか考えずに作ったほうがいいってのはそうだな。
人間の感覚で重いと思っても、コンピューターにとってはそれほどでもなかったりするし。
思い切って、getpixelいっぱい使っても平気だった。
どんどん作っていったほうがいい。
それで動かなかったらそのとき考えよう。

で、>>194は?
0197社内ニート ◆OpY5DDvqSw 2011/02/04(金) 03:46:24ID:3/Y06AUg
あとよ、こういう企画してると、神みたいなタイミングで

「PC壊れちゃったんでしばらく作業できません」

ってことがよくあるが、ほんとにあるんだな。
俺は風呂が壊れた。
水風呂だ。
0198名前は開発中のものです。2011/02/04(金) 03:49:52ID:cMbvhy2t
ATAN2 関数
http://excel.ara3.net/func/atan2.htm
0199名前は開発中のものです。2011/02/04(金) 05:11:15ID:IKXR4Y/u
>>194
斜辺と接辺の内積を取る。単位はcosθ。
ラジアンとかで取得したかったら、内積値に逆三角関数で求められる。
0200社内ニート ◆OpY5DDvqSw 2011/02/04(金) 08:49:52ID:3/Y06AUg
630
事故解決しました。
XとYに(double)つけたらよかった
02011152011/02/04(金) 15:21:47ID:zvmJIej4
>>193
getImagePixelはメモリから直接読みだしてるんだからgetpixeより全然軽いはず。
http://www.nigauri.sakura.ne.jp/src/up17897.zip.html
↑は円と四角形を描画するプログラムも入れた奴
テストをあまり行ってないからバグがあったら教えてくれ
0202社内ニート ◆OpY5DDvqSw 2011/02/04(金) 19:52:36ID:3/Y06AUg
ありがとうございます。
これで描く塗りつぶし円は、ビットマップ画像に描画して、その後再び
getImagePixelでビットマップを0と1の配列にするんですか?
02031152011/02/04(金) 20:33:30ID:zvmJIej4
>>202
言ってることが良く分からんが
このプログラムはloadImageでファイルから配列bufに画像を読み込む。
fillRect、drawCircle、fillCircleでbuf内に入ってる画像に書き込む。
getImagePixelでbuf内の画像の色を取得出来る。

お前はgetPixelで白黒画像を読み込んでるみたいだからgetImagePixelに
置きかえれるはず。
0204社内ニート ◆OpY5DDvqSw 2011/02/04(金) 20:57:47ID:3/Y06AUg
それじゃ、ゲーム内にそのまま使うことはできないですね。
着弾して地形がえぐれるたびにgetimagepixelを桁違いに多用することになるから。

fillCircleでbuf内に入ってる画像に書き込んでからgetImagePixelで画像の色を取得
というのが、無駄が多すぎる気がする。

ただ、ゲーム開始時のステージデータ読み込みにはすごく有効だと思う。
あとは、着弾点をどうやって変形させるかさえなんとかなればいける。

というか、あらかじめgetpixelを使って配列を作っておけばいいね。
02051152011/02/04(金) 21:04:55ID:zvmJIej4
>>207
fillCircleは地形を変化させる時に使えばいいだけで
getImagePixelは1回loadImageで白黒画像を読み込んじゃえば使えるよ。
02061152011/02/04(金) 21:06:05ID:zvmJIej4
>>204
0207社内ニート ◆OpY5DDvqSw 2011/02/04(金) 21:13:55ID:3/Y06AUg
んん?
fillCircleを使った後にgetimagePixelを使わないと、
配列はfillCircleを使った前と後で変わらないんじゃない?って話なんだけど。

02081152011/02/04(金) 21:18:30ID:zvmJIej4
>>207
配列の中身はfillCircleを使わないと元の画像のままだけど
何か問題あるの?
0209社内ニート ◆OpY5DDvqSw 2011/02/04(金) 21:21:22ID:3/Y06AUg
fillCircke使っただけで配列の中身が変わるの?
02101152011/02/04(金) 21:21:53ID:zvmJIej4
>>209
変わるよ
02111152011/02/04(金) 21:30:10ID:zvmJIej4
てかgetImagePixelはただの配列から値を読み取るだけの関数だよ
0212名前は開発中のものです。2011/02/05(土) 01:18:30ID:fuYn973K
作ってみました。
http://amadela.web.fc2.com/tank/

マシンスペックによっては、ちょっと重いかも。
0213社内ニート ◆OpY5DDvqSw 2011/02/05(土) 08:16:34ID:LqlwHybZ
昨日の続きだけど、
>>211
getImagePixelは

配列から値を読み取る 
じゃなくて、画像から値を読み取る
じゃないの?
0214社内ニート ◆OpY5DDvqSw 2011/02/05(土) 08:21:18ID:LqlwHybZ
BMP画像を
getImagePixelで読み取り、
putImagePixelで0と1の配列に書き出す。

0と1の配列が出来上がる。

地形を変形させたいので、
fillCirkleでBMP画像に円を描く

BMP画像は変形したが、この状態ではまだ0と1の配列はさっきと同じ状況。

getImagePixelで読み取り、
putImagePixelで0と1の配列に書き出す。

変形後の0と1の配列が出来上がる。

じゃないの?
0215社内ニート ◆OpY5DDvqSw 2011/02/05(土) 08:27:12ID:LqlwHybZ
>>212
すばらしい!
まさに基本はこれです。
地形との当たり判定はどうやってますか?
機体の角度はどうやって測定してますか?
急斜面を上れないようにするのは機体の角度で制限ですか?
02161152011/02/05(土) 10:14:06ID:RD4qllhr
>>214
全然違う。ちゃんとプログラム読みなさい。

loadImageでファイルからBMP画像を配列bufに読み込む。
(0と1の配列が出来上がる。起動時に1回読み込めばいい。)

地形を変化させたい時はfillCircleで配列内の画像に円を描きだす。
(putImagePixel、drawCircle、fillRectは書き出す形が違うだけでやってることは一緒)

getPixelImageで配列bufからデータを読み取ることができる。
(配列から読み取っていて軽いので当たり判定に多用出来る。)

saveImageでbuf内の画像をファイルへ出力することもできるが、
デバッグ用のおまけなので使う必要はない。


つまり画像ファイルにアクセスする関数は
loadImageとsaveImageだけだよ。
0217名前は開発中のものです。2011/02/05(土) 10:26:39ID:fuYn973K
戦車の足元3点(中心と前後の角。回転後で計算)の有無を調べて、
・中心が地面 or 前後両方地面 → 真上に持ち上げる
・中心も前後とも空間 → 真下に落ちる
・前が地面で後ろが空間(もしくはその逆) → 回転させる
でやっています。
マウスホイールで画面を拡大できるので、凸凹の上で少しずつ
動かして観察するとわかりやすいと思います。

戦車を移動させるときは、単純にX軸方向に動かすのではなくて、
戦車の前後方向(回転後)の移動量を足しこむのと、
回転させたときの角度も±60度程度で制限しているのの両方で、
一定以上の傾斜が上らなくなりました。
この辺、調整が微妙なので、時々妙な挙動をするけれど実装は簡単です。
0218名前は開発中のものです。2011/02/05(土) 10:37:29ID:fuYn973K
あ、違った。

> 回転させたときの角度も±60度程度で制限している
ではうまくいかなかったので、
「+(−)60度を超えているときは前(後)の移動操作入力を中止する」
方法に変えたのでした。

角度制限を外したので、時々絶壁に張り付いて動けなくなるみたいです。
0219社内ニート ◆OpY5DDvqSw 2011/02/05(土) 11:22:52ID:LqlwHybZ
>>216
やっぱり納得いきません。
>fillCircleで配列内の画像に円を描きだす。
fillCircleはやっぱり 画像に円を描き出す んでしょ?
配列の一部を直接変化させるわけじゃないんじゃ・・・。
ちょっと良く分からないのでこの話はいったんここまでにします。
画像を0と1の配列に直すアイディアをありがとうございました。

>>217
ほぼ理想どおりの動きです。
マウス操作での画面拡大や画像のスクロールはアサルトギアでもありました。
これが有るか無いかで操作性がずいぶん変わるんです。

接地を判定する点が合計3つ、
□□□ こんなふうに並んでるわけですね。

■■■なら下降
□□□なら上昇
■□□なら、反時計回りに回転。

では、回転した後の判定点は
   ◆
  ◆

こんなふうに斜めになるんですか?
02201152011/02/05(土) 11:45:43ID:RD4qllhr
>>219
俺が頑張って作ったのに使ってくれないのかよ

>画像を0と1の配列に直すアイディアをありがとうございました。
白黒画像ファイルが01の集合だってのは分かってる?
それをloadImageで配列にぶち込んでるだけだから
配列の中身は元の画像ファイルと同じまま。
だからsaveImageで配列の中身をそのまま画像ファイルに書き出すこともできる。
fillCircleは配列の中の01を書き換える関数だよ。
0221社内ニート ◆OpY5DDvqSw 2011/02/05(土) 12:24:41ID:LqlwHybZ
白黒画像がそもそも01の集合ってのはモノクロビットマップの場合の話なのかな?
まあ、その辺は弾を打ち出す段階になってから詳しく考えます。
今回は非常に助かりました。
0222名前は開発中のものです。2011/02/05(土) 12:44:04ID:fuYn973K
3地点は並んでいる(隣接する)ピクセルとは限らなくて、
単純に画像配列から判定点3箇所をサンプルしてるだけです。

したがって、戦車の幅は1ピクセルよりも大きいので、多少の凹凸は無視されます。
それが良いか悪いかは今の時点ではわかりません。

また、回転後の判定点も、斜めに並んでいるとは限らなくて、このプログラムでは、
(-w*cos(R),-w*sin(R))、 (0,0)、 (+w*cos(R),+w*sin(R))
    ※ wは戦車の幅半分の定数、Rは現在の回転角度変数
で計算しています。

>>219
115氏の作成したプログラムはメモリ上に確保している仮想VRAM(=配列)に、
初期状態での地面の有無を読み込み、任意点の有無判定および地形の更新をするもので、
実画面(ハードウェア)に絵を描くものではないようです。
しかし地面形状を調べる際、実画面(ハードウェア)をアクセスするよりも遥かに効率的にできます。

私も実装方法は違いますが、同じような仕組みを使っています。
ソースを丁寧に読めば、きっと参考になりますよ。
0223社内ニート ◆OpY5DDvqSw 2011/02/05(土) 14:13:31ID:LqlwHybZ
>>222
参考になります。
また質問に来ると思うので、暇があったらよろしくお願いします。
0224社内ニート ◆OpY5DDvqSw 2011/02/07(月) 03:59:38ID:NY8MUqMx
当たり判定がなんとかうまくいきました。
>>222の書き込みを参考に機体の角度を計算させようと思います。
そのまえに、floatとか、doubleとか、intについて調べないとうまいことラジアンを計算できないっぽいですが。
0225名前は開発中のものです。2011/02/07(月) 18:13:40ID:xx8Zf2kq
なんかすごいな

>>212
面白かった
0226社内ニート ◆OpY5DDvqSw 2011/02/07(月) 20:38:17ID:NY8MUqMx
では!本日の作業に移る!
各員気合を入れておれに教えるように!
なお、難しいことはわからないのでできるだけ噛み砕いて説明するように!

まずはID:fuYn973Kの書き込みを見直して意味を考えよう。
0227社内ニート ◆OpY5DDvqSw 2011/02/08(火) 00:05:23ID:0uhgadeq
ちょっと寝てた。
さっぱりわからん。
まあ、じっくり考えよう。
0228社内ニート ◆OpY5DDvqSw 2011/02/08(火) 00:15:20ID:0uhgadeq
>>212がパーフェクトだと思って、>>217の「横に3つの判定点」について考えてたんだけど、
どうも>>212もパーフェクトってわけじゃなかったみたい。
拡大してよく見ると、角度によっては機体が上下にぶるぶる震えてる。
とはいえ、ほぼ理想どおりだし、引き続きこれを参考に考える。
0229社内ニート ◆OpY5DDvqSw 2011/02/08(火) 02:24:13ID:0uhgadeq
cos(r)って浮動少数点ってやつで計算されるよね?
それを整数に直したかったら、別に int x とか作って、
その中に代入すればおk?
四捨五入されて整数になる?
02301152011/02/08(火) 02:37:27ID:pf+y4WIG
少数を整数に変換したら少数部は切り捨てされるよ
0231社内ニート ◆OpY5DDvqSw 2011/02/08(火) 03:13:50ID:0uhgadeq
ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110208025900.jpg

点@とAは中心を( x , y )とする円周上の点であり、地表と円が交わる点である。
なので、半径を 5 とするとそれぞれの点は
( -5*cos(r1) , -5*sin(r1) ) 、 ( 5*cos(r2) , 5*sin(r2) )
という座標であらわせるのかと思う。
点@とAの座標がわかれば、atanを使って r3(タンクの角度)が計算できる。

ではそもそも、円と地表が交わる点のラジアン、r1とr2はどうやってもとめるのか。
点@と点Aが空と地面の間にぴったりはまるまで、ラジアンをちょっとずつ変えて
繰り返し試行させる?

ちょっとごちゃごちゃしすぎてる。
>>222で言ってるのはもっと単純なことのような気がする。
そもそも角度が3つも出てくるなんて言ってないし。
0232社内ニート ◆OpY5DDvqSw 2011/02/08(火) 03:15:08ID:0uhgadeq
>>230
そうですか。勉強になりました。
0233社内ニート ◆OpY5DDvqSw 2011/02/08(火) 04:22:46ID:0uhgadeq
近似的に角度を得ることができました。
継続的に落下しているときだけ機体を水平に保つとかもやらせたいけど、それはまた次の機会に。
次は玉を発射させることと、地形を変化させることに挑戦です。
というか、いったい何時までおきてるんだおれ。
0234社内ニート ◆OpY5DDvqSw 2011/02/16(水) 20:17:05ID:6gCXsN0z
テス
0235社内ニート ◆OpY5DDvqSw 2011/02/16(水) 20:23:46ID:6gCXsN0z
なんかアク禁食らってたらしい。
引き続きよろしくお願いします。

では、質問行きます。

弾飛ばしたいんだけど、弾の軌道と位置はどういう式で表せばいい?
弾は左右に吹く風でながされます。
それと、高速で弾を飛ばすと当たり判定を突き抜けることがあるかもしれない。
そのあたり考えてください。

あと、ここで人に聞くこともできず、自分で考えてもわからないのでインターフェイスつくったりしてました。
ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110216201831.jpg

射撃角度を変えたり、発射ボタン(スペース)を押しつづけると下のバーが伸び縮みするようにもなりました。
0236名前は開発中のものです。2011/02/17(木) 07:41:33ID:jsy99J9k
通りすがったが、面白そうなので首を突っ込んでみる。
DirectXや関連ライブラリの知識はないのでアルゴリズムの基本を地でいく。

>弾の軌道と位置はどういう式で
x方向:横からの風は弾のx方向の速度に風速の値を加減すればOKっしょ。
y方向:弾が重力で落ちる→放物線→2次関数という連想を出来るようになるべし。

>当たり判定を突き抜けることがあるかもしれない
基本は、弾が今ある座標と次に移動する座標を結ぶ直線(線分)を考えて、
その間に障害物があるかを判定していく。(中学〜高校レベルの代数幾何)
高速/低速の判断なく常時やっても問題ないだろう。(効率の良いやり方は
パフォーマンスがネックになってから考えろ)
でもこれはライブラリにありそうだな。(真偽はエライ人に聞いてくれ)

精進するでござる。ニンニン
0237社内ニート ◆OpY5DDvqSw 2011/02/18(金) 01:08:24ID:2Ex7ENec
通りすがりの方。今後ともよろしくお願いします。
弾の軌道は2時関数の放物線軌道といっていますが、
そこに時間の概念も加えないといけません。
弾が等速で動くわけではないということが重要です。


私が最初に考えていたのは、

x=0、y=0の座標を発射地点
発射角度を r (ラジアン)
発射パワーを p
重力は 1
cx1,cy1は時間(1ループ)ごとの増加座標
cx2,cy2は弾の存在位置です

cx1=p*cos( r );
cy1=-p*sin( r );
while(以下、座標計算と表示を繰り返す)
{
cy1=cy1+1; //時間当たりの増加分、重力を加算し続ける
cx2=cx1+cx2; cy2=cy1+cy2; //弾の存在位置、cx1,cy1の累積

x=cx2 , y=cy2 に弾を表示
}

これに、重力と同じように風の影響も加えたものは以下のような結果になりました。
ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110218003141.jpg
もっときれいに滑らかに表示されるように調整します。
その上で問題になるのが、やはり地形との当たり判定です。
どこで当たるのか、どのタイミングで当たるのか。それが問題です。
0238名前は開発中のものです。2011/02/18(金) 02:09:02ID:FPQVKYtr
>そこに時間の概念も加えないといけません。
惜しい。というか、ソース上は考え方はあってる。
普通2次関数を思い浮かべるときはxy座標系が基本だが、重力はy方向にのみ
影響するパラメータで時間tに伴う変化なので、ty座標系になる。つまり
y=at^2+bt+c (^2は階乗)
になるわけだな。これをtで微分(つまり速度)すると
cy1=2at+b (cy1は>>237 の変数ね)
となる。
0239名前は開発中のものです。2011/02/18(金) 02:10:04ID:FPQVKYtr
これを >>237のソース cy1=cy1+1 に当てはめると
右辺のcy1→b
右辺の1→2a
「tはどこ行った?」と思うかもしれないが、cy1は累積して加算しているので
while()をまわして+1していることがすなわちtを掛けていることになる。
つまり無意識のうちに2次関数を使っていることになるのだ(考え方が一足飛びだけどね)。
「言葉で言うと小難しいが、ソースに落とすと結構あっさり」というのは
わりとある。(逆も然りw)

x方向にも変な加速度をつけたり、弾の座標によって+1の値を変えたりすると、
異常重力っぽくなってゲームとしてのバリエーションが増えて面白いのだが、
それはまた先の話。

この調子でどんどん行くでござる。ニンニン
0240名前は開発中のものです。2011/02/18(金) 07:17:22ID:FPQVKYtr
誤記ってた。

誤) 重力はy方向にのみ影響するパラメータで時間tに伴う変化なので、
正) 重力はy方向にのみ影響するパラメータでy方向は時間tに伴う変化なので、

誤) y=at^2+bt+c (^2は階乗)
正) y=at^2+bt+c (^2はべき乗)
0241名前は開発中のものです。2011/02/18(金) 12:16:32ID:ZrrW6s/S
考え方としては

0ほとんどの空間 1地表にものすごく近い空間 2地面

で移動後が0の時は高頻度なので実行速度を稼ぐためスルーし
1の時は2を通過したかを調べて突き抜けを判断し
2の時は通過した地表の点を求める
0242社内ニート ◆OpY5DDvqSw 2011/02/19(土) 10:08:49ID:XjdQQ+3S
xとtの二次関数 yとtの二次関数にすればよかったのか。
言われてみれば当たり前のことだけど気づかなかった。
つーか、二次関数とか三角関数とか高校以来10年ぶりぐらいでなつかしいw
これでうまくいきそうだ。
あと、重力加速度の単位って m/s^2 だったんだな。
最初からこれをググってれば迷わなかったかも。
風の影響も重力とまったく同じやりかたでいいや。

ということで、こういう式で弾の表示位置を計算
pはパワー rは角度 wは風 gは重力 tは時間
a = p*cos(r)  b = -p*sin(r)

while()
{t++
x = t*( a + w*t )
y = t*( b + g*t )}
0243社内ニート ◆OpY5DDvqSw 2011/02/19(土) 10:13:15ID:XjdQQ+3S
↑の式では
t++で
tが1増加するごとに弾の表示位置を計算させているけど、
その間に t をもっと小刻みに増やして、当たり判定を計算すればなんとかなりそう

>>238-240
助かった。
ありがとう〜。
0244名前は開発中のものです。2011/02/19(土) 12:35:32ID:BPXTZO+O
>>242
>二次関数とか三角関数とか高校以来10年ぶりぐらいでなつかしいw
上記に複素数と行列を加えれば、今あるほぼすべてのゲームの数学的要素はコンプリート。
全部高校までに習う内容で充分。
3Dゲーム(擬似/ポリゴン)もこれらの要素だけで出来る。四元数の話があるけど、ゲームで
あればこれは各要素の組み合わせで充分。

あとはOS(Windows/DirectX等)の使い方を知ればゲームプログラマとしては一人前。
ネットワーク使うとなると、さらにその先やね。
これらのほうが数学云々よりも何倍も面倒くさい。(あまり難しくはない)
ある程度いくと Don't think, FEEL!な世界になってくる。

それとx方向の話や当たり判定についてはあえて突っ込まない。(細かいことだし、一概に間違いとも言えないので)
いろいろ試して自分がやりたいことを表現できるようになるべし。

さて、長々と書いたが拙者の講義はここまで。以降は適当にROMって
ニヤニヤしているので、踊りまくるでござる。ニンニン
0245社内ニート ◆OpY5DDvqSw 2011/02/19(土) 15:14:22ID:XjdQQ+3S
次は当たったところを変形させるほうほうだな〜。
>>201でうpされたようなやり方に変えてみたほうがいいかな。
0246社内ニート ◆OpY5DDvqSw 2011/02/19(土) 15:20:39ID:XjdQQ+3S
でも今日はやらねーけどな!
0247名前は開発中のものです。2011/02/19(土) 23:41:27.07ID:UpL2Vi1Q
アク禁がやっと解除されたようなので今更ですが、参考までに、>>212では、

@弾の位置を(x,y)、弾の発射速度を(vx,vy)とする。
  ※(x,y)は砲台の位置から、(vx,vy)は砲台の角度から計算する。
   考え方は>>242のa,bの計算方法と一緒ですが、pは1フレーム期間を基準にしています

A1回の計算ごとに、
 - vyに重力加速度gyを足す(gも1フレーム期間あたりの加速度です)
 -足し終えた(vx,vy)を(x,y)に加算する
 -(x,y)の地面を判定する/および描画更新
を繰り返しています。

風は考慮してませんでしたが、
いくら追い風でも風速より弾丸が早くなるのは不自然かと思うので、
水平方向に加速するのではなく相対速度が一致させるように漸近させる方法にします。
つまり、毎ループごとに vx= (1-k)*vx + k*windx (kは漸近化係数)で更新します。

0248社内ニート ◆OpY5DDvqSw 2011/02/21(月) 21:43:01.40ID:3YAa7u9w
おお、あんたもアク禁くらってたんですか。
何ででしょうね。
例の、通り魔予告兄弟の関係で広範囲にアク禁かかってたんでしょうか。

まあ、なんにしろ、ほんの1週間程度で解除されてよかったです。

それで、次にやってみようと思うのは、
弾の当たった地形が円形にえぐれるってことです。
0249社内ニート ◆OpY5DDvqSw 2011/02/21(月) 21:44:08.08ID:3YAa7u9w
今、当たり判定は二次元配列に0か1の数字を入れたものでやっています。

まず、地形画像(地形.bmp)と、それと同じ形の白黒画像(地形_a.bmp)を用意します。
白黒画像をアルファチャンネルとして、地形画像の何も無いところを透明にします。
さらに、白黒画像と同じ形の二次元配列を別に用意して、それで当たり判定を行います。

この配列内に直接円形の変化をつけたいんです。

[0000000111110000000]
[0000011111111100000]
[0000111111111110000]
[0000111111111110000]
[0000011111111100000]
[0000000111110000000]
[0000000000000000000]

こんな感じ。
0250社内ニート ◆OpY5DDvqSw 2011/02/21(月) 21:57:39.46ID:3YAa7u9w
すいません、話をうまくまとめられないので
結論だけいいます。

白黒BMPファイルを当たり判定に利用したいので
BMPファイルなどについて質問させてください。

当たり判定用に、画像と別に2次元配列を用意するのは中止します。
0251社内ニート ◆OpY5DDvqSw 2011/02/21(月) 22:13:55.56ID:3YAa7u9w
まず、BMPファイルっていうのは

1.ファイルヘッダ
2.情報ヘッダ
3.ビットフィールド
4.カラーパレット
5.イメージデータ

というものの集まりだということはわかりました。
そして、5.イメージデータっていうのが2次元配列になってるんだろうってこともわかりました。
ここまで合ってますか?

そして、イメージデータに、 『map[640][2400]』 みたいなハンドルをつけてしまえば、
BMPファイル内のイメージデータを当たり判定用の配列としてそのまま利用できるんじゃないかと。
>>201のやってることってそういうことですか?DXライブラリじゃない書き方なんでいまいちわかりませんでした。
0252社内ニート ◆OpY5DDvqSw 2011/02/21(月) 22:28:33.49ID:3YAa7u9w
>>249-259は無視してください。
0253社内ニート ◆OpY5DDvqSw 2011/02/21(月) 22:29:14.08ID:3YAa7u9w
>>249-250です。すみません。
0254名前は開発中のものです。2011/02/21(月) 22:57:16.81ID:N0QjpwZi
BMPファイルには、白黒(2値)、16色、256色、フルカラーなどの種類があります。
それによってカラーパレットがあったり、なかったりします。

本題のイメージデータですが、やはり種類ごとに格納形式が違います。
この部分を2次元配列に直接読み込んで使おうとするなら、
256色無圧縮のファイルであることを前提に、配列はchar型で確保しておくことになります。

メモリの使用量を考えると非効率的なので、あれこれ検討していくと、
>>201の方式を含めて、なんらかの方法で2次元配列を用意することになるんじゃないかと思います。

ちなみに現時点で戦車の傾きを求めるとき、ピクセルの有無の参照には何を使っていますか?
0255社内ニート ◆OpY5DDvqSw 2011/02/21(月) 23:44:32.25ID:3YAa7u9w
>>254
ピクセル有無の判定のために、
白黒画像とは別に用意した、2次元配列を使っています。

この配列は、
GetPixelSoftImage で、白黒画像のピクセルを一つずつ調べて、
黒なら 0、白なら 1、といった風に、fprintf でファイルに書き出していきます。
そうやって作っておいた0と1のテキストファイルを
ゲーム開始時にマップデータとして読み込んでいます。

ファイルに書き出したりしないで、
GetPixelSoftImage で、ピクセルが白か黒か調べて、いきなり配列 『map[640][2400]』 に、0と1を入れていってもよかったんですけど。
0256名前は開発中のものです。2011/02/22(火) 00:06:54.21ID:vXGD/Huf
この場合、白黒画像のBMPファイルと、0/1のテキストファイルの両方は、重複するんないんじゃないかと思いますが、
ここまでの実装をそのようにしてきて、うまく進んでいるのなら、とりあえずそのまま進めるといいと思います。

確認ですが、戦車を処理するときは、GetPixelSoftImage(x,y)ではなく、map[y][x]でアクセスしてるのですか?
もしそうだとするなら、着弾地点を中心にmapの配列を書き換え、かつ画面表示も同じようにすれば、
所望の動作をすると思います。
0257社内ニート ◆OpY5DDvqSw 2011/02/22(火) 00:21:48.52ID:s/YhWNAt
>>256
そう思ったんですが、
白黒BMPにDrawCircleの塗りつぶしで描いた円と、
配列内に0と1で描いた円が、1ドットでもずれていたら、
何も見えないところに地形が存在したり、
見えている地形を突き抜けてしまったりということがおきると思いますし、
どうやって配列内に円形の変化をつけるかっていうところも、シンプルにまとまった方法が思い浮かばないので。
0258社内ニート ◆OpY5DDvqSw 2011/02/22(火) 00:27:20.13ID:s/YhWNAt
追記、
戦車を処理するときはmap[y][x]を使っています。
0259社内ニート ◆OpY5DDvqSw 2011/02/22(火) 00:38:03.69ID:s/YhWNAt
今すぐ手っ取り早くできそうなのは>>256のいうとおり、
画面表示とmapの配列を同じように行うのが一番簡単な方法なんですけどねぇ。

できれば、

アルファチャンネル用の白黒画像と、
map[y][x]を連動させるって言うか、
白黒画像そのものがmap[y][x]、
みたいなやり方にしたい。

ゲームの土台になる部分は、ちゃんとしたものにしたいんです。
タンクの画像とか演出は多少陳腐でもでもかまわないけれど。
0260名前は開発中のものです。2011/02/22(火) 00:56:35.31ID:vXGD/Huf
配列と画面を円でえぐる処理は、こんな方法はどうでしょうか?

void FillCircle(int Xc,int Yc,int R){
  for(int x=-R; x<=R; x++) for(int y=-R;y<=R; y++) if(x*x+y*y<=R*R){
    if(Xc+x>=0 && Xc+x<2400 && Yc+y>=0 && Yc<640){
      map[Yc+y][Xc+x]= 0;     // 地面判定用配列の加工
      SetPixel(Xc+x,Yc+y,背景色); // 画面の(Xc+x, Yc+y)のピクセルを抜く処理
    }
  }
}

SetPixelと書いた部分は適宜実装する必要がありますが、
配列の0/1と画面のピクセル状態がずれる心配はないと思います。

ところで、そもそも背景に地面を重ねる処理にαチャネルを使っているなら、
地面の画像は[640][2400][4] (R,G,B,A/pixel)の配列じゃないでしょうか?
map[y][x]の代わりに、groundimage[y][x][3]を参照する方法は使えませんか?
0261社内ニート ◆OpY5DDvqSw 2011/02/22(火) 22:31:11.81ID:s/YhWNAt
>>260
おお、さすがです。
2つも解決法をありがとうございます。
1つ目の方法も完璧だと思うのですが、

2つ目の方法の、αチャンネルを使った画像のグラフィックハンドルを配列として使う(?)
方法も興味深いです。

ためしに、地形画像のグラフィックハンドルを配列として扱ってみたら、
なにかエラーが出てしまいましたが、もう少しαチャンネルについて調べてみたいと思います。
ありがとうございました。
0262社内ニート ◆OpY5DDvqSw 2011/02/22(火) 22:38:21.20ID:s/YhWNAt
ご存知かと思いますが、DXライブラリでは、

指定のファイル名の末端に『_a』が付く画像ファイルを透明情報として自動的に読み込んでくれる

ということで、アルファチャンネルについてまったく何も知らずに使っていたので、
これを機会にすこしだけ勉強します。
たぶん、DXライブラリを使わずにアルファチャンネルを使うには
けっこう複雑なことをしないといけないんだろうなぁ。
0263社内ニート ◆OpY5DDvqSw 2011/02/22(火) 23:46:04.34ID:s/YhWNAt
なかなか、望みの情報が見つかりませんが、
引き続き、map[y][x]の代わりにgroundimage[y][x][3]を参照する方法を考えていきます。
なにか、役に立ちそうなホームページとかありましたらまた教えてください。
ではまた。
0264名前は開発中のものです。2011/02/24(木) 00:22:24.50ID:o93X2te6
DxLibは使ったことが無いのですが、リファレンスページを読んだところ、
(1) 地表画像(RGB)および山形状(A)をLoadSoftImageで読み込む
(2) GetPixelSoftImage(handle, x,y, &r,&g,&b,&ground)で、
  x.,y地点の地面の有無を判定する
(3) 地形の更新は、GetPixelSoftImageに引き続き、groundを0にして、
  DrawPixelSoftImage(handle, x,y, r,g,b,ground); で書き戻す。
という手順が考えられます。
SoftImageのアルファを判定用にし、かつ地形の変形にも利用します。
敢えて配列を使わなくても、これで、事足りるのではないかと思います。

問題は更新結果を画面に反映させる方法なのですが、
リファレンスによれば、DrawSoftImageを使うか、
GreateGraphFromSoftImageでグラフィックハンドルを作ってから、
DrawGraphで描画するべきではないかと思われます。

DrawSoftImageの説明には負荷が高いようなことが書いてあるので、
いったんグラフィックハンドルを作るのが正式な手続きなのかもしれません。
また、地形の画像が2400x640と比較的大きいので、そういう時は、
CreateDivGraphFromSoftImageを使うべきなのかもしれません。

長々書いていますが、冒頭に書いたとおり、DxLibは使ったことがありません。
詳しい人、フォロー願います。
0265社内ニート ◆OpY5DDvqSw 2011/02/25(金) 01:28:00.44ID:gNKYJQnb
いろいろとアイディアを出していただいてありがとうございます。
とりあえずは、配列で当たり判定をするのにこだわらず、製作をつづけてみます。

日曜あたりに、
弾の当たった地形がえぐれるのと、
そこの当たり判定がなくなるようになるのを作ってみます。

その次は、一気に難しくなりそうですが、
ネットで対戦することを考えてみたいと思います。
0266社内ニート ◆OpY5DDvqSw 2011/02/27(日) 18:19:36.84ID:BoOhxSt8
ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110227181444.jpg

>>260の上の方法で地形の変形はうまくいきました。

DXライブラリのリファレンスを見たところ、ネット対戦を取り入れるのはやっぱり難しそうですね。
どうも、IPアドレスとか調べるのはDXライブラリだけじゃできないっぽいし。
0267社内ニート ◆OpY5DDvqSw 2011/02/27(日) 18:27:45.42ID:BoOhxSt8
プレイヤーがホストを立てて、2〜8人までの対戦をできるようにします。
ホストを探したり、プレーヤー同士の交流を行うロビーみたいなものを
無料サーバーを借りて作ろうと思います。
0268名前は開発中のものです。2011/02/28(月) 22:28:30.01ID:g0je8oOR
先に、通信抜きで2人対戦できるようにすべきじゃないのかな?
0269社内ニート ◆OpY5DDvqSw 2011/03/01(火) 23:45:55.00ID:uZgo1Fuw
通信抜きでって、ひとつのパソコンで対戦ってこと?
絶対やるべきっていうならそうするけど、
ネット対戦前提で2人対戦ってところから作ったほうがよくない?
ひとつのパソコンで対戦って、ターンが交互に回ってくるようにするだけでいいし。
0270名前は開発中のものです。2011/03/02(水) 00:52:26.76ID:jsVU/WxL
ひと通りのゲームの流れ(スタート画面->ゲームプレイ->勝敗処理->ゲーム終了)を単一PC内で
実現するのが一般的なひと区切り。
TCP/IPの基礎知識(socket利用あたりまで)があるのならこの時点でネット対応やっちゃってもいいけどその力量がワカラン。
ロビーサーバ構築となるとさらに別世界。規模/機能にもよるけどね
0271名前は開発中のものです。2011/03/02(水) 13:34:35.92ID:BF83P3je
とりあえず、ネトゲ制作のスレとか、DXライブラリのリファレンスを読んで勉強しながら、余裕があればダメージ計算とか細かいとこも作ってみます。
0272名前は開発中のものです。2011/03/02(水) 21:25:02.39ID:/NOpHlDA
ちゃんとゲームとして成り立つところまで作ってからネット対戦を考えたら?
戦車が2台出るだけでも色々問題が出てくるだろうし。

それと、とりあえず>>108まで完成したのなら一度見てみたい。
0273社内ニート ◆OpY5DDvqSw 2011/03/03(木) 19:44:40.68ID:eZVnKNXf
>>272
F5押したらデバッグはできるけど、
アプリケーションに作り上げる方法教えてください。
0274名前は開発中のものです。2011/03/03(木) 22:11:29.10ID:k5LomlRL
VC++でF5押したら普通に実行ファイルがビルドされてると思うが?
デフォルトならプロジェクトフォルダ内にReleaseかDebugのフォルダがあるでしょ。
0275社内ニート ◆OpY5DDvqSw 2011/03/04(金) 20:02:56.37ID:Vy+gp0Dp
Debugのフォルダはあったんですが、その中に入っているものをダブルクリックしても
ゲームが起動するものはありませんでした。
方法がわかったらうpすることがあるかもしれません。

それで、もっと細部まで作ってからネット対戦を考えたらどうかという意見ばかりのようですが、
後の細かいところというのは、一つ一つやっていけば自分だけでもできそうなことだと思うので
ネット対戦の部分をどういう風に作るのか、考えていきたいと思います。
0276社内ニート ◆OpY5DDvqSw 2011/03/04(金) 20:31:56.59ID:Vy+gp0Dp
IPアドレスは各自が調べて、ゲームルームに入室したときに
他のプレーヤーたちと自分のIPを教えあう。
DXライブラリの ConnectNetWork と、IPアドレスを使って相互にPCを接続する。

って感じでいいんじゃないかとおもう。

しかし、サーバーってのはどういう風に扱えばいいんだろ。
各プレーヤーのPCにDLするゲームソフト以外に、
仲介するためのソフトを作って、それをサーバーにおく必要があるってことかな。
0277名前は開発中のものです。2011/03/04(金) 22:18:57.26ID:e0BGDa4h
>仲介するためのソフトを作って、それをサーバーにおく必要があるってことかな。
これについては既存のネトゲでも各種方式がある。

1)サーバプロセスが常にデータを中継する
 たいていの本格的MMOはこれ。データを随時中継する際に中身をチェックしてチートを防ぐ効果もある。
 プレイ規模にもよるが、サーバのパワー(ハード、ソフト共)がある程度高くないとプレイに支障が生じる。
 例:UO、EQ、WoW

2)ロビーサーバのみ独立させ、プレイ中はプレイヤー間で直接通信をする。
 MO的なネトゲはこれ。ロビーサーバで各プレイヤーのIPをクライアントに通知して
 プレイ中はロービーサーバを経由せずクライアント間で直接通信する。所謂P2Pに近い。
 リアルタイム的な要素に左右されるゲームに有利。
 商用のネトゲはチート対策や同期ためにサーバにも随時データを送ってチェックするのが一般的。
 例:Diablo(クライアントがゲームサーバの役割も持つ)、各種FPS系

例は古典的な有名どころ。
他にもありそうだけど、大抵はこれら2つの方式をいろいろな組み合わせで実装している。
最近の商用ネトゲだと「MOだけど1)方式」ってのも多い。

IPアドレス情報の交換についてはロビー(ゲームルーム)に入室した時点でロビーサーバがクライアントのIPを
分かっていることになるのでユーザが直に調べる必要は必ずしもない。(そういうつくりにしないといけないけど)
むしろロビーのチャット等で直にIPを教えあうと、いたずら好きなバカがDOS攻撃対象にしたりする可能性もあるので
あまり好ましくない。
システムを一般に公開しないのであればあまり問題はないと思うけどね。

その昔、インターネットでの掲示板も一般的じゃない頃は電話やメールで互いのIPを教えあったものさ・・・。
0278名前は開発中のものです。2011/03/05(土) 11:23:37.39ID:1BoPAtkM
ってか普通にクライアント同士1:1でちゃんと動くかってところを確認してからだろ
0279社内ニート ◆OpY5DDvqSw 2011/03/05(土) 14:02:05.82ID:ytiYcFyh
>>277
(2)の方法って、つまり>>267と同じことだよね?
0280社内ニート ◆OpY5DDvqSw 2011/03/05(土) 14:04:21.14ID:ytiYcFyh
とりあえず、ロビーで対戦相手を探すというところをはぶいて、
クライアント同士1:1で動かせるように作ってみます。
0281社内ニート ◆OpY5DDvqSw 2011/03/05(土) 14:15:44.76ID:ytiYcFyh
自分のIPアドレスを調べるのってどんな方法がおすすめ?

winsockというものを使ったこんな方法がみつかったんですけど、これでいい?
ttp://members.jcom.home.ne.jp/toya.hiroshi/get_my_ipaddress.html
0282名前は開発中のものです。2011/03/05(土) 18:38:05.45ID:1BoPAtkM
>>281
足元を固めていくという意味ではとりあえずはいいんじゃね?
ipconfigキックで出力をリダイレクト→リダイレクト結果を文字列検索とかのシンプルな方法もアリだろう
複数枚NICがある場合考えるとめんどいがそこはWINSOCK使ってもも同じこと

インターネット経由にする場合はローカル/グローバルの話があるので(一般的には)上記だけでは足りないってのは分かるよな?
分からなければ ローカルアドレス グローバルアドレスでググれ

もっともロビーサーバをグローバルに立てればこれらの話は全部要らなくなるが

0283名前は開発中のものです。2011/03/06(日) 07:27:32.42ID:PFbDBYwQ
>>275

起動に必要なデータファイル(画像とか)が同じフォルダに入っていないんじゃないかと思う。
0284社内ニート ◆OpY5DDvqSw 2011/03/08(火) 22:14:18.79ID:O4hW3e3n
>>283
そのとおりみたいでした。
ためしに画像とか適当にぶっこんだら動きました。
ttp://www.dotup.org/uploda/www.dotup.org1407350.zip.html

パス

1111

ネットへの対応はまったく進んでません。勉強もしてません。
02851152011/03/09(水) 02:02:38.65ID:YYc1MNQ1
>>284
遂にここまでできたのか
暫くROMってたけど俺も完成期待してるから
頑張って下さい
0286社内ニート ◆OpY5DDvqSw 2011/03/09(水) 19:33:20.78ID:d+SmmaqK
>115
一人の応援だけでだいぶやる気が出た。
おひさしぶり。
元気ですか?
私は相変わらず暇人です。
02871152011/03/10(木) 22:24:04.84ID:xJ6VL23e
風邪ひいてきつかったけどやっと直ってきた
ネットワークの実装やったことないからアドバイス出来なくて残念だ
0288社内ニート ◆OpY5DDvqSw 2011/04/04(月) 03:21:23.76ID:hNri2z03
地震で死んだわけじゃないけどね。
何をしていいかわからなくなったんで放置。
MMORPGの作り方を書いた本でも買ってみようかな。
まあ、うちの近所に大きな本屋がないんで中身を見て確かめられないのは痛いけど。
0289名前は開発中のものです。2011/04/04(月) 20:57:43.80ID:p78/gdyh
1) ネット通信なしで、2P対戦を実装する
2) 次に2PをCPU制御で実現する
3) CPU制御の機体数を増やす
4) 通信プロトコルを設計する
5) 通信処理を実装する

この順でやるといいよ。
0290名前は開発中のものです。2011/06/22(水) 00:51:57.57ID:mdgs9SFK
ワロタ
0291 ◆hUczjzHQ1. 2012/01/30(月) 00:07:24.07ID:WlPxsZ4g
基礎から学んで行こうと思います
分からない事がまだまだ沢山ありますが
ご指導ご鞭撻の方宜しくお願いします
c/c++の勉強をして行きたいです。
でもまずはCからお願いします。
基礎からみっちり叩き込んで下さい
ボクも頑張って行きたいと思います。
0292 ◆ibj3Ub6oRZ3m 2013/09/28(土) 01:01:50.70ID:eY+hrwyk
基礎から学んで行こうと思います
分からない事がまだまだ沢山ありますが
ご指導ご鞭撻の方宜しくお願いします
c/c++の勉強をして行きたいです。
でもまずはCからお願いします。
基礎からみっちり叩き込んで下さい
ボクも頑張って行きたいと思います。
0293名前は開発中のものです。2015/08/31(月) 13:58:00.57ID:0xjlLWq1
もうすぐ専門学校の学園祭の季節になるから見学に行くと良いかも。
0294名前は開発中のものです。2015/09/22(火) 17:20:40.99ID:J5BSdRWA
c言語の参考書ORサイトを読破する
0295名前は開発中のものです。2015/09/22(火) 17:21:18.98ID:J5BSdRWA
そしてDXライブラリでもいじりながら作りなさい
■ このスレッドは過去ログ倉庫に格納されています