|
Name: Ultimate ..上級者(16,167ポイント)
Date: 2010/09/22(水) 22:02
No:62234
|
|
Title: ウィンドウのサイズを640×480から変更
|
|
ウィンドウサイズを横に伸ばして縦はそのまま(たとえば800×480など)のように変更したいのですが、関数が見つかりません。
方法はありますでしょうか?
65ポイント を落としてしまった。
|
|
|
|
Name: Ultimate ..上級者(16,263ポイント)
Date: 2010/09/22(水) 22:17
No:62237
| 解決!
|
Title: Re:ウィンドウのサイズを640×480から変更
|
|
すみません、環境を書き忘れてました。DXライブラリでOKです。
その他画面操作系関数にありましたか。ウィンドウ操作の部分などを見て見つからなかったので質問しました。
ありがとうございました。
うまく変更できました。
96ポイント を手に入れた。
|
|
|
|
Name: Ultimate ..上級者(16,218ポイント)
Date: 2010/09/20(月) 22:17
No:62164
|
|
Title: 弾が長押しで止まらなくなるのを防ぐ方法
|
|
問題の箇所のソースを載せます。
for(i=0;i<50;i++){
if(jiki.flag[i]==0){
jiki.x[i]=jiki.tx+10;
jiki.y[i]=jiki.ty+10;
}
if(jiki.flag[i]==1){
jiki.y[i]-=10;
jiki.nagasa[i]+=10;
if(jiki.y[i]<0){
jiki.flag[i]=0;
jiki.nagasa[i]=0;
}
if(i>0&&i<49&&jiki.nagasa[i]>100) {
jiki.flag[i+1]=1;
}
}
}
if(Key[KEY_INPUT_Z]==1){
for(i=0;i<50;i++){
if(i==0){
jiki.flag[i]=1;
}
if(jiki.flag[i]==0&&jiki.flag[i-1]==1&&jiki.nagasa[i-1]>100){
jiki.flag[i]=1;
}
}
jiki.count=0;
}
for(i=0;i<50;i++){
DrawCircle(jiki.x[i],jiki.y[i],3,BLACK);
}
変数については
//自機
typedef struct{
int tx; //本体のX座標
int ty; //本体のY座標
int x[50]; //弾のX座標
int y[50]; //弾のY座標
int flag[50]; //弾のフラグ
int hp; //本体のHP
int nagasa[50]; //次の弾のフラグを1にする基準
int count; //カウンター(未使用)
}jstruct;
jstruct jiki;
です。
回答お願いします。
173ポイント を手に入れた。
|
|
|
|
Name: パコネコ ..熟練のプログラマー(44,471ポイント)
Date: 2010/09/20(月) 23:09
No:62166
|
|
Title: Re:弾が長押しで止まらなくなるのを防ぐ方法
|
|
止まらなくというのがわからないのですが…
連射を撃ちたくないのでしょうか?
連射に間を開けたいのでしょうか?
Zボタンを押した後に次の弾はもう一度おしなおすまででなくしたいのでしょうか?
とりあえず弾を1発撃つことができたらループから向けてはどうでしょうか?
後は次の弾を撃つまでの間をカウンタで調節してあげれば行けると思うのですが…
if(Key[KEY_INPUT_Z]==1){
for(i=0;i<50;i++){
if(i==0){
jiki.flag[i]=1;
break;
}
if(jiki.flag[i]==0&&jiki.flag[i-1]==1&&jiki.nagasa[i-1]>100){
jiki.flag[i]=1;
break;
}
}
jiki.count=0;
}
こんな感じでしょうか?
勘違いならすいません。
==========
もしかして…
一度ボタンを押しいた後、ボタンを押してないときも弾が出てたりしませんか?
=============
if(i>0&&i<49&&jiki.nagasa[i]>100) {
jiki.flag[i+1]=1;
}
これって必要なのでしょうか?
自動で弾を撃ってるように見えるのですが… 
246ポイント を手に入れた。
|
|
|
|
Name: sin ..初心者(7,702ポイント)
Date: 2010/09/16(木) 13:33
No:61838
|
|
Title: 時間計測について
|
|
sinと言います。
時間の計測について分からないことがあったので投稿しました。
例えば画面Aを呼び出すとします。
画面Aを呼び出してから10秒後に文字Bを表示、20秒後に文字Cを表示したいのですが、
いい方法ってありますか。
また、DXライブラリにGetNowCount();関数がありますが、GetNowCount();関数を用いて出来ますか。
Microsoft Visual C++で作成しています。
2倍のポイントを手に入れた! 390ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(214,490ポイント)
Date: 2010/09/16(木) 14:26
No:61840
|
|
Title: Re:時間計測について
|
|
その10秒間なり、20秒間は操作不能状態でも構わないというのであればSleep関数とかでいいかと思いますが、何か処理をしながらであれば時間を計測する関数などを自作する必要があります。
何か実行しながら非同期に計測したいのであればDxLibならばGetNowCount関数などを使うのが楽でしょう。
WINAPIを使用したものでよければ、CStopwatchというクラスを以前作成していたので、よければご利用ください。
91ポイント を手に入れた。
|
|
|
|
|
Name: sin ..初心者(7,728ポイント)
Date: 2010/09/22(水) 19:19
No:62227
| 解決!
|
Title: Re:時間計測について
|
|
返信遅くなってすいません。
なんとか出来ました。
ありがとうございました。
26ポイント を手に入れた。
|
|
|
|
Name: ぬっち ..中級者(14,628ポイント)
Date: 2010/09/22(水) 09:24
No:62213
|
|
Title: テンプレートクラスの継承
|
|
いつもお世話になっております。
今回は、C++で(初歩的な?)質問をさせていただきたいと思います。
質問の内容は、タイトルのとおりで、テンプレートクラスの継承についてです。
例えば、基底のテンプレートクラスBaseがあったとして、この基底クラスをpublic継承して、非テンプレートクラスDerivedを作ることを考えます。
大体のコードは以下のようになっています。
template < typename Type1, typename Type2 >
class Base
{
protected:
Type1 m_A;
Type2 m_B;
public:
//コンストラクタなどは省略。デストラクタは継承も考えて、仮想関数としてある。
};
class Derived : public Base < std::basic_string < char >, int >
{
public:
//コンストラクタなどは省略。
bool Compare( std::basic_string < char > a ); //std::basic_string < char >との比較を行う。
};
bool Derived::Compare( std::basic_string < char > a )
{
return m_A == a;
}
これで、コンパイルを実行すると、Derived::Compare内で「==型の左オペランドを扱う演算子が見つかりません」というエラーが現れてしまいます。
これにはどこが問題があるのでしょうか?
テンプレートの型を決めたものを継承すること自体が問題なのでしょうか?
ソースコードも要点のみしか書いていなく、わかりづらいかもしれませんがよろしくお願いします。
2倍のポイントを手に入れた! 894ポイント を手に入れた。
|
|
|
|
Name: jay ..上級者(21,248ポイント)
Date: 2010/09/22(水) 12:00
No:62214
|
|
Title: Re:テンプレートクラスの継承
|
|
bool Derived::Compare( std::basic_string < char > a )
{
return m_A == a;
}
の部分に問題があるように思われます
"return"はその文の制御を終了して、必要に応じて戻り値を返すものです。
また"=="はその左の式と右の式が正しいかどうかを判断する時に使います。
つまり"=="はif文等の条件式に使われます。
右の値を左に代入するときは"="を使います。
bool Derived::Compare( std::basic_string < char > a )
{
m_A = a;
return m_A;
}
こうすれば動くと思いますが、パッと見ただけなので他にも可笑しい所があるかもしれませんね・・・。

235ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..中級者(14,466ポイント)
Date: 2010/09/22(水) 12:34
No:62215
|
|
Title: Re:テンプレートクラスの継承
|
|
jayさん返信ありがとうございます。
私が行いたいのは、Compareメソッドで比較を行いたいわけです。
ですから代入するのではなくて、Compareメソッドの引数でとったものと、メンバ変数との比較をして、その結果を返したいのです。
そのため、
return m_A == a;
としても問題ないと思うのですが・・・。
実際に、他のクラスのメソッドでも同様のことを行っていますが、今のところ問題ありません。
私の理解違いかもしれませんが・・・。
162ポイント を落としてしまった。
|
|
|
|
|
Name: Blue ..中級者(12,527ポイント)
Date: 2010/09/22(水) 13:03
No:62217
|
|
Title: Re:テンプレートクラスの継承
|
|
開発環境は何ですか?
一応コピペしてコンパイルしましたがVS2005だと普通に動きました。
34ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(53,109ポイント)
Date: 2010/09/22(水) 13:03
No:62218
|
|
Title: Re:テンプレートクラスの継承
|
|
あら、こちらの環境ではエラーが出ません。
コンパイルもリンクも通りました。恐らく意図通りに動いていると思われます。
Visual C++ 2005 express edition
Windows XP pro
です。
そちらの環境はどんな感じですか?
--
クラスの中身は変更していません。
#include <stdio.h>
#include <string>
template < typename Type1, typename Type2 >
class Base
{
protected:
Type1 m_A;
Type2 m_B;
public:
//コンストラクタなどは省略。デストラクタは継承も考えて、仮想関数としてある。
};
class Derived : public Base < std::basic_string < char >, int >
{
public:
//コンストラクタなどは省略。
bool Compare( std::basic_string < char > a ); //std::basic_string < char >との比較を行う。
};
bool Derived::Compare( std::basic_string < char > a )
{
return m_A == a;
}
void main(void)
{
Derived d;
std::basic_string < char > a;
printf("%d\n",d.Compare(a));
}
21ポイント を手に入れた。
|
|
|
|
|
Name: jay ..上級者(21,296ポイント)
Date: 2010/09/22(水) 13:08
No:62219
|
|
Title: Re:テンプレートクラスの継承
|
|
成る程、真か偽かを返す訳ですね(汗)
と、どうやら僕は場違いのようなのでどこかに行きますね〜
結局お役に立てず申し訳ないです・・・。
48ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(21,005ポイント)
Date: 2010/09/22(水) 13:09
No:62220
|
|
Title: Re:テンプレートクラスの継承
|
|
#include <string>
// ここに上記のコードを貼り付ける
int main()
{
Derived d;
d.Compare("abcd");
}
下記のコードを GCC4.3.4 と VC9 でコンパイルしましたが、コンパイルエラーは起きませんでした。
107ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..中級者(14,762ポイント)
Date: 2010/09/22(水) 13:53
No:62221
|
|
Title: Re:テンプレートクラスの継承
|
|
皆様返信ありがとうございます。
環境を書いていませんでしたね、すいません;;
<コンパイル環境>
・コンパイラ : Visual C++ 2010 Express
・OS : Windows7 Home Premium 64bit
です。他に書いたほうがいいことがあれば、教えてください。
実際は、こんな簡単なクラスの構造をしているわけではないのですが、わかりやすさのためエラー部分を見て必要と思われるところをピックアップして掲載しました。
この条件判定は、for文で使用する予定でしたが、returnに書いても同じエラーが生じたため、returnのほうを採用しました。
必要があれば、全ソースコードを掲載しようと考えています。
よろしくお願いします。
296ポイント を手に入れた。
|
|
|
|
|
Name: うしお ..入門者(2,879ポイント)
Date: 2010/09/22(水) 14:13
No:62222
|
|
Title: Re:テンプレートクラスの継承
|
|
これはテンプレート継承が原因ではないと思います
#include <string>
はきちんとされていますか?
これがない場合、
basic_string < char > a;
の宣言は可能ですが、
比較ができないようです
#include <string>がない場合、
basic_string < char > tes0,tes1;
if(tes0 == tes1){
}
たったこれだけで同じエラーです
確認してみてください
130ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..中級者(12,618ポイント)
Date: 2010/09/22(水) 14:13
No:62223
|
|
Title: Re:テンプレートクラスの継承
|
|
ちなみにookamiさんの載せていただいたコードをまっさらなプロジェクトに
入れてコンパイルしてもエラーになりますか?
ならないのであれば、別のところが怪しいかも。
91ポイント を手に入れた。
|
|
|
|
|
Name: ぬっち ..中級者(14,892ポイント)
Date: 2010/09/22(水) 14:25
No:62224
| 解決!
|
Title: Re:テンプレートクラスの継承
|
|
うしおさん、Blueさん返信ありがとうございます。
お恥ずかしいですがうしおさんの仰るように、なぜか必要のない
#include <iostream>
があって、
#include <string>
をするのを忘れていました;;
宣言だけ出来るというのは盲点でした^^;
本当に初歩的な問題でお騒がせしてしまい申し訳ありませんでした。
ありがとうございました。 
130ポイント を手に入れた。
|
|
|
|
Name: C-TA-K ..ぴよぴよ(526ポイント)
Date: 2010/09/21(火) 18:23
No:62197
|
|
Title: いろいろな角度でボールを射出したいのですが・・・
|
|
皆さん初めましてC-TA-Kと申します
環境はwindows vista 32bit
visual C++ 2008
DxLibraryを使用しています。
本題に入りますが今回私はボールを速度は一定のまま様々な角度で移動させたいと思い、
次のようなプログラムを書きました。
#include "DxLib.h"
#include "Math.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
char Key[256];
int blue = GetColor( 0, 0, 255 );
int bal_speed = 1; //ボールのスピード
int bal_r = 8; //ボールの半径
double bal_x = 320; //ボールの初期x座標
double bal_y = 240; //ボールの初期y座標
double bal_ang = 190; //ボールの角度(度) ここの角度を自由に変えてください
double bal_rad = bal_ang * 3.14159 / 180; //ボールの角度(ラジアン)
while(ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll( Key ) == 0 && Key[KEY_INPUT_ESCAPE] == 0)
{
bal_x += cos( bal_rad ) * bal_speed;
bal_y += sin( bal_rad ) * bal_speed;
DrawCircle( (int)bal_x, (int)bal_y, bal_r, blue, FALSE );
ScreenFlip();
}
DxLib_End();
return 0;
}
ですがこれだとボールがやたらとガクガクしてしまいます。おそらくはdouble型によって計算された値を
描画時に切り捨ててしまっていることが関係していることは分かるのですが、これに対する対策がいまいち思いつきません。
思い切って描画前に四捨五入などもしたのですが、そうすると細かい角度調整(5度ずらす等)ができなくなってしまい、あまり好ましくない結果となってしまいました。どうか皆様のご助力をいただけないでしょうか。
526ポイント を手に入れた。
|
|
|
|
Name: Tororo [URL] ..中級者(10,888ポイント)
Date: 2010/09/21(火) 18:32
No:62198
|
|
Title: Re:いろいろな角度でボールを射出したいのですが・・・
|
|
double型をすぺてfloat型にして、sinはsinf cosはcosfを利用するようにして、
それから、DrawCircleをやめて、ボール画像を作り、DrawRotaGraphFで表示すると
ガクガクしにくくなると思います。
2倍のポイントを手に入れた! 124ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,280,509ポイント)
Date: 2010/09/21(火) 18:37
No:62199
|
|
Title: Re:いろいろな角度でボールを射出したいのですが・・・
|
|
それはお察しの通り、最終的に座標がint型になっている為です。
DrawCircleにはありませんが、画像を描画する関数には実数を受け付ける関数があります。
例えば公式には
DrawGraph
関数しかありませんが、DxLib.hのヘッダファイルの中を見ると、
DrawGraphF
という関数があり、float型を渡せます。
DrawRotaGraphなども同じです。
で、これだけでは綺麗に描画出来ません。
ピクセル間を補間して描画する必要があります。
といっても、簡単、
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;
これを書いてから描画すればバイリニアで描画してくれます。
書き終わったら
SetDrawMode( DX_DRAWMODE_NEAREST );
を書いて下さい。線形補間をしない元の描画に戻ります。
RPGとかだとよくわかりませんが、STGだと補間描画がしてあるかしてないかは良く解りますよね。
131ポイント を手に入れた。
|
|
|
|
|
Name: C-TA-K ..ぴよぴよ(692ポイント)
Date: 2010/09/21(火) 18:59
No:62200
| 解決!
|
Title: Re:いろいろな角度でボールを射出したいのですが・・・
|
|
Tororo様、Dixq様、お二方とも本当にありがとうございます。
おっしゃられたとおり、float型になおし、DrawRotaGraphFで描画前に、
SetDrawMode( DX_DRAWMODE_BILINEAR ) ; でピクセル間を補間し、
その後にSetDrawMode( DX_DRAWMODE_NEAREST ); で戻す処理を入れました。
そしてコンパイルしたところ見事解決致しました。
ずっと悩んでいたことなのでとても清々しい気持ちです。
再度になりますが本当にありがとうございました。
166ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..プログラマー(27,773ポイント)
Date: 2010/09/22(水) 01:13
No:62208
|
|
Title: Re:いろいろな角度でボールを射出したいのですが・・・
|
|
>その後にSetDrawMode( DX_DRAWMODE_NEAREST ); で戻す処理を入れました。
特殊な事がない限り、
最初にSetDrawMode( DX_DRAWMODE_BILINEAR ) ;で設定して放っておけばいいと思いますよ。
(投稿後に名前を修正) 
85ポイント を手に入れた。
|
|
|
|
Name: dic ..比類無きプログラマー(98,318ポイント)
Date: 2010/09/19(日) 15:22
No:62049
|
|
Title: ファイルが作成されない
|
|
下のコードを書いたのですが、fopen関数でファイルを生成しているつもりなのですが
なぜかファイルが生成されません
どこか、具合の悪いところはないでしょうか?
よろしくお願いします
gSzString04,05は変数が入っている
char title[1024]; // 初期化されている
// ファイルに出力
sprintf( filename, "%s.txt", title );
printf( " %s\n", filename );
gSzString05.push_back( title );
FILE *filewt = fopen( filename, "wt" );
if( filewt == NULL )
printf( "error\n" );
strcat( title, "\n" );
fputs( title, filewt );
int j;
for( j=0; j<gSzString04.size(); j++ )
{
memset( temp, 0, sizeof(temp) );
sprintf( temp, "%s", gSzString04.at(j).c_str() );
fputs( temp, filewt );
}
fclose( filewt );
336ポイント を手に入れた。
|
|
|
|
Name: へろり ..プログラマー(39,667ポイント)
Date: 2010/09/19(日) 15:45
No:62053
|
|
Title: Re:ファイルが作成されない
|
|
何故かfopen()がNULLを返すということでしょうか。
それとも非NULLであるにもかかわらずファイルが存在しないということでしょうか。
前者なら変数 title にファイル名に使えない文字が含まれているとか、
ディレクトリの書き込み権限が無いとか、書き込み禁止(排他ロック含む)の同名のファイル名があるとかでしょうか。
後者なら、どこか変なパスに作ろうとしていませんか?
カレントディレクトリの確認をしてみては。
166ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(98,522ポイント)
Date: 2010/09/19(日) 16:14
No:62054
|
|
Title: Re:ファイルが作成されない
|
|
>へろりさん
説明不足でした
fopenが非NULLを返しているのにファイルが新しく生成されないのです
ファイル名に問題があるのかも試しに title 変数に入っている文字列で
ファイルを手動で作って保存してみましたが、ファイルは作成できたので
ファイル名に問題はないはずなのです
fopen 直後の if( filewt == NULL )
のところでブレークポイントを設定し @err 変数を見てみましたが 0 が
入っていててエラーは発生してないのです
権限については全権限あるので問題ないです
204ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(39,789ポイント)
Date: 2010/09/19(日) 16:31
No:62057
|
|
Title: Re:ファイルが作成されない
|
|
パスは確認してみましたか?
どこか意図しないパスにファイルを作ってはいませんか。
fclose() 関数はちゃんと0を返しているでしょうか。
ループ内のバッファの初期化やファイル書き込み時にバッファオーバーラン等が発生してはいませんか。
その場合、ファイルポインタが破壊されている可能性も否定できません。
すべて正常に動作しているのでしたら、やっぱりパスぐらいしかちょっと思いつきませんね。
122ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(98,710ポイント)
Date: 2010/09/19(日) 17:27
No:62061
|
|
Title: Re:ファイルが作成されない
|
|
>シエルさん
#include <stdio.h>
int main()
{
FILE *file;
file = fopen( "hoge.txt", "wt" );
fputs( "hoge\n日本語\n", file );
fclose( file );
file = fopen( "hoge2.txt", "w+t" );
fputs( "hoge2\n日本語\n", file );
fclose( file );
file = fopen( "hoge3.txt", "w" );
fputs( "hoge3\n日本語\n", file );
fclose( file );
return 0;
}
でそれぞれ wt, w+t, w の場合すべて試したのですがうまく動くようですが
へろりさんのおっしゃるとおり、どこかで変数がバッファーオーバーしてるかもしれないです
テストで、途中まで実行するのにそうとう時間かかるので、もうしばらく様子見します
188ポイント を手に入れた。
|
|
|
|
|
Name: mila ..ぴよぴよ(351ポイント)
Date: 2010/09/20(月) 04:04
No:62103
|
|
Title: Re:ファイルが作成されない
|
|
fopen関数にファイルのフルパスを指定してみて
ファイルが作成されるかどうか確認してみてはいかがでしょうか。
例:fopen("C:\\hoge.txt", "w")
44ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(99,006ポイント)
Date: 2010/09/20(月) 05:28
No:62105
|
|
Title: Re:ファイルが作成されない
|
|
>milaさん
おっしゃるとおり GetCurrentDirectory で一応現在のディレクトリパスを追加してみました
しかし、問題は別にあったようです FILE *filewt = fopen( out, "w" ); の filewt の値が
変な値が入ってました
画像のように filewtの内容が0でファイルのポインタかどうかがわかってないかもしれないです
char temp[1024];
char out[1024];
char dir[1024];
GetCurrentDirectory( sizeof(dir), dir );
memset( out, 0, sizeof(out) );
sprintf( out, "%s\\%s.txt", dir, title );
printf( " %s\n", out );
gSzString05.push_back( title );
FILE *filewt = fopen( out, "w" );
if( filewt == NULL )
printf( "error\n" );
これはファイルのオープンに失敗しているということでしょうか?
296ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(40,073ポイント)
Date: 2010/09/20(月) 07:42
No:62107
|
|
Title: Re:ファイルが作成されない
|
|
FILE構造体のメンバの詳細を理解していますか。
処理系が不明なので具体的な事は言えませんが、VisualStudio .NET 2003 では、ファイルオープン直後のファイルポインタの中身は、メンバ _flag、_file を除いてすべて0で初期化されていましたが、正常に動作しています。
FILE構造体の中身は処理系によって違いますし、その挙動(メンバの使われ方)もやっぱり違います。
そもそも、FILE型が構造体で無ければならないなんていう規格もありません。
ただ、FILE型は直接抽象宣言子で無ければならないとだけ定められています。
fopen() 関数はファイルのオープンに成功すると、ファイルオブジェクトへのポインタを返します。 失敗すればNULLを返します。
ですので、ファイル構造体の中身にかかわらず非NULLを返しているのであれば、成功しているのだと見なすべきです。
284ポイント を手に入れた。
|
|
|
|
|
Name: ねこ ..熟練のプログラマー(55,010ポイント)
Date: 2010/09/20(月) 11:26
No:62114
|
|
Title: Re:ファイルが作成されない
|
|
とりあえずまずここじゃないでしょうか
memset( temp, 0, sizeof(temp) );
sprintf( temp, "%s", gSzString04.at(j).c_str() );
多分vectorとstringクラスだと思いますが、tempのバッファを超えていないかチェックする処理を挟むか
「const char*」で受け取って使うなどして改善されないか。
119ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(99,382ポイント)
Date: 2010/09/20(月) 15:13
No:62128
|
|
Title: Re:ファイルが作成されない
|
|
>へろりさん ねこさん
FILE *filewt の中身は全部ゼロでよかったのですね
void function011_141( char *filename, char *title )
{
char temp[1024];
char out[1024];
char dir[1024];
GetCurrentDirectory( sizeof(dir), dir );
memset( out, 0, sizeof(out) );
sprintf( out, "%s\\%s.txt", dir, title );
printf( " %s\n", out );
gSzString05.push_back( title );
FILE *filewt = fopen( out, "w" );
● if( filewt == NULL )
printf( "error\n" );
strcat( title, "\n" );
● fputs( title, filewt );
int j;
/*
for( j=0; j<gSzString04.size(); j++ )
{
memset( temp, 0, sizeof(temp) );
// sprintf( temp, "%s", gSzString04.at(j).c_str() );
strcpy( temp, gSzString04.at(j).c_str() );
printf( "%s", temp );
fputs( temp, filewt );
}
*/
● fclose( filewt );
}
とコメントアウトしてみて実行してみたのですが
下の方のブレークポイントにいかずに処理されてしまってます
他のところのバグが影響している可能性があるのでしょうか?
●がブレークポイントで一番下のところに処理が流れてこない状態です
376ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(99,507ポイント)
Date: 2010/09/20(月) 15:31
No:62131
|
|
Title: Re:ファイルが作成されない
|
|
原因がわかりました
ファイル名に使っていけない文字が含まれてる場合に発生するようでした
半角(:)が含まれている場合このような困った処理をしていました
ひとまず、原因は分かりました
2倍のポイントを手に入れた! 136ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(99,541ポイント)
Date: 2010/09/20(月) 15:42
No:62132
| 解決!
|
Title: Re:ファイルが作成されない
|
|
:(半角)を指定して fopen するとこのようなややこしいバグが入るようでした
環境も書いてませんでした すいません
Visual C++ 6.0 SP5 です
解決しました
ありがとうございました
34ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(40,729ポイント)
Date: 2010/09/20(月) 16:23
No:62133
|
|
Title: Re:ファイルが作成されない
|
|
fclose() まで届かないというのが少々解せませんが。
以下は、fclose() がきっちり処理されたことを前提とします。
>ファイル名に使っていけない文字が含まれてる場合に発生するようでした
>半角(:)が含まれている場合このような困った処理をしていました
おそらく、ファイルは作られています。 それは fopen() 関数が 非NULL を返している事から明らかです。
>:(半角)を指定して fopen するとこのようなややこしいバグが入るようでした
エクスプローラからファイルが見えないということですので、ファイル名は:から始まっていませんか。
NTFSではドライブレターを除くファイル名に:が現れた場合、データストリームの指定を意味します。
ファイルを作ったはずであるパスへ移動し、dir /r のコマンドを打ってみてください。
ファイルが作られていることが確認出来るはずです。
2倍のポイントを手に入れた! 656ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(99,694ポイント)
Date: 2010/09/20(月) 17:06
No:62137
|
|
Title: Re:ファイルが作成されない
|
|
>へろりさん
dir コマンドで確認しました
ファイル名_ _(スペース)で作成されていました
内容は0バイトのファイルでした
メモ帳で開こうとしたら ファイルがありません新しくファイルを作成しますか?
とちょっとわからないエラーがでますね
本来だったら ファイル名_:_ほげほげ なんですが : のところがないですね
エクスプローラからも見れますが、削除できないです
153ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(41,035ポイント)
Date: 2010/09/21(火) 08:04
No:62183
|
|
Title: Re:ファイルが作成されない
|
|
>本来だったら ファイル名_:_ほげほげ なんですが : のところがないですね
dir /r と、rオプションをつけて見てください。
日付 ファイルサイズ ファイル名(スペース)
データストリームサイズ :データストリーム名(ほげほげ)
という出力が得られるはずです。
データストリームはあくまでもファイルオプションですから、いくらデータを書き込もうがファイルサイズに影響を与えません。
FILE *fp = fopen("hoge.txt:foo", "wt");
fprintf(fp, "%s", "data string");
fclose(fp);
というコードは、ファイル hoge.txt のデータストリーム foo に "data string" という文字列を書き込みます。
ファイルのメインストリームには一切書き込んでいませんので、ファイルサイズは0のままです。
306ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(99,926ポイント)
Date: 2010/09/21(火) 20:45
No:62202
|
|
Title: Re:ファイルが作成されない
|
|
>へろりさん
データストリームとは初めて聞きました
色々セキュリティ関連のページが見つかりました
結構アングラっぽい情報ですね
情報は違う情報を出していました
WindowsXP Home NTFS でした
私に時間があり次第対処します
ありがとうございました

2倍のポイントを手に入れた! 122ポイント を手に入れた。
|
|
|
|
Name: 宗一郎 ..かけだし(2,274ポイント)
Date: 2010/09/20(月) 23:11
No:62167
|
|
Title: クラス化について
|
|
いつもお世話になっておりますm(_ _)m
最近C言語からC++の勉強に移りまして、クラスについて勉強し始めました。
そこで勉強のために龍神録プログラムの館を参考にクラス化してみようと思いましたが、
どこまでクラスのメンバ関数として扱ったほうがいいのかよくわかりません。
参考のため皆さんがするとするならどのようにクラス化するか教えていただけないでしょうか。
また、STGなどで自キャラのクラスを作る場合には、一般的にどのような形で作ったほうがよいのか
教えていただけないでしょうか。
よろしくお願いしますm(_ _)m
163ポイント を手に入れた。
|
|
|
|
Name: momo ..ぴよぴよ(286ポイント)
Date: 2010/09/21(火) 03:38
No:62180
|
|
Title: Re:クラス化について
|
|
私自身初心者なので参考になるかは分かりませんが
class
{
public:
メンバ変数
コンストラクタ用メンバ関数(newと配列とかで問題が出るため関数化)
移動用メンバ関数
描画用メンバ関数
}
こんな感じでやってます
108ポイント を手に入れた。
|
|
|
|
|
Name: やっくん ..プログラマー(35,856ポイント)
Date: 2010/09/21(火) 05:34
No:62182
|
|
Title: Re:クラス化について
|
|
私の場合もたかぎさんと同様に、メンバ関数では最低限必要な物しか揃えません。
STGは製作経験がありませんが、もし作るならば・・・ということで
typedef struct
{
int posX; // x座標
int posY; // y座標
}Pos;
class Char
{
private:
int charHp; // 体力
Pos charPos; // キャラクター座標
Pos *charBullet; // 弾の座標
public:
Char(); // デフォルトコンストラクタ
Char(int, Pos); // 体力とキャラ座標のセット
~Char(); // 弾で使用する動的メモリ開放
/*-----ゲッタ--------*/
Pos GetCharPos() const;// 位置情報
Pos GetCharHp() const;// HP取得
/*-----セッタ--------*/
void SetCharPos(Pos); // 移動制御
void SetCharHp(int); // HP
};
上のように簡単な命令だけ用意しておきます。
キー入力による移動など細かい移動は非メンバ関数で基本的なメンバ関数を呼び出します。
例えば、上のキャラ移動を以下のように定義したときに
// メンバ関数
void Char::SetCharPos(Pos add)
{
if(/*値が範囲外なら*/)
{
/* 値を進めない */
};
charPos.posX += add.posX;
charPos.posY += add.posY;
}
キー操作に対する移動関数をメンバ関数を用いて作ってみます。
Char chData;
// 非メンバ関数
void CharMove()
{
if(キーが押されたら){
Pos addPos = {値1,値2}; // キーに対応した値
chData.SetCharPos(addPos);
}
}
私ならばこんな感じでクラスを作ります。
個人的な考え方ですが、このように最小限に処理を抑えた方がバグも少なくなりますし(出ても発見しやすい)、汎用性が出るような気がします。(あいまいで申し訳ありません;) 
445ポイント を手に入れた。
|
|
|
|
|
Name: 宗一郎 ..かけだし(2,333ポイント)
Date: 2010/09/21(火) 16:30
No:62196
| 解決!
|
Title: Re:クラス化について
|
|
>softyaさん、やっくん、momoさん、たかぎさん
回答ありがとうございますm(_ _)m
おかげさまで参考になりました^^
59ポイント を手に入れた。
|
|
|
|
Name: シグマ ..ぴよぴよ(75ポイント)
Date: 2010/09/21(火) 11:55
No:62193
|
|
Title: プログラムの著作権
|
|
今、学校の課題研究でシューティングゲームを作っていて
四聖龍神録のプログラムを使おうと思っています。
ですがプログラムの著作権がよくわかっていません
敵キャラの出し方や自キャラの動かせる範囲を使おうと思っていたのですが使ってもよいのでしょうか?
教えてください
75ポイント を手に入れた。
|
|
|
Name: おいも ..ぴよぴよ(332ポイント)
Date: 2010/09/21(火) 11:39
No:62189
| 解決!
|
Title: C言語の魔方陣について
|
|
今C言語の勉強をしていて、友人の手を借りてやっとできたのですが、デバック後にエラーが出てしまいました。
自分自身まだ完全に理解していないのでよくわからなくて困っています。
どなたか改善点を教えてくださらないでしょうか?
形は5×5の中央の最上列からスタートという形です。
#include<stdio.h>
void main(void)
{
int mahoujin[5][5], x, y, i, n;
i = 1;
x = 5 / 2 + 1;
y = 1;
n = 5;
mahoujin[x][y] = 1;
for( i = 2; i <= 5 * n; i++ )
{
if( i % n == 1 )
{
y = y + 1;
}
else
{
x = x + 1;
y = y - 1;
}
if( x > n ) x = 1;
if( y < 1 ) y = n;
mahoujin[x][y] = i;
}
for( y = 1; y <= n; y++ )
{
for( x = 1; x <= n; x++ )
{
printf( "%3d ", mahoujin[x][y] );
}
printf( "\n" );
}
rewind(stdin);
getchar();
}

332ポイント を手に入れた。
|
|
|
|
Name: おいも ..ぴよぴよ(359ポイント)
Date: 2010/09/21(火) 11:53
No:62192
|
|
Title: Re:C言語の魔方陣について
|
|
急いでいたものでつい・・・
すいませんでした。
こちらの方は削除します
27ポイント を手に入れた。
|
|
|
|
Name: ニット ..ぴよぴよ(314ポイント)
Date: 2010/09/20(月) 09:08
No:62108
|
|
Title: テーブルゲームを作っております
|
|
陣取りゲームを作っております。
6×6マスの盤上でOption.PlayerNumで設定した人数で陣地を取り合います。
相手の駒の周囲8マスには駒が置けません。
自分のターンに盤上に1マスずつ置いていき置けなくなったほうが負けです。
そこで使う判定用の関数が上手く作れません。
bool MapJudge( int cx, int cy, int num );
でその処理を行っております。
盤は6×6ですが判定するときに変な場所を見ないように左右上下1マス余分に取ってあります。
その為、一番上の1マス目はMapTbl[1][1]の座標に値が入ります。
添付したソースは一部なので不具合があるかも知れません。
これが出来ればほぼ出来るのですがどのように修正すればよいかアドバイスを頂けないでしょうか
314ポイント を手に入れた。
|
|
|
|
Name: やっくん ..プログラマー(35,228ポイント)
Date: 2010/09/20(月) 10:52
No:62111
|
|
Title: Re:テーブルゲームを作っております
|
|
上手く作れないとは具体的にどのように上手く作れないのでしょうか?
添付ソースのコメントアウトしている部分からの推測ですが、「チェック関数が任意の人数に対応してなく、1:1の場合にしか対応していない」ということでしょうか?
もしそうであれば、
>相手の駒の周囲8マスには駒が置けません。
これを逆に考えて、置く予定の場所の周囲8マスが"全て"【0】または【自分のNo】ならば置けるとしてはどうでしょう?
155ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(157,282ポイント)
Date: 2010/09/20(月) 11:25
No:62113
|
|
Title: Re:テーブルゲームを作っております
|
|
> そこで使う判定用の関数が上手く作れません。
> bool MapJudge( int cx, int cy, int num );
とりあえず、引数と戻り値の説明だけでもしてほしいです。
14ポイント を手に入れた。
|
|
|
|
|
Name: ニット ..ぴよぴよ(685ポイント)
Date: 2010/09/21(火) 01:07
No:62178
|
|
Title: Re:テーブルゲームを作っております
|
|
皆さんご回答ありがとうございます。
お陰さまで置けるか置けないかの判定は出来ました。
> bool MapJudge( int cx, int cy, int num );
失礼しました。
この関数は指定した座標の周囲8マスを検査し置けるか置けないかを判定します。
戻り値・・・置けるか置けないか
int cx, int cy・・・セルの座標
int num・・・どのプレイヤーのターンか
この関数を利用すれば置けるか置けないかを
判定し置けない方を負けにすることができると思います。
もし置けない場合はOption.ModeをM_RESULT;にしたいのですが上手く判定されていないようです。
間違ってそうな部分をご指摘いただけないでしょうか?
// 勝ち判定
int WinF = false;
for(int i=1; i<MAP_H-1; i++){
for(int j=1; j<MAP_W-1; j++){
if ( MapJudge( j, i, Option.Num ) ) WinF = true;
}
}
if( !WinF ) Option.Mode = M_RESULT;
371ポイント を手に入れた。
|
|
|
|
|
Name: やっくん ..プログラマー(35,411ポイント)
Date: 2010/09/21(火) 05:05
No:62181
|
|
Title: Re:テーブルゲームを作っております
|
|
WinFは「勝ちでは無い」、つまり置けるところが存在するっていうことで良いですか?
どこで上手く行ってないかよくわかりませんが、とりあえず以下のようにbreak文を挟んだ方が良いかも知れません。どこか1箇所でもおける場所があればそれ以上、式を評価する必要は無いように思えす。
ただし、これだけでは望む動作にはならないと思います(^^;
for(int i=1; i<MAP_H-1; i++){
for(int j=1; j<MAP_W-1; j++){
if ( MapJudge( j, i, Option.Num ) ){
WinF = true;
break;
}
}
if(WinF) break;
}
具体的にどのように上手くいかないのでしょうか? 
40ポイント を手に入れた。
|
|
|
|
|
Name: ニット ..ぴよぴよ(26ポイント)
Date: 2010/09/21(火) 10:01
No:62184
|
|
Title: Re:テーブルゲームを作っております
|
|
確かに無駄ですよね。
ありがとうございます。
サンプル用のソースを作ってみたのですが置けない状態になっても
Option.Mode = M_RESULT;になってくれません。
不具合があったらすみません。
26ポイント を手に入れた。
|
|
|
|
|
Name: asd ..上級者(22,181ポイント)
Date: 2010/09/21(火) 11:08
No:62185
|
|
Title: Re:テーブルゲームを作っております
|
|
実際に動かして確認したわけではないのですが、
6x6の盤面で緩衝領域1マスということで以下のような理解をしていますが正しいですか?
□・・・プレーヤーが駒を置けるマス
X・・・緩衝領域(範囲外アクセス防止マス)のため駒は置けないマス
ABCDEFGH
0XXXXXXXX
1X□□□□□□X
2X□□□□□□X
3X□□□□□□X
4X□□□□□□X
5X□□□□□□X
6X□□□□□□X
7XXXXXXXX
上記の理解が正しいとすると、現在のMapJudge関数は緩衝領域に駒が置けると
判断しているのではないでしょうか?
そのためMapJudge関数内でcx-1,cy-1,cx+1,cy+1のいずれかが緩衝領域にかかる場合は
そこに駒が置けるかどうかは判定してはいけないことになります。
その前提で少し書き換えてみました(動作未確認です、ゴメンナサイ)
bool MapJudge( int cx, int cy, int num ){
//調査座標用変数
int dx=cx-1;
int dy=cy-1;
bool ret = true;//最終的な戻り値
if( cx==0 || cx==MAP_H-1 || cy==0 || cy==MAP_W-1 ){
return false;
}else{
for(dy = cy - 1;dy <= cy + 1;dy++){
for(dx = cx - 1;dx <= cx + 1;dx++){
//緩衝領域はチェックをスキップする
if(dy <= 0 || dy >= MAP_W - 1 || dx <= 0 || dx >= MAP_H - 1){ continue; }
//1箇所でも相手の駒が見つかったら置いちゃダメ
if(MapTbl[dy][dx] != num){ return false; }
}
}
return true;
}
}
上記の通りdy、dxが0やMAP_H+1(MAP_W+1)になった箇所は判定せず、に無視することで解決するのではないでしょうか?
662ポイント を手に入れた。
|
|
|
|
|
Name: asd ..上級者(22,323ポイント)
Date: 2010/09/21(火) 11:12
No:62186
|
|
Title: Re:テーブルゲームを作っております
|
|
先ほどのソースで判定条件が間違っていました。
//緩衝領域はチェックをスキップする
if(dy <= 0 || dy >= MAP_W - 1 || dx <= 0 || dx >= MAP_H - 1){ continue; }
//1箇所でも相手の駒が見つかったら置いちゃダメ
if(MapTbl[dy][dx] != num){ return false; }
この部分が正しくは、
//緩衝領域はチェックをスキップする
if(dy <= 0 || dy >= MAP_H - 1 || dx <= 0 || dx >= MAP_W - 1){ continue; }
//1箇所でも相手の駒が見つかったら置いちゃダメ
if(MapTbl[dy][dx] != 0 && MapTbl[dy][dx] != num){ return false; }
ですね。
何もないマスがある場合も置けないと判定していました。
ご迷惑をおかけしました。
(追記)
あぁ、編集で追記すればよかったですね。レス数を増やしてしまってゴメンナサイorz
(追記2)
緩衝領域チェックでの変数も若干直しました。
(dyは縦方向なのでMAP_Hと比較する、dxは横方向なのでMAP_Wと比較するのが正しい)
何度もすみません。 
142ポイント を手に入れた。
|
|
|
|
|
Name: やっくん ..プログラマー(35,690ポイント)
Date: 2010/09/21(火) 11:23
No:62187
|
|
Title: Re:テーブルゲームを作っております
|
|
動かして確認してみました。
for(int i=1; i<MAP_H-1; i++){
for(int j=1; j<MAP_W-1; j++){
if ( MapJudge( j, i, Option.Num ) ){
WinF = true;
DrawFormatString(0, 0, GetColor(255,255,255), "x:%d y:%d", j, i);
break;
}
}
if(WinF) break;
}
上記のように1命令追加してみてください。
これで何故おかしいかわかるかと思います。
mainループで
Loop();
ClearDrawScreen();
Draw();
ScreenFlip();
を
ClearDrawScreen();
Loop();
Draw();
ScreenFlip();
と順番を変えることもお忘れなく。
応えは↓↓(一応、作る楽しみを壊したくないので反転で伏せます^^;
すでに石が置かれているマスもチェックしている。
すでに石が置かれているとそこは置けないという判定が無い。 
166ポイント を落としてしまった。
|
|
|
|
|
Name: やっくん ..プログラマー(35,781ポイント)
Date: 2010/09/21(火) 11:35
No:62188
|
|
Title: Re:テーブルゲームを作っております
|
|
プレイして見ての感想ですが、どちらの順番であるか赤のターンなどとどこかに表示するとわかりやすいと思います。これから付ける予定でしたらすみません(^^;
91ポイント を手に入れた。
|
|
|
|
Name: パコネコ ..熟練のプログラマー(43,415ポイント)
Date: 2010/09/20(月) 20:36
No:62149
|
|
Title: 音楽のグラフ?
|
|
音や声などが折れ線グラフのように、表わされているのを見たことがあるのですが…
あれの名前は何というのでしょうか?
音楽などを使ったプログラミングはほとんどやったことないのですが、
音楽ファイルを読み込んであのグラフのようなものを作ることはできるのでしょうか?
名前がわからないので伝わらない方が多いと思いますが、
え〜と、…なんだか警察ドラマとかで音を切り取ったりしてる画面?とかの…
表現がうまくできません。
もしかしてこれ?とかいう人がいたら教えてください。
それと、もしC言語(もしくはC++)でプログラミングできそうでしたら、
参考になりそうになものを教えてもらえるとうれしいです。
まだ作り始めることもできてないのでソースもありません。
情報が足りてない気しかしませんがなんとかお願いします。
266ポイント を手に入れた。
|
|
|
|
Name: パコネコ ..熟練のプログラマー(43,489ポイント)
Date: 2010/09/20(月) 20:58
No:62152
|
|
Title: Re:音楽のグラフ?
|
|
>>シエルさん
ありがとうございます。
なんだか、音楽に関係ありそうな関数がいっぱいですね…
知らないものばかりであまり理解できてませんが…がんばって勉強します。
74ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(43,609ポイント)
Date: 2010/09/20(月) 21:13
No:62155
|
|
Title: Re:音楽のグラフ?
|
|
>>fatensさん
おお〜これです、これです!!
波形だったんですね。
一応プログラムで使いたいんで張っていただいたツールは使いませんけど…
ツールの絵で描かれている画像で間違いないです。
こんなの作りたかったんです。
教えていただきありがとうございます。
120ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(43,750ポイント)
Date: 2010/09/20(月) 21:24
No:62159
|
|
Title: Re:音楽のグラフ?
|
|
>>softyaさん
これは勉強になりますね。
学校では苦手な分野なので理解するのに時間かかりそう…
/*
後、音の何をプログラムで操作したいのでしょうか?
*/
そのグラフを使って楽譜?(太鼓の○人とかのゲームで使うやつ)っぽいのを作成してゲームで使えるようにしたいです。
141ポイント を手に入れた。
|
|
|
|
|
Name: nns ..ぴよぴよ(716ポイント)
Date: 2010/09/20(月) 21:43
No:62162
|
|
Title: Re:音楽のグラフ?
|
|
いわゆるスペクトラムアナライザーのことを指しているのであれば
負荷を見ながら読み込んだデータに対して領域を絞ってFFT掛けるだけでOKかと思われます。
2倍のポイントを手に入れた! 104ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 ..比類無きプログラマー(92,111ポイント)
Date: 2010/09/20(月) 21:47
No:62163
|
|
Title: Re:音楽のグラフ?
|
|
フーリエ変換だけじゃなくて、物によったらウエーブレット変換が必要になるかも。
やりたいことはいわゆる"耳コピ"ですよね?
自分で身につけたほうが現実的だと思います
45ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(44,225ポイント)
Date: 2010/09/20(月) 22:57
No:62165
|
|
Title: Re:音楽のグラフ?
|
|
>>やっくんさん
ここでやっているのは解析っぽいですね。
一度解析できたほうがいいのでかなり参考になると思います。
ありがとうございます。
>>softyaさん
やっぱり難しいですよね…
細かいことは気にするつもりありませんが、
取り合えずの目標は、音が出てる時の識別です。
楽器ごととかは考えてなかったです…
できたらいいな…
>>Dixqさん
フーリエ変換…まだよくわかりませんが必要っぽいのはわかりました。
勉強しときます。
(そんな本まで…片一方はおじさんなのに、何か共通点でもあったんですかね(笑))
>>nnsさん
ごめんなさい。
私では意味を理解できませんでした。
「スペクトラムアナライザー」とはなんでしょうか?
>>組木紙織さん
なんだか「〜変換」とかが多いですね…
最終的にはプレイヤーさんが持っている音をパスを入力するだけで、
遊べるようにしたいのですが…
(できるかはまだわかりませんが…)
耳コピってあれですよね、自分で楽譜?作成するってことですよね。
(音楽聞きながらとか…)
475ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 ..比類無きプログラマー(91,900ポイント)
Date: 2010/09/20(月) 23:20
No:62168
|
|
Title: Re:音楽のグラフ?
|
|
>耳コピってあれですよね、自分で楽譜?作成するってことですよね。
そうですね。音を聞きながらそれを自分の耳で聞きとって再現することです。
>最終的にはプレイヤーさんが持っている音をパスを入力するだけで、
遊べるようにしたいのですが…
音数が少なければまだ、なんとかなると思いますが(一音だったらnnsさんの方法ですぐできるはず)
"音"じゃなくて"曲"だったら、まず無理なんじゃないでしょうか。
波形じゃなくて、音の出し方のデータ形式(MIDIだったとおもう)なら、なんとでなるとおもいます。
#ウエーブレット変換ってフーリエ変換の発展なんでかなりちかいものなんです。
211ポイント を落としてしまった。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(44,674ポイント)
Date: 2010/09/20(月) 23:34
No:62172
| 解決!
|
Title: Re:音楽のグラフ?
|
|
自分の中だと、
音は短いもので曲は長いものってイメージしかないんですよね…
(曲は歌うもの?歌うのは歌?音の集合体?、定義がわからないです…)
データ形式によってもかなり変わってくるものなんですね。
その辺も調べておく必要がありそうです…
まだつくってないので、問題点がわかりませんが…
皆さんに教えていただいたもので、なんとか作れそうです。
(まだわかりませんが…)
一応解決としておきます。
解決ですが、まだアドバイスなどがありましたら、書いていただけると嬉しいです。
======
ありがとうございました。 
203ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(24,024ポイント)
Date: 2010/09/21(火) 01:34
No:62179
|
|
Title: Re:音楽のグラフ?
|
|
> 取り合えずの目標は、音が出てる時の識別です。
音源にもよりますが、最初はノイズとの戦いになると思います。
16ポイント を手に入れた。
|
|
|
|
Name: 陽輔 ..ぴよぴよ(201ポイント)
Date: 2010/09/20(月) 13:46
No:62122
|
|
Title: こんにちは
|
|
こんにちは。私はゲーム製作に興味を持っている者です。
ですがその作り方は一切知りません。ゲームプログラミングとは何かも知りません。
C言語も何となく「あれかな?」と思えるくらいです。
今まではこんなゲームが作りたいとかそういう事しか考えてきませんでした。。
ゲームの作り方という事で検索をかけたらこのHPに着きました。
投稿の注意を読んだ上で聴きたい事をまとめますと
1、ゲームを作りたい
2、知識や経験は0
ですが、
3、最終目標は自分の理想のゲームを作る事
で、
4、そのためにまずなにをすべきか、
を伺いたく投稿しました。ゲームプログラミングを学ぶ事=最初にすべき事と考える事自体が
もしかしたら間違っているかもしれませんが、
まず何をすべきでしょうか。
もうひとつあります。今の時代は様々なジャンルのゲームが出ていますが、
それでも製作に関しては最初は全てに共通するものであると考えてよろしいのでしょうか?
具体的に言いますと、
シューティングゲームにせよ、格闘ゲームにせよ、最初のスタートやオプションを選ぶところから始まり、
そのあと設定なりをした後にスタートと、起動時のあれこれに関する製作は全てのゲームで特に変わりなく
あくまで違うのはジャンルと操作方法ではないか、と思っているのです。
これに関してはどうでしょうか、もしかしたら確実な返答はない気もしますので、
個人艇なお考えでも頂けたらと思います。
長文になってしましたが、ご返答よろしくお願いします。
201ポイント を手に入れた。
|
|
|
|
Name: array [URL] ..熟練のプログラマー(68,042ポイント)
Date: 2010/09/20(月) 14:35
No:62123
|
|
Title: Re:こんにちは
|
|
> 4、そのためにまずなにをすべきか、
まずは自分で開発環境をそろえる事が出来なければ、やりたい事は空想論で終わってしまいます。
私が見てきた人たちで、作りたいゲームの案はあるけど、プログラミングをどうすればいいのか分らない
という人は、プログラム云々の前に、プログラムのコードだけを見て嫌悪感(苦手意識を持ち)
開発環境をそろえる事すらしてない人が多くいました。
なのでまずは、開発環境をそろえて見る事をお勧めします。「参考ページ」
そして、実際サンプルコードを動かしてみてください。
185ポイント を手に入れた。
|
|
|
|
|
Name: 化猫 ..かけだし(1,625ポイント)
Date: 2010/09/20(月) 15:06
No:62126
|
|
Title: Re:こんにちは
|
|
私も同じような疑問を抱きながらプログラミングを始めました。
arrayさんが言っているように開発環境をそろえなければ始まりません。
やはり、パソコンの知識が多少必要だと思います。
私がまず始めたのはC言語入門の為の本を買って基礎を勉強しました。
最初の目標だったゲームプログラミングを始めましたが、その時、勉強していて良かったと感じました。
>3、最終目標は自分の理想のゲームを作る事
私も自分で考案したゲームを作りたいという夢があります。
しかし、自分が思っているように動かしたい、でも分からないという時に直面することは多々あります。
例えば「C言語何でも質問掲示板」で調べても見つからない時、他の似たような回答を参考にして自分でアレンジするなど、C言語の知識が必要になる場面があります。
このような時、勉強していて良かったと思えます。
プログラムに間違いがあっても、なんで間違っているのか、どうすれば直るのかを毎回調べていては大変です。
やはり、基礎は勉強しておいた方が楽だと思います。
正直、私は構造体をちゃんと理解していなかったレベルですが、ゲームプログラミングを思い切って始めて、新たに学ぶ事が多々あります。
思い切って始めて良かったと思います。
最初のC言語入門の本を買った時も、ゲームプログラミングを始めた時も、いつか出来るようになると信じて勉強を頑張る事が大切です。
最初から無理だと思って、手を出さないでいるよりは断然いいですから、スタート地点に立つためにも、開発環境をそろえ、簡単なことから始めてみることをお勧めします。
C言語を解説、教えている(?)サイトは結構ありますので、検索してみて下さい。
諦めないことが大切です。
長文ですみません、頑張って下さい。
402ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(221,741ポイント)
Date: 2010/09/20(月) 15:09
No:62127
|
|
Title: Re:こんにちは
|
|
ゲームを作るための方法論としては、
1.ゲーム作るための人材を集めて、自分は資金面の面倒や製作管理やゲームデザイン、シナリオなどに専念する。グラフィックとプログラマーは他の人に頼む。
2.ゲーム製作ツールを利用して自分で開発する。
有料のRPGツクール等を使う他に無料のものがあるのでそれを利用する。
http://www.freem.ne.jp/contents/create/tool.html
3.プログラミング言語を覚えてZEROからゲームを構築する。
長い時間(軽く2〜3年)勉強しないと自分の思うようなゲームは自由に作れるようにならない。
一番難しいのは3で時間が掛かりますし、プログラミングが楽しめないと挫折します。
2はツールさえ選べば、そこそこの物が作れますしゲームを作るという目的には一番ふさわしいです。
1は人間関係のトラブルになりやすので、どこかの同人サークルでゲームデザインやシナリオ担当など下積みしたほうが良いでしょう。
>シューティングゲームにせよ、格闘ゲームにせよ、最初のスタートやオプションを選ぶところから始まり、
>そのあと設定なりをした後にスタートと、起動時のあれこれに関する製作は全てのゲームで特に変わりなく
>あくまで違うのはジャンルと操作方法ではないか、と思っているのです。
ゲームジャンルで必要とされる知識や技術はそれぞれ違います。
基本的なことはここなどで学ぶことが出来ますが、深い部分は自分で研究が必要です。
2倍のポイントを手に入れた! 980ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(99,316ポイント)
Date: 2010/09/20(月) 15:16
No:62129
|
|
Title: Re:こんにちは
|
|
私の経験上 作りたいという発想はもっているが
実際にゲームとして動くものに具体化することが苦手という人が結構いました
まずは、実際にどういったゲームを作るのかを明確にするのがいいと私は思います
66ポイント を落としてしまった。
|
|
|
|
|
Name: 陽輔 ..ぴよぴよ(776ポイント)
Date: 2010/09/21(火) 00:08
No:62176
| 解決!
|
Title: Re:こんにちは
|
|
こんばんは。
多数の意見をお寄せいただきありがとうございます。
全ての意見を読ませていただきました。
これらの意見を踏まえて自分の今後を考えるに、
・製作環境を整える(PCなり教本、レベル次第でソフトなど)
・分業(今の自分には仲間などは0なので無理ですが・・・(_ _ )
・C言語を勉強(基礎→応用なので普通の勉学同様にこなせばよい?)
・既存のゲームを参考にして仕組みを体系的に理解
であると思います。
また、softyaさんからの意見に応えますと、私は3の選択を強く希望します。
上記4つで大事と思っているのは、自分としては4つ目であると考えます。というのも
みなさんの指摘から察するに、やはり好奇心(ゲーム制作に対する)を維持する、というよりも
今以上に大きくするという意味もあって、現在全くの初心者である私には大事であるように思えるからです。
無論、勉強をしなければいけませんので優先順位としては製作環境→勉強が第一には変わりません。先ほどの
好奇心に関しては常日ごろの考え方や行動でも磨けるとも思えますし、自分の好きなゲームを題材に!と思えば
普通のプログラミングの勉強よりは辛いものではないとも感じます。また、これはまたsoftyaさんの指摘からの
発案ですが、無料ツールを使ったものを使えばそれはそれで製作活動ができますから、0からの製作の
モデル的役割にはなるのではないか、それと同時に仕組みの体系的理解にも(C言語的には余りない気がします。ゲームの展開、進行など?)つながるのではいかとも考えました。
という事で以上の事を日々心がけながら、できるようになると信じて頑張りたいと思います。
揺るぎない信念を持って取り組む事は大事だと思うのは化猫さんと同じ意見です!
また何かあったら質問させて頂きます。どうもありがとうございました(_ _ ) 
575ポイント を手に入れた。
|
|
|
|
Name: わくわくさん ..ぴよぴよ(85ポイント)
Date: 2010/09/20(月) 12:28
No:62116
|
|
Title: 無題
|
|
現在、ウィンドウズXPを使っているのですが、
ボーランドのC言語コンパイラでコンパイルした実行ファイルは
ウィンドウズでしか動かないのでしょうか。
マックやLinux上ではそのままでは動かせない
85ポイント を手に入れた。
|
|
|
|
Name: わくわくさん ..ぴよぴよ(149ポイント)
Date: 2010/09/20(月) 12:42
No:62120
| 解決!
|
Title: Re:無題
|
|
なるほど。コンパイラのダウンロード時にwin用
とmac用など分けてあったのはそのためでしたか。
どうもありがとうです。解決!
64ポイント を手に入れた。
|
|
|
|
|
Name: わくわくさん ..ぴよぴよ(0ポイント)
Date: 2010/09/20(月) 16:52
No:62134
|
|
Title: Re:無題
|
|
softya様
すみません、一度解決にしてしまったのですが、
よくわからないのでもう一度聞きます。
windowsというOSと、
ハードウェア、Cのコンパイラ、API、DirectX、DXライブラリ
これらの関係、繋がりがよくわかりません。
これら全てセットでwindows用ということになるののでしょうか?
OSがwindowsで、使用したコンパイラもwindows用ならば,
作られた実行ファイルも当然windowsでしか動かない、
さらにGUI用のwin32APIもwindows専用の関数なので、windowsでしかGUIが使えない、
DirectXも(これはよく知りませんが)windowsのためのグラフィック処理関数なので
windowsでしか動かない、DXライブラリもDirectXやwindowsに依存するので他のOSでは無理、
という事ですね?
そうすると、いわゆるjava言語みたいにプログラミング言語の開発環境そのものが
特定のOSに依存せずに仮想化されていて、マルチプラットフォーム対応のC言語系統というのは
今のところほとんどない、って感じですかね?
234ポイント を落としてしまった。
|
|
|
|
|
Name: softya [URL] ..ハッカー(221,001ポイント)
Date: 2010/09/20(月) 18:08
No:62139
|
|
Title: Re:無題
|
|
>>今のところほとんどない、って感じですかね?
>wmwareで仮想マシンとしてマシンそのものを動かしてます
dicさん。WMwareのCPUを含めてパソコン全体を仮想化する仮想マシンとJava実行環境を仮想化するJavaVMはだいぶイメージが違いますので、説明もなしにいきなり持ち出すとわくわくさんが混乱されると思います。
とりあえず、ややこしくなるのでWMwareについては保留させてください(そもそも利用者の導入が簡単ではありません)。
>ハードウェア、Cのコンパイラ、API、DirectX、DXライブラリ
ここを説明しますと、
ハードウェア ← OS ← API(DirectX含む) ← 実行ファイル(C言語で作られれた機械語プログラム)
と階層が分かれます。
各OS専用のC言語のコンパイラはOS毎のAPIの実装に沿った実行ファイルを作成します。
※クロスコンパイルと言う違うCPUやOS向けの実行ファイルを作る方法も存在しますが今回は省略。
JavaVMは、
ハードウェア ← OS ← API ← JavaVM ← 実行ファイル(Javaで作られた)
となります。
この仕組のためJavaVMはAPIに合わせてOS毎に違うものが必要です。
Javaランタイムと呼ばれているものがそれですね。
>そうすると、いわゆるjava言語みたいにプログラミング言語の開発環境そのものが
>特定のOSに依存せずに仮想化されていて、マルチプラットフォーム対応のC言語系統というのは
>今のところほとんどない、って感じですかね?
マイクロソフトの.NETFrameWorkがJavaVMに似た仮想的な働きをします。
なので、C#やVB.NETをLinuxで動かすオープンソースプロジェクトが存在します。
MonoDevelop
http://ja.wikipedia.org/wiki/MonoDevelop
C言語自体は思い当たりませんでした。
ただ、JavaVM上で動く言語が幾つか存在しますので、もしかしたらC言語版を開発しているオープンソースプロジェクトがあるかも知れません。 
740ポイント を落としてしまった。
|
|
|
|
|
Name: 438番 ..ぴよぴよ(518ポイント)
Date: 2010/09/20(月) 18:10
No:62140
|
|
Title: Re:無題
|
|
>関数がwindows専用
>windowsでしかGUIが使えない
というより正式には
WindowsAPIというのはwindowsの機能を呼び出すための関数セットのことです
したがってGUIうんぬんではなくwindowsでしか動きません
wineはわかりやすく言うとLinuxでwindowsを動かすようなものです
確かエミュレータだったはず
ですのでLinuxでもwindowsのプログラムが動きます
その代わりに動作がめちゃくちゃ重いです
Microsoft DirectX
その名の通りDirectXはwindowsに搭載されています
Linuxで動かないのはDirectXが搭載されていないからです
ですのでwindowsだからといってXP等の古いものでは最新のDirectXは搭載されていないので動きません
最新のDirectXを導入するためには、対応したOSが必要になります
DXライブラリはこれら(windowsAPIとDirectX)
での開発を支援するものだったはずなので
>DXライブラリもDirectXやwindowsに依存するので他のOSでは無理、
という事ですね?
その解釈で合っているはずです
408ポイント を落としてしまった。
|
|
|
|
|
Name: わくわくさん ..ぴよぴよ(91ポイント)
Date: 2010/09/20(月) 18:24
No:62141
| 解決!
|
Title: Re:無題
|
|
>dic様
wmware
OSのエミュレータみたいなものですか、一応知識としては覚えておきます。
>softya様
詳しい回答ありがとうございます。
なるほど、個人的にはC言語のVMができるといいです。
では再び解決とします。
皆様ありがとうございました。
91ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(228,152ポイント)
Date: 2010/09/20(月) 18:59
No:62142
|
|
Title: Re:無題
|
|
Wineは意外に早いですよ(もちろん、ネイティブに勝るはずはありません)。
Windows上のCygwinとLinuxやMac上のWineではどちらが早いのか知りませんが...
私は普段、Mac上でVMware Fusionを使ってWindows XPやVistaを動かしていますが、十分快適です。
とくにXPは快適で、その上でVisual Studio 2005を動かし、さらにWindows Mobileのエミュレータを動かして開発していたりします。
あと、VMware Fusionにはユニティモードというのがあって、これを使うと普通にMacからWindowsのプログラムを実行できるようになります。さらに、Mac上のファイルにWindowsのプログラムを関連づけることもできます。
258ポイント を落としてしまった。
|
|
|
|
Name: ターボ ..入門者(3,865ポイント)
Date: 2010/09/19(日) 10:46
No:62036
|
|
Title: C#
|
|
おはようございます。
私は数年前C言語やC++やJavaやCASL2の本を何冊かやっていて、最近まで何年もプログラミングから離れていたのですが、大学時代10年以上前に学校で使っていたOSがSolarisだったので、Linuxに興味が有って、今Debin lennyというLinuxのOSでMonoというWindowsでいうVisual Studioみたいな統合開発環境を使って色々な言語CやC++やC#を勉強したいなぁと思っているのですが、これから勉強するならこれを勉強するのがお勧めという言語は有りますか?
自分の今の仕事がプログラミングとは全く関係無くて、最近のパソコン事情は全く解らなくて、最初Linuxでプログラミングをするのに昔Borland C++ Builder6 personalを持っていたのでBorlandのKylixを使おうと思ったのですが、なんかホームページを見ても無くなっているっぽいので、友人に相談するとMonoなんかはどうか?と言われて、さっそくダウンロードインストールしてみたらなんかLinuxでVisual Studioっぽくて良いかなぁと思ったのですが、これから勉強するならCやC++よりC#の方が良いのでしょうか?
基本的に当分プログラミングはLinux専用のパソコンでしようと思っているのですが、アドバイス何でも良いのでよろしくお願いします。
2倍のポイントを手に入れた! 402ポイント を手に入れた。
|
|
|
|
Name: softya [URL] ..ハッカー(220,203ポイント)
Date: 2010/09/19(日) 12:51
No:62038
|
|
Title: Re:C#
|
|
そうですね。この言語が良いって言い切れるものは中々ないですが、仕事にしないなら純粋に趣味で決めて良いと思いますよ。私はC#とC++を作るアプリの規模とか要求速度で使いわけようと思っています。
C#は軽めのアプリ小規模用。
C++は負荷の大きいアプリ。大規模用。
もしLinuxでC++でウィンドウ・アプリを作るならQt(キュート)と言う選択肢もあります。
http://ja.wikipedia.org/wiki/Qt
これならWindowsでも互換性のあるアプリが作れます。
私はWindowsのVisualStudioを何年も使っていますが、少なくともマイクロソフトの思惑に振り回されるVisualStudioとは出来るだけ縁を切りたいと最近思っています。私が使っているC++のMFCを使うこと自体がバージョンアップの毎に既存ユーザーも初心者もハードルが高くなっている(開発ソフトの値段上昇と書籍の不足等など)のがその原因ですね。
C#も今後ライブラリの互換性を切り捨てたり有償でしか使えない機能が出てくるのではと不安です。なによりVisualStudioがどんどん重くなるのが(汗)
開発環境はMono、Qt辺りを使おうと色々下調べ中。JavaはいまいちGUI的に不満。
まだ軽く様子をみている段階なので、MonoもQtもどこまで使えるかは分かりません。
414ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(218,537ポイント)
Date: 2010/09/19(日) 13:34
No:62042
|
|
Title: Re:C#
|
|
MS社の本音は『MFCを切り捨てて、.NETに移行してください』でしょうから、仕方ないでしょうね(^_^;)
C#は良い言語なんだけど、.NETとセット物だという認識なので、今の所はWindows以外ではどうなのよ?という状況ですよね…
個人的にはC#が分かりやすくて大好きですが(^_^;)
128ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(220,408ポイント)
Date: 2010/09/19(日) 13:45
No:62045
|
|
Title: Re:C#
|
|
>>バグさん
>MS社の本音は『MFCを切り捨てて、.NETに移行してください』でしょうから、仕方ないでしょうね(^_^;)
完全に見捨てるならともかくMFCを2010でバージョンアップしてくる辺りがいやらしいですよね。
どっちなんだ!と。まぁ、マイクロソフトも既存開発者を捨てれないので苦慮しているんでしょうが。
C++/CLIでMFCを使えるようにしているのも話をややこしくしていますよね。捨てる気なら使えるようにするなって話です。橋渡しのつもりかも知れませんが失敗してると思います。
205ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(218,570ポイント)
Date: 2010/09/19(日) 15:44
No:62052
|
|
Title: Re:C#
|
|
たしかに…。
J++やJ#、6.0以前のVBのように完全に更新をストップしてくれた方が分かりやすいですよね(^_^;)
33ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(24,008ポイント)
Date: 2010/09/19(日) 17:22
No:62060
|
|
Title: Re:C#
|
|
Visual C++ 2010でC++/CLI(CLRカテゴリ)のプロジェクトを作成するとインテリセンスが効かない(SP1で対応するとか言ってますが)わけで、C++/CLIの扱いも軽いですよね。
2倍のポイントを手に入れた! 138ポイント を手に入れた。
|
|
|
|
|
Name: ターボ ..入門者(4,016ポイント)
Date: 2010/09/20(月) 10:41
No:62110
|
|
Title: Re:C#
|
|
softyaさんバグさんISLeさん返信ありがとうございました。
QtとかQt Creatorとかインストールしてみました。これからオブジェクト指向なんかも勉強していこうと思いました。(まだちゃんと理解できてないので…)
ところで、話は変わりますが、C#の書籍でお勧めの本って有りますか?
昨日大型書店に行ったんですが、財布にお金を入れて無かったので新TOEICの公式本2冊を買ったらC#の本を買うお金が足りなくなってしまって、C#の本は買わずに帰ってしまいました。
いつも私はプログラミング言語の本を買う時は独習シリーズを買っているんすが、独習C#が良いのかは、良くわかりませんでした。
151ポイント を手に入れた。
|
|
|
|
|
Name: ターボ ..入門者(4,086ポイント)
Date: 2010/09/20(月) 14:58
No:62125
| 解決!
|
Title: Re:C#
|
|
softyaさん返信ありがとうございます。
本の後ろを見たら2007年と書いてあったので、多少古いのかなぁと思っていたのですが、今度買ってみますね。それとサイトのURLもありがとうございます。
70ポイント を手に入れた。
|
|
|
|
Name: kerotan0820 ..上級者(24,790ポイント)
Date: 2010/09/20(月) 00:33
No:62089
|
|
Title: 無題
|
|
最近、アルバイト時の給料を毎回計算するのが面倒なので、給料の計算を手助けするプログラムを組むことにしました。
プログラムは添付したものをごらんください
バイトの一日の給料、月の給料を計算するためのプログラムです
一日の給料を計算するプログラムは正常に動作するのですが、月給を計算するプログラムは給料の合計値が正常に表示されません。
intで宣言した変数とfloatで宣言した変数がごちゃごちゃになってしまっているのだと思っていろいろ考えてみましたが、どうしても結果が正常に表示できません。(1時間近くにらめっこしてます・・・)
なぜ結果が正常に表示されないのでしょうか?
教えてください
※質問内容がわかりにくかったので訂正しました

1,226ポイント を落としてしまった。
|
|
|
|
Name: kerotan0820 ..上級者(24,871ポイント)
Date: 2010/09/20(月) 00:48
No:62091
| 解決!
|
Title: Re:無題
|
|
>>ookami様
回答ありがとうございます
ookami様の回答通り見てみたところint型に%fで入力求めてました(笑)
まったく気づきませんでした・・・
kyuryouという合計を記憶するために宣言した変数もint型で宣言しているのに表示は%fで行っていました
それも訂正したところ正常に表示されました^^
ありがとうございました。 
81ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(218,998ポイント)
Date: 2010/09/20(月) 01:47
No:62097
|
|
Title: Re:無題
|
|
もう見てないかもしれませんが、暇だったので、C#でGUIにしてみました。よかったらどうぞ(^_^;)
34ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..上級者(24,979ポイント)
Date: 2010/09/20(月) 02:15
No:62098
|
|
Title: Re:無題
|
|
>>バグさん
見てます!
実行してみましたが、感動しました!
こんなやつ作れたら便利なのにな〜と考えながらこのプログラムを組んでいたので、それがまさかの目の前で形になってしまったっていう・・・
なんと表現したらよいのか、驚きすぎてもう(笑)
ところで、C♯というのはC言語ですか?
こういうのはどうやって作るんですかね〜・・・
108ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..プログラマー(25,066ポイント)
Date: 2010/09/20(月) 05:52
No:62106
| 解決!
|
Title: Re:無題
|
|
>>管理人様
いつもお世話になっています
なるほど…。C#は別物なのですねぇ…、まったく同じもので呼び方格好良くしてるだけだと思ってました(笑
恥ずかしい^^;
なんか難しそうですねぇ… とりあえずゲーム製作の目標を達成できるようにがんばって、その後かじれたらかじりたいなと思います!
87ポイント を手に入れた。
|
|
|
|
Name: ten ..かけだし(1,063ポイント)
Date: 2010/09/19(日) 23:02
No:62074
|
|
Title: プログラミングについて
|
|
文系なのですが、ツクールなどを使わずにプログラミング言語でゲームを作れるようになれますか?
一応、アイコンやグラフィック、音楽は作れるのですが、
数学や物理は高校の時に途中で挫折してしまい、数U、Bまでしか勉強していません。
やっぱり理系出身じゃないと難しいですか?
2倍のポイントを手に入れた! 146ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(30,959ポイント)
Date: 2010/09/19(日) 23:08
No:62076
|
|
Title: Re:プログラミングについて
|
|
なれます。
理系じゃないと無理だというなら、今から理系になればイイじゃないですか。
挫折したのなら再チャレンジすればイイじゃないですか。
#tenさんのスキルセットを見るに、シナリオを自分で考えて、
#プログラマを別途募集したほうが良い気もします。
#目的はゲーム作成であって、プログラミングができるようになることでは無いのですよね?
69ポイント を落としてしまった。
|
|
|
|
|
Name: 真等 [URL] ..かけだし(2,329ポイント)
Date: 2010/09/19(日) 23:10
No:62077
|
|
Title: Re:プログラミングについて
|
|
目的のゲーム次第でしょう。
極端な話ですが、文字が表示されるだけの簡単なじゃんけんゲームでしたら、普通にPCが使える人なら出来ると思います。
逆に、FF14を作れと言われても、大勢の理系人間が「無理」って言うでしょう。
というわけで、ゲームと言っても、どの程度のゲームを想定されてますでしょうか。
94ポイント を手に入れた。
|
|
|
|
|
Name: fr ..ぴよぴよ(169ポイント)
Date: 2010/09/20(月) 00:07
No:62086
|
|
Title: Re:プログラミングについて
|
|
私も数学は最低のレベルだとは思いますが、3Dゲームを作れています。
というのも、DXライブラリ(DirextXもそうですが)を使えば計算用の関数が用意されていますので
ネットかなんかで計算結果をどうつかえばいいのかを調べれば割と簡単な3Dゲームなら作れたりします。
63ポイント を手に入れた。
|
|
|
|
|
Name: ten ..かけだし(1,087ポイント)
Date: 2010/09/20(月) 01:33
No:62096
|
|
Title: Re:プログラミングについて
|
|
皆様、レスありがとうございます。いろいろと参考になりました。
挫けそうになるかもしれませんが、頑張ってみようと思います。
どうもありがとうございました。 
24ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,280,018ポイント)
Date: 2010/09/20(月) 04:03
No:62102
|
|
Title: Re:プログラミングについて
|
|
プログラマーって案外文系が多いですよ。
高校の時何を学んだかで一生が左右されるわけではないと思いますから大丈夫ですよ。
プログラムで何を計算したいかによりますが、簡単なゲームを作るくらいなら特に特別な数学の知識は必要ないです。
ツクールというからにはRPGでしょうか?
初めて作るなら、ドラクエ1のようなRPGになるのかと思いますが、全くと言っていいほど数学的な知識は必要ないと思います。
あまりに数学が嫌いで式を見るだけで身の毛がよだつとかそんな大げさな事があれば別ですが・・。
また、多くの人が必要とするような情報はネットに沢山情報がころがっていますから、必要な時に調べれば十分事足ります。
と、いくら聞いてみても実際のところはやってみないと解らないと思うので、まずはやってみたらよいのではないでしょうか?
tenさんはC言語の経験はおありですか?もしおありで、基本的なC言語の使い方が解れば、うちで紹介しているDXライブラリで簡単なゲームを作ってみると良いと思います。
もし完全に初めてということであればこの辺参考にどうぞ
http://dixq.net/vcpp.html
316ポイント を手に入れた。
|
|
|
|
Name: SG ..かけだし(1,469ポイント)
Date: 2010/09/19(日) 17:04
No:62059
|
|
Title: 複数の派生クラスのソート
|
|
いつも大変お世話になっております。
SGと申します。
Cレベル(苦Cさん一通り)
C++レベル(やさしいC++一通り)
標記の件での質問です。
class Map_Manager から派生してclass Unitとclass Mapchipとしました。
UnitのオブジェクトとMapchipのオブジェクトをclass Map_Managerのメンバ変数(座標)でソートして
描画したいのですが手詰まりになっています。
クラスの設計が間違っているような気が徐々にしていますが
ご指導いただけますと幸いです。よろしくお願い致します。
ちなみにまずソートを抜きにして下のようにトライしてみたのですが
AddSprite(&Unit)としても
it->AnimePattern()
でUnit.AnimePattern()ではなくMap_Manager.AnimePattern()
が呼び出されているようです。
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
Unit Unit;
Map_Manager Map_Manager;
while(ProcessLoop()==0){//メインループ
Map_Manager.AddSprite(&Unit);
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
class Map_Manager{
public:
int Obj_x;//3次元座標。この3つの要素でソートしたい
int Obj_y;
int Obj_h;
int image[24];
Map_Manager();
virtual ~Map_Manager();
std::list<Map_Manager> Object_list;
virtual int AnimePattern();
void AddSprite(Map_Manager* _MapManager);
};
Map_Manager::Map_Manager(){}
Map_Manager::~Map_Manager(){}
void Map_Manager::AddSprite(Map_Manager* _Map_Manager){
Object_list.push_back(*_Map_Manager);
std::list<Map_Manager>::iterator it = Object_list.begin(); // イテレータ
while( it != Object_list.end() ) // listの末尾まで
{
DrawGraph(it->Obj_x, it->Obj_y, it->image[it->AnimePattern()], TRUE); // 要素を出力
++it; // イテレータを1つ進める
}
}
int Map_Manager::AnimePattern(){return 0;}
class Unit: public Map_Manager{
public:
int img;
int cnt;
public:
Unit();
int AnimePattern();
};
Unit::Unit(){
Obj_x=320;
Obj_y=240;
cnt=0;
img=0;
LoadDivGraph( "data/grf/***.png" , 24 , 6 , 4 , 64 , 64 , image ) ;
}
}
int Unit::AnimePattern(){
cnt++;
img=(cnt%60)/10;
return img;
}
class Mapchip: public Map_Manager{
public:
int chip_number;
public:
int AnimePattern();
};
Mapchip::Mapchip(){
LoadDivGraph( "data/grf/***.png" , 24 , 6 , 4 , 64 , 48 , image ) ;
}
int Mapchip::AnimePattern(){return 0;}

893ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(31,014ポイント)
Date: 2010/09/19(日) 18:09
No:62062
|
|
Title: Re:複数の派生クラスのソート
|
|
Object_listに格納する際に、Map_Managerクラスに丸めているため、
期待するメンバ変数が呼ばれていないのでは?
×std::list<Map_Manager> Object_list;
○std::list<Map_Manager*> Object_list;
92ポイント を手に入れた。
|
|
|
|
|
Name: SG ..かけだし(1,744ポイント)
Date: 2010/09/19(日) 18:56
No:62064
|
|
Title: Re:複数の派生クラスのソート
|
|
ぽこさん
お返事ありがとうございます。
はやい・・・一日悩んでたのに・・・^^;
なるほど…各クラスのポインタを格納するリスト、ということですか。
(*it)->Obj_x
の様にすることで一応動いたのですが、使い方はこれで合っていますか?
こんがらかってきました。
この場合(*it)が指すのが派生クラスのポインタということですか?
ということはitはポインタのポインタ?
何を弄っているのかわからなくなってしまいました。
動いたので”解決”とさせていただこうかと思ったのですが
理屈がわからずに動いている状態なので
お手数ですがご教示いただけますでしょうか?
275ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(31,028ポイント)
Date: 2010/09/19(日) 23:04
No:62075
|
|
Title: Re:複数の派生クラスのソート
|
|
> この場合(*it)が指すのが派生クラスのポインタということですか?
> ということはitはポインタのポインタ?
そう思っていただいて構いません。
14ポイント を手に入れた。
|
|
|
|
Name: ボビー ..かけだし(2,180ポイント)
Date: 2010/09/19(日) 18:50
No:62063
|
|
Title: RPGフィールドでキャラ移動時の障害物
|
|
RPGのフィールドでのキャラの移動について質問です。
私は今のところ背景(固定)と障害物(固定)は別々の画像として描画しています。
そしてキャラ(動く)で作ってました。
でも最近、キャラは足踏みだけのがいいなと思って変えようと思いました。
なので移動はキャラは足踏みするだけで背景が動くという形で作りたいんです。
背景を動かすことは出来たんですが障害物(木や岩などの行けない所)の動かし方が分かりません
障害物は今のところゲームプログラミングの館の「24. 行けない所を作る。〜2D〜」に書いてあ
る2次元配列でやっています。
「岩の絵が動く」且つ「ぶつかれば行けない」という仕様が思いつきません。
どなたか分かる方どんな仕様でも良いので教えてもらえませんか。 
260ポイント を手に入れた。
|
|
|
|
Name: Yperia ..かけだし(1,730ポイント)
Date: 2010/09/19(日) 19:32
No:62065
|
|
Title: Re:RPGフィールドでキャラ移動時の障害物
|
|
こんにちは。
背景だけが動いてしまうということでよろしいのでしょうか。
でしたら、
「背景と同様に、障害物も動かす」
ということで解決しそうな気がします。
「ぶつかれば行けない」は、
if ( 「この移動を行ったら、ぶつかってしまう」 ) {
// 何もしない
}
else {
「背景を動かす」
「背景と同様に、障害物も動かす」
}
という感じになりますでしょうか。
156ポイント を落としてしまった。
|
|
|
|
|
Name: アトラス ..初心者(6,064ポイント)
Date: 2010/09/19(日) 19:52
No:62067
|
|
Title: Re:RPGフィールドでキャラ移動時の障害物
|
|
当たり判定が実装されてるなら、あとは
キャラが最初の位置からどれだけ移動したかを別の変数に保存しておいて、
障害物を描画する時に、障害物の位置からその距離だけ引いてやればOKだと思いますよ。
92ポイント を落としてしまった。
|
|
|
|
|
Name: ボビー ..かけだし(2,197ポイント)
Date: 2010/09/19(日) 20:47
No:62069
|
|
Title: Re:RPGフィールドでキャラ移動時の障害物
|
|
Yperiaさんアトラスさんどちらも参考になりました。
ちょっとやってみます。
17ポイント を手に入れた。
|
|
|
|
|
Name: ボビー ..かけだし(2,219ポイント)
Date: 2010/09/19(日) 22:27
No:62073
| 解決!
|
Title: Re:RPGフィールドでキャラ移動時の障害物
|
|
お二人のおかげで出来ました!
ありがとうございました。
22ポイント を手に入れた。
|
|
|
|
Name: 超初心者 ..初心者(5,184ポイント)
Date: 2010/09/19(日) 04:47
No:62023
|
|
Title: ゲームプログラミングの館28章について
|
|
ゲームプログラミングの館28章でジャンプの処理をしていますが、なぜ特定の位置までジャンプしてそこでとまらずに落ちてくるのかがわかりません
わかる人教えてください
お願いします
あと、できればゲームプログラミングの館26章でなぜこのtama[i].x=640/2;は640を2で割っているのかということと、なぜ弾が画面の外まで飛んでいくのかということを教えてください
読みにくい文章でいろんな質問をしてしまってすいません
164ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(79,590ポイント)
Date: 2010/09/19(日) 05:02
No:62024
|
|
Title: Re:ゲームプログラミングの館28章について
|
|
>なぜ特定の位置までジャンプしてそこでとまらずに落ちてくるのかがわかりません
>わかる人教えてください
重力加速度のせいです。
この辺は色々ググってみたら、その手のページがたくさんあるのでそちらを参照して下さい。
>あと、できればゲームプログラミングの館26章でなぜこのtama[i].x=640/2;は640を2で割っているのかと>いうことと、なぜ弾が画面の外まで飛んでいくのかということを教えてください
画面の幅を2で割った値を入れることにより、
画面の中央を初期座標にしているだけでしょう。
自分の好きな位置の座標にしても全然かまいません。
>何故弾が外まで飛んでくか
下記のソースを見てください。
フラグがたっている弾の座標を8減らしています。
8減らすということは画面の上に移動していくということです。
これはフラグが立っている間はずっと行われている処理です。
8を減らしていって、画面外(大体-32)の位置まで来たら初期値に戻して、フラグを
戻しています。
for(i=0;i<10;i++){
if(tama[i].flag==1){ //発射している玉なら
tama[i].y-=8; //座標を8減らす
DrawGraph( tama[i].x , tama[i].y , image[1] , TRUE );//玉を描画
if(tama[i].y < -32){ //もし画面外まで来たら
tama[i].y=480; //初期値に戻し、
tama[i].flag=0; //発射フラグを戻す
}
}
}
前回の質問と今回の質問の内容からして、まず常にループしているという事を頭に置いて
考えたほうがよいでしょう。
680ポイント を手に入れた。
|
|
|
|
|
Name: 超初心者 ..初心者(5,252ポイント)
Date: 2010/09/19(日) 05:11
No:62025
|
|
Title: Re:ゲームプログラミングの館28章について
|
|
わかりやすい説明ありがとうございます^^
差し支えなければ28章でmath.hというヘッダファイルをインクルードしているのはなぜか教えてください
68ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,279,124ポイント)
Date: 2010/09/19(日) 13:16
No:62040
|
|
Title: Re:ゲームプログラミングの館28章について
|
|
物理的な計算式については、一つ前の27章で説明していますが、ご覧になりましたでしょうか?
別に物理的な計算式が解らなくてもゲームは作れますし、
物理を習ったことがある人でないと「?」な内容かもしれませんので、無理して読んで頂く必要はありません。
27章と重複しますが力学には
こんな方程式が存在します。
今、時間tのy座標を求めたいのですから、1式が必要です。
しかし初速度を代入したくないので、2式で初速度を消しています。
得られた3式から座標を計算しています。
221ポイント を手に入れた。
|
|
|
|
|
Name: 超初心者 ..初心者(5,316ポイント)
Date: 2010/09/19(日) 16:35
No:62058
| 解決!
|
Title: Re:ゲームプログラミングの館28章について
|
|
管理人さん シエルさん
ありがとうございました
ちゃんと理解できました^^
37ポイント を手に入れた。
|
|
|
|
Name: みそしる ..ぴよぴよ(40ポイント)
Date: 2010/09/19(日) 04:13
No:62021
|
|
Title: 画像が表示されません;
|
|
ゲームプログラミングの館で学ばせていただいているみそしると申します。
えと、質問なんですが。
DxLib_VC の中のサンプルプログラム実行用フォルダにchar.png を入れているときちんと画像を読み込むのですが、別のプロジェクトを作ってそのプロジェクトと同じフォルダに入れてもエラーはでないのに読み込みません・・・
ソフトはVisual Studio2010を使っています。
きっと、とても簡単なことなんでしょうけれど・・教えていただけませんか?お願いします。
40ポイント を手に入れた。
|
|
|
|
Name: みそしる ..ぴよぴよ(62ポイント)
Date: 2010/09/19(日) 14:59
No:62048
|
|
Title: Re:画像が表示されません;
|
|
ありがとうございます。
解決しました。
パス間違えてました;
22ポイント を手に入れた。
|
|
|
|
Name: Tororo [URL] ..中級者(10,730ポイント)
Date: 2010/09/18(土) 18:13
No:61986
|
|
Title: string型 を関数で実行するためには?
|
|
お久しぶりです Tororoです。
今回は、関数ポインタに近いかもしれない質問です。
このような関数の内部です。
void CTaskMap::RunTheTask()
{
map<string, string>::iterator it;
it = m_Maps->begin();
while( it != m_Maps->end() )
{
//関数名はAddObjectという関数で、
//stringと同名でmapのsecondに登録してあります
//この部分でstring型を関数みたいに使いたいのです。
//(*it).second() のような感じです。
//実行できないのは知っていますが(笑)
it++;
}
}
#define RunTheFunc(name) (name##(##)) のような事も考えたのですが、
「引数が0個は評価できません」と出てダメなんです。
やはり、関数ポインタでしか出来ないのでしょうか?
どうやったら、実行できるかご教授お願いします。
実行環境 VC++2008 WindowsXP

335ポイント を手に入れた。
|
|
|
|
Name: めるぽん ..上級者(20,707ポイント)
Date: 2010/09/18(土) 20:26
No:61991
|
|
Title: Re:string型 を関数で実行するためには?
|
|
C++ リフレクション的なことをするには、自分の知っている限りだとマクロを駆使しないと不可能という認識なのですが、そもそも関数ポインタではダメだという理由は何かあるのでしょうか?
90ポイント を手に入れた。
|
|
|
|
|
Name: Tororo ..中級者(10,788ポイント)
Date: 2010/09/18(土) 21:01
No:61992
|
|
Title: Re:string型 を関数で実行するためには?
|
|
ダメと言う訳ではなく、
関数ポインタ以外では出来ないかなと純粋に思い、
色々試してみたほうが、知識や自分のためになるかなと考えたからです。
ただ、不可能に近いのなら、関数ポインタを使用するのですけどね・・
トークン連結演算子? も、少し気になったもので><
58ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(20,814ポイント)
Date: 2010/09/18(土) 21:27
No:61997
|
|
Title: Re:string型 を関数で実行するためには?
|
|
## によるトークン連結は実行時に連結されるわけではないので、
#define CONCAT(a, b) a##b
string str1 = "Hoge";
string str2 = "Func";
CONCAT(str1, str2)
とした場合、最後の行は HogeFunc にはならず、str1str2 になります。
実行時に関数を探したりといったことはできないので、実行時に文字列で関数を呼び出す用途には使えませんね。
107ポイント を手に入れた。
|
|
|
|
|
Name: Tororo ..中級者(10,762ポイント)
Date: 2010/09/19(日) 07:19
No:62030
|
|
Title: Re:string型 を関数で実行するためには?
|
|
>>めるぽんさん
知らなかったです^^;
では、
#define RunTheFunc(name) name##(##)
だと、文字列ではなく、()を直で連結していると言う解釈でよいのでしょうか?
テストした時は、これでクラス外の関数は呼び出せたのですが。。
もしかして、クラスの関数は呼び出し方が違うのでしょうか・・・
26ポイント を落としてしまった。
|
|
|
|
|
Name: めるぽん ..上級者(20,898ポイント)
Date: 2010/09/19(日) 13:01
No:62039
|
|
Title: Re:string型 を関数で実行するためには?
|
|
>テストした時は、これでクラス外の関数は呼び出せたのですが。。
#define によるマクロは、単なる文字列の置換なので、どこかのコード上で
RunTheFunc(Func)
と書くと
Func()
というコードに置換されます。
なので、Func という名前の関数があれば呼び出せます。
84ポイント を手に入れた。
|
|
|
|
|
Name: Tororo ..中級者(10,764ポイント)
Date: 2010/09/19(日) 13:43
No:62044
| 解決!
|
Title: Re:string型 を関数で実行するためには?
|
|
>>めるぽんさん
調べたところ、クラス内での関数ポインタには使い方にルールがあるようです。
トークン連結での実行はあきらめて、関数ポインタで素直に作ろうと思います。。
ありがとうございましたm(_ _)m。
2ポイント を手に入れた。
|
|
|
|
Name: shiro4ao ..中級者(11,519ポイント)
Date: 2010/09/17(金) 13:31
No:61930
|
|
Title: バイナリデータの送信
|
|
TCPソケットでバイナリデータを贈りたいと思います。
そのままでは良くないと思い一応,送るバイナリデータは
簡易的に暗号にしたいともいます。
復号化のためデータの区切りをはっきりさせないといけないので
データの最初に"a"最後に"z"を付けておくります。
例)
dataという文字(テキストですが、バイナリだと思ってください)を送る場合
a(dataをXORで暗号にしたもの)z
というデータを送り、受信側で解析してdataというデータを受け取りたいのです。
以下のコードではテキストデータの送信は成功したのですが、
バイナリデータになると、おかしなデータが送られているようでした。
何か解決方法はありますか?
それとも根本からおかしいのでしょうか?
//送信側
sendex(SOCKET s,char FAR * buf, int len,int flags )
{
int i,ret,n=0;
char msg[4000];
memset(msg,'\0',4000);
//XORを用いて簡易的に暗号にする
for(i = 0; i < strlen(buf); i++) buf[i] = ~buf[i];
//データの始まりに"a"、終に"z"を書き込み、区切りとして使う
strcat(msg,"a");
strcat(msg,buf);
strcat(msg,"z");
ret=func(s,msg,strlen(msg), flags);
return ret;
}
//受信側
recvex (SOCKET s, char FAR * buf, int len,int flags )
{
int ret,ret2=0,i;
char *size,tmp1[4000],*tmp2,test[1000];
int n=0;
memset(test,'\0',1000);
ret= func(s,tmp1,len, flags);
if(ret<1) return 0;
int limit =ret;
int mark=limit;
int pos=0;
while(pos<limit){
//aをさがす
if(tmp1[pos]=='a'){
mark=pos;
}
//zを探す
if(tmp1[pos]=='z'){
int pos03=pos;
pos=mark;
if(pos03>pos){
//データ部の切り出し
n=pos03-pos-1;//-14;
tmp2=new char[n];
memcpy(tmp2,&tmp1[mark+1],n);
//XORで復号化
for(i = 0; i < n; i++) tmp2[i] = ~tmp2[i];
memset(buf,'\0',sizeof(buf));
memcpy(buf,&tmp2[0],n);
strcpy(&buf[n],"\0");
}else{
return n;
}
pos=pos03;
}
pos++;
}
//確認用メッセージボックス
strcat(test,"-");
strcat(test,buf);
strcat(test,"-");
MessageBox(NULL,test,"bufの中",NULL);
return n;
}
909ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(29,846ポイント)
Date: 2010/09/17(金) 20:03
No:61951
|
|
Title: Re:バイナリデータの送信
|
|
根本的に間違っています。
・送信側:
・送信データに0が入っていた場合は?
例えばバイナリデータとして、0をいくつか送ろうとしても、
strcat()では、送信バッファmsgにデータは入りません。
・受信側:
・暗号化したデータがaやzとなった場合は?
例えば受信データ本体の途中にzが含まれていると、そこで受信が終りになります。
これは望んだ結果ではないですよね?
・受信時に開始記号aや終端記号zがない場合は?
一回のrecv()で全ての送信データが取得できるとは限りません。
send()で100kByte送信しても、recv()では50kByteしか受信できない可能性もあります。
・その他:
・XOR?
ビット反転しているだけですよね?
コメントかコードがおかしいです。
333ポイント を手に入れた。
|
|
|
|
|
Name: shiro4ao ..中級者(11,605ポイント)
Date: 2010/09/18(土) 03:52
No:61962
|
|
Title: Re:バイナリデータの送信
|
|
ご回答ありがとうございます。
XORの部分はコメントが間違っています。ビット反転をしています。
送信側にも受信側にも問題だらけの実装だったのですね・・・・
どのような設計にすればいいでしょうか?
実装ではなく大まかな方法を教えていただければ幸いです。
86ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(39,061ポイント)
Date: 2010/09/18(土) 08:43
No:61963
|
|
Title: Re:バイナリデータの送信
|
|
最初に送りたいバイト数を送って、その後に実際のデータを送ればいいだけでは無いでしょうか。
受信側は、最初に送られてきたバイト数だけ受信すればいいことになりますね。
HTTPなんかは概ねこんな感じの仕様になってます。
とりあえず、既存のプロトコルのまねをするところから始めると失敗が少ないと思いますよ。
117ポイント を手に入れた。
|
|
|
|
|
Name: shiro4ao ..中級者(12,968ポイント)
Date: 2010/09/18(土) 18:21
No:61987
|
|
Title: Re:バイナリデータの送信
|
|
へろりさんありがとうございます。
先に贈りたいサイズを送ってその後、データを送信するようにしてみたのですが、
受信側がクラッシュするようでした。
サイズの受信までは上手く行っているようでした。
なにがまずかったのでしょうか?
//送信側
sendex(SOCKET s,char FAR * buf, int len,int flags )
{
int i,ret,n=0;
char msg[4000];
memset(msg,'\0',4000);
//データサイズの始まりに"a"、終に"z"を書き込み、区切りとして使う
itoa(len,size,10);
strcat(msg,"a");
strcat(msg,size);
strcat(msg,"z");
//サイズを送信
ret=func(s,msg,strlen(msg), flags);
//データ本体を送信
ret=func(s,buf,len, flags);
return ret;
}
//受信側
recvex (SOCKET s, char FAR * buf, int len,int flags )
{
int ret,ret2=0,i;
char *size,tmp1[4000],*tmp2,test[1000];
int n=0;
memset(test,'\0',1000);
//まずデータサイズを調べてbufに入れる
ret= func(s,tmp1,len, flags);
if(ret<1) return 0;
int limit =ret;
int mark=limit;
int pos=0;
while(pos<limit){
//aをさがす
if(tmp1[pos]=='a'){
mark=pos;
}
//zを探す
if(tmp1[pos]=='z'){
int pos03=pos;
pos=mark;
if(pos03>pos){
//データ部の切り出し
n=pos03-pos-1;//-14;
tmp2=new char[n];
memcpy(tmp2,&tmp1[mark+1],n);
//XORで復号化
for(i = 0; i < n; i++) tmp2[i] = ~tmp2[i];
memset(buf,'\0',sizeof(buf));
memcpy(buf,&tmp2[0],n);
strcpy(&buf[n],"\0");
}else{
return n;
}
pos=pos03;
}
pos++;
}
//ここからがデータ本体の受信
size=atoi(buf);
ret=0;
memset(buf,'\0',sizeof(buf));
//文字を受け取って指定サイズまでbufの後ろにくっつけていく
while(size>=ret){
n=func(s,tmp1,4000,flags);
memcpy(&buf[ret-1],&tmp1[0],n);
ret=n+ret;
}
return n;
}

1,363ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(39,501ポイント)
Date: 2010/09/19(日) 07:06
No:62028
|
|
Title: Re:バイナリデータの送信
|
|
ざらっとしか見てませんが、関数 recvex() 内の
>//XORで復号化
>for(i = 0; i < n; i++) tmp2[i] = ~tmp2[i];
の行は必要ですか?
送信側では暗号化されてないようですが。
それと、若干スパゲッティ化してますので、処理を大きく切り分けるように心がけると、プログラムの見通しもよくなり、よく分からないバグも減りますよ。
112ポイント を手に入れた。
|
|
|
|
Name: 超初心者 ..初心者(5,005ポイント)
Date: 2010/09/18(土) 13:49
No:61972
|
|
Title: ゲームプログラミングの館22章のことについて
|
|
ゲームプログラミングの館20章では else if(ch.x%32!=0) ch.x++;
という処理をしますが、ゲームプログラミングの館22章ではなぜ else if(ch.x%32!=0) ch.x++;
という処理をしなくてもちゃんと動くのですか?初歩的な質問ですみませんが教えてください
122ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(78,153ポイント)
Date: 2010/09/18(土) 14:11
No:61973
|
|
Title: Re:ゲームプログラミングの館22章のことについて
|
|
ヒント
こいつは32で割り切れるときしか処理できない。
では割り切れないときはどう動きますか?
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら
ch.muki=1; //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下ボタンが押されたら
ch.muki=2; //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 ) //右ボタンが押されたら
ch.muki=3; //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
}
下のコードはフラグが立っているときは以下の処理をします。
じゃあフラグが立たないときはどのタイミングですか?
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else if(ch.muki==1) //左向きならch.x座標を減らす
ch.x--;
else if(ch.muki==2) //下向きならch.y座標を増やす
ch.y++;
else if(ch.muki==3) //右向きならch.x座標を増やす
ch.x++;
}
以上の2点をふまえ、フラグが立っていて、32で割り切れない座標に居るときは
どう動くと思いますか? 
280ポイント を手に入れた。
|
|
|
|
|
Name: 超初心者 ..初心者(5,020ポイント)
Date: 2010/09/19(日) 02:24
No:62020
|
|
Title: Re:ゲームプログラミングの館22章のことについて
|
|
理解できました^^
シエルさんありがとうございます
15ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(20,617ポイント)
Date: 2010/09/18(土) 01:34
No:61959
|
|
Title: Re:atanのテーブル化について
|
|
そのリンク先にある toyo さんの書かれているプログラムが、atan テーブルを書き出すプログラムだと思うのですが。
そのプログラムを実行して、出力された atan_table.h を見ればいいと思います。
76ポイント を手に入れた。
|
|
|
|
|
Name: やっくん ..プログラマー(35,073ポイント)
Date: 2010/09/18(土) 02:01
No:61961
|
|
Title: Re:atanのテーブル化について
|
|
こんばんは。
過去ログを拝見しました。
過去ログの中でtoyoさんがatanのテーブル化サンプルプログラム(C言語)を示されていたので実行してみました。出力ファイルを添付しておきます。(atanテーブル)
言語は何を使用なさるのでしょうか? 
16ポイント を落としてしまった。
|
|
|
|
|
Name: momo ..ぴよぴよ(178ポイント)
Date: 2010/09/18(土) 21:52
No:62008
| 解決!
|
Title: Re:atanのテーブル化について
|
|
返事が遅れました。レスありがとうございます
ファイルが出力されるとは知りませんでした!
完全にこちらの確認不足ですね・・・
いろいろ試してみます
>やっくん さん
一応、C++です
52ポイント を手に入れた。
|
|
|
|
Name: Ultimate [URL] ..上級者(15,742ポイント)
Date: 2010/09/18(土) 21:19
No:61993
|
|
Title: 透過処理がうまくいかない
|
|
添付した画像を現在作成中の弾幕ゲームの自機として表示したいのですが、うまく透過されません。
ファイル名はjimg拡張子はPNGで、BMPにして試すとうまくいくのですが、色がおかしくなるのでPNGで行きたいです。
ソースは
int jiki;
jiki=LoadGraph(jimg.png);
//~〜〜略〜〜〜
DrawGraph(0,0,jiki,TRUE);
です。
なぜできないのでしょうか?
180ポイント を手に入れた。
|
|
|
|
Name: Ultimate ..上級者(15,790ポイント)
Date: 2010/09/18(土) 21:20
No:61994
|
|
Title: Re:透過処理がうまくいかない
|
|
ソース部分の修正
int jiki;
jiki=LoadGraph("jimg.png");
//~〜〜略〜〜〜
DrawGraph(0,0,jiki,TRUE);
48ポイント を手に入れた。
|
|
|
|
|
Name: Ultimate ..上級者(15,856ポイント)
Date: 2010/09/18(土) 21:24
No:61996
|
|
Title: Re:透過処理がうまくいかない
|
|
一度ペイントで開いて、その後上書き保存しましたが、うまくいきませんでした。
引き続き回答をお願いいたします。
2倍のポイントを手に入れた! 66ポイント を手に入れた。
|
|
|
|
|
Name: Ultimate ..上級者(15,959ポイント)
Date: 2010/09/18(土) 21:27
No:61998
|
|
Title: Re:透過処理がうまくいかない
|
|
ファイルの詳細も載せておきます。
●イメージ
大きさ:24×24
幅:24ピクセル
高さ:24ピクセル
ビットの深さ 32
●ファイル
名前:jimg.png
種類:PNGファイル
サイズ:1.41KB
属性:A
です。
103ポイント を手に入れた。
|
|
|
|
|
Name: Ultimate ..上級者(16,044ポイント)
Date: 2010/09/18(土) 21:32
No:62000
|
|
Title: Re:透過処理がうまくいかない
|
|
すみませんが、うまくいきませんでした。
もう一か所透過処理をしている画像があり、そちらがうまくいっているので詳細を見てみたところ、ビットの深さが24になっていました。
なのでこの画像のビットの深さが32なのが原因かもしれません。
引き続き回答お願いします。
85ポイント を手に入れた。
|
|
|
|
Name: dic ..比類無きプログラマー(96,796ポイント)
Date: 2010/09/16(木) 08:32
No:61827
|
|
Title: 既存ゲームのパラメータの利用
|
|
SLGを製作してます
某ゲーム会社が作ったSLGを元に、オリジナルでソフトを作ろうとしてます
そこで、人物などの情報(パラメータ)をその元のゲームからそのまま利用して独自のゲームを
作成して、利用することは何かしら問題があるのでしょうか?
問題があるとしたらパラメータをすこしいじれば問題がなくなるのでしょうか?
攻略本を資料にそのままの値をオリジナルのゲームに利用しようかと思ってます
攻撃方法や、ダメージ計算法などもそのまま利用しようかと思ってます
詳しい方がいましたら、教えていただけると助かります
261ポイント を手に入れた。
|
|
|
|
Name: へろり ..プログラマー(38,793ポイント)
Date: 2010/09/16(木) 08:52
No:61828
|
|
Title: Re:既存ゲームのパラメータの利用
|
|
まったく詳しくはありませんが。
ようはどこに著作権等が発生するかを考えればいいのだと思います。
人物などの情報(パラメータ)というのが具体的にどれぐらいの範囲をカバーするのか分かりませんが、
既存のキャラクター(名前や、外見的な特徴)にそのままご出演願うのはちょっとアウトかと。
攻撃方法というのが具体的にどのようなものか分かりませんが、その某ゲーム会社が作ったSLG固有のものであれば、いささか問題なような気がしないでもありません。 技やスキルの名称なども含めてですね。
ダメージの計算方法については、ダメージ計算のアルゴリズムがライセンスされているかどうかだと思いますが、このあたりは大丈夫なような気がします。 気がします。
283ポイント を手に入れた。
|
|
|
|
|
Name: あ ..かけだし(1,509ポイント)
Date: 2010/09/16(木) 11:48
No:61833
|
|
Title: Re:既存ゲームのパラメータの利用
|
|
自分がされて嫌かどうかだと思います。親告罪なので。
僕だったら、こっそりパクられてて、しかもそのゲームが面白かったら嫌ですw
出典を示してパクリであることを明言してるのなら許せますが。
48ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(97,035ポイント)
Date: 2010/09/16(木) 17:27
No:61845
|
|
Title: Re:既存ゲームのパラメータの利用
|
|
>へろりさん
>攻撃方法というのが具体的にどのようなものか分かりませんが、その某ゲーム会社が作ったSLG固有の
>ものであれば、いささか問題なような気がしないでもありません。 技やスキルの名称なども含めてですね。
>ダメージの計算方法については、ダメージ計算のアルゴリズムがライセンスされているかどうかだと思います
>が、このあたりは大丈夫なような気がします。 気がします。
そのオリジナルの元となるゲームそのまんまではちょっとまずいということですね
100%まんまはなく、いろいろ変更を加えたりしようと思ってます
>softyaさん
プレイヤーの情報しか頭にありませんでした
たしかに敵の配置なども考えると丸々コピーでは既存のゲームそのものになるので無理ですね
>あさん
親告罪というとその既存のゲーム会社ということになるのでしょうか?
よくあるSLGの形なので何十社と問い合わせが殺到する気がするので現実的ではない気がするのですが
239ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(218,153ポイント)
Date: 2010/09/16(木) 17:47
No:61846
|
|
Title: Re:既存ゲームのパラメータの利用
|
|
>プレイヤーの情報しか頭にありませんでした
ゲームバランスと言うのは微妙なものなので、ステージ構成や参加できるキャラクタ・その時装備出来るアイテム・購入出来る資金・敵のAIなどのバランスを考えてゲームデザインされています。
最初にパラメータはざっくり決めておいて、何処で入手できる様にするか、装備やキャラクタをどのぐらいの強さにするか、参加してくるメンバーのタイミングや敵の強さや敵AIの行動なども考えながらプレイしつつ最終的にパラメータを決めていくのが普通でしょう。
なので、パラメータを最初に決め手しまうと元のゲームできるだけ近いものにしないとゲームバランスが悪くなると思いますから意味が無い気がします。
>>あさん
>親告罪というとその既存のゲーム会社ということになるのでしょうか?
>よくあるSLGの形なので何十社と問い合わせが殺到する気がするので現実的ではない気がするのですが
あさんの言うのはモラルのことだと思います。
335ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(218,484ポイント)
Date: 2010/09/16(木) 18:40
No:61858
|
|
Title: Re:既存ゲームのパラメータの利用
|
|
>なんら問題は発生したと聞いたことがないのです
訴えられるワケでも、何らかのトラブルが発生するワケでも無いと思います。
※ 2chでイジられるなどのトラブルはあるかも知れませんが。
単にあさんは、嫌な気分がすると表現してしますね。
モラルとは、人を嫌な気分にさせるのはモラルに反するのでは?って事です。
>自分がされて嫌かどうかだと思います。親告罪なので。
>僕だったら、こっそりパクられてて、しかもそのゲームが面白かったら嫌ですw
>出典を示してパクリであることを明言してるのなら許せますが。
私は、こう解釈しました。以下自分の解釈です。
「自分がコピーされたら嫌だと思いませんか?
たとえパクる事がパクられた側が訴える必要のある親告罪だとしてもですよ。
僕だったら、こっそりパクられてて、しかもそのゲームが面白かったら嫌ですw
それでも、出典を示してパクリであることを明言してるのなら許せますが。」
>また、本業ではないのでシナリオや世界設定、キャラクター、パラメータの名前など
>新規に発起するほどの余裕は私にはありません
私としては、物を作る側の人間としてそこは疎かにしてほしくないですが・・・。
同人的に原型・原作をベースに何らかの自分の欲しい方向に広げる・創作するのなら全然構わないとは思ってますので、その方向はありです。
もしゲームデザイン・ゲームバランス調整したくないなら、他の人に頼んではどうでしょうか?
331ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(97,600ポイント)
Date: 2010/09/16(木) 19:03
No:61866
|
|
Title: Re:既存ゲームのパラメータの利用
|
|
>モラル
付け加えるのが遅くなりました
私は宗教とか道徳観とかが大の苦手です
>softyaさん
>モラルとは、人を嫌な気分にさせるのはモラルに反するのでは?って事です。
作品ができてもないのに、そんなことを言われるのは心外です > あさん
(私のパソコンをハックしてる?)
>私としては、物を作る側の人間としてそこは疎かにしてほしくないですが・・・。
>同人的に原型・原作をベースに何らかの自分の欲しい方向に広げる・創作するのなら全然構わ
>ないとは思ってますので、その方向はありです。
softyaさんのおっしゃるように既存のゲームを拡張したり、プログラムを作成するのが楽しいのであって
パクリが目的ではないです
何十年も続いている作品と同じ規模を要求されたらたまったものではないです
人数も製作体勢も費用も違うのですから
>もしゲームデザイン・ゲームバランス調整したくないなら、他の人に頼んではどうでしょうか?
ちょっとここがよくわからないのですが、バランス調整に敵の数や性能などが含まれてたら
自分でやることになります
softyaさんが替りに答えてくれてますが こういうことを言う あさんの返信を見たいです
具体例で送付画像のようなことが行われていますがどのような考えをお持ちでしょうか?

322ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..上級者(22,993ポイント)
Date: 2010/09/16(木) 21:23
No:61879
|
|
Title: Re:既存ゲームのパラメータの利用
|
|
> 自分がされて嫌かどうかだと思います。
企業が訴訟を起こす時、嫌かどうかで判断しますかね?
自分の企業に損害があるか否かだと思いますよ。
訴訟を起こして膨大な手間を惜しんでもなおあまりある損害が。
つまりdicさんがお作りになるゲームがその企業の会議で取り上げられるほどの損害を与え、
かつ諸々差し引いてもなお訴訟を起こした方が利益があると判断された場合、裁判が起きると思います。
道徳的にどうかという問題ではなく、単に訴訟が起こされるかどうかだけでいえば、
個人が趣味で配布しているようなゲームに対して訴訟を起こすようなことはまずないと思います。
何か自粛を促す連絡は来るかもしれませんが
185ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(219,702ポイント)
Date: 2010/09/16(木) 21:29
No:61881
|
|
Title: Re:既存ゲームのパラメータの利用
|
|
>付け加えるのが遅くなりました
>私は宗教とか道徳観とかが大の苦手です
道徳観というのは考えすぎだと思います。
人に迷惑を掛けたり嫌な気分にさせなって事だと思いますけどね。
>作品ができてもないのに、そんなことを言われるのは心外です
>(私のパソコンをハックしてる?)
dicさんの作品がそうだとは誰も言ってません。
いやな思いをされたなら申し訳ないです。
人の受け取り方は様々ですから、ここまでのコピーは許せるけど、ここを超えたら許せないとかは人によって必ず違います。訴えられなかったらOKは法律の問題であって人の気持ちは別ですって事を書いていたつもりです。
dicさんの作品があさんを楽しませるか嫌な気持ちにさせるかは本人でもないので分かりません。ついでに私も分かりません。作品を見ているわけではありませんから。
>ちょっとここがよくわからないのですが、バランス調整に敵の数や性能などが含まれてたら
>自分でやることになります
敵のパラメータやらステージ構成は作るってことですね。
私の言いたかったのはバランス調整をすると多分、プレーヤー側のパラメータも調整することになると思いますよって事です。
>>通りすがりさん
私はあさんが書いたことは、自分の好きな作品を変なふうにコピーされたら一ファンとして嫌な気分がしますって意味にとったんですが違いますかね?本人じゃないので何とも言えませんが。
2倍のポイントを手に入れた! 1,218ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(97,726ポイント)
Date: 2010/09/17(金) 07:36
No:61907
| 解決!
|
Title: Re:既存ゲームのパラメータの利用
|
|
>通りすがりさん
丁寧な解説ありがとうございます
>softyaさん
コピーが嫌というなら あさんだけが同人のところにこなければいいだけだと思います
>あさん
やはり返信がないようです
これだから匿名はタチが悪い
2倍のポイントを手に入れた! 126ポイント を手に入れた。
|
|
|
|
Name: 白 ..中級者(10,114ポイント)
Date: 2010/09/17(金) 08:06
No:61912
|
|
Title: GUIでcui的な入力をしたい
|
|
今、CUIのプログラムをGUIに移植したいと思い
四苦八苦しているところです。とりあえず、その最初の段階として
入力をどうやって受け付けるかが問題になりました。
CUIのほうではキーボードから値を読み取ってそれをもとに
また何かやるようにしてあります。で、それをGUIで実行させるとき
それをどうやって実装したらよいかわかりません。
一応、CreateWindowを"EDIT"で作って、それに出力と入力を
使用と考えたのですが、それだと、ユーザーが勝手に出力した文まで消せて、
さらに、どうやれば入力したのを受け取れるかが分かりませんでした。
(EDIT内の全部の文字列を読み込み、出力した文字列と比較して変化のあった
部分だけ取り出そうかとも思いましたが、それだと、文字を消去されたときに
動作がうまくいかなそうなので詰まりました。)
上の文ではわかりづらいと思うのですが、
要は、GUIにおいてCUI的な入力と出力をしたいのです。
Cのレベルは文字列操作とポインタがつたないですが、
一応入門書は終えてGUIでオセロを作れるくらいのレベルです。
win32APIの使用でお願いします。DxLibは無しです。
WindowsXP VB2008++
朝で急いで質問しているので、不足等あるかもしれませんが
よろしくおねがいします。
173ポイント を落としてしまった。
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(76,873ポイント)
Date: 2010/09/17(金) 08:18
No:61915
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
あまり言ってる意味がわかりません。
入力されたテキストはGetWindowTextで取得できると思います。
あとはそのテキストをsprintfなどでくっつけるなりして、利用するだけです。
その文字数もGetWindowTextLengthで取得できます。
39ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(38,944ポイント)
Date: 2010/09/17(金) 08:30
No:61917
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
入力用のエディットコントロールと、出力用のエディットコントロールに切り分けるのは無しですか?
40ポイント を手に入れた。
|
|
|
|
|
Name: 白 ..中級者(10,944ポイント)
Date: 2010/09/17(金) 17:23
No:61939
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
>たかぎさん
すみません、書いていませんでしたが、プロンプトは出せる環境ではありません。
>シエルさん
そうですよね、意味がわかりませんよね。自分で読み直してみてもそう思います。申し訳ありません。
GetWindowText等を使うと確かにEDITからの文字列の取得はできるのですが、それだと、EDIT内の文字列が消去されることを防げそうになく、断念しました。
>バグさん
えぇと、それが最も近いです。プログラム側で表示させたものは一切消せないようにして、ユーザーが入力する値だけはEnterを押すまでは自由にユーザー自身が書きなおしできるようにしたいです。
>へろりさん
おおぅ、それは全く考えてもいませんでした。確かに2分割するならば、かなり簡単にうまくいきそうです。出力用のコントロールだけなら、書き換えを不可にするのもできそうです。ただ、現在でもwindowを二分割してしまっているので、さらに分割すると見づらくなりそうなのが怖いです。(NetBook?ぐらいの画面サイズで使うことを前提として組んでいるので)
説明が明らかに悪かったため、せめて、例だけでも書いてみます。
---------window(コントロール?)------------------
数値を入力してください? =
------------------------------------------------
というようにプログラム側で表示させた後=の後ろにプレイヤーが値を入力できるようにしたいということです。これをEDITコントロールで実行しようとすると、"数値を入力してください?="の部分までバックスペースで消せてしまうので、困っています。これを消せないようにしたいです。
CUIだとprintfで一回表示させたものはユーザー側には消せないようになりますよね?で、そのあとにscanfで値を入力させても、その時には、もうprintfで表示させたものはユーザーは消せないけど、scanfに渡すべき値はエンターを推す前は何度でも修正ができるようになっています。これと同じことをしたいです。
本当に分かりづらい文章しか書けず、申し訳ありません。が、どうか見捨てることなくお助けください。
830ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..比類無きプログラマー(77,160ポイント)
Date: 2010/09/17(金) 17:31
No:61940
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
エディットコントロール内に入力を促す文章を書くのではなく、
ちょっと上のウィンドウ部分に書けば済む話ではないでしょうか?
38ポイント を手に入れた。
|
|
|
|
|
Name: 白 ..中級者(11,216ポイント)
Date: 2010/09/17(金) 17:43
No:61941
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
>シエルさん
確かに、そう言われると、そうですね。他によさそうな案がなければ
そんな感じで行ってみることも考えてみます。
ただ、一応出力→入力→出力→入力→出力というように
何回も繰り返し、表示して、出力もある程度の量は出すので、
一つのコントロールにまとめれられた方が、使う側にとっても
楽かなと、それに見た目的にもスマートかと^^;
2倍のポイントを手に入れた! 272ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(218,348ポイント)
Date: 2010/09/17(金) 17:51
No:61943
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
そういうことならば…
1:数値入力を促すメッセージを表示するだけのラベル
2:数値入力用のエディットボックス
3:入力ログ表示用のリストボックス
ってな感じで3つに分割すれば楽かと思いますよ。
73ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..比類無きプログラマー(77,165ポイント)
Date: 2010/09/17(金) 17:52
No:61944
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
入力したものはずっと表示させておきたいってことですか?
それでは入力用と出力用のエディットコントロールにわければどうですか?
5ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(218,409ポイント)
Date: 2010/09/17(金) 19:11
No:61948
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
こんな感じ?
WINAPIだと時間掛かるのでC#.NETでささっと書いてみました。
TextBoxに文字を入力してEnterを押すとListBoxに転送されるだけのものです。
61ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(39,389ポイント)
Date: 2010/09/18(土) 08:53
No:61964
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
>現在でもwindowを二分割してしまっているので、さらに分割すると見づらくなりそうなのが怖いです。
出力用のエディットコントロールの子ウィンドウで、入力用のエディットコントロールを貼り付ければいいんじゃ無いでしょうか。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃出力用エディットコントロール ┃
┃ ┃
┃適当に出力 ┌─────────┐ ┃
┃このあたりで入力を促す>│入力用エディット │ ┃
┃ └─────────┘ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
こんな感じで。
後は入力用エディットコントロールを動かしたり隠したりすればいいのでは。
328ポイント を手に入れた。
|
|
|
|
|
Name: 白 ..中級者(11,272ポイント)
Date: 2010/09/18(土) 19:36
No:61988
|
|
Title: Re:GUIでcui的な入力をしたい
|
|
考えもしなかった方法ばかりで、驚きました。
特に、へろりさんのおっしゃる方法は、完全に
盲点を突かれたように感じました。
たくさんのアドバイスがいただけ、どうにか
形にできそうな感じがしてきました。
本当にありがとうございました。
また、質問することがあると思うので、その時も
ご協力いただければ幸いです。
56ポイント を手に入れた。
|
|
|
|
Name: 爺プログラマー ..入門者(4,890ポイント)
Date: 2010/09/18(土) 16:19
No:61980
|
|
Title: 画面出力のONOFF
|
|
パソコンのCRT画面をONOFFする関数を教えてください。
スクリプトでも構いません。
よろしくお願いします。
48ポイント を手に入れた。
|
|
|
Name: ヤス ..かけだし(1,312ポイント)
Date: 2010/09/16(木) 23:36
No:61900
|
|
Title: 先日、慣性を付けようとしていた者です
|
|
どうも、ヤスです
別の部活の試合やらでごたごたしている内に
過去ログに入ってしまったので立て直しました
本題なのですが、いろいろやってみた結果
キー入力で移動量を変化させ、移動量によって
毎回キャラクターを移動させればいいのではないか、と思いつきまして
作ってみたのですが、うまくいきませんでした
おそらく、移動量(mx)が毎回0になっているんだと思うのですが
どこをいじればいいのかよくわかりませんでした
下にあるのが作ってみたソースです
いろいろ突っ込みどころがあると思うので
バシバシ突っ込んでください
#include "../include/GV.h"
void calc_ch(){
ch.cnt++;
ch.img=(ch.cnt%24)/6;
}
void ch_move(){//キャラクタの移動制御
int i,sayu_flag=0,joge_flag=0,anglex=0,angley=0;
double x,y,mx=0,my=0,naname=1,mv=2;
//mx=移動量,my=移動量,mv=加速度
int inputpad[4];
inputpad[0]=CheckStatePad(configpad.left); inputpad[1]=CheckStatePad(configpad.right);
inputpad[2]=CheckStatePad(configpad.down); inputpad[3]=CheckStatePad(configpad.up);
if(CheckStatePad(configpad.left)>0)//左キーが押されていたら
ch.img+=4*2;//画像を左向きに
else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
ch.img+=4*1;//画像を右向きに
for(i=0;i<2;i++)//左右分
if(inputpad[i]>0)//左右どちらかの入力があれば
sayu_flag=1;//左右入力フラグを立てる
for(i=2;i<4;i++)//上下分
if(inputpad[i]>0)//上下どちらかの入力があれば
joge_flag=1;//上下入力フラグを立てる
if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
naname=sqrt(2.0);//移動スピードを1/ルート2に
if(CheckStatePad(configpad.left)>0)//左キーが押されていたら
anglex=-1;//アングルを左向きに
else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
anglex=1;//アングルを右向きに
if(CheckStatePad(configpad.up)>0)//下キーが押されていたら
angley=-1;//アングルを下向きに
else if(CheckStatePad(configpad.down)>0)//上キーが押されていたら
angley=1;//アングルを上向きに
for(int i=0;i<4;i++){//4方向分ループ
if(inputpad[i]>0){//i方向のキーボード、パッドどちらかの入力があれば
x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
mx+=mv*anglex,my+=mv*angley;
}
x+=mx/naname, y+=my/naname;//今の座標と移動分を足す
if(!(x<10 || x>FIELD_MAX_X-10 || y<5 || y>FIELD_MAX_Y-5)){//計算結果移動可能範囲内なら
ch.x=x , ch.y=y;//実際に移動させる
}
}
}
1,271ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(30,887ポイント)
Date: 2010/09/17(金) 23:29
No:61957
|
|
Title: Re:先日、慣性を付けようとしていた者です
|
|
#過去ログへのリンクをつけていただきたく。
慣性力とは速度(移動量)に対する補正値ですよね?
そして、その性質として、
・反対向きの力が加わると小さくなる。→右方向への慣性力なら左キーの入力があれば小さくなる
・同じ方向の力が加わると大きくなる。→右方向への慣性力なら右キーの入力があれば大きくなる
・そうでなければ変化しない。
パッと見、慣性力を変化させているコードが見当たりません。
変数mvがそれに該当するように見えますが、常に2という値なので、慣性力になりません。
ただの移動量になっています。
サンプルを取り敢えず作ってみました。
未コンパイル、動作未確認です。
----
if(CheckStatePad(configpad.left)>0)
{
anglex=-1;
if ( -4 < ch.ax )//慣性力が下限を超えていなければ
{
ch.ax -= 0.5; // 左向きにさらに慣性力かける
}
}
else if(CheckStatePad(configpad.right)>0)
{
anglex=1;
if ( ch.ax < 4 )//慣性力が上限を超えていなければ
{
ch.ax += 0.5; // 右向きにさらに慣性力かける
}
}
//略
for(int i=0;i<4;i++){
if(inputpad[i]>0){
x=ch.x , y=ch.y;
mx=move_x[i]; my=move_y[i];
x+=(mx+ ch.ax)/naname , y+=(my+ ch.ay)/naname;//今の座標と移動分(基本移動量+慣性の補正分)を足す
if(!(x<10 || x>FIELD_MAX_X-10 || y<5 || y>FIELD_MAX_Y-5)){
ch.x=x , ch.y=y;
}
}
}

824ポイント を手に入れた。
|
|
|
|
Name: ねこ ..熟練のプログラマー(54,251ポイント)
Date: 2010/09/15(水) 20:18
No:61801
|
|
Title: 座標の配列を使った処理の名称( ぷち雑談 )
|
|
こんばんは、お久しぶりです。
typedef struct {
double x, y;
} POINT;
POINT ArrayPnt[ 10 ];
のように座標構造体を配列で定義して
for( int i = 1; i < 10; i++ )
{
ArrayPnt[ i ].x += ( ArrayPnt[ i - 1 ].x - ArrayPnt[ i ].x ) * 0.1;
ArrayPnt[ i ].y += ( ArrayPnt[ i - 1 ].y - ArrayPnt[ i ].y ) * 0.1;
}
というような処理をする事で一つ前の添字の座標に近づかせて座標をへびみたいに移動させる処理があるのですが
この処理何かしら名前があるのでしょうか?
僕は前の座標を後ろの座標が追従するということで親子座標みたいな言い方をしていて
他の方は蛇配列、座標コネクタ等各々違った言い方をしてました。
割とよく見る処理だし何かしら正式な名称があるだろう、と思って調べたのですが
いまいち検索ワードが思いつかず出てきませんでした。
あるのかすら分からないですが一応こういう座標を管理するクラスまで作ってるので正式名称があれば知りたいという感じです。
知らない方も私はこう呼んでます、みたいなのを教えていただければと思います。
では、よろしくお願いします。
185ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(577,527ポイント)
Date: 2010/09/15(水) 22:13
No:61807
|
|
Title: Re:座標の配列を使った処理の名称( ぷち雑談 )
|
|
この処理は私もクラス化していて、実はお気に入りの一つです。
大抵は2,3個の配列しか作らないことが多いですが、用範囲が広いんで便利ですよね。
>何かしら正式な名称があるだろう
ばね・ダンパあたりじゃないでしょうか。
109ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..熟練のプログラマー(41,066ポイント)
Date: 2010/09/15(水) 22:44
No:61811
|
|
Title: Re:座標の配列を使った処理の名称( ぷち雑談 )
|
|
AIではリーダー追従(Leader Following)という名称で紹介されていたような。
でも、これは汎用性が低い言い方でしょうね・・・。
66ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(52,862ポイント)
Date: 2010/09/16(木) 09:24
No:61830
|
|
Title: Re:座標の配列を使った処理の名称( ぷち雑談 )
|
|
一般名称かどうか自信がありませんが、
forループの中身は、
「指数関数的に」→ exponential
「接近」→ approximate
なので、そのまま
exponentialApproximate とか、
省略して
expApprox とか、
forループで配列全体を処理していることを加味して、
expApproxArray とか、いかがでしょうか。
108ポイント を手に入れた。
|
|
|
|
|
Name: ねこ ..熟練のプログラマー(54,742ポイント)
Date: 2010/09/16(木) 21:38
No:61883
| 解決!
|
Title: Re:座標の配列を使った処理の名称( ぷち雑談 )
|
|
返信ありがとうございます。
>Justyさん
<ばね・ダンパあたりじゃないでしょうか。
調べてみたのですが、近いようで違うような気がしました。
調べてると追従する事と近づき方というのを分けて考えないといけないような印象を受けます。
一方ごとならいくつかそれっぽい名称があったのでもう少し調べてみようと思います。
<この処理は私もクラス化していて、実はお気に入りの一つです。
<大抵は2,3個の配列しか作らないことが多いですが、用範囲が広いんで便利ですよね。
Justyさんがクラス化してると物凄い多機能なクラスになってそうですね^^
>MNSさん
日本語としては追従がしっくりきます。
リーダー追従だと1対多の意味が多いようで、この動作とは少しマッチしない感じがしました。
>ookamiさん
情報ありがとうございます。
近づき方自体はクラス内で何種かあるのでタイプ定数の名前等に使わせてもらおうと思います。
なんだか変な質問だったのですが、レスにあった単語単語調べてると色々知る事が出来ました。
ありがとうございます、ひとまず解決とさせて頂きます。
491ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(23,747ポイント)
Date: 2010/09/16(木) 23:46
No:61901
|
|
Title: Re:座標の配列を使った処理の名称( ぷち雑談 )
|
|
> リーダー追従だと1対多の意味が多いようで、この動作とは少しマッチしない感じがしました。
閃きました。
「レミング型追従」というのはどうでしょう。
13ポイント を手に入れた。
|
|
|
|
|
Name: ねこ ..熟練のプログラマー(54,891ポイント)
Date: 2010/09/17(金) 19:59
No:61950
|
|
Title: Re:座標の配列を使った処理の名称( ぷち雑談 )
|
|
こんばんは、レスありがとうございます。
<「レミング型追従」というのはどうでしょう。
ググったらあんまり良い話(集団なんたらやら)が出てきませんでしたw
逸話みたいですが、レミングでピンとくる人は少なそうですね。
内部の設定として「無条件追尾」という種別があるので、遊び気分で変えてみるのも良いかもですねw
103ポイント を手に入れた。
|
|
|
|
Name: ちゅるん ..ぴよぴよ(157ポイント)
Date: 2010/09/17(金) 05:00
No:61904
|
|
Title: ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
ぷよぷよみたいなパズルゲームを作りたいと思っているのですが、連続した色がy軸かx軸にあるかどうかというチェックのアルゴリズムが思いつきません。
ブロックが落下した際にそのブロックの配列からx--とx++、y--とy++方向に同じ色があるか
もし限界領域内であり、y--方向にあった場合は探索位置をy方向に一つずらし、同じ方法で探索。
繰り返して探索結果が同じ色が4つ以上存在した場合、ブロックを削除し、-y軸にあるブロックを消去分だけ下げる
という方法が私の思いつきの限界なのですが、それでは上と下や上と右、各上下左右に同じ色が存在した場合に正しい結果が得られない気がします。
何か良いアルゴリズムなどございますでしょうか 
16ポイント を手に入れた。
|
|
|
|
Name: やっくん ..プログラマー(35,089ポイント)
Date: 2010/09/17(金) 05:37
No:61905
|
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
オセロを作ったときに似たようなことを考えたので、私の手法を書きます。
@グローバル変数で繋がっているものをカウントする変数を用意しておく
Aブロック落下→そのブロックの周りを縦横、再起的に調べていく
B色が同じならカウント、その際にブロックの位置を覚えさせておく
B全て見終わったらカウンター値から評価し、位置を覚えておいたブロックを消したり消さなかったり。
スマートな手法ではないかもしれません(^^;
参考程度にどうぞ。
128ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(97,863ポイント)
Date: 2010/09/17(金) 07:41
No:61908
|
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
全部チェックする方法なので速度的に問題あるかもしれませんが
配列 int a[10][10][10] とする
最初に中身があったらその中身の色を記憶
隣をチェック、最初の色と同じかどうかチェック
同じ色だったらカウント
違う色だったらカウントやり直し
カウントが4になってたら消すフラグを立てておく
次に縦方向で同じチェックをする
消すフラグがたっているのを消す処理をする
とまぁ、総当たりで解けます
137ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(38,825ポイント)
Date: 2010/09/17(金) 07:53
No:61909
|
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
要は塗りつぶし処理と同じだと考えればいいと思いますよ。
MSペイントにありますよね。 起点と同じ色のピクセルを塗りつぶす機能。 アレです。
32ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,278,903ポイント)
Date: 2010/09/17(金) 07:59
No:61910
|
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
ちゅるんさん
ただ玉を数えるだけでも結構難しいですよね。
やっくんさんも書かれている通り、再帰関数で計算すると計算しやすいと思います。
といっても再帰関数って使った事が無いと良く解らないと思うので、
隣接ブロックの同じ色の数を数える関数を作ってみました。
void CheckBlock(
bl_t bl[Y][X], //ブロックの情報
int x, //座標
int y,
int *cnt //数えた個数
){
int col;
(*cnt)++; // カウントをインクリメントする
col = bl[y][x].col; // 色情報を一時的に保存する
bl[y][x].Checked = 1; // 検査済みの箇所に印を付ける
// 上下左右方向で隣接している同色ぷよの数をカウントする
if (一番上ではない && 未検査 && bl[y-1][x].col == col) CheckBlock(bl, x, y-1, cnt);
if (一番下ではない && 未検査 && bl[y+1][x].col == col) CheckBlock(bl, x, y+1, cnt);
if (一番左ではない && 未検査 && bl[y][x-1].col == col) CheckBlock(bl, x-1, y, cnt);
if (一番右ではない && 未検査 && bl[y][x+1].col == col) CheckBlock(bl, x+1, y, cnt);
}
コンパイルも何もしてないので、間違いがあるかもしれませんが・・。
左、上、右、下に隣接したブロックが無いか調べ、
あれば、その座標を自分の関数に渡します。
そうすると同じ処理を順次位置を変えながら行うことが出来ます。
再帰関数が良く解らなければ、こちらで
http://dixq.net/sort.html
再帰関数を使ったクイックソートをアニメーションで説明しているアプリがあるのでよろしければお使いください。
2倍のポイントを手に入れた! 1,148ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(38,904ポイント)
Date: 2010/09/17(金) 08:06
No:61911
|
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
以前ぷよぷよを作ったときのソースがありますので、載せておきます。
実際にはちょっと違いますが、概ねこんな感じです。
第一引数のfdはフィールドを表す2次元配列です。
FIELD_X、FIELD_Y はそれぞれフィールドの幅と高さです。 6と13ですね。
第2引数x、第3引数yを基点とし上下左右を調べて同じ色なら再帰します。
戻り値は消されるぷよの数です。
addErasePuyo() 関数は一時的な消去バッファへ消す予定のぷよを放り込みます。
途中で現れる5という数値は、おじゃまぷよを表すぷよの番号です。
参考までに。
int eraseLoop(unsigned char fd[FIELD_X][FIELD_Y], int x, int y, int cnt)
{
unsigned char puyo = fd[x][y];
addErasePuyo(x, y, puyo);
cnt++;
if(x > 0){
if(fdd[x - 1][y] == puyo) cnt = eraseLoop(fd, x - 1, y, cnt);
else if(fd[x - 1][y] == 5) addErasePuyo(x - 1, y, 5);
}
if(x < FIELD_X - 1){
if(fd[x + 1][y] == puyo) cnt = eraseLoop(fd, x + 1, y, cnt);
else if(fd[x + 1][y] == 5) addErasePuyo(x + 1, y, 5);
}
if(y > 0){
if(fd[x][y - 1] == puyo) cnt = eraseLoop(fd, x, y - 1, cnt);
else if(fd[x][y - 1] == 5) addErasePuyo(x, y - 1, 5);
}
if(y < FIELD_Y - 1){
if(fd[x][y + 1] == puyo) cnt = eraseLoop(fd, x, y + 1, cnt);
else if(fd[x][y + 1] == 5) addErasePuyo(x, y + 1, 5);
}
return cnt;
}
79ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(214,555ポイント)
Date: 2010/09/17(金) 08:30
No:61918
|
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
1つ確認したいのですが、知りたいのは…
ぷよぷよルール(ブロックが一定個数以上隣接している個数を数える)なの?
コラムスルール(ブロックが一定個数以上並んでいるのを数える)なの?
タイトルはぷよぷよだけど、質問を読む限りではコラムスルールのように思えたので(^_^;)
47ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(216,994ポイント)
Date: 2010/09/17(金) 10:18
No:61924
|
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
とりあえず、ぷよぷよルールだった場合のサンプルを作ってみました。
コンソールアプリです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define WIDTH 6 // フィールド幅
#define HEIGHT 16 // フィールド高
#define VANISH 4 // 消去に必要な個数
#define COLOR 3 // 色数
// ブロック管理用構造体
struct BLOCK
{
int nColor; // 色
int nVanish; // 消去フラグ
};
// フィールド管理用構造体
struct FIELD
{
struct BLOCK stBlock[WIDTH][HEIGHT]; // ブロック構造体配列
};
// 関数のプロトタイプ宣言
void ShowField(struct FIELD* pField);
int Check(struct FIELD* pField);
void Vanish(struct FIELD* pField);
int Slide(struct FIELD* pField);
void Count(struct FIELD* pField, int nX, int nY, int* pCount);
// メイン関数
int main(void)
{
int nX = 0;
int nY = 0;
int nChain = 0;
struct FIELD stField;
// 乱数の種を仕込む
srand((unsigned)time(NULL));
// フィールドへ適当な色のブロックを仕込む
for (nY = 0; nY < HEIGHT; ++nY)
{
for (nX = 0; nX < WIDTH; ++nX)
{
stField.stBlock[nX][nY].nColor = rand() % COLOR + 1;
stField.stBlock[nX][nY].nVanish = 0;
}
}
// 初期状態の描画
printf("初期状態\n");
ShowField(&stField);
getchar();
// 消去箇所が存在する間はループを続ける
while (Check(&stField) != 0)
{
// 消去チェック後の状態を描画
printf("%2d連鎖\n", ++nChain);
printf("チェック後\n");
ShowField(&stField);
getchar();
// 消去処理後の状態を描画
printf("消去後\n");
Vanish(&stField);
ShowField(&stField);
getchar();
// 空白を詰める為に1段ずつ落下させる
while (Slide(&stField) != 0)
{
printf("1段落下後\n");
ShowField(&stField);
getchar();
}
}
printf("%2d連鎖で終了しました\n", nChain);
return 0;
}
// フィールドを描画
void ShowField(struct FIELD* pField)
{
int nX = 0;
int nY = 0;
for (nY = 0; nY < HEIGHT; ++nY)
{
for (nX = 0; nX < WIDTH; ++nX)
{
// 色と消去フラグを表示する
printf("[%2d,%2d] ", pField->stBlock[nX][nY].nColor, pField->stBlock[nX][nY].nVanish);
}
putc('\n', stdout);
}
putc('\n', stdout);
}
// 全ブロックの同色で隣接している個数をチェックする
int Check(struct FIELD* pField)
{
int nX = 0;
int nY = 0;
int nReturn = 0;
struct FIELD stDummy;
for (nX = 0; nX < WIDTH; ++nX)
{
for (nY = 0; nY < HEIGHT; ++nY)
{
// 空白=0としているので、0の場合は何もしない
if(pField->stBlock[nX][nY].nColor == 0)
{
continue;
}
// 消去フラグをクリアしておく
pField->stBlock[nX][nY].nVanish = 0;
// フィールド構造体をコピーして、検査用の構造体領域を作成する
memcpy(&stDummy, pField, sizeof(struct FIELD));
// 同色で隣接している個数をカウントする
Count(&stDummy, nX, nY, &pField->stBlock[nX][nY].nVanish);
// 同色で隣接している個数がVANISH定数を超えていたら、戻り値を1にする
nReturn |=(pField->stBlock[nX][nY].nVanish >= VANISH);
}
}
// 1箇所でも消去される箇所があれば1、なければ0が返る
return nReturn;
}
// VANISH定数よりたくさん同色で隣接していたら消去する
void Vanish(struct FIELD* pField)
{
int nX = 0;
int nY = 0;
for (nX = 0; nX < WIDTH; ++nX)
{
for (nY = 0; nY < HEIGHT; ++nY)
{
// 同色での隣接数がVANISH定数以上か?
if(pField->stBlock[nX][nY].nVanish >= VANISH)
{
// ブロック情報をクリアする
memset(&pField->stBlock[nX][nY], 0, sizeof(struct BLOCK));
}
}
}
}
// 消去されて空いた隙間を1段だけ詰める
int Slide(struct FIELD* pField)
{
int nX = 0;
int nY = 0;
int nReturn = 0;
for (nY = HEIGHT - 1; nY >= 1; --nY)
{
for (nX = 0; nX < WIDTH; ++nX)
{
// 検査箇所が空白で、1つ上が空白ではない場合
if(pField->stBlock[nX][nY].nColor == 0 &&
pField->stBlock[nX][nY - 1].nColor != 0)
{
// 検査箇所へ1つ上のブロック情報をコピーする
memcpy(&pField->stBlock[nX][nY], &pField->stBlock[nX][nY - 1], sizeof(struct BLOCK));
// 1つ上のブロック情報をクリアする
memset(&pField->stBlock[nX][nY - 1], 0, sizeof(struct BLOCK));
// 動いた箇所があったので、戻り値を1にする
nReturn = 1;
}
}
}
// 動いた箇所があった場合は1、そうでない場合は0が返る
return nReturn;
}
// 同色で隣接している個数を数える(再帰関数)
void Count(struct FIELD* pField, int nX, int nY, int* pCount)
{
// 検査箇所の色を保持する
int nColor = pField->stBlock[nX][nY].nColor;
// ダブって検査しないように、検査した箇所のブロック情報をクリアしておく
memset(&pField->stBlock[nX][nY], 0, sizeof(struct BLOCK));
// カウンタをインクリメントする
++(*pCount);
// 1つ上のブロックを検査
if(nY - 1 >= 0 && nColor == pField->stBlock[nX][nY - 1].nColor)
{
Count(pField, nX, nY - 1, pCount);
}
// 1つ下のブロックを検査
if(nY + 1 < HEIGHT && nColor == pField->stBlock[nX][nY + 1].nColor)
{
Count(pField, nX, nY + 1, pCount);
}
// 1つ左のブロックを検査
if(nX - 1 >= 0 && nColor == pField->stBlock[nX - 1][nY].nColor)
{
Count(pField, nX - 1, nY, pCount);
}
// 1つ右のブロックを検査
if(nX + 1 < WIDTH && nColor == pField->stBlock[nX + 1][nY].nColor)
{
Count(pField, nX + 1, nY, pCount);
}
}
2,439ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(217,822ポイント)
Date: 2010/09/17(金) 11:21
No:61927
|
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
もし、コラムスでしたら、Check関数とCount関数を下記のものと入れ替えてください。
こちらの関数でしたら、縦・横・斜めに3つ以上並んでいたら消えます。
int Check(struct FIELD* pField)
{
int nX = 0;
int nY = 0;
int nCount = 0;
int nReturn = 0;
// 消去フラグをクリア
for (nX = 0; nX < WIDTH; ++nX)
{
for (nY = 0; nY < HEIGHT; ++nY)
{
pField->stBlock[nX][nY].nVanish = 0;
}
}
for (nX = 0; nX < WIDTH; ++nX)
{
for (nY = 0; nY < HEIGHT; ++nY)
{
// 空白=0としているので、0の場合は何もしない
if(pField->stBlock[nX][nY].nColor == 0)
{
continue;
}
// 同色で並んでいる個数をカウントする
// 上方向
nCount = 0;
Count(pField, nX, nY, 0, -1, &nCount);
// 右上方向
nCount = 0;
Count(pField, nX, nY, 1, -1, &nCount);
// 右方向
nCount = 0;
Count(pField, nX, nY, 1, 0, &nCount);
// 右下方向
nCount = 0;
Count(pField, nX, nY, 1, 1, &nCount);
// 同色で並んでいる個数がVANISH定数を超えていたら、戻り値を1にする
nReturn |= (pField->stBlock[nX][nY].nVanish >= VANISH);
}
}
// 1箇所でも消去される箇所があれば1、なければ0が返る
return nReturn;
}
void Count(struct FIELD* pField, int nPosX, int nPosY, int nMoveX, int nMoveY, int* pCount)
{
// 次の検査箇所の座標を求める
int nNextX = nPosX + nMoveX;
int nNextY = nPosY + nMoveY;
// カウンタをインクリメントする
++(*pCount);
// 次の検査箇所へ
if (nNextX >= 0 && nNextX < WIDTH && nNextY >= 0 && nNextY < HEIGHT &&
pField->stBlock[nPosX][nPosY].nColor == pField->stBlock[nNextX][nNextY].nColor)
{
Count(pField, nNextX, nNextY, nMoveX, nMoveY, pCount);
}
// 同色で並んでいる個数がVANISH定数以上ならば消去フラグをVANISHにする
if (*pCount >= VANISH)
{
pField->stBlock[nPosX][nPosY].nVanish = VANISH;
}
}
828ポイント を手に入れた。
|
|
|
|
|
Name: ちゅるん ..ぴよぴよ(283ポイント)
Date: 2010/09/17(金) 14:18
No:61932
| 解決!
|
Title: Re:ぷよぷよみたいなゲームのチェックアルゴリズム
|
|
皆さんありがとうございます!
たくさんのアルゴリズムが合ってまだ全部見れてないし、まだそこを考える段階まで行ってませんが、がんばります。
初心者な為、またちょくちょく質問に来ると思いますがよろしくお願いします。
とりあえず解決とさせていただきます。
126ポイント を手に入れた。
|
|
|
|
Name: shiro4ao ..中級者(10,574ポイント)
Date: 2010/09/15(水) 23:40
No:61813
|
|
Title: 0バイトのデータの受信
|
|
TCPソケットで通信をしています。
相手から"a"で始まり"z"で終わるデータが送られてきます。
a1234567z なら 1234567 を送信しているとみなします。
ただし、通信内容は全て数字とします。
(つまり、aやzが区切りとして以外送られることはない)
以下のように書いたのですが、0バイトのデータ("az"と送られる)
がやってくると上手く処理してくれませんでした。
なにかうまくする方法はありますか?
それとも根本からおかしいのでしょうか?
int recvex (SOCKET s, char FAR * buf, int len,int flags )
{
int ret,ret2=0,i;
char *size,tmp1[4000],*tmp2,test[1000];
int n=0;
memset(test,'\0',1000);
ret= recv(s,tmp1,len, flags);
int limit =ret;
int mark=limit;
int pos=0;
while(pos<limit){
//aをさがす
if(tmp1[pos]=='a'){
mark=pos;
}
//zを探す
if(tmp1[pos]=='z'){
int pos03=pos;
pos=mark;
if(pos03>pos){
//データ部の切り出し
n=pos03-pos-1;//-14;
tmp2=new char[n];
memcpy(tmp2,&tmp1[mark+1],n);
memset(buf,NULL,sizeof(buf));
//0バイトのデータがきたとき
if(strstr(tmp1,"az")!=NULL){
memcpy(buf,&tmp2[0],1);
strcpy(buf,""); //bufに空のデータを入れる
MessageBox(NULL,"空っぽのデータが来ました","空っぽのデータ",NULL);
return 0;
}
//0ではないデータが来たとき
memcpy(buf,&tmp2[0],n);
strcpy(&buf[n],"\0");
MessageBox(NULL,buf,"bufの中身の確認",NULL);
}else{
return n;
}
pos=pos03;
}
pos++;
}
return n;
}

601ポイント を手に入れた。
|
|
|
|
Name: mila ..ぴよぴよ(307ポイント)
Date: 2010/09/16(木) 00:25
No:61817
|
|
Title: Re:0バイトのデータの受信
|
|
new char[0]していることが原因な気がしますが
やりたいことは要するにこんな感じですか?
int n;
char *p_a, *p_z;
if ((p_a = strchr(buf, 'a')) == NULL || (p_z = strchr(p_a, 'z')) == NULL) {
buf[0] = '\0';
return 0;
}
n = (int)(p_z - p_a - 1);
memmove(buf, p_a + 1, (size_t)n);
buf[n] = '\0';
return n;
198ポイント を手に入れた。
|
|
|
|
|
Name: shiro4ao ..中級者(10,610ポイント)
Date: 2010/09/17(金) 09:02
No:61920
| 解決!
|
Title: Re:0バイトのデータの受信
|
|
どうも上手くいかなかったようです。
原因は通信に数以外のデータが入ってるようでした。
別の方法を考えたいと思います。
ありがとうございました。
36ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(52,651ポイント)
Date: 2010/09/15(水) 18:14
No:61794
|
|
Title: Re:【雑談】【管理人様へ】過去ログの181より最近のが検索できない?
|
|
お返事ありがとうございます。
そういえば前に「過去ログに落ちる条件が厳しい」みたいな話もありましたね。
大変ですねぇ^^;
43ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,276,957ポイント)
Date: 2010/09/15(水) 19:35
No:61797
|
|
Title: Re:【雑談】【管理人様へ】過去ログの181より最近のが検索できない?
|
|
対応してもらいました。
今までに何度か検索時に10個ずつチェックするのは難しいので何とかしてもらえないかと頼んだのですが、ダメでした。
せめて見やすいようにしてほしいと言ったところ、10個ずつ改行して頂いたようなのですが・・。
あぁせめて「過去ログ%03d」にしてほしい(T_T
お金払っているとはいえレンタル掲示板なので、要望があまり言えず残念です。
やはり自作しかないとCGIを少しは勉強してみたんですが、一言掲示板が完成した時点で、
これと同じ機能になるまで作り込むのは大変だと思い諦め気味です;
チャット掲示板が欲しいといつか要望があったので、こことは別にその自作CGI公開してのんびり改良するってのもありかもしれませんが^^;
228ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(52,754ポイント)
Date: 2010/09/16(木) 09:07
No:61829
| 解決!
|
Title: Re:【雑談】【管理人様へ】過去ログの181より最近のが検索できない?
|
|
すばやいご対応ありがとうございます。
ホントだ、10個ずつ改行されている...けど...見やすくなったかどうかは微妙ですね^^;
自作掲示板、以前ちょっと拝見しました。デザインがカッコよかった記憶がw
まぁ自作したらしたで、不具合対応はあるでしょうから、その意味では、同じと言えば同じかもしれませんね。
ともかく、検索できない件は解消したので、これにて「解決!」ということで。
ありがとうございました。
103ポイント を手に入れた。
|
|
|
|
|
Name: 住所特定反対 ..ぴよぴよ(14ポイント)
Date: 2010/09/16(木) 15:47
No:61841
|
|
Title: Re:【雑談】【管理人様へ】過去ログの181より最近のが検索できない?
|
|
このトピックはメール報告で十分ではないでしょうか。
(管理人が文章を一部変更・削除しました)
14ポイント を手に入れた。
|
|
|
|
|
Name: naohiro19 ..かけだし(1,379ポイント)
Date: 2010/09/16(木) 16:22
No:61842
|
|
Title: Re:【雑談】【管理人様へ】過去ログの181より最近のが検索できない?
|
|
> (記事削除に伴いこちらも削除致しました)(管理人が記事を削除しました)
これは相手に対して失礼に当たります。
15ポイント を手に入れた。
|
|
|
|
|
Name: 住所特定反対 ..ぴよぴよ(31ポイント)
Date: 2010/09/16(木) 16:47
No:61844
|
|
Title: Re:【雑談】【管理人様へ】過去ログの181より最近のが検索できない?
|
|
何も間違ったことは言ってない
きつめには言ったがね
17ポイント を手に入れた。
|
|
|
|
|
Name: ねこ ..熟練のプログラマー(54,788ポイント)
Date: 2010/09/16(木) 21:40
No:61884
|
|
Title: Re:【雑談】【管理人様へ】過去ログの181より最近のが検索できない?
|
|
10ずつで改行されるなら一番左に「全ON/全OFF」ボタンとかあるとTAB+SPACEの連打の手間が無くなって助かるなぁとは思いました。
あまり過去ログ検索はしないのでそれだけのためにお手間かけるのもあれですが、
折角スレッドがあるので要望を投げてみます。
46ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,277,301ポイント)
Date: 2010/09/16(木) 23:17
No:61898
|
|
Title: Re:【雑談】【管理人様へ】過去ログの181より最近のが検索できない?
|
|
> 住所特定反対さん
なるべく丁寧な言葉でお話しいただけると幸いです。
また、特別な事情が無い限り、いつもと同じお名前を使って頂けると幸いです。
円滑に、そして気持ちよく皆さんがこの場を利用できるようご協力よろしくお願いいたします。
もしご意見などありましたらメールなどで頂けると幸いです。
> ねこさん
まさにそれを21styleさんにお願いしたんですが、出来ませんと言われました。
技術的にはもちろん可能なんでしょうが、いちいちユーザーの希望を聞いていられないのでしょうね・・。
21styleさんがあまりまだ大きくない頃は色々要望聞いていただけたんですが。
249ポイント を手に入れた。
|
|
|
|
Name: blue ..初心者(7,208ポイント)
Date: 2010/09/16(木) 18:29
No:61854
|
|
Title: 無題
|
|
文字列xに文字列yが含まれるかどうかを判定する関数str_comp(char [], char [])を作成せよ.この関数を用いて、入力されたひと つめの文字列にふたつめの文字列が含まれているかを判定するプログラムを作成せ よ。
% ./compare
文字列x (64字まで)? University
文字列y (64字まで)? Univ
"Ritsumeikan-University"に"Univ"は含まれます.
% ./compare
文字列x (64字まで)? University
文字列y (64字まで)? city
"University"に"city"は含まれません.
というもんだいで自分が書いたソースをコンパイルして、実行して、ははじめが「University」でその次がsityで入力すると含まれませんと表示されます。しかし、ほかにいろいろ実行してためしていたらうまくいったのもあるので少しプログラミングが間違っているのではないかと思いどこを直せばよいか質問したいと思います。
自分の書いたソース↓
#include<stdio.h>
# define SIZE 64
int str_comp(char x[],char y[]);
int main(void){
int i,j;
char buf[SIZE],don[SIZE];
printf("文字列x (64字まで)? ");
fgets(buf,SIZE,stdin);
printf("文字列y (64字まで)? ");
fgets(don,SIZE,stdin);
//bufをポインタを動かす
for(i=0 ;i< SIZE ;i++){
if(buf[i]=='\0'){
break;
}
else if(buf[i] == '\n'){
buf[i]='\0';
}
}
for(j=0 ;j<SIZE ;j++){
if(don[j]=='\0')
break;
else if(don[j]=='\n')
don[j] = '\0';
}
j = str_comp(buf,don);
if(j==1){
printf("%sに%sはふくまれています\n",buf,don);
}
else{
printf("%sに%sはふくまれていません\n",buf,don);
}
}
int str_comp(char x[],char y[]){
int i,j;
i = 0;
j=0;
for(;;){
if(x[i] == y[j]){
i++;
j++;
if(x[i] != '\0' || y[j] != '\0'){
return 1;
break;
}
else if(x[i] != y[j]){
break;
}
}
else{
i++;
break;
}
}
return 0;
}
555ポイント を手に入れた。
|
|
|
|
Name: fatens ..上級者(19,149ポイント)
Date: 2010/09/16(木) 19:15
No:61871
|
|
Title: Re:無題
|
|
「文字列xのi番目からの文字の並びが文字列yの文字の並びと等しいか」
について調べれば良いので、
文字列xの終端まで、先頭を1文字ずつずらして調べていく
文字列yの各文字の並びが文字列xの先頭からの文字の並びに等しい間繰り返す
ループから抜けたとき文字列yが終端に達していたら1を返す
含まれていなかったので0を返す
のような感じで判定できると思います。
文章で書くと逆に分かりにくいですかね……
121ポイント を落としてしまった。
|
|
|
|
|
Name: アビゲイル ..ぴよぴよ(756ポイント)
Date: 2010/09/16(木) 20:01
No:61874
|
|
Title: Re:無題
|
|
この際breakをすべて消して、一致したらreturn 1、一致しなかったらreturn 0
にして見てはどうですか?
今のままだと最初の1文字しか判定してないように見えます。
#念の為 breakをすべて消して→str_comp関数内のことです 
60ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(43,011ポイント)
Date: 2010/09/16(木) 20:20
No:61875
|
|
Title: Re:無題
|
|
同じか?ではなく含まれているかですよね。
でしたら、jの値を0に戻す作業はいらないのですか?
必要だと思うのですが…
breakはいらない…ですね。
=====
ついでに
成功した時の条件は
if(y[j]=='\0')
return ある;
失敗は
if(x[i]=='\0')
return ない;
という感じでもいいと思います。
(「ある」と「ない」は0と1どっちかわかんなかったから…)

73ポイント を落としてしまった。
|
|
|
|
Name: SI ..ぴよぴよ(77ポイント)
Date: 2010/09/16(木) 18:14
No:61850
|
|
Title: if文を使ったプログラムで質問です
|
|
C言語で質問です。
#include <stdio.h>
void main(void)
{
double ave;
char lank;
printf("平均値:");
scanf("%lf", &ave);
if(ave>100) {
printf("エラー");
}
else if(ave>=75){
lank='A';
}
else if(ave>=50){
lank='B';
}
else if(ave>=25){
lank='C';
}
else if(ave>=0){
lank='D';
}
else{
printf("エラー");
}
printf("\n平均:%7.1lf点 評価:%c\n", ave, lank);
}
数値を入力するとA,B,C,Dのランク付けされて、100を超えた数値と0未満の数値を入力したらエラーと表示したいのですが、
101を入力したら上のプログラムだとエラーとは表示されるのですが下のような表示結果が出てきます。
平均値:101
エラー
平均: 101.0点 評価:
平均と評価は出ないようにしたいです。
なので下のような結果にしたいです。
平均値:101
エラー
どうしたら良いのでしょうか?
return文とかは使わないでください。
初心者なので簡単な感じでお願いします。
77ポイント を手に入れた。
|
|
|
|
Name: dic ..比類無きプログラマー(97,278ポイント)
Date: 2010/09/16(木) 18:21
No:61852
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
bool error = false;
if( avg > 100 )
error = true;
...
if( error == false )
printf( "\n平均..." );
ではどうでしょう?
4ポイント を手に入れた。
|
|
|
|
|
Name: SI ..ぴよぴよ(122ポイント)
Date: 2010/09/16(木) 18:24
No:61853
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
すみません。
初心者でbool error = false;とかの意味がわかりません。
初心者用のプログラムにしてもらえませんか?
45ポイント を手に入れた。
|
|
|
|
|
Name: SI ..ぴよぴよ(191ポイント)
Date: 2010/09/16(木) 18:36
No:61856
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
Boolというのはまだ習っていません。
エラーのときは平均と評価を出さないようにしたいのですが。
やっぱそういうのを使わないと無理なんでしょうか?
69ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(42,767ポイント)
Date: 2010/09/16(木) 18:39
No:61857
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
今覚えるか、int宣言でやるかですね。
//bool error = false;
int error=0;
if( avg > 100 )
// error = true;
error = 1;
...
//if( error == false )
if( error == 0 )
printf( "\n平均..." );
簡単にはこういうこと。(のはず…
dicさんのコピーさせていただきました。
2倍のポイントを手に入れた! 134ポイント を手に入れた。
|
|
|
|
|
Name: SI ..ぴよぴよ(221ポイント)
Date: 2010/09/16(木) 18:46
No:61860
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
でもそういうのを使わないでもできるって聞いたんですが。
僕が書いたプログラムをちょっと修正するくらいでは出来ないのでしょうか?
30ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(42,817ポイント)
Date: 2010/09/16(木) 18:53
No:61861
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
一番簡単なのは最後にも条件をつける。
if(ave<=100)
printf("\n平均:%7.1lf点 評価:%c\n", ave, lank);
50ポイント を手に入れた。
|
|
|
|
|
Name: SI ..ぴよぴよ(180ポイント)
Date: 2010/09/16(木) 18:59
No:61865
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
そのやり方がありましたか!
あと-1とか入力したときも出ないようにしたいのですが。
何度もすみません。
41ポイント を落としてしまった。
|
|
|
|
|
Name: SI ..ぴよぴよ(15ポイント)
Date: 2010/09/16(木) 19:10
No:61869
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
なんとか出来ました。
#include <stdio.h>
void main(void)
{
double ave;
char lank;
printf("平均値:");
scanf("%lf", &ave);
if(ave>100)
{
printf("エラー\n");
}
else if(ave>=75)
{
lank='A';
}
else if(ave>=50)
{
lank='B';
}
else if(ave>=25)
{
lank='C';
}
else if(ave>=0)
{
lank='D';
}
else
{
printf("エラー\n");
}
if(ave<=100)
{
if(ave>=0)
{
printf("平均:%7.1lf点 評価:%c\n", ave, lank);
}
}
}
これでエラーのときは平均と評価が出ないようになりましたが、コンパイルは通ったのですがプログラム的にはおかしいというところは無いでしょうか?
ifの中にifとかやっちゃったんですが大丈夫だったでしょうか?
165ポイント を落としてしまった。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(42,971ポイント)
Date: 2010/09/16(木) 19:14
No:61870
|
|
Title: Re:if文を使ったプログラムで質問です
|
|
多分まだ知らないのだと思いますが、
if(ave<=0 && 100<=ave)
という書き方があります。
他にも「||」とかもあります。
その辺は勉強していけば、すぐわかりますよ。
あとif文の中にif文を書いても問題はありません。
=========
すでに解決になっていたのでこっそり。
ちょこっと短くしてみた。
#include <stdio.h>
void main(void){
double ave;
char lank;
printf("平均値:");
scanf("%lf", &ave);
if(ave<0 || 100<ave){
printf("エラー");
}
else{
lank='D'-(int)ave/25+(int)ave/100;
printf("\n平均:%7.1lf点 評価:%c\n", ave, lank);
}
}

2倍のポイントを手に入れた! 154ポイント を手に入れた。
|
|
|
|
|
Name: SI ..ぴよぴよ(39ポイント)
Date: 2010/09/16(木) 19:16
No:61872
| 解決!
|
Title: Re:if文を使ったプログラムで質問です
|
|
皆さんありがとうございました。
無事解決しました
24ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..熟練のプログラマー(52,888ポイント)
Date: 2010/09/14(火) 18:10
No:61709
|
|
Title: 画像が表示されません
|
|
すごい基本的なことで申し訳ないのですが
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
での画像表示のところで行き詰りました。
サンプルプログラム用フォルダにはちゃんと入っているのですが表示されず困っています。
なにか設定が違うのでしょうか。どなたかわかる方教えていただけますか。
よろしくお願いします。
2倍のポイントを手に入れた! 214ポイント を手に入れた。
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(60,790ポイント)
Date: 2010/09/14(火) 18:52
No:61716
|
|
Title: Re:画像が表示されません
|
|
>>初心者さん
> LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
char.png がプロジェクトと同じフォルダに入っているなら
"char.png" でいいですが、別の場所に入っていたりすると
プロジェクトから見てどこに画像があるのか(ファイルパス)を指定しなければいけません。
"image/char.png"
image フォルダの中に char.png が入っている場合。
"../image/data/char.png"
一つ上のフォルダの image フォルダの中にある data フォルダに char.png が入っている場合。
"../../image.char.pmg"
二つ上のフォルダの image フォルダの中に char.png が入っている場合。
画像の名前や拡張子が違う可能性もありますので併せて御確認下さい。
ファイルパスが間違っていなければ、後は描画されていない等が原因だと思われます。
解決に至らない場合プログラムを提示して頂いても宜しいでしょうか。
43ポイント を手に入れた。
|
|
|
|
|
Name: くろろん ..ぴよぴよ(54ポイント)
Date: 2010/09/15(水) 13:45
No:61780
|
|
Title: Re:画像が表示されません
|
|
たくさんのアドバイスありがとうございます。
家に帰り次第、いろいろと試させていただきます^^
あと初心者は禁止なんですね。すみません。
54ポイント を手に入れた。
|
|
|
|
|
Name: クロロン ..ぴよぴよ(22ポイント)
Date: 2010/09/16(木) 18:02
No:61848
|
|
Title: Re:画像が表示されません
|
|
皆さんからのアドバイスをもとにいろいろ試したらできてました!!
アドバイスいただきありがとうございます♪
22ポイント を手に入れた。
|
|
|
|
Name: ちゅるん ..ぴよぴよ(126ポイント)
Date: 2010/09/16(木) 00:59
No:61821
|
|
Title: ゲームプログラミングの館の17章〜19章についての確認
|
|
あくまでも確認のための質問なのですが
http://dixq.net/g/19.html
こちらの17章〜19の実行結果にはキャラクターが歩いているような実行結果になっておりますが、DrawGraph( 320 , 240 , image[12] , TRUE ) ;//[12]の画像を描画
配列番号の12の画像が呼び出されるということは歩いている姿ではなく制止したキャラクターが描画されるということでよろしいのですよね?
実行結果には13の画像が表示されており、一応サンプルを実行した結果12の画像は表示されたのですが、念のために確認しておきたいです。
何か間違って理解しておりましたら指摘をお願いします。
126ポイント を手に入れた。
|
|
|
|
Name: ちゅるん ..ぴよぴよ(141ポイント)
Date: 2010/09/16(木) 13:21
No:61837
| 解決!
|
Title: Re:ゲームプログラミングの館の17章〜19章についての確認
|
|
ありがとうございました。
15ポイント を手に入れた。
|
|
|
|
Name: 438番 ..ぴよぴよ(798ポイント)
Date: 2010/09/12(日) 23:05
No:61631
|
|
Title: クロスプラットフォームのネットワーク
|
|
クロスプラットフォームでのネットワークプログラミングを学ぼうと思ったのですが
少し迷っています
ネットワークプログラミングの経験は友達とLinux上で動作する
チャット用プログラムを開発したときのチャット部分の担当をした程度です(友人はGUI担当)
(オンラインゲームで使用される様な1:1会話やチャットルームなど)
開発する言語はC言語では無理なのではと思い、C++で行こうと思っています
インターネットで検索してみたところ
The ADAPTIVE Communication Environment(通称:ACE)と
Boost C++ Librariesというものがあることを知りました
あるいはQtなんて選択肢も...
どれがいいのか、あるいは他にいいものがあるのかすら今の自分のレベルではわかりません
そこでお聞きしたいのですがクロスプラットフォームで開発する場合
上に挙げたものではどれがいいのでしょうか
また他にあるのなら教えていただけないでしょうか
素直にJAVAを使え、と言われそうな質問ですが
できるだけハードウェア性能を犠牲にしないようにと考えています
どのような事をしたいか、などはまだ決まっておらず
今はただネットワークプログラミングをしてみたい、と思い相談させていただきました
そんなことでは助言しづらい、と言われるかもしれませんが
できれば理由と勉強できるような書籍などを教えていただけると嬉しいです
また今回はGUI部分はOpenGLを使おうと思っています
長文失礼しました
7ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,275,562ポイント)
Date: 2010/09/14(火) 19:17
No:61721
|
|
Title: Re:クロスプラットフォームのネットワーク
|
|
> 438番さん
こんにちは。
あまり詳しくないですが、レスが付かないようなので(^^;
Boostは私も人に勧められて手を出していますが便利ですよね。
マルチプラットフォームで動作するというだけでなく、様々な便利な機能が使えて良いライブラリだと思います。
普段Linuxやwindowsでプログラムを組むので、マルチプラットフォームは良く意識します。
ただ私は自前で必要な関数だけラップしたライブラリを作って使っていて、あまり既存の物に手を出していないので、どの辺のライブラリが良いかはよく知りません。
質問文を拝見する限り、特にまだこれといって対象が決まっているわけではないようですので、
自分でマルチプラットフォームで動くライブラリを作ってみてはいかがでしょう?
勉強の為にという事であれば、これも良いことだと思いますよ。
187ポイント を手に入れた。
|
|
|
|
|
Name: 438番 ..ぴよぴよ(599ポイント)
Date: 2010/09/15(水) 19:16
No:61795
|
|
Title: Re:クロスプラットフォームのネットワーク
|
|
返信ありがとうございます
>どうやらサービス系のアプリ開発用だと思います。
>これは私も知りませんでした。
自分も調べるまで知りませんでした
オブジェクト指向で通信系も使えて...
便利そうに見えるのですが、知名度が低いということは少々難ありな気がします
>通信ともGUIとも関係ないですね。C++のライブラリです。
確かboost::asioでsocketなどのネットワーク周りをコーディング出来たはず
使うならGUIはOpenGLと組み合わせてみようと思っていました
>QtのGUIはダメなんでしょうか?
そういえばQtならGUIも出来るんですね
ネットワークの部分しか考えてなかったのでそこまで考えていませんでした
GUIはクロスプラットフォームということでただ単にOpenGLを使おうと思っていただけです
Qtならこれだけでアプリケーション作成は十分そうですね
>自分でマルチプラットフォームで動くライブラリを作ってみてはいかがでしょう?
>勉強の為にという事であれば、これも良いことだと思いますよ。
自分でライブラリの作成というのは思いつきませんでした
そういう選択肢もあるのですね
199ポイント を落としてしまった。
|
|
|
|
|
Name: softya [URL] ..ハッカー(217,446ポイント)
Date: 2010/09/15(水) 19:32
No:61796
|
|
Title: Re:クロスプラットフォームのネットワーク
|
|
boost::asioがありましたね(汗)。
うまくラッパーできているかは試験してみないと分かりませんので、boostとQtで望む動作が作れるか試されてはどうでしょうか?ネットワークプログラミングでやりたい事が実装出来ているか分かりませんので。
The ADAPTIVE Communication Environment(通称:ACE)は、便利そうなのにあまり使われていないのが気になります。
それと別のACEが引っかかりすぎて検索性が悪いのも困りものですね。 
106ポイント を手に入れた。
|
|
|
|
|
Name: 438番 ..ぴよぴよ(876ポイント)
Date: 2010/09/15(水) 20:09
No:61800
| 解決!
|
Title: Re:クロスプラットフォームのネットワーク
|
|
グーグルで"ACE"と検索してプログラム関係が一切出てこない時点でACEはやめることにしました
参考になるサイトや書籍が少なそうな事、知名度が低い事、検索しづらいのは致命的かと
結局QtとBoostを勉強することにします
参考になるサイトや書籍があることからとっつきやすいこと
(サイトはどちらも英語なので厳しいですが)
駄目でも基本C++なので何とかならなくても勉強として無駄にはならないだろう、というのも魅力です
大学の本屋にもネットワークについては
Linux、Winの各環境でのものとJAVAしか置いてなくとても迷っていました
(大学の講義で学んだものも基本Linuxのみで動くものでした)
>Dixq (管理人)さん
>softyaさん
色々とアドバイスありがとうございました
277ポイント を手に入れた。
|
|
|
|
|
Name: 438番 ..ぴよぴよ(926ポイント)
Date: 2010/09/16(木) 13:20
No:61836
| 解決!
|
Title: Re:クロスプラットフォームのネットワーク
|
|
解決!マークをつけるのは少し早かったみたいです
>ここ使ってますけど解りやすいですよ。
Boostに日本語の解説サイトってあるんですね
まずこのサイトで勉強することにします
50ポイント を手に入れた。
|
|
|
|
Name: いむ ..ぴよぴよ(841ポイント)
Date: 2010/09/14(火) 14:48
No:61701
|
|
Title: 【雑談?】資格について
|
|
どうもこんにちは、いつもは掲示板を眺めてるだけなのですが
皆さんにお聞きしたいことがありましてスレを立てました。
現役のプログラマーや昔そうであった方、その道に
進もうと考えている方、それ関連のお仕事をなされている方に質問です。
皆さんはどのような資格をお持ちでしょうか?
よく聞く情報処理技術者試験とかいうのは取っておいたほうがいいのでしょうか?
アンケートのような意味でこのスレを立てたのでお気軽に
回答してみてください。
224ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,275,310ポイント)
Date: 2010/09/14(火) 18:43
No:61715
|
|
Title: Re:【雑談?】資格について
|
|
> いむさん
こんにちは。
資格については時々質問がありますね。現在いむさんは学生でしょうか?
学生ならば将来の為に何をしないといけないか気になるところですよね。
今回の質問は「情報処理技術者試験とかいうのは取っておいたほうがいいのでしょうか?」という事だと思いますが、
「資格は取った方がいいのか?」という質問に対して悪いという人はあまりいないと思うので、
勝手に少し変えて
「資格があるとどれ位現場で優遇されるのか」「持っていること・取る事自体にどれ位意味があるのか」などに焦点をあてて私の意見を書いてみます。
もちろん資格は無いよりあった方が良いでしょう。
企業によっては、特定の資格を持っていれば昇進試験が免除されたり、固定給が上がったりする所があります。
しかし、資格は取ることに意味があるのではなく、取る過程で学ぶことに意味があります。
上で書いたような例はまれで、持っているだけで何かが有利になる例は少ないと思います。
よく、就職活動で●●の資格を持っていると有利かという質問がありますが、私はあまり関係無いと思います。
人事は持っている資格を見て採用するのではありません。
ただし、持っている資格にもよりますが、完全に同じ条件になった時で、何か他に判断基準が無いか探した時、資格があった方が有利かもしれないという事はあるかもしれませんが、その程度だと思います。
何か自分のこだわりがある資格があるのであれば、それをネタに面接で話を盛り上げるとかそっちの方がむしろ重要そうです。
上でも書いた通り、資格は学ぶことに意味があります。
ソフトウェア技術者関連の資格を取る為に勉強すると、結構まんべんなく学べます。
プログラムだけとか、ネットワークだけ、とか自分が好きな分野だけ知っているより、あらゆる分野の基礎を知っていた方が多くの面で応用が利きます。
それに基本情報、応用情報などでは多くの理系の現場で知っていて損の無い知識が得られます。
ということで、資格は持っていただけで効力をはっきするものではないという事を一言述べた上で、
「資格を取ることは非常に良いことだと思います」と私なら答えます。
なかなか機会が無いと自分の興味のあるわけでもない分野は学びにくいものですから資格を取る為に勉強することであらゆる知識を身に付けるのは良いと思います。
仕事が始まるとなかなか直接仕事に関係あることしか勉強しませんから学生のうちにしっかり勉強しておくと良いですね。
669ポイント を手に入れた。
|
|
|
|
|
Name: いむ ..ぴよぴよ(932ポイント)
Date: 2010/09/14(火) 19:32
No:61727
|
|
Title: Re:【雑談?】資格について
|
|
>>ookami さん
そうですよね、何のアンケートか明らかにする必要が
ありました。資格を取ることでどれほど優位に立てるのか
ということが知りたかったです。
>>Dixq さん
返信ありがとうございます。確かに学ぶ過程の方が
重要ですよね。将来のことを考えて勉強していこうと思います。
91ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(149,397ポイント)
Date: 2010/09/14(火) 20:46
No:61751
|
|
Title: Re:【雑談?】資格について
|
|
雇う側からみた場合、雇う人の資格は、必要と考えている技術があるかどうかを知る術の一つとなります。
IT系プログラマーの場合は情報処理の資格があれば優遇される可能性があるでしょう(あくまで可能性)。
他の資格もあれば、「学ぶ姿勢がある」と見てくれるかもしれません。
職によっては必須や重要な資格が提示されていますが、そうでない場合はさほど効力はありません。
たくさん持っていても感心する程度かもしれません。
あって損はないのが資格なので、取れると思ったら取った方がいいでしょうね。
ちなみに私は簿記2級(全経)や秘書3級(全経)、表計算初段(日検)等を高校時代に取ってます。
ゲームプログラマーですけれど。
226ポイント を手に入れた。
|
|
|
|
|
Name: sizuma [URL] ..熟練のプログラマー(42,792ポイント)
Date: 2010/09/14(火) 22:50
No:61758
|
|
Title: Re:【雑談?】資格について
|
|
中小企業の採用には有利になるところもあると思います。
大企業でも採用担当次第なんでしょうけど、僕は受けてないんで分からないです。
ただどうせ面接次第な所もありますし、つかみに便利なくらいですかね。
面接で食いつかれるようなへんな資格とか持ってると会話がはずむんじゃないでしょうか。
僕は地元の地域についての検定を就職活動前までに取ってたらよかったなぁと思いました。(ネタとして)
http://www.kagoshima-cci.or.jp/blog/31.html
ちなみに僕は専門学生なんですが、高度を持ってると専門学校内での地位は上がります(笑
まぁ基本的にただの自己満足&自己投資だと思います。
学生のうちは時間があるだろうし、勉強の指針もわからないだろうから、取得に向けて勉強するのが無難じゃないですか?
284ポイント を落としてしまった。
|
|
|
|
|
Name: たいちう ..ハッカー(103,697ポイント)
Date: 2010/09/15(水) 00:50
No:61766
|
|
Title: Re:【雑談?】資格について
|
|
情報系に限らず、色々持っています。
履歴書などの欄にはとても書ききれないので、
受けの良さそうなものだけを少しだけ書きます。
で、その効果ですが、「勉強熱心なんだな」とか、
「新しい事も勉強してくれそう」とか思われて、
転職などで少々有利になったのではないかと思います。
本人が何を目指しているかによりますが、
そこそこの技術者として仕事を続けるには勉強を続けることは必須です。
私の場合は、その時その時の業務に関連する資格など、
興味を持った資格の取得が勉強のモチベーションとなりました。
管理人さんの言われる、
> 完全に同じ条件になった時で、何か他に判断基準が無いか探した時、
> 資格があった方が有利かもしれないという事はあるかもしれませんが、
> その程度だと思います。
についての補足ですが、ある会社に、資格以外完全に同じ条件の人が
同じ時期に応募する可能性がどれほどあるでしょうか?
資格の採用時の直接的なご利益はこの程度のものでしょう。
それと、ぽこさんの書いた技術士についてですが、
> 情報処理試験は国家資格ではないので、
> どうせ取るなら技術士が良いと思いますよ。
情報系以外の分野では、技術士でないと受注できない、
とかいう国や県の仕事も多いので高い評価を得られますが、
それ相応の実績のある人でないと合格は不可能です。
(一昔前は30代で技術士を受けようなんて生意気だとか言われたそうな)
情報系では他の分野と比較すると取得は楽かもしれませんが、
それでも情報系としては難しいでしょう。
何よりも、他の分野と比較すると悲しいほどに重用されません。
というわけで、余程の事情や熱意が無ければ、
情報系の技術士を目指すのはどうかと思います。
469ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,276,905ポイント)
Date: 2010/09/15(水) 07:56
No:61771
|
|
Title: Re:【雑談?】資格について
|
|
> たいちうさん
> 資格以外完全に同じ条件の人が同じ時期に応募する可能性がどれほどあるでしょうか?
そうですね、あまり可能性は無いですね。
それに資格にこだわりがある方には失礼な話でした、すみません。
実はこれは私が決めた会社の人事の方に話を聞いたことでした。
内定が決まると人事や同期の人と内定者懇親会というものがあるのですが、
内定が決まった時、何が決めてだったのか気になったので、人事の方に色々お話を伺いました。
資格の話以外にも、髪の毛や服装でどれ位違いがあるか等も聞きました。
私があまり意味を成さないのではと書いたのは「持っている資格にもよると思いますが」と付け加えました通り、
その資格にもよると思います。
基本情報のようなかなりの人数が持っている資格を持っていたからと言って有利になるということは少ないのではないかと気持ちで書きましたが、少し語弊がありました。
たいちうさんは珍しい資格や取得するのが難しい資格を沢山お持ちなのでしょうから、
きっと持っているだけで何か得をされたこと、転職で有利になったこと、話のネタになったことなどおありになるのでしょうね。
それにそれが面接のネタになるのであれば、そこから話が盛り上げられるので、他の人と同じ条件になるということは無いですね。
> いむさん
私は私が経験したことや私が聞いた話を元にお話ししていますから、色んな人の意見を参考にして判断して下さいね。
(私なんかよりずっと人生経験豊富な方たちが沢山いらっしゃるので)
#
服装や髪形について
上で書いた、人事の方にこれについてこれを聞いた結果ですが
・服装が乱れている → 度合いにもよるが、明らかに乱れていると基本的な事も出来ない人間に思われてマイナス印象になるからダメ
・髪形について → 年配の人は男の長い髪を嫌う人がいるが、基本的に気にしない。髪が長くてもその人がそれで一番イキイキ出来るならそれでいい。現にうちの事業所には腰まで髪がある男の人いるよ。
と言われました。
後日事業所に行ってみたらホントに腰まで髪がある男の人がいらっしゃいました(笑
417ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(38,423ポイント)
Date: 2010/09/15(水) 09:17
No:61773
|
|
Title: Re:【雑談?】資格について
|
|
私は派遣から正社員になった口なので、あまり参考にはならないかもしれませんが。
持ってる資格といえば、普通自動車免許(更新したら中型になりましたが)、乙種四類危険物取扱者、第一圧力容器、調理師免許、食品衛生責任者、特殊小型船舶と、後は細々としたものが、英検2級やら毛筆書写検定3級やらといくつか。
IT系に限って言えば、計算技術検定2級と、情報技術検定1級・3級のみです。
どちらも高専時代に取ったもので検定なので無いも同じですね。
全社員合わせて200人ほどの中堅どころのソフトハウスでしたが、あまり資格にこだわってるような節はありませんでしたね。
参考までに。
26ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(228,193ポイント)
Date: 2010/09/15(水) 09:24
No:61774
|
|
Title: Re:【雑談?】資格について
|
|
まあ、資格があって困る状況はあまりないので、取れるなら取っておいた方がよいでしょうね。
資格があって困る状況というのは、例えば、医師国家資格があるのに、プログラマ志望で就職活動していると、「なぜ、医者にならないの?」といろいろ勘ぐられることになります。
例えば、健康面に問題があるのではとか、過去に何か不祥事を起こしたのではとか、そういったことです。
資格だけなら書かなくてもよいでしょうが、職歴があるとごまかしようがないので、大変かもしれません。
176ポイント を手に入れた。
|
|
|
|
|
Name: いむ ..ぴよぴよ(994ポイント)
Date: 2010/09/15(水) 16:50
No:61791
| 解決!
|
Title: Re:【雑談?】資格について
|
|
みなさん返信ありがとうございます。
やはり皆さんの意見を聞いてやはり
勉強目的で資格を取ることにした方がよさそうですね。
これで解決とさせていただきます。
62ポイント を手に入れた。
|
|
|
|
|
Name: SGGK ..ぴよぴよ(179ポイント)
Date: 2010/09/16(木) 11:33
No:61832
|
|
Title: Re:【雑談?】資格について
|
|
資格を持っている事による具体的な利益の例もちょっと紹介。
某世界規模の企業では、応用情報技術者試験(旧ソフトウェア開発技術者試験、旧1種)を持っていると月20,000円、基本情報技術者試験(旧2種)を持っていると月5,000円の手当てが出る。
某ジャスダック上場企業では、応用情報技術者試験を取ると100,000円の一時金が出る。
7〜8年前の情報なので、厳しい情勢である現在ではどうなってるかは知らないけどね。
152ポイント を手に入れた。
|
|
|
|
Name: えり ..ぴよぴよ(718ポイント)
Date: 2010/09/14(火) 19:24
No:61724
|
|
Title: String型からchar*型の方法
|
|
質問させていただきます。
現在、下記のようなコード(下記はサンプルコード)を作成し、
C++.NETのString型からC言語のchar*型に引数として渡す、
というプログラムを作成しています。
しかし、コンパイルは通るのですが、
「'System.FormatException'のハンドルされていない例外が
mscorlib.dllで発生しました。
追加情報:Stringには一文字しかしようできません。」
というエラーがデバック時に発生してしまい、これをとることが
できません。
どのような処理を行えばエラーがなくなるのでしょうか?
また、そのC++.NETのString型からC言語のchar*型に引数として渡す手段が
あるのでしょうか?
ぜひご教示ください。
よろしくお願いいたします。
#include "stdafx.h"
using namespace System;
void func(char *c);
int main()
{
String ^str = "asc";
func((char *)Convert::ToChar(str));
return 0;
}
void func(char *c)
{
c[1] = 'b';
return;
}
2倍のポイントを手に入れた! 348ポイント を手に入れた。
|
|
|
|
Name: dic ..比類無きプログラマー(96,332ポイント)
Date: 2010/09/14(火) 20:01
No:61735
|
|
Title: Re:String型からchar*型の方法
|
|
.NET の場合はわかりませんが
Visual C++ 6.0 STL の場合です
string の内容はconst char* の配列だったような気がするので変更ができなかったような・・・
#include <iostream>
using namespace std;
void func( string *str )
{
cout << "string:" << str->c_str() << endl;
}
int main()
{
string str( "abc" );
func( &str );
return 0;
}
168ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(214,399ポイント)
Date: 2010/09/14(火) 20:43
No:61749
|
|
Title: Re:String型からchar*型の方法
|
|
Stringクラスには、ToCharArrayというメソッドがあったような…
23ポイント を手に入れた。
|
|
|
|
|
Name: えり ..ぴよぴよ(907ポイント)
Date: 2010/09/14(火) 23:38
No:61760
|
|
Title: Re:String型からchar*型の方法
|
|
>たかぎさん
ちなみに、http://support.microsoft.com/kb/311259/ja
に書かれている方法をためしたところ(Visual C++ 2008)、
方法1は
int main()
{
String ^str = "asc";
func(PtrToStringChars(str));
return 0;
}
void func(char *c)
{
c[1] = 'b';
return;
}
というコードでコンパイルしたところ、
error C2664: 'func' : 1 番目の引数を 'cli::interior_ptr<Type>' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
with
[
Type=const wchar_t
]
マネージ型をアンマネージ型に変換できません。
というエラーがでてしまいました。
また、方法3は
<atlstr.h>
がなかったためためしていません。
また、方法2、方法4は、今回char型宣言を使用しないプログラムを作成したかったので
ためしていません。
189ポイント を手に入れた。
|
|
|
|
|
Name: えり ..ぴよぴよ(964ポイント)
Date: 2010/09/14(火) 23:41
No:61761
|
|
Title: Re:String型からchar*型の方法
|
|
dic ..比類無きプログラマーさん、
バグ ..ハッカーさん、
ありがとうございます。
明日会社に行ってから試してみたいと思います。
57ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(228,017ポイント)
Date: 2010/09/14(火) 23:48
No:61764
|
|
Title: Re:String型からchar*型の方法
|
|
> また、方法2、方法4は、今回char型宣言を使用しないプログラムを作成したかったので
> ためしていません。
意味がわかりません。
方法1では、ワイド文字列しか得られませんので、そこからさらに変換する必要があります(サンプルを見ればわかりますよね?)。
2倍のポイントを手に入れた! 68ポイント を手に入れた。
|
|
|
|
|
Name: えり ..ぴよぴよ(696ポイント)
Date: 2010/09/15(水) 19:43
No:61798
|
|
Title: Re:String型からchar*型の方法
|
|
みなさん,ありがとうございます。
解決しました!
もう一つ質問させてください。
wchar_t型からchar型に変換する方法を教えていただけないでしょうか。
2倍のポイントを手に入れた! 102ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(228,271ポイント)
Date: 2010/09/15(水) 23:56
No:61814
|
|
Title: Re:String型からchar*型の方法
|
|
> wchar_t型からchar型に変換する方法を教えていただけないでしょうか。
字面どおりに解釈すれば、単にキャストするか、wctob関数を使ってください。
ワイド文字から多バイト文字、あるいはワイド文字列から多バイト文字列への変換であれば、また別のやりかたがあります。
78ポイント を手に入れた。
|
|
|
|
Name: NEX ..かけだし(1,764ポイント)
Date: 2010/09/13(月) 10:42
No:61639
|
|
Title: 当たり判定について
|
|
DXライブラリを使ってアイスホッケーゲームを作っております。
徐々にお互いの陣地にあるバーが閉まっていき
時間経過と共にボールが入りにくくなってしまいます。
タッチした方向(初期ボール位置からみて)にボールが飛ぶようになっております。
バーに当たったら移動量を反転させるという処理にしております。
バーに正面から当たればそれらしく見えるのですが
バーの縦?に当たると強制的に座標が修正され見た目が悪くなってしまいます。
当たり判定の座標を無理やり直している所が悪いのですが改善の仕方がわかりません・・・。
──────┐
│ ←ここに当たった時がおかしい動作をする
──────┘
↑ こうあたればそれらしく見えます
この当たり判定さえ出来ればほぼ完成なのですが
意図した通りに動いてくれるプログラムが書けません。
添付しましたソースは画像がなくても動作するようにDXライブラリ搭載の描画関数を使っております。
本当にご迷惑をかけて申し訳ないと思うのですが
どなたか回答を頂けないでしょうか?
実際はもっとソースが長いのですが当たり判定の所だけ抽出しました。
なので不具合があったらすみません。
504ポイント を手に入れた。
|
|
|
|
Name: ISLe ..上級者(22,336ポイント)
Date: 2010/09/13(月) 23:03
No:61680
|
|
Title: Re:当たり判定について
|
|
バーを四角形で処理するのではなくて、壁のラインで縦と横に分けて処理すると良いです。
次に問題になるのが角に当たった場合です。
1) そのときのパックの座標から適当に振り分ける
2) パックの移動ベクトルの角度の深さで振り分ける
3) パックの移動ベクトルから交差する壁のラインを判断して振り分ける
4) 接触時の接触点とパックの中心との角度から接触後の移動成分を計算で求める
1)
ブロック崩しのバーは真横で弾いても上に戻ります(戻らないタイトルもある)。
ゲーム性重視の割り切り型。
2)
アクションゲームなら不自然さは感じないレベル。
3)
オブジェクトの大きさが考慮されない動きだけど不自然さは感じないレベル。
4)
物理エンジンレベル。ただし丸いパックと直行する壁のラインは極めて単純なモデル。(編集)
現時点でまるまる実装コードを提示することは難しいです。
そのゲームの個性にもなる部分なので試行錯誤してみてください。

315ポイント を手に入れた。
|
|
|
|
|
Name: NEX ..かけだし(1,875ポイント)
Date: 2010/09/14(火) 06:19
No:61694
|
|
Title: Re:当たり判定について
|
|
回答ありがとうございます。
物理エンジンレベルの物は求めておりません。
見ていて不自然でなければいいレベルの判定を作りたいです。
どこと当たったかわかるような関数を作ってみたのですが
やはり上手く動作しません・・・。
111ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(22,552ポイント)
Date: 2010/09/14(火) 23:45
No:61762
|
|
Title: Re:当たり判定について
|
|
「壁のラインで縦と横に分けて」というのはバーに当たったと判定したあとにどこに当たったか判断するという意味ではなくて、バーを構成する壁ごとに分解して別々に当たり判定するという意味です。
だから角(交点)の場合、縦の壁と横の壁に同時に当たることになります。
ところでパックは丸く描画されているのに(パックが内接する)四角で当たり判定が行われているのですが、その点に関しては無視して良いのでしょうか?
> 物理エンジンレベルの物は求めておりません。
> 見ていて不自然でなければいいレベルの判定を作りたいです。
不自然かどうかは結局主観なので最終的な判断をするのはNEXさんです。
NEXさんはどうなって欲しいと考えているのか具体的に教えてくれませんか?
わたしが十数年前にブロック崩しを作ったときはボールがブロックやバーに当たるパターンをすべて方眼紙に描きました。
#上下左右の対象パターンは省けるので正確には1/4。
理想の動きがコーディングできなくても現状で具体的に何がどう不自然で理想としてはどうなって欲しいかを示すことはできると思います。
--追記
当たり判定をきちんと理解したいのであれば、まずは点をひとつ置いて、パックと点の当たり判定を考えてみてください。 
216ポイント を手に入れた。
|
|
|
|
|
Name: NEX ..かけだし(2,169ポイント)
Date: 2010/09/15(水) 02:31
No:61769
|
|
Title: Re:当たり判定について
|
|
回答ありがとうございます。
頼れる人も周りにいないので本当に助かります。
円での当たり判定を行おうとも思ったのですがそこまで
正確な判定でなくても良い気がしたので箱との判定にしております。
円のほうがいいのでしょうか?
箱と直線の当たり判定用の関数を作ってみて
実装してみたのですがジグザグ動いてしまいます。
>>不自然かどうかは結局主観なので最終的な判断をするのはNEXさんです。
>>NEXさんはどうなって欲しいと考えているのか具体的に教えてくれませんか?
お手数おかけします。
具体的に不自然なジグザグにならなければ問題ないです。
不自然さがどのレベルか説明するのが難しいのですが
・当たったら移動量が反転(入射角等を無視して)する。
・当たり判定を貫通して無限に閉じ込められない(同じ場所で判定が続く)
※物体が同じ位置周辺で迷う?感じにならない
どうしても明日までに完成させたいのですが難しいでしょうか?
294ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(22,776ポイント)
Date: 2010/09/15(水) 03:24
No:61770
|
|
Title: Re:当たり判定について
|
|
なるほどハマって戻ってこなくなるのを防ぎたいのですね。
> ・当たったら移動量が反転(入射角等を無視して)する。
1)バーの四角形を構成するラインをそれぞれ別々に当たり判定します。
2)外側の壁には当たらないので内側の壁2つだけで良いです。
3a)縦に長い壁に当たったらX移動量を反転します。
3b)横に長い壁に当たったらY移動量を反転します。
> ・当たり判定を貫通して無限に閉じ込められない(同じ場所で判定が続く)
> ※物体が同じ位置周辺で迷う?感じにならない
面が上向きの壁はパックのY移動量が+のときだけ判定する。同様に
面が下向きの壁はパックのY移動量が-のときだけ判定する。
面が左向きの壁はパックのX移動量が+のときだけ判定する。
面が右向きの壁はパックのX移動量が-のときだけ判定する。
↑の条件を加えると閉じ込められることが無くなります。
めり込みはパックの進入角度から適当に補正してください。
重くならなければ気にならないくらい内部的に細かく動かして無視するのが楽です。
224ポイント を手に入れた。
|
|
|
|
|
Name: NEX ..ぴよぴよ(176ポイント)
Date: 2010/09/15(水) 23:21
No:61812
|
|
Title: Re:当たり判定について
|
|
回答ありがとうございます。
上のバーだけ移動量の向きごとに判定してみたのですが
当たってなくても当たった判定になっている気がします。
現在のバーの速度だとゴールさせるのが難しいです。
本当に申し訳ないのですが上のバーだけでいいので
私のソースを修正して頂けないでしょうか?
勝手なことを言っているのはわかります・・・。
ただ本当にもうわかりません・・・。
176ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(23,726ポイント)
Date: 2010/09/16(木) 03:20
No:61824
|
|
Title: Re:当たり判定について
|
|
//左バーの下
sx = Gate[0].x1 - (Gate[0].length/2);
ex = Gate[0].x1 + (Gate[0].length/2);
sy = (float)Gate[0].y1 + 8;
ey = (float)Gate[0].y1 + 8;
if(Medal.Vy < 0 && HitJudgeBoxLine( Medal.Px-20, Medal.Py-20, Medal.Px+20, Medal.Py+20, sx, sy, ex, ey )) Medal.Vy = -Medal.Vy;
//左バーの右
sx = Gate[0].x1 + (Gate[0].length/2);
ex = Gate[0].x1 + (Gate[0].length/2);
sy = (float)Gate[0].y1 - 7;
ey = (float)Gate[0].y1 + 8;
if(Medal.Vx < 0 && HitJudgeBoxLine( Medal.Px-20, Medal.Py-20, Medal.Px+20, Medal.Py+20, sx, sy, ex, ey )) Medal.Vx = -Medal.Vx;
という具合いに壁ごとに当たり判定して移動成分を変化させれば良いと思ったんですが…
実際に手を入れてみたら余分な処理がたくさんあって上手く機能しないですね。
パック(メダル)の移動量を毎ループ計算し直しているのが全体の処理を複雑にしています。
最初に打ち出す角度は最初に移動成分を求めた時点で不要です。
反転フラグも必要ありません。
スピードの減衰は移動成分に比率を掛けていくようにしましょう。
あとゲートの座標の基準が中途半端な位置にあって分かりにくく描画位置もずれています。
2倍のポイントを手に入れた! 950ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(23,734ポイント)
Date: 2010/09/16(木) 05:16
No:61825
|
|
Title: Re:当たり判定について
|
|
コードを整理して単純なサンプルを作ってみました。
ウインドウ内でマウスの左クリックするとメダルに対してクリックした位置と反対方向にメダルが移動します。
出っ張った角に当たったときの不自然さ対策はしてません。
8ポイント を手に入れた。
|
|
|
|
Name: 宗一郎 ..かけだし(1,854ポイント)
Date: 2010/09/16(木) 00:04
No:61815
|
|
Title: 実行しても応答しません><
|
|
いつもお世話になっていますm(_ _)m
早速ですみませんが、
エラーメッセージなども出ませんが、動作もしない。
という事態に陥りました。
アクションゲームっぽいものを作っておりまして、キャラの動く処理を打った後
線と円の接触条件を用いた地面との当たり判定を追加したら、実行しても応答しなくなりました。
地面との当たり判定を消して実行すると、ちゃんとキャラが動いたのでその辺がおかしいのだろうとは
思うのですが、どうしたらいいのかまったくわかりません。
すみませんが、どこがおかしいのか見ていただけないでしょうか?
その他至らない点がありましたら、お教えしていただければ助かります。
どうかよろしくお願いしますm(_ _)m
追記:
・言語はC
・Visual C++ 2008使用
・DXライブラリ使用
Vector.cppに当たり判定があります。
char.cppにそれに対応する移動処理があります。
2倍のポイントを手に入れた! 614ポイント を手に入れた。
|
|
|
|
Name: 宗一郎 ..かけだし(1,779ポイント)
Date: 2010/09/16(木) 00:26
No:61818
|
|
Title: Re:実行しても応答しません><
|
|
>softyaさん
すみません。よく知りません。
学校でC言語を少し勉強したのと龍神録プログラムの館で学んだだけなので、
ほとんど初心者です。
これからそちらのほうも勉強してみます。
75ポイント を落としてしまった。
|
|
|
|
|
Name: 宗一郎 ..かけだし(1,849ポイント)
Date: 2010/09/16(木) 00:52
No:61820
|
|
Title: Re:実行しても応答しません><
|
|
ありがとうございますm(_ _)m
今ちがうサイトで勉強していたのですが、教えていただいたサイトのほうが見やすいので
こちらで勉強させていただきます。
まずは、勉強してちゃんとデバックしてみたいと思います。
70ポイント を手に入れた。
|
|
|
|
|
Name: 宗一郎 ..かけだし(1,894ポイント)
Date: 2010/09/16(木) 01:24
No:61822
| 解決!
|
Title: Re:実行しても応答しません><
|
|
とりあえず解決ということにさせていただきます。
デバックについて勉強して出直してきます。
>softyaさん
ありがとうございましたm(_ _)m
45ポイント を手に入れた。
|
|
|
|
|