C言語何でも質問掲示板


必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   マウス操作実装   
     ・[35000] アプリ 
     ・[35025] yskey 
     ・[35052] 初心者さんです 
   無題   
     ・[35016] ねこ 
     ・[35020] box 
     ・[35040] sizuma 
   描画処理の事で   
     ・[35032] usho 
   doubly linked list の ....   
     ・[34926] ねこ 
     ・[34942] toshi 
     ・[34944] ねこ 
     ・[35028] toshi 
   携帯アプリについて  ....   
     ・[34875] バグ 
     ・[34877] アプリ 
     ・[34891] アプリ 
     ・[34897] バグ 
     ・[34912] GPGA 
     ・[34968] アプリ 
     ・[34983] GPGA 
     ・[34999] アプリ 
     ・[35009] GPGA 
     ・[35027] アプリ 
   ソフトバンクのアプリ ....   
     ・[34979] GPGA 
     ・[34980] GPGA 
     ・[34982] GPGA 
     ・[35008] わい 
   無題   
     ・[34993] Mist 
     ・[34994] シュウ 
     ・[34996] ねこ 
     ・[35002] シュウ 
     ・[35003] Mist 
     ・[35004] シュウ 
     ・[35005] Mist 
     ・[35007] シュウ 
   コンパイル時の定数項 ....   
     ・[34984] kazuoni 
     ・[34985] たいちう 
     ・[34987] たかぎ 
     ・[34990] チルチル 
     ・[35001] toyo 
     ・[35006] たかぎ 
   敵の弾発射   
     ・[34981] あ 
   二分木について   
     ・[34971] non 
     ・[34975] 白夜 
   While文の入り方   
     ・[34883] conio 
     ・[34937] はなたれパンダ 
     ・[34940] lbfuvab 
     ・[34943] Mist 
     ・[34957] はなたれパンダ 
     ・[34973] conio 
     ・[34974] sizuma 
   違い   
     ・[34938] ねこ 
     ・[34967] フリオ 
   FPSが60にならない・ ....   
     ・[34771] チルチル 
     ・[34774] sizuma 
     ・[34800] チルチル 
     ・[34829] チルチル 
     ・[34843] Libra 
     ・[34845] ねこ 
     ・[34861] チルチル 
     ・[34863] ねこ 
     ・[34864] チルチル 
     ・[34886] チルチル 
     ・[34890] Libra 
     ・[34894] 御津凪 
     ・[34959] チルチル 
     ・[34962] ねこ 
     ・[34965] チルチル 
   #define 疑似命令には ....   
     ・[34952] ねこ 
     ・[34955] atom 
     ・[34958] チルチル 
   実行時のエラー   
     ・[34853] ねこ 
     ・[34854] ひよこ 
     ・[34956] BigTree 
   コンパイルした際のエ ....   
   Z値の限界の変更?   
     ・[34895] Justy 
     ・[34896] GPGA 
     ・[34906] GPGA 
     ・[34913] TRIS-GRAM 
     ・[34914] GPGA 
     ・[34935] チルチル 
     ・[34941] 御津凪 
     ・[34945] チルチル 
     ・[34946] GPGA 
     ・[34949] チルチル 
     ・[34950] GPGA 
     ・[34951] チルチル 
   画像ファイル作成につ ....   
     ・[34822] チルチル 
     ・[34831] Justy 
     ・[34847] R2D2 
     ・[34855] ねこ 
     ・[34858] チルチル 
     ・[34868] Dixq (管理人) 
     ・[34882] Justy 
     ・[34934] R2D2 
   辞書順   
     ・[34910] やそ 
     ・[34911] たかぎ 
     ・[34915] 研修生 
     ・[34916] たかぎ 
     ・[34917] 研修生 
     ・[34918] やそ 
     ・[34920] 研修生 
     ・[34923] たかぎ 
     ・[34925] toyo 
     ・[34927] 研修生 
     ・[34929] 研修生 
   JavaでいうとこのJava ....   
     ・[34888] 御津凪 
     ・[34889] たかぎ 
     ・[34893] MiMi 
   VisualStudioの設定   
     ・[34874] Justy 
     ・[34878] 錦鯉 
     ・[34885] Justy 
     ・[34892] 錦鯉 
   音楽との同期について   
     ・[34756] yu 
     ・[34826] pic 
     ・[34827] Dixq (管理人) 
     ・[34833] pic 
     ・[34835] Justy 
     ・[34862] pic 
     ・[34867] Dixq (管理人) 
     ・[34887] Justy 
   アクションゲームにお ....   
     ・[34866] conio 
     ・[34873] pooka 
     ・[34876] conio 
     ・[34880] ken 
   C言語宿題   
     ・[34849] non 
     ・[34869] Dixq (管理人) 
   プロトタイプ宣言のな ....   
     ・[34860] Mist 
     ・[34865] はなたれパンダ 
   基底クラスで子クラス ....   
     ・[34792] dic 
     ・[34794] kazuoni 
     ・[34798] sizuma 
     ・[34803] GPGA 
     ・[34806] kazuoni 
     ・[34811] dic 
     ・[34813] sizuma 
     ・[34818] dic 
     ・[34819] kazuoni 
     ・[34828] kazuoni 
     ・[34836] sizuma 
     ・[34837] Justy 
     ・[34838] GPGA 
     ・[34839] Justy 
     ・[34842] kazuoni 
     ・[34844] GPGA 
     ・[34856] kazuoni 
   ショット強化について ....   
     ・[34805] b 
     ・[34808] 零崎虚識 
     ・[34809] yu 
     ・[34814] 零崎虚識 
     ・[34816] yu 
     ・[34851] 零崎虚識 
   strtokについて   
     ・[34810] non 
     ・[34817] 初級者 
     ・[34841] uzu 
   3Dポリゴンが表示され ....   
     ・[34475] yu 
     ・[34476] チルチル 
     ・[34477] yu 
     ・[34478] yu 
     ・[34479] チルチル 
     ・[34504] yu 
     ・[34544] チルチル 
     ・[34546] Mist 
     ・[34548] チルチル 
     ・[34594] yu 
     ・[34607] チルチル 
     ・[34695] チルチル 
     ・[34763] チルチル 
     ・[34765] yu 
     ・[34769] チルチル 
     ・[34801] チルチル 
     ・[34830] チルチル 
   落ち物パズルのCPU対戦 ....   
     ・[34721] バグ 
     ・[34780] Huzzy 
     ・[34807] sizuma 
     ・[34821] バグ 
     ・[34825] Huzzy 
   質問   
     ・[34716] たかぎ 
     ・[34717] 山崎 
     ・[34823] 初心者 
     ・[34824] ねこ 
   質問です   
     ・[34735] lbfuvab 
     ・[34736] 初級者 
     ・[34749] conio 
     ・[34751] ユーリ 
     ・[34755] ユーリ 
     ・[34759] MNS 
     ・[34760] 通りすがり 
     ・[34766] ユーリ 
     ・[34772] ユーリ 
     ・[34773] b 
     ・[34777] 通りすがり 
     ・[34781] やそ 
     ・[34791] conio 
     ・[34815] ユーリ 
   弾の座標のバグ   
     ・[34799] yu 
     ・[347961245221150] 初心者 
     ・[347961245221162] 初心者 
   while文のループ脱出   
     ・[34698] 研修生 
     ・[34701] 研修生 
     ・[34702] yu 
     ・[34711] Dixq (管理人) 
     ・[34713] フリオ 
     ・[34718] toyo 
     ・[34731] sizuma 
     ・[34732] やそ 
     ・[34787] 研修生 
     ・[34789] Libra 
     ・[34790] Libra 
   linked list の件につ ....   
     ・[34761] lbfuvab 
     ・[34764] toshi 
     ・[34775] non 
     ・[34776] toshi 
     ・[34779] non 
     ・[34782] toshi 
   プログラム   
     ・[34742] 山崎 
     ・[34745] たいちう 
     ・[34778] やそ 
   格納について   
     ・[34747] まる 
     ・[34748] box 
     ・[34752] 山崎 
     ・[34753] まる 
     ・[34754] box 
     ・[34767] まる 
     ・[34768] pooka 
   文字列を全ての組み合 ....   
     ・[34725] ねこ 
     ・[34726] たいちう 
     ・[34727] non 
     ・[34739] 山崎 
     ・[34744] たいちう 
   ゲーム中の効果音再生 ....   
     ・[34693] ひよこ 
     ・[34743] チルチル 
   正誤判定がいかない?   
     ・[34690] やそ 
     ・[34696] 与一 
     ・[34730] やそ 
   3D衝突判定について   
   質問   
     ・[34723] YuO 
     ・[34724] uzu 
   喰らいボム   
     ・[34675] yu 
     ・[34678] 初心者 
     ・[34679] 初心者 
     ・[34680] 初心者 
     ・[34700] yu 
     ・[34712] Dixq (管理人) 
     ・[34714] 初心者 
   ファイルの分割   
     ・[34704] kazuoni 
     ・[34705] box 
     ・[34706] 紅葉 
     ・[34707] box 
     ・[34708] tune 
     ・[34709] kazuoni 
     ・[34710] tune 
   タイトルへの戻り方に ....   
     ・[34694] チルチル 
   住所録プログラム…   
     ・[34482] Mist 
     ・[34483] non 
     ・[34484] ほのか 
     ・[34485] Mist 
     ・[34486] ほのか 
     ・[34487] Mist 
     ・[34488] non 
     ・[34489] ほのか 
     ・[34490] ほのか 
     ・[34491] Mist 
     ・[34492] ほのか 
     ・[34493] Mist 
     ・[34494] ほのか 
     ・[34495] non 
     ・[34496] Mist 
     ・[34497] ほのか 
     ・[34498] ほのか 
     ・[34506] Mist 
     ・[34528] ほのか 
     ・[34529] Mist 
     ・[34683] ほのか 
     ・[34684] Mist 
     ・[34685] ほのか 
     ・[34686] Mist 
     ・[34687] ほのか 
     ・[34688] Mist 
   pngの変換について   
     ・[34681] Justy 
     ・[34682] Justy 
   フォントについて   
     ・[34677] YuO 
   ちょっと、弾幕につい ....   
     ・[34667] yu 
     ・[34673] 蒼空(初心者) 
   文字列を全体的に中央 ....   
     ・[34657] Justy 
     ・[34658] 文字の表示位置  
     ・[34659] MNS 
     ・[34671] 文字の表示位置 
   無題   
     ・[34669] pooka 
     ・[34670] you 
   セーブファイルの作り ....   
     ・[34626] Gokuri 
     ・[34629] Dixq (管理人) 
     ・[34640] Gokuri  
     ・[34644] Libra 
     ・[34645] MNS 
     ・[34666] bitter_orange 

Name: yskey  ..ぴよぴよ(236ポイント)   Date: 2009/06/13(土) 12:27   No:34997       
Title: マウス操作実装    
どうもこんにちは。
戦略ゲームを作ろうとしているのですが、快適なプレイにはマウス操作が必須...
なのですが、どのように実装すればよいんでしょうか?

たとえばスタートメニューなどで操作する場合は
マウスの座標が特定の範囲で、クリックされたらスタート
などのようにしていくしかないのでしょうか?
良い方法があればご伝授くださいm(_ _)m


103ポイント を手に入れた。


Name: アプリ  ..ぴよぴよ(578ポイント)   Date: 2009/06/13(土) 12:39   No:35000     
Title: Re:マウス操作実装    
開発しているライブラリはなんでしょうか?
DXならマウスの座標をとってくる命令がありますし
APIでもマウス座標は取れます。

それを画像のあたり判定のようにかけばできませんか?


71ポイント を手に入れた。

Name: yskey  ..ぴよぴよ(292ポイント)   Date: 2009/06/13(土) 19:18   No:35025     
Title: Re:マウス操作実装    
DxLibです。
座標習得はわかります。
やっぱり「画像の当たり判定のように」ということは「画像のある座標内でクリックしたらボタンが押された」,,,
というように書くしかないんでしょうか?


56ポイント を手に入れた。

Name: 初心者さんです  ..ぴよぴよ(466ポイント)   Date: 2009/06/14(日) 05:08   No:35052     
Title: Re:マウス操作実装    
私も初心者ですので、正しいのかはわかりませんが思い付く方法を2つ書いてみました。

@一定範囲の座標でクリックした場合に動作する
これがyskeyさんが想像されているものだと思ぃます。

クリックした時のマウスの座標が一定範囲内か判定して動作させます。
メニュー画面のスタートなど場所が固定の場合や四角形の範囲の場合判定がし易ぃ方法です。


ですが複雑な形の画像をクリックする場合や、状況によってクリック範囲の変化する画像の場合
上記の方法では対応が難しぃのではなぃかと感じます。


Aメモリ上のイメージからクリック座標の色を取りだし、その色で分岐させ動作させる

通常のグラフィックを作ると共に、クリック判定用の「アルファブレンド用のマスク画像のようなグラフィック」を作成する
画面と同じサイズのソフトウェアイメージを作成する
グラフィックを描画すると同時に、ソフトウェアイメージ上にもクリック判定用の画像を重ねて行く
クリックされた座標の色をソフトウェアイメージ上から取りだし、その色によって分岐&動作させる


このような方法でしたら戦略ゲームで一部分重なってしまっているユニットをクリックして動作させるようなことも可能ですし、複雑な形のボタンの場合にも対応出来ます。

DxLibでしたらリファレンスの「ドット単位で画像にアクセスしたい関係」を使うと簡単に実装出来るかもしれません。
ttp://homepage2.nifty.com/natupaji/DxLib/dxfunc.html

説明が下手ですので、これでわからなぃ場合は他の方よろしくお願ぃします…。



466ポイント を手に入れた。



Name: 狼太郎  ..かけだし(2,357ポイント)   Date: 2009/06/13(土) 17:20   No:35015       
Title: 無題    
最近ポインタについて勉強しています。
char *n="こんにちは"
とすると、*nに”こんにちは”へのアドレスが代入されるらしいのですが。。
""って具体的にどような働きをするのでしょうか?
たとえば
int a;

a=10;
printf("%d",a)

の時の""は?
char a[10];

scanf("%s",a);

の時の""は?
というような具合にです。


168ポイント を手に入れた。


Name: ねこ  ..入門者(4,392ポイント)   Date: 2009/06/13(土) 17:50   No:35016     
Title: Re:無題    
"(ダブルクォーテーション)は文字列を囲むための記号です。

・・・としか答えられないです。


44ポイント を手に入れた。

Name: box  ..ハッカー(140,977ポイント)   Date: 2009/06/13(土) 18:53   No:35020     
Title: Re:無題    
> char *n="こんにちは"
> とすると、*nに”こんにちは”へのアドレスが代入されるらしいのですが。。

*n ではなく、n というchar *型変数に、"こんにちは" の先頭のアドレスを代入します。


38ポイント を手に入れた。

Name: sizuma [URL]  ..かけだし(1,828ポイント)   Date: 2009/06/14(日) 00:11   No:35040     
Title: Re:無題    
printfで%dがaを10進数で表示するのはprintf関数の機能で

"%d"という文字列を受け取って、%という文字を見つけたら、指定のフォーマット(ここではdなので10進数)で、第二引数を表示します。

働き、、、たぶんですが、
コンパイルするときに""(' 'もかな)を見つけたらコンパイラーが文字・文字列中のエスケープシーケンスを見つけて、対応するビット列に置換してくれる
なんて働きが、ありそう?
コンパイルの最適化はまったく知らないんでよく分からないで書いていますが。
違ったらご指摘ください。


224ポイント を手に入れた。



Name: usho  ..ぴよぴよ(15ポイント)   Date: 2009/06/13(土) 22:01   No:35031       
Title: 描画処理の事で    
はじめまして。
最近自分でゲームを作りたいと思い、C言語とDXライブラリを勉強しはじめました。
素人・独学からのスタートでこれからも独学になりそうなので、こちらの掲示板で度々お世話になるかと思いますが、よろしくお願い致します。
いきなり質問なのですが、描画処理でSetDrawScreen関数、ClearDrawScreen関数、ScreenFlip関数での表裏の描画状態について、
SetDrawScreen(DX_SCREEN_BACK);// 表描画:なし 裏描画:なし
while(1){
   ClearDrawScreen();// 表描画:古いデータ 裏描画:なし
   DrawGraph(処理);// 表描画:古いデータ 裏描画:新データ
   ScreenFlip();// 表描画:新データ 古いデータ
}
という認識でよろしいのでしょうか?
ClearDrawScreen関数はSetDrawScreen関数で指定した画面だけのデータを消すのでしょうか?


15ポイント を手に入れた。


Name: usho  ..ぴよぴよ(55ポイント)   Date: 2009/06/13(土) 22:10   No:35032     
Title: 描画処理の事で    
すみません11行目は
ScreenFlip();// 表描画:新データ 裏描画:古いデータ
です


40ポイント を手に入れた。



Name: toshi  ..かけだし(1,104ポイント)   Date: 2009/06/12(金) 15:50   No:34922       
Title: doubly linked list の件について    
もし、doubly linked listの説明とソースコードが載っている
サイトとかがあったら教えていただけませんか?
自分なりにもいいサイトを探しているんですが、なかなか見つかりません。
ここはお勧めというサイトがありましたら、よろしくお願いします。


126ポイント を手に入れた。


Name: ねこ  ..入門者(3,186ポイント)   Date: 2009/06/12(金) 16:18   No:34926     
Title: Re:doubly linked list の件について    
そのまま検索したら出た下記サイトとかどうでしょうか
ttp://caspar.hazymoon.jp/OpenBSD/sys/queue/list.html

前回質問されてたlinked listを双方向にしただけなのですが
まだよく分かっていないのでしたらポインタあたりの復習をしてみてはどうでしょう?


87ポイント を手に入れた。

Name: toshi  ..かけだし(1,148ポイント)   Date: 2009/06/12(金) 17:58   No:34942     
Title: Re:doubly linked list の件について    
メールありがとうございます。
もう一度ポインタあたりの復習もしてみます。
また分らない所があると思うのでよろしくおねがいします。


44ポイント を手に入れた。

Name: ねこ  ..入門者(3,323ポイント)   Date: 2009/06/12(金) 18:05   No:34944     
Title: Re:doubly linked list の件について    
あ、後質問関係ないんですが
記事に返信する事は
×メール
○レス(レスポンス)
です。

前回メールアドレス記載してたのでメールも来てるのかと^^;


29ポイント を手に入れた。

Name: toshi  ..かけだし(1,174ポイント)   Date: 2009/06/13(土) 20:13   No:35028     
Title: Re:doubly linked list の件について    
あっすいません(^^ゞ
レスですね(笑)
気を付けますw


26ポイント を手に入れた。



Name: アプリ  ..ぴよぴよ(253ポイント)   Date: 2009/06/11(木) 21:52   No:34872       
Title: 携帯アプリについて midp    
板が違ったらすいません・・・。
C言語ではなくMIDPにのっとってauのアプリを作っております。

デバック環境だと画像が表示されるのですが
吐き出されたjarファイルでは画像が表示されません・・・。

なぜでしょうか?

どうやっても解決できないです・・・

toolbar.exe


52ポイント を手に入れた。


Name: バグ  ..ハッカー(159,570ポイント)   Date: 2009/06/11(木) 22:04   No:34875     
Title: Re:携帯アプリについて midp    
念の為に確認しますが、オープンアプリプレイヤーに対応した機種ですよね?

29ポイント を手に入れた。

Name: アプリ  ..ぴよぴよ(0ポイント)   Date: 2009/06/11(木) 22:10   No:34877     
Title: Re:携帯アプリについて midp    
そうです><

ただPC上でいくつかプロジェクトを作ったことがあるのですが
あるプロジェクトだけデバック環境で動くのに
吐き出されたファイルをPC上でクリックすると画像がないんです・・・

以下ソースです。
game.java


import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

//(本体)
public class game extends MIDlet {

//コンストラクタ
public game() {
//キャンバスの指定
KeyCanvas c = new KeyCanvas();
Display.getDisplay(this).setCurrent(c);

//スレッドの実行
(new Thread(c)).start();

}

//アプリの開始
public void startApp() {
}

//アプリの一時停止
public void pauseApp() {
}

//アプリの終了
public void destroyApp(boolean flag) {
}
}

////////////////////////
gameCanvas.java


import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.util.*;

//キー入力の処理(キャンバス)
class KeyCanvas extends GameCanvas
implements Runnable, CommandListener
{
private int keyEvent = -999; //キーイベント
private int keyState; //キー状態
private Command[] command = new Command[2];//コマンド
int SelPx = 96;
int SelPy = 96;

int[][] MapArray = {
{0,0,0,0,0},
{0,1,2,1,0},
{0,2,2,2,0},
{0,1,2,1,0},
{0,0,0,0,0}
};

//コンストラクタ
KeyCanvas()
{
//キーイベントの抑制
super(false);
}

//実行
public void run()
{
//グラフィックスの取得
Graphics g = getGraphics();

//画像ファイルの読み込み
Image Moon = null;
Image Sun = null;
Image Select = null;
try
{
Moon = Image.createImage("/tuki.png");
Sun = Image.createImage("/taiyo.png");
Select = Image.createImage("/select.png");
}
catch (Exception e)
{
System.out.println(e.toString());
}

//コマンドの生成
command[0] = new Command("速", Command.SCREEN, 0);
command[1] = new Command("遅", Command.SCREEN, 1);

//コマンドの追加
addCommand(command[0]);
addCommand(command[1]);

//コマンドリスナーの指定
setCommandListener(this);

while (true)
{
//キーイベントの処理
if (keyEvent == FIRE)
{
int x = SelPx / 48;
int y = SelPy / 48;

// ↑
if (MapArray[y - 1][x] == 1)
{
MapArray[y - 1][x] = 2;
}
else if (MapArray[y - 1][x] == 2)
{
MapArray[y - 1][x] = 1;
}

// ←
if (MapArray[y][x-1] == 1)
{
MapArray[y][x-1] = 2;
}
else if (MapArray[y][x-1] == 2)
{
MapArray[y][x-1] = 1;
}

// ×
if (MapArray[y][x] == 1)
{
MapArray[y][x] = 2;
}
else if (MapArray[y][x] == 2)
{
MapArray[y][x] = 1;
}

// →
if (MapArray[y][x+1] == 1)
{
MapArray[y][x+1] = 2;
}
else if (MapArray[y][x+1] == 2)
{
MapArray[y][x+1] = 1;
}

// ↓
if (MapArray[y+1][x] == 1)
{
MapArray[y+1][x] = 2;
}
else if (MapArray[y+1][x] == 2)
{
MapArray[y+1][x] = 1;
}


}
if (keyEvent == UP) SelPy -= 48;//上キー
if (keyEvent == DOWN) SelPy += 48;//下キー
if (keyEvent == LEFT) SelPx -= 48;//左キー
if (keyEvent == RIGHT) SelPx += 48;//右キー

keyEvent = -999;

//キー状態の処理
/*
keyState = getKeyStates();

// if ((UP_PRESSED & keyState) != 0) SelPy -= 48;//上キー
if ((DOWN_PRESSED & keyState) != 0) SelPy += 48;//下キー
if ((LEFT_PRESSED & keyState) != 0) SelPx -= 48;//左キー
if ((RIGHT_PRESSED & keyState) != 0) SelPx += 48;//右キー
*/

if (SelPx < 48)
{
SelPx = 48;
}
else if (SelPx > 48 * 3)
{
SelPx = 48 * 3;
}

if (SelPy < 48)
{
SelPy = 48;
}else if(SelPy > 48*3){
SelPy = 48 * 3;
}



//描画
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());

for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{

if (MapArray[i][j] == 1)
{
g.drawImage(Moon, j*48, i*48, Graphics.LEFT | Graphics.TOP);
}
else if (MapArray[i][j] == 2)
{
g.drawImage(Sun, j * 48, i * 48, Graphics.LEFT | Graphics.TOP);
}
}
}

g.drawImage(Select, SelPx, SelPy, Graphics.LEFT | Graphics.TOP);

flushGraphics();

//スリープ
try
{
Thread.sleep(50);
}
catch (Exception e)
{
}
}
}

//キープレスイベント
public void keyPressed(int keyCode)
{
if (keyCode == 0) return;
switch (getGameAction(keyCode))
{
case FIRE:
keyEvent = FIRE;
break;//選択キー
case UP:
keyEvent = UP;
break;//選択キー
case DOWN:
keyEvent = DOWN;
break;//選択キー
case RIGHT:
keyEvent = RIGHT;
break;//選択キー
case LEFT:
keyEvent = LEFT;
break;//選択キー
}
}

//コマンドイベント
public void commandAction(Command c, Displayable disp)
{
/*
if (c == command[0]) speed = 10;
if (c == command[1]) speed = 5;
*/
repaint();
}
}


//////////
画像はresに入っております。
png三枚 それぞれ48*48




2,028ポイント を落としてしまった。

Name: アプリ  ..ぴよぴよ(120ポイント)   Date: 2009/06/11(木) 23:55   No:34891     
Title: Re:携帯アプリについて midp    
Moon = Image.createImage("/select.png");
Sun = Image.createImage("/taiyo.png");
Select = Image.createImage("/select.png");

なっておりますが気にしないでください。

添付物が現在の環境なのですが
デバックと吐き出されるものがどうやっても違います・・・

なぜなのでしょうか・・・?

どなたか本当に助けてください・・・


120ポイント を手に入れた。

Name: バグ  ..ハッカー(159,707ポイント)   Date: 2009/06/12(金) 08:06   No:34897     
Title: Re:携帯アプリについて midp    
私はAUユーザーではないのでテストできないので申し訳ないです。
ただ、ちょっと試していただきたいのですが、画像をPNGからGIFやJPGに変更しても駄目でしょうか?
昔、ドコモ携帯用のアプリを開発した際にPNGはサポートされていなかったように思いましたので…
的はずれな回答だったら申し訳ないですが(^_^;)


137ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(63,303ポイント)   Date: 2009/06/12(金) 12:34   No:34912     
Title: Re:携帯アプリについて midp    
質問をするときは開発環境を明記してください。

今回はアプリゲットのオープンアプリ開発講座で使用されている
JDK1.5 と J2ME Wireless Toolkit 2.2を使用しているとして回答します。

直接的な原因はファイル名の大文字小文字です。
ファイルでは、「tuki.PNG」と「taiyo.PNG」が大文字になっており
プログラムでは「tuki.png」と「taiyo.png」が小文字で指定しているため
画像の作成に失敗し、drawImageでnullを指定しているので、フリーズしています。
デバッグ環境のときは、ファイルの大文字小文字が無視されているのでしょう。

その他気になった点がありましたので以下にあげます。
・jadファイルおよび、マニフィストファイルがUTF-8ではなく、S-JISで記述されている
・jarファイル内にThumbs.db(隠しファイル)がある(動作に問題があるわけではないが、無駄に容量がとられる)

J2ME Wireless Toolkit 2.2はjadファイルとマニフィストファイルをS-JISで記述しているので
UTF-8に修正する手順としては
1.MANIFEST.MFをテキストエディタ開き、UTF-8にエンコードして保存する
2.jarファイルをWinRARで開き、META-INF/MANIFEST.MFに先ほどのMANIFEST.MFを上書きする
3.jadファイルをテキストエディタで開き、「MIDlet-Jar-Size」の値を書き換え、UTF-8にエンコードして保存する

以上です。


410ポイント を手に入れた。

Name: アプリ  ..ぴよぴよ(342ポイント)   Date: 2009/06/12(金) 21:49   No:34968     
Title: Re:携帯アプリについて midp    
バグ様
本当です><
いろんなサイトを見てみたら書いてありました。
一つの情報として役立たせていただきます。


GPGA様
なおりました><
なんでPNGになっていたのでしょうかねw

気になった点について、了解しました。
いろいろと教えていただきありがとうございました。

一応、実機上では表示できました。
ただデバック上では問題ないのですが実機で
pngの透過部分を白と判定してしまう(透過されない)のですが
これはしょうがないのでしょううか?


222ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(63,661ポイント)   Date: 2009/06/13(土) 06:31   No:34983     
Title: Re:携帯アプリについて midp    
>pngの透過部分を白と判定してしまう(透過されない)のですが
>これはしょうがないのでしょううか?
pngの色がフルカラーになっているので256色に減色して試してみてください


48ポイント を手に入れた。

Name: アプリ  ..ぴよぴよ(507ポイント)   Date: 2009/06/13(土) 12:38   No:34999     
Title: Re:携帯アプリについて midp    
減色?できていないかもしれないのですが
かなりファイルサイズを小さくしました。
ただそれでも表示できなかったので
図形の描画でセレクトを補う?ようにしました。

これでも実機上でのみ透過されませんでした。
友人(midpに関しては素人)に聞いたところ機種が対応してないのではといわれました。


使っている機種 W54S
画像編集 PhotoShopCS3 AC(正式版)です。
     
PhotoShopだとどうやってもフルカラーで保存されてしまいませんか?


165ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(63,649ポイント)   Date: 2009/06/13(土) 13:38   No:35009     
Title: Re:携帯アプリについて midp    
Photoshopならメニューのどこか(確か編集)にインデックスカラーという項目があるはずです。
これで、保存すれば256色で保存されます


12ポイント を落としてしまった。

Name: アプリ  ..ぴよぴよ(613ポイント)   Date: 2009/06/13(土) 19:59   No:35027     
Title: Re:携帯アプリについて midp    

GPGAさん
おお〜〜
できました〜透過できました><

ここはCの掲示板なのに皆様凄いですね・・・
ありがとうございます。


35ポイント を手に入れた。



Name: わい  ..ぴよぴよ(447ポイント)   Date: 2009/06/13(土) 04:40   No:34977       
Title: ソフトバンクのアプリ開発に関して    
板違いかもしれませんが、オープンアプリなどにも詳しい方が
おられるようですので質問させていただきます。

ソフトバンクのアプリ開発に関して。
ソフトバンクより配布されている

「416-111-Appli_tips_1[1].0.1.pdf」

の、P.16に記載の

「GET,POSTのリプライは12Kb(ヘッダー含む)以下でなければならない。
但し、JARによりサイズを圧縮できるデータであれば、300KB(ヘッダー
含む)まで、可能である。」

という記述について。

上記に関して、GET又はPOSTで、JAR圧縮をかけたデータを受信する場合は
300KBまで可能ということなのか?。圧縮をかけていない状態のデータでも
、JAR圧縮をかけることが可能なデータなら300KBまでOKなのか?

私の読解力ではわからず、ドコモのアプリのようにGET,POSTの送受信可能な
容量が記載されているHPはないかと探してみたのですが、見つかりませんでした。

アプリ側から、画像などの取得要求をサーバーに送信し、PNG等のデータを受け取ろう
と思っているので、12KB制限ではきついのですが、上記の文章は、どう理解すればよい
のでしょうか。

何卒、ご教授宜しくお願い致します。


447ポイント を手に入れた。


Name: GPGA  ..熟練のプログラマー(63,556ポイント)   Date: 2009/06/13(土) 06:07   No:34979     
Title: Re:ソフトバンクのアプリ開発に関して    
jar圧縮と書かれていますが、ただのバイナリファイルで問題ありません。

通信の際の問題点は以下を参照してください。
http://d.hatena.ne.jp/GPGA/20061030

記憶が怪しいですが3GC携帯なら150kbの通信までならできたと思います


85ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(63,592ポイント)   Date: 2009/06/13(土) 06:14   No:34980     
Title: Re:ソフトバンクのアプリ開発に関して    
指定したURL先の追記になりますが
Content-Typeはapplication/Java-archiveを使用してください


36ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(63,613ポイント)   Date: 2009/06/13(土) 06:27   No:34982     
Title: Re:ソフトバンクのアプリ開発に関して    
追記の追記
資料に300kbって書いてありましたねorz


21ポイント を手に入れた。

Name: わい  ..ぴよぴよ(504ポイント)   Date: 2009/06/13(土) 13:23   No:35008 解決!     
Title: Re:ソフトバンクのアプリ開発に関して    
GPGAさん。
レスありがとうございます。

データの受け取りが問題なくできそうで安心しました。
ご紹介いただいたGPGAさんのBLOGも参考にさせて頂きたいと思います。
本当にありがとうございました。


57ポイント を手に入れた。



Name: シュウ  ..かけだし(2,040ポイント)   Date: 2009/06/13(土) 10:41   No:34992       
Title: 無題    
どうも、シュウです。
最近RPGを作ろうと思い立って製作を始めたのですが、構造体内部の変数を表示しようとすると以下のようなエラーが発生してしまいます。
ポインタを使ったりと何度か工夫したのですが、原因が一向に掴めません。
どなたか、このエラーが発生する理由を教えてください。


DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_packet_iskeyframe が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_comment_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_info_init が関数 "int __cdecl TheoraDecode_InitializeStream(struct tagSTREAMDATASHREDTYPE2 *,int,int)" (?TheoraDecode_InitializeStream@@YAHPAUtagSTREAMDATASHREDTYPE2@@HH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_info_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_comment_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_clear が関数 "int __cdecl TheoraDecode_Terminate(int)" (?TheoraDecode_Terminate@@YAHH@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_header が関数 "int __cdecl TheoraDecode_ReadHeader(struct tagDECODE_THEORA *)" (?TheoraDecode_ReadHeader@@YAHPAUtagDECODE_THEORA@@@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_YUVout が関数 "unsigned long __stdcall TheoraDecode_Thread(void *)" (?TheoraDecode_Thread@@YGKPAX@Z) で参照されました。
DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2019: 未解決の外部シンボル _theora_decode_packetin が関数 "int __cdecl _TheoraDecode_IncToFrame(int,int)" (?_TheoraDecode_IncToFrame@@YAHHH@Z) で参照されました。


979ポイント を手に入れた。


Name: Mist  ..熟練のプログラマー(64,778ポイント)   Date: 2009/06/13(土) 10:53   No:34993     
Title: Re:無題    
DXライブラリへのパスがきちんと設定されていない場合によく表示されるエラーですが、修正する前はエラーなくビルドできていたのですよね?
もしくは、修正前の状態に戻すとエラーは出ないんですよね?

だとすると、ソースを見ないことには答えようがないです。


108ポイント を手に入れた。

Name: シュウ  ..かけだし(2,067ポイント)   Date: 2009/06/13(土) 11:11   No:34994     
Title: Re:無題    
修正しないと別のエラーが出るんです。
mainのソースを投稿します。

#define GLOBAL_INSTANCE
#include "../HEADER/Dx.h"

//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);

//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessLoop()==0) {

item boll;
char *hp;
hp = boll.name;
hp = "abc";
int white=GetColor(255,255,255);
DrawFormatString( 10, 10, white, "%s", hp);

if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
}


27ポイント を手に入れた。

Name: ねこ  ..入門者(4,348ポイント)   Date: 2009/06/13(土) 11:53   No:34996     
Title: Re:無題    
修正前のエラーが消えたのではなく、修正後に起きた別のエラーが先に検出されてるため別のエラーが起こってるように見えるだけな気がします。

DXLIBを導入した他のプログラムは正常に動いていますか?
他でも同様のエラーが起きるならライブラリへのリンクが正常に設定されていない可能性が高いです。



128ポイント を手に入れた。

Name: シュウ  ..かけだし(2,117ポイント)   Date: 2009/06/13(土) 12:47   No:35002     
Title: Re:無題    
竜神録をデバッグ・コンパイルしたところ、問題なく動きました。
修正前のエラーもそんな感じですね。
リンク以外にあのエラーが発生する理由はありますか?


50ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(64,877ポイント)   Date: 2009/06/13(土) 12:56   No:35003     
Title: Re:無題    
> リンク以外にあのエラーが発生する理由はありますか?

パスが指定している場所にDXライブラリのlibファイルが存在しないか、リンク先が間違っているかのどちらかしかないと思います。
シュウさんが作られているRPGのプロジェクトの設定は全て竜神録と同じになっていますか?
プロジェクトの設定は個別に行わなければならないため、「竜神録のビルドが出来る」から「設定は大丈夫」というわけではありません。


99ポイント を手に入れた。

Name: シュウ  ..かけだし(2,149ポイント)   Date: 2009/06/13(土) 12:58   No:35004     
Title: Re:無題    
成る程、それは盲点でした。
では、RPGのプロジェクトに適した設定するにはどうしたらいいでしょうか?


32ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(64,987ポイント)   Date: 2009/06/13(土) 13:03   No:35005     
Title: Re:無題    
> RPGのプロジェクトに適した設定

何か勘違いされているようですが、私が言いたいのはDXライブラリを使うためのプロジェクト設定をしたかどうかです。

開発環境の明記がありませんが、本家の使い方解説を読んで正しく設定できているかを確認してください。

http://homepage2.nifty.com/natupaji/DxLib/dxuse.html


110ポイント を手に入れた。

Name: シュウ  ..かけだし(2,278ポイント)   Date: 2009/06/13(土) 13:17   No:35007 解決!     
Title: Re:無題    
ああ〜、そういうことでしたか。
今調べたところ、設定自体には何の問題もなかったのですが、DXライブラリの中身に幾つか欠損がありました。
DXライブラリの本体をDLし直して再度コンパイルしたところ、無事に起動できました。
Mistさん、ねこさん、回答ありがとうございました。今度来たときも宜しくお願いします。


129ポイント を手に入れた。



Name: チルチル  ..プログラマー(25,501ポイント)   Date: 2009/06/13(土) 01:34   No:34976       
Title: コンパイル時の定数項?    
DXライブラリを使ったプログラムを製作中なのですが
定数項について質問があります

極端な例ですが

DATA( 1+(2+4)*((((((4+5))))))-5 );

のように、関数を呼び出した時に定数項だけで引数を渡した場合
コンパイル時に

DATA(50);

のように1つの数値にまとめられていたりするのでしょうか?

まとめられていれば良いのですが
そうでない場合はできるだけ余計な計算が引数に入らないように気を付けないと
関数を呼び出すたびに無駄な処理が行われてしまうので
コンパイル時にどうなっているのか教えてください


135ポイント を落としてしまった。


Name: kazuoni [URL]  ..比類無きプログラマー(91,848ポイント)   Date: 2009/06/13(土) 08:06   No:34984     
Title: Re:コンパイル時の定数項?    
式を評価した値を関数の引数として値渡ししているので、
実行前の段階に50という数字は出てないと思います。

>関数を呼び出すたびに無駄な処理が行われてしまうので
代入した値を引数として用いれば解決できるはずです。

#また知識不足の発言でした・・・


44ポイント を手に入れた。

Name: たいちう  ..プログラマー(31,873ポイント)   Date: 2009/06/13(土) 08:17   No:34985     
Title: Re:コンパイル時の定数項?    
コンパイラによるのか規格で保証されているのか知りませんが、
普通のコンパイラならまとめるでしょう。
例えばVC2008では、次のように確認できます。

int main()

{
00411500 push ebp
00411501 mov ebp,esp
00411503 sub esp,0CCh
00411509 push ebx
0041150A push esi
0041150B push edi
0041150C lea edi,[ebp-0CCh]
00411512 mov ecx,33h
00411517 mov eax,0CCCCCCCCh
0041151C rep stos dword ptr es:[edi]
int v = Data(1+(2+4)*((((((4+5))))))-5);
0041151E push 32h
00411520 call Data (4111B8h)
00411525 add esp,4
00411528 mov dword ptr [v],eax
cout << v << endl;
0041152B mov esi,esp
...


他のスレでも指摘している人がいましたが、質問を乱発しすぎだと思います。
ここでは掲示板のマナー云々の話はしませんが、問題を1つ1つ解決しようという
集中力に欠けているような印象を受けます。
同時に多くの問題をかかえ、多くのスレを立てることで、
1つ1つの回答者の指摘を消化できていないようです。

誰が一番損していると思いますか?


443ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(105,008ポイント)   Date: 2009/06/13(土) 08:45   No:34987     
Title: Re:コンパイル時の定数項?    
> DATA(50);
> のように1つの数値にまとめられていたりするのでしょうか?

定数式ですので、コンパイル時に計算されます。


9ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,585ポイント)   Date: 2009/06/13(土) 10:14   No:34990 解決!     
Title: Re:コンパイル時の定数項?    
なるほど、やはり計算されているんですか

>>他のスレでも指摘している人がいましたが、質問を乱発しすぎだと思います

すいません、当面の問題は全部解決したのでしばらく大人しくしています

どうもありがとうございました


84ポイント を手に入れた。

Name: toyo  ..プログラマー(36,178ポイント)   Date: 2009/06/13(土) 12:43   No:35001     
Title: Re:コンパイル時の定数項?    
コンパイラによってはmath関数の結果もコンパイル前に計算されたりします
例えば平方根を求める
sqrt(2.0)
も関数呼び出しではなく1.414...に置き換えられる場合があります


56ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(105,087ポイント)   Date: 2009/06/13(土) 13:13   No:35006     
Title: Re:コンパイル時の定数項?    
sqrtをコンパイル時に計算してしまうのは、組み込み関数による最適化ですね。
文法上は定数式にならないので、やや扱いが異なります。

ちなみに、私は最近変な実験を行っていて...

const double SQRT2 = <?php echo sqrt(2.0); ?>;

のように、PHPを前処理に使って静的にできることを増やす検討をしています。
# 遊びの範疇を超えませんが...

テンプレートでは浮動小数点数を扱えませんが、PHPなら簡単に埋め込めるので期待しています。
あるいは、整列済みの配列や木構造を静的に作れるのも魅力です。


79ポイント を手に入れた。



Name: 超初心者  ..入門者(4,506ポイント)   Date: 2009/06/13(土) 05:38   No:34978       
Title: 敵の弾発射    
こんにちは。
いつもお世話になっています。
自分は今、インベーダーゲームを作ろうとしてるんですが・・・
敵のから弾を出すことができません・・・。
どうやったらインベーダーゲームみたいな感じに敵から弾を出せるでしょうか・・・。
どうかご教授をお願いします。


108ポイント を手に入れた。


Name:  ..ぴよぴよ(657ポイント)   Date: 2009/06/13(土) 06:23   No:34981     
Title: Re:敵の弾発射    
弾の発射については龍神録さんのこちらを参考に
http://dixq.net/rp/13.html


40ポイント を手に入れた。



Name: 白夜  ..ぴよぴよ(64ポイント)   Date: 2009/06/12(金) 20:40   No:34963       
Title: 二分木について    

A
/
B
/\
C D


上のような二分木があった時、A,B,C,Dそれぞれの高さは2,1,0,0ですか?
それと深さを考えたとき、それぞれの深さは0,0,1,2ですか?
お願いします。


64ポイント を手に入れた。


Name: non  ..熟練のプログラマー(47,738ポイント)   Date: 2009/06/12(金) 22:21   No:34971     
Title: Re:二分木について    
深さは根からの距離なので0,1,2,2だと思う。
高さは最大をいうので各ノードそれぞれにあるわけではない。
この木なら2。



68ポイント を手に入れた。

Name: 白夜  ..ぴよぴよ(84ポイント)   Date: 2009/06/13(土) 00:26   No:34975 解決!     
Title: Re:二分木について    
ありがとうございました。
自分、勘違いしていたみたいです。
解決です。


20ポイント を手に入れた。



Name: はなたれぱんだ  ..ぴよぴよ(49ポイント)   Date: 2009/06/11(木) 22:16   No:34879       
Title: While文の入り方    
オープニングメッセージが出た後キーを押すといきなりエンディングメッセセージまでいってしまい、While文に入りません。このような時はどのように条件を変えればいいんですか?教えてください。

49ポイント を手に入れた。


Name: conio  ..上級者(19,898ポイント)   Date: 2009/06/11(木) 22:42   No:34883     
Title: Re:While文の入り方    
とりあえず、乱数生成が色々とおかしいです。
----------------------------------------------------------
int ransuu(int i)
{
int kekka ;

while((kekka =(double)rand()/RAND_MAX*1) >=i);
return kekka ;
}
----------------------------------------------------------
@doubleにキャストしている意味が無い
ARAND_MAXに1をかけている意図が分からない
BRAND_MAXで割ってしまったら、乱数になりません。毎回返って来るのは0です。(int型に代入しているので)
C乱数を生成するのであれば、while文にする必要は無い(0以外の値になった時、値が0になるまで無限ループ)

で、iには0以上の値が入っているようなので、条件式が評価されると毎回"偽"になり、while文を抜け
int型の変数kekkaは常に0になります。


213ポイント を手に入れた。

Name: はなたれパンダ  ..ぴよぴよ(726ポイント)   Date: 2009/06/12(金) 17:44   No:34937     
Title: Re:While文の入り方    
coniさんありがとうございます。
まだ超初心者なのでわからないことばかりなんです。
とりあえず、乱数の生成がおかしいとのことことですが、
@一応本の通り打ってみたんですが、もしかしてint型でもいいと言うことですか?
Aこれは単なる書き間違えでした。(1じゃなくてiです。)
B、Cとに関してはよくわかりません。もしよければもう少し詳しく教えてくれると助かります。
(なんせ超初心者なんで・・・。すみません。)

一応1をiに書き直したんですがまだwhile文にはいりません。
なぜかわかりません・・・。どうすればいいか教えて下さい。すみません・・・。

ソースは書き直しました。よろしくおねがいします。


192ポイント を手に入れた。

Name: lbfuvab  ..上級者(21,026ポイント)   Date: 2009/06/12(金) 17:50   No:34940     
Title: Re:While文の入り方    
演算子の優先順位ってご存知ですか?

2倍のポイントを手に入れた! 18ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(64,670ポイント)   Date: 2009/06/12(金) 18:02   No:34943     
Title: Re:While文の入り方    

/************************/
/* i未満の整数乱数 */
/************************/
int ransuu(int i)
{
return (rand() % i);
}


元のソースは何したいのかよくわかりませんが、i未満の乱数であればこれで十分かと。
この変更でwhile入りましたよ。

ほかにも間違い発見。
/* 乱数の初期化*/
void setransuu();

voidいらないです。
voidが付いているためにプロトタイプ宣言にみなされているのでsetransuuが実行されていません。
で、前回も指摘しましたが引数省略する場合はvoidつけましょう。
void setransuu(); /*乱数の初期設定値の設定*/


164ポイント を手に入れた。

Name: はなたれパンダ  ..ぴよぴよ(868ポイント)   Date: 2009/06/12(金) 19:49   No:34957     
Title: Re:While文の入り方    
ありがとうございました。
無事ソースを実行ゲームが出来ました。

しかしソースの勉強の仕方ってとりあえず本などのサンプルソースを打って
それをベースに改造いき、わからないことが出ればそのつど可決していくってやり方で
いいんでしょうか?
皆さんは最初どのようにしてはじめて言ったんですか?
もしよろしければ他に方法があれば教えてもらえると助かるのですが・・・。



142ポイント を手に入れた。

Name: conio  ..上級者(21,470ポイント)   Date: 2009/06/12(金) 23:44   No:34973     
Title: Re:While文の入り方    
>>@一応本の通り打ってみたんですが、もしかしてint型でもいいと言うことですか?
srand((unsigned int)time(NULL));
↑コレを記述した後、
Mistさんの書いた通り"rand() % i"だけで充分です。

※調べたところ、double型にキャストして生成する方法もあるようです。
a = (int)((rand() / ((double)RAND_MAX+1.0f)) * 10);
ただ、はなたれパンダさんのプログラムではおかしな式になっており、
無意味なものとなっています。

>>B、Cとに関してはよくわかりません。もしよければもう少し詳しく教えてくれると助かります。
Bについて。
rand関数は、0 〜 RAND_MAX(一般に32767)の値を返します。
------------------
rand() / RAND_MAX
------------------

上記のプログラム場合、下の様になります。
割り算をしてみれば分かりますが、int型だとほぼ100%の確率で0にしかなりません。
--------------
456 / 32767
2366 / 32767
17 / 32767
104 / 32767
--------------

Cについて
----------------------
while(rand() % 100)
;
----------------------
上記の様なプログラムがあったとします。
while文は「条件が偽では無い限り、ループする」というものです。
どうなるかというと、
------------------------------------------------------------------------
32 % 100 = 32  //0ではないので繰り返す。空文のあと、rand() % 100 を実行。
1230 % 100 = 30 //0ではないので繰り返す。空文のあと、rand() % 100 を実行。
59 % 100 = 59 //0ではないので繰り返す。空文のあと、rand() % 100 を実行。
250 % 100 = 50 //0ではないので繰り返す。空文のあと、rand() % 100 を実行。
400 % 100 = 0 //0なのでループを抜ける。
------------------------------------------------------------------------
このようになります。0になるまで無限ループです。
【補足】空文とは 式が無い式文のことです。 コレ⇒ ;


>>もしよろしければ他に方法があれば教えてもらえると助かるのですが・・・。
サンプルソースよりも、while文、for文、switch文、if文などの
基本的な構文の理解を先にした方が良いと思います。
(その他、配列や、代入・初期化などの操作)

で、「この構文とこの構文をこう組み合わせるとこういう結果が表示されるんじゃないかな」
と、自分で実行結果を想定しながら たくさん練習すると効果があると思います。
(他にも、「こういうプログラムを作ろう」と決めて、希望通りに動くまで試行錯誤 など)


571ポイント を手に入れた。

Name: sizuma [URL]  ..かけだし(1,604ポイント)   Date: 2009/06/13(土) 00:14   No:34974     
Title: Re:While文の入り方    
僕は分かりにくい使い方をしなくてはいけないコード以外はサンプルのソースは打たないですね。
読んで理解できればコピーする必要はないと思います。
理解できるのであれば、もう自分のオリジナルのコードを書いて練習するべきではないでしょうか。
意外に書き方から理解できてなかったことに気づくと思います。
そしたらその分からなかった部分を本を見て確認、以下ループ、みたいな感じでいいのでは?


基本的な構文の理解がまだで、プログラミング(もしくはコンピュータの操作)に慣れていないのなら別ですが・・・


打つときでも何も考えないで打つのではなく、理解して本を見ないで打つぐらいの気持ちでで打たないと、タダのタイピング練習になってしまいますよ。

僕は面白そうな関数や、ちょっとした疑問が出てきたら、試しに何かプログラムを作ってみます。
すぐ作れる20〜30行くらいですが。
コンパイルの環境がないところで勉強してるときは、試してみたいところに付箋を貼っておいて、家に帰ってから作ります。


あと、一番大事なのは楽しんですること!!


147ポイント を手に入れた。



Name: まる  ..ぴよぴよ(940ポイント)   Date: 2009/06/12(金) 17:37   No:34933       
Title: 違い    
#include<stdio.h>

int main(void) 

{ int a[51];
int i, max;

for (i=1, max=0; i<=50; i++)
{
printf("%d人目の点数 ", i);
scanf("%d", &a[i]);
if (!max || a[max] < a[i]) max = i;
}

printf("MAXはa[%d]=%d点", max, a[max]);
}


というプログラムを作っていただいたのですが

#include<stdio.h>

int main(void) 

{ int a[51];
int i, max=0;

for (i=1; i<=50; i++)
{
printf("%d人目の点数 ", i);
scanf("%d", &a[i]);
if ( a[max] < a[i]) max = i;
}

にしてみても動いたのですが。
!max ||やfor (i=1, max=0; i<=50; i++)のはどういった働きなのでしょうか?
なくても問題ないのでしょうか?

printf("MAXはa[%d]=%d点", max, a[max]);
}


306ポイント を手に入れた。


Name: ねこ  ..入門者(3,294ポイント)   Date: 2009/06/12(金) 17:44   No:34938     
Title: Re:違い    
!maxの「!」は反転を指します。
例えばmaxに1が入っていれば0、0が入っていれば1になります。
また2より大きい値が入っていても0になります。

予測なのですが、本来はfor( i = 0; i < 50; i++ )だったんじゃないでしょうか?
そのif文では最高得点の配列添え字を保持してますので最初に入力された点数を保持する目的としては
!maxではなくmax==1が正しい判定だと思います。


108ポイント を手に入れた。

Name: フリオ  ..プログラマー(29,907ポイント)   Date: 2009/06/12(金) 21:45   No:34967     
Title: Re:違い    
 
 "!m"は、"m == 0"と同値です。


 ソースについては、確かなことは書いた人でないとわかりませんが、

ひょっとしたら、"printf("%d人目の点数 ", i);"の"%d人目"と"i"をあわす為に、
わざわざ"int a[51];"と宣言して a[1] ~ a[50] を使い、
a[0] を比較対象からはずすために、"if (!max || a[max] < a[i])"として、
m が 0 の時は無条件に 1 と入れ替えているのではないでしょうか。

ただ、"%d人目"と"i"をあわしたいなら、

int a[50];
...
for(i = 0, m = 0; i < 50; ++ i){
printf("%d人目の点数 ", i + 1);
...
}

 
とすればいいですし、

a[0] を比較対象からはずしたいなら

for (i=1, max=0; i<=50; i++)
{
...
if (!max || a[max] < a[i]) max = i;
...

を、

for(i = 1, max = 1; i <= 50; ++ i){
...
if (a[max] < a[i]) max = i;
...

とすればいいです。


 2つ目のソースは、
a[0] という1つ目のソースでは、比較対象にしてはいない要素を比較しています。
 


233ポイント を手に入れた。



Name: チルチル  ..上級者(24,036ポイント)   Date: 2009/06/09(火) 19:23   No:34741       
Title: FPSが60にならない・・    
龍神録のコードを参考にゲームプログラミングの館のwait_fanc関数の中身を変更してみたんですが
FPSが60になりません、どこか間違っているでしょうか?
環境はDXライブラリです

#include "DxLib.h"
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
int count=0;
void wait_fanc(){
int term;
static int t=0;
if( count%60==1 )t=GetNowCount();
if( count%60==60 )term=1000+t-GetNowCount();
else term=(1000.0/60)*(count%60)+t-GetNowCount();
if(term>0)Sleep(term);
}
void fps(){
int i;
static int t=0,ave=0,f[60];
f[count%60]=GetNowCount()-t;
t=GetNowCount();
if(count%60==59){
ave=0;
for(i=0;i<60;i++)
ave+=f[i];
ave/=60;
}
if(ave!=0){
DrawFormatString(0, 0,GetColor(255,255,255),"%.1fFPS",1000.0/(double)ave);
DrawFormatString(0,20,GetColor(255,255,255),"%dms" ,ave);
}
return;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);SetOutApplicationLogValidFlag( FALSE );
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない
fps();
count++;
ScreenFlip();
wait_fanc();
}
DxLib_End();
return 0;
}



725ポイント を手に入れた。


Name: チルチル  ..上級者(24,282ポイント)   Date: 2009/06/10(水) 00:20   No:34771     
Title: Re:FPSが60にならない・・    
関数を呼ぶ場所の関係上カウンタが一周目で既に1になっているのが紛らわしかったりしますけどね・・


33ポイント を手に入れた。

Name: sizuma  ..ぴよぴよ(792ポイント)   Date: 2009/06/10(水) 07:45   No:34774     
Title: Re:FPSが60にならない・・    
走り読みですから、処理の内容は確かめてませんが・・・・

wait_fanc()の
>if( count%60==60 )term=1000+t-GetNowCount();
が到達不可なコードになりますよね?
1から呼び出されるなら
>if( count%60==0 )term=1000+t-GetNowCount();
でいけるんじゃないですか?

どちらにしろ、僕の脆弱マシンじゃぁたぶんFPSは60にならないですが(笑


89ポイント を手に入れた。

Name: チルチル  ..上級者(24,592ポイント)   Date: 2009/06/10(水) 17:45   No:34800     
Title: Re:FPSが60にならない・・    
あ〜そういえばそうですね・・
とりあえず修正しました
しかしまだ60にならないですね・・

#include "DxLib.h"

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){

char GetHitKeyStateAll_Key[256];

GetHitKeyStateAll( GetHitKeyStateAll_Key );

for(int i=0;i<256;i++){

if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;

else GetHitKeyStateAll_InputKey[i]=0;

}

return 0;

}

int count=0;

void wait_fanc(){

int term;

static int t=0;

if( count%60==1 )t=GetNowCount();

if( count%60==0 )term=1000+t-GetNowCount();

else term=(1000.0/60)*(count%60)+t-GetNowCount();

if(term>0)Sleep(term);

}

void fps(){

int i;

static int t=0,ave=0,f[60];

f[count%60]=GetNowCount()-t;

t=GetNowCount();

if(count%60==59){

ave=0;

for(i=0;i<60;i++)

ave+=f[i];

ave/=60;

}

if(ave!=0){

DrawFormatString(0, 0,GetColor(255,255,255),"%.1fFPS",1000.0/(double)ave);

DrawFormatString(0,20,GetColor(255,255,255),"%dms" ,ave);

}

return;

}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

ChangeWindowMode(TRUE);SetOutApplicationLogValidFlag( FALSE );

if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){

//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない

fps();

count++;

ScreenFlip();

wait_fanc();

}

DxLib_End();

return 0;

}


132ポイント を手に入れた。

Name: チルチル  ..上級者(24,733ポイント)   Date: 2009/06/10(水) 22:35   No:34829     
Title: Re:FPSが60にならない・・    
しかし管理人さんのコードに比べて短すぎますかね・・

2倍のポイントを手に入れた! 38ポイント を手に入れた。

Name: Libra  ..初心者(8,761ポイント)   Date: 2009/06/11(木) 10:20   No:34843     
Title: Re:FPSが60にならない・・    
t=GetNowCount();
を1フレームで呼び出す回数が多すぎるのが原因です。

また、wait_funcの

if( count%60==1 )t=GetNowCount();
if( count%60==0 )term=1000+t-GetNowCount();
else term=(1000.0/60)*(count%60)+t-GetNowCount();

でやっている事の意図が不明です。


76ポイント を手に入れた。

Name: ねこ  ..かけだし(2,327ポイント)   Date: 2009/06/11(木) 10:58   No:34845     
Title: Re:FPSが60にならない・・    
ひとまず
「60フレーム周期で手前に遅れてるフレームがあったら今回遅れていなくてもスリープさせず補正していく」
処理を実装したい、という認識でOKですかね?

まずcountが1の時に
「if( count%60==1 )t=GetNowCount();」
でtに現在時間が入り

if( count%60==0 )term=1000+t-GetNowCount();
else term=(1000.0/60)*(count%60)+t-GetNowCount();
↑のelseで「t-GetNowCount()」はほぼ0になります。
つまりcountが1の時強制的に16ミリ秒スリープさせる処理になってるんですね。
このフレームでの処理が0.6秒以内に終わらなければ計算上FPS60にならない気がします。


201ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,090ポイント)   Date: 2009/06/11(木) 18:38   No:34861     
Title: Re:FPSが60にならない・・    
>>「60フレーム周期で手前に遅れてるフレームがあったら今回遅れていなくてもスリープさせず補正していく」

そんな感じです

void wait_fanc(){
--count;
int term=GetNowCount();
static int t=0;
if( count%60==0 )t=term,term=0;
else if( count%60==59 )term=1000+t-term;
else term=(1000.0/60)*(count%60)+t-term;
if(term>0)Sleep(term);
++count;
}
とりあえずcountを内部補正してます
最初の時の待ち時間は思い付かなかったので
待たないで次のフレームで2回分待ってます


265ポイント を手に入れた。

Name: ねこ  ..入門者(2,549ポイント)   Date: 2009/06/11(木) 19:03   No:34863     
Title: Re:FPSが60にならない・・    
初回はDxLib_Initの後とかに「term = GetNowCount();」としておくのが良いかと思います。
その際termはグローバル変数にしておきます。

<「60フレーム周期で手前に遅れてるフレームがあったら今回遅れていなくてもスリープさせず補正していく」
ただこの処理、意図的にcount%60==1の時に過負荷をかければ分かると思いますが
凄くガクンガクン動く結果になりますよ。特殊な意図があってしているなら良いと思いますが
普通のゲームにはお勧めできません。


135ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,125ポイント)   Date: 2009/06/11(木) 20:13   No:34864     
Title: Re:FPSが60にならない・・    
まあ確かにガクガクしますよね・・
しかしまだ60になる気配がないです・・


35ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,154ポイント)   Date: 2009/06/11(木) 23:06   No:34886     
Title: Re:FPSが60にならない・・    
う〜ん何でかな?

9ポイント を手に入れた。

Name: Libra  ..初心者(8,779ポイント)   Date: 2009/06/11(木) 23:46   No:34890     
Title: Re:FPSが60にならない・・    
答えはNo:34863の書き込みでねこさんが既に出してます。

18ポイント を手に入れた。

Name: 御津凪 [URL]  ..比類無きプログラマー(93,795ポイント)   Date: 2009/06/12(金) 00:35   No:34894     
Title: Re:FPSが60にならない・・    
折角なので私が使っている方法を適当にDXライブラリで書いてみました。

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )

{
ChangeWindowMode(TRUE);

SetWaitVSyncFlag(TRUE);

if( DxLib_Init() == -1 ) return -1;

DWORD beginTick = GetTickCount();
DWORD nowTick;
LONGLONG prevTick;
LONGLONG tickOne = (1000LL << 32) / 60;
LONGLONG tick;
DWORD loop;
prevTick = nowTick = 0;

DWORD fps = 0,fps_show = 0; // FPS : 1秒あたりのフレーム描画回数
DWORD mps = 0,mps_show = 0; // MPS : 1秒あたりのループ回数
DWORD tickSec = 1000;

while(ProcessMessage() == 0){
ClearDrawScreen();
begin:
nowTick = GetTickCount() - beginTick;
tick = ((LONGLONG)nowTick << 32) - prevTick;
if(tick < tickOne){
Sleep((tickOne - tick) >> 32);
goto begin;
}
while(tickSec <= nowTick){
fps_show = fps;
fps = 0;
mps_show = mps;
mps = 0;
tickSec += 1000;
}
++fps;

for(loop = (DWORD)(tick / tickOne); loop > 0; --loop, prevTick += tickOne){
++mps;
// ここに毎回行う処理を入れる
DrawFormatString(32, 32, GetColor( 255 , 255 , 255 ), "FPS: %2d, MPS: %2d.", fps_show, mps_show);
}

if(CheckHitKey(KEY_INPUT_ESCAPE) != 0) break;

ScreenFlip();
}

DxLib_End();
return 0;
}

この方法だと、 FPS は 60 を維持できなくても、
ループ回数(MPS)は必ず平均 60 回になるようになっています。

ねこさんの方法もそうですが、この方法はフレームスキップする処理です。
ガクガクするのは、補正した時の処理状態は画面に反映しないため、
見ている側は動作が重くなったとき、表示が飛び飛びに見えます。

(ちなみに、上のコードは for 文を外せばフレームスキップしないようになっています)


764ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,609ポイント)   Date: 2009/06/12(金) 20:04   No:34959     
Title: Re:FPSが60にならない・・    
>>初回はDxLib_Initの後とかに「term = GetNowCount();」としておくのが良いかと思います

これの事でしょうか?
なんだか初回がうまく動くようになるだけで
それ以降の処理には影響しないように見えますが・・

御津凪さんの方法も良さそうですが
ゲームプログラミングの館の構造でかなり作ってしまったので
導入は無理そうです・・


130ポイント を手に入れた。

Name: ねこ  ..入門者(3,606ポイント)   Date: 2009/06/12(金) 20:40   No:34962     
Title: Re:FPSが60にならない・・    
VC2008 Expressならデバッグの方法は分かるでしょうか?
Debugでビルドしてブレイクしたい行でF9を押すと処理を中断します。

FPSが60未満の場合、というIF文を作ってその中でブレイクをかけます。
その時の平均値、または別途毎回のterm値を保持する配列等を作って置いて
60FPS未満の時の配列の中身を調べます。
1回じゃ分からないなら何回か実行して不自然なSleepがかかっている個所を探します。
これで原因を追究して下さい。

提示した以外に処理があるならなおのこと環境は違いますし、自身で解決するしかないと思います。



154ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,636ポイント)   Date: 2009/06/12(金) 20:59   No:34965 解決!     
Title: Re:FPSが60にならない・・    
う〜んそのようですね

とりあえずこの問題は保留にしておきます

どうもありがとうございました


27ポイント を手に入れた。



Name: チルチル  ..プログラマー(25,170ポイント)   Date: 2009/06/12(金) 18:35   No:34947       
Title: #define 疑似命令には識別子が必要?    
マクロを練習しているんですが

「/」「*」「"」「`」「@」とかを使うと

#define 疑似命令には識別子が必要

と言うエラーが出ます

識別子として使えない物の境界はどの辺りにあるんでしょうか?

あと上に挙げた文字はなぜ使えないようにできているのでしょうか?

環境はDXライブラリです


113ポイント を落としてしまった。


Name: ねこ  ..入門者(3,452ポイント)   Date: 2009/06/12(金) 19:09   No:34952     
Title: Re:#define 疑似命令には識別子が必要?    
詳細を知ってるわけじゃないですが基本的に変数に使える文字とほぼ同様で良いんじゃないかと。
前スレにもあったような使い方は極めて異端かと思います。

後、スレ関係ない点を2つ

質問終わったら解決済付けてくれませんか?
60FPSのとか、解決済みでもないのに次質問する等は
自分は他の事やって回答者に丸投げしてるのと同義でかなり失礼ですよ。

DXライブラリはロードするスタティックライブラリです。環境じゃないです。


129ポイント を手に入れた。

Name: atom  ..ぴよぴよ(20ポイント)   Date: 2009/06/12(金) 19:42   No:34955     
Title: Re:#define 疑似命令には識別子が必要?    
御自分で調べたり試したりという選択肢は無いのでしょうか?

あとあなた以外にもいますが、掲示板はあなたの愚痴、日記を書くところでは無いので、
意味のない書き込みでスレッドを上げるのはどうかと思います。


20ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,479ポイント)   Date: 2009/06/12(金) 19:57   No:34958 解決!     
Title: Re:#define 疑似命令には識別子が必要?    
>>変数に使える文字とほぼ同様で良いんじゃないかと

あ〜なるほど、わかりやすい境界ですね

>>前スレにもあったような使い方は極めて異端かと思います

まあ異端だとは思いますが
コードの構造が全体的に異端なのと
一般的な使い方を知らないので
異端だと言う事になかなか気づかない傾向が・・
すいません・・

>>後、スレ関係ない点を2つ

確かに良くないですね・・

一応言い訳をすると

>>質問終わったら解決済付けてくれませんか?

と言うより返信を待っている間にトビが流れてしまうんです・・

>>60FPSのとか、解決済みでもないのに次質問する等は

あまり多くのトビを立てたくはないのですが
一度に多くの問題が発生してしまって・・

>>自分は他の事やって回答者に丸投げしてるのと同義でかなり失礼ですよ

丸投げしていると言う自覚はありませんが実質丸投げなのかな・・
微力ながら自分でもやってます・・

>>DXライブラリはロードするスタティックライブラリです。環境じゃないです

そうなんですか、気を付けます・・

>>愚痴、日記を書くところでは無いので

愚痴、日記みたいな事は書いてないと思いますけど・・

>>意味のない書き込みでスレッドを上げるのはどうかと思います

う〜ん意味のない書き込みをしているつもりはないんですが・・


168ポイント を手に入れた。



Name: BigTree  ..ぴよぴよ(185ポイント)   Date: 2009/06/11(木) 16:09   No:34852       
Title: 実行時のエラー    
初めまして、BigTreeと申します。
早速質問ですが、龍神録プログラミングの館のプロジェクト「50章-改-」を開いてビルドして、Debugフォルダ内のRyujin.exeを開いた所
右上に「ReadError」と表示され、「50章-改-」の内容(文字は反映されています)が反映されませんでした。
コンパイラからデバッグすると普通にプログラムが実行されちゃんと動かせます。
この症状を改善する方法を教えてください。よろしくお願いします。

使用OS:windowsXP
コンパイラ:Microsoft Visual C++ 2008 Express Edition

送付の画像は実行時のウィンドウです。


185ポイント を手に入れた。


Name: ねこ  ..かけだし(2,378ポイント)   Date: 2009/06/11(木) 16:27   No:34853     
Title: Re:実行時のエラー    
RyuJin.exeをRyuJin.slnと同じフォルダにコピーして持ってくればいけると思いますよ。

VCからデバッグ実行した時と直接起動した時ではカレントディレクトリにあたる位置が異なるため起こる問題です。


51ポイント を手に入れた。

Name: ひよこ  ..プログラマー(39,551ポイント)   Date: 2009/06/11(木) 16:29   No:34854     
Title: Re:実行時のエラー    
Debugフォルダとプロジェクトのフォルダの場所は違うので
いつもの場所にある画像やcsvファイルは読み込めません
Ryujin.exeをプロジェクトのフォルダに移動するとReadErrorは起きないと思います。


81ポイント を手に入れた。

Name: BigTree  ..ぴよぴよ(211ポイント)   Date: 2009/06/12(金) 19:42   No:34956 解決!     
Title: Re:実行時のエラー    
ありがとうございます!
お陰様で解決しました。
今後ともよろしくお願いします。


26ポイント を手に入れた。



Name: ujm  ..ぴよぴよ(474ポイント)   Date: 2009/06/12(金) 19:28   No:34953       
Title: コンパイルした際のエラーについて    
こんにちは
龍神録プログラミングの館を参考にさせて
もらってるのですがキャラクターを描画させる
際のコンパイルでエラーまたは警告が出てしまいます。
エラーまたは警告の内容は
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
1>main.obj : error LNK2001: 外部シンボル ""int __cdecl GetHitKeyStateAll_2(void)" (?GetHitKeyStateAll_2@@YAHXZ)" は未解決です。
1>main.obj : error LNK2001: 外部シンボル ""int __cdecl CheckStateKey(unsigned char)" (?CheckStateKey@@YAHE@Z)" は未解決です。
1>C:\Documents and Settings\XXXXXXX\デスクトップ\project\project\1章\Debug\RyuJin.exe : fatal error LNK1120: 外部参照 2 が未解決です。
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
というものでした。
何度も出るのでサイトに載っていたソースをコピペしてみましたが
出てしまいました。
どうしたら解決できるか教えていただけないでしょうか。


158ポイント を手に入れた。




Name: チルチル  ..プログラマー(25,145ポイント)   Date: 2009/06/11(木) 22:54   No:34884       
Title: Z値の限界の変更?    
3DポリゴンではZの値が一定以下、一定以上になると表示されなくなりますが
この限界を変更する方法はないでしょうか?

環境はDXライブラリです


20ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(372,611ポイント)   Date: 2009/06/12(金) 00:37   No:34895     
Title: Re:Z値の限界の変更?    

>3DポリゴンではZの値が一定以下、一定以上になると表示されなくなりますが

 Z値がなんの座標系におけるどういう値なのか、その一定値とは何なのかはよくわからないので
回答が難しいのですが、単純にカメラの後や横にポリゴンがあるとか、或いはカメラに
あまりにも近すぎる・遠すぎるとかで表示されなくなっているだけではないのですか?


141ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(62,851ポイント)   Date: 2009/06/12(金) 01:00   No:34896     
Title: Re:Z値の限界の変更?    

射影変換時のZ設定のことではないですかね?

MATRIX mat;

CreatePerspectiveFovMatrix(& mat, 角度(ラジアン値で), Zの手前の値, Zの奥の値);
SetTransformToProjection(&mat);

これで設定することが可能なはずです。
 


140ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(62,893ポイント)   Date: 2009/06/12(金) 11:04   No:34906     
Title: Re:Z値の限界の変更?    
>角度(ラジアン値で)
視野角(ラジアン値)


2倍のポイントを手に入れた! 42ポイント を手に入れた。

Name: TRIS-GRAM [URL]  ..ぴよぴよ(49ポイント)   Date: 2009/06/12(金) 12:41   No:34913     
Title: Re:Z値の限界の変更?    
NEARクリップ面とFARクリップ面でしたら変更不可能です。
DxLib.hに値がありますが、変更を有効にするにはライブラリをコンパイルし直す必要があります。


49ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(63,507ポイント)   Date: 2009/06/12(金) 12:53   No:34914     
Title: Re:Z値の限界の変更?    
>NEARクリップ面とFARクリップ面でしたら変更不可能です。
>DxLib.hに値がありますが、変更を有効にするにはライブラリをコンパイルし直す必要があります。
定数のことではなくAPIで変更できると記述したのですが・・・。

CreatePerspectiveFovMatrix(& mat, 視野角(ラジアン値), NEARクリップ面, FARクリップ面);

と書いたほうが良かったですか?


2倍のポイントを手に入れた! 204ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,203ポイント)   Date: 2009/06/12(金) 17:41   No:34935     
Title: Re:Z値の限界の変更?    
カメラはよくわからないのですが

見た感じカメラに近すぎる、遠すぎるが原因のようです

何とかならないでしょうか?


49ポイント を手に入れた。

Name: 御津凪 [URL]  ..比類無きプログラマー(93,993ポイント)   Date: 2009/06/12(金) 17:51   No:34941     
Title: Re:Z値の限界の変更?    
GPGA さんの方法で、
CreatePerspectiveFovMatrix(&mat, DEFAULT_FOV, 0.0f, 5000.0f);


のような感じで出来ませんか?


69ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,283ポイント)   Date: 2009/06/12(金) 18:20   No:34945     
Title: Re:Z値の限界の変更?    
奥の方はうまく行きましたが手前がうまく行きません
手前の値をいじると表示がおかしくなります・・


2倍のポイントを手に入れた! 80ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(63,418ポイント)   Date: 2009/06/12(金) 18:32   No:34946     
Title: Re:Z値の限界の変更?    
NEARクリップ面の値は0より大きい値である必要があります。
0以下の値だとおかしくなります。

DXLib.hでは0.0fになっていますが、内部では0.0fより大きい値をセットしています。
普通は0.1fくらいにします。


89ポイント を落としてしまった。

Name: チルチル  ..プログラマー(25,215ポイント)   Date: 2009/06/12(金) 18:39   No:34949     
Title: Re:Z値の限界の変更?    
あ〜0以上じゃないとダメなんですか・・
でも0.0fにすると処理を書く前より奥で消えてしまうんですが・・


45ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(63,471ポイント)   Date: 2009/06/12(金) 18:41   No:34950     
Title: Re:Z値の限界の変更?    
文章をよく読んでください。
0より大きい値じゃないとダメです。0以上ではありません。


53ポイント を手に入れた。

Name: チルチル  ..プログラマー(25,311ポイント)   Date: 2009/06/12(金) 18:52   No:34951     
Title: Re:Z値の限界の変更?    
よく見たらそうですね、すいません・・

しかし0.0001fを入れてみましたが
あまり変わらないですね・・
初期値が0に近いんだから当然かもしれませんが
もう少し手前で消えてくれないかな・・


96ポイント を手に入れた。



Name: R2D2  ..ぴよぴよ(101ポイント)   Date: 2009/06/10(水) 19:24   No:34820       
Title: 画像ファイル作成について    
現在、友達と数人でシューティングゲームを作っている最中なのですが
タイトル画面のボタン・文字画像(Game Start等)の作り方がわかりません。

また、LoadDivGraph関数で読み込むための分割された画像を作成するソフト等が
あれば是非教えていただきたいです。

よろしくお願いいたします。




101ポイント を手に入れた。


Name: チルチル  ..上級者(24,695ポイント)   Date: 2009/06/10(水) 20:48   No:34822     
Title: Re:画像ファイル作成について    
LoadDivGraph関数で読み込む画像を作るのに特別なソフトは必要無いと思いますけど・・
あらかじめ分割されている必要もないし・・
でもペイントだとやりくいのでPictBearを使ってみてはどうですか?
あとタイトルならDrawRectGraph関数の方がいいかもしれませんね


82ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(369,638ポイント)   Date: 2009/06/10(水) 22:46   No:34831     
Title: Re:画像ファイル作成について    

>タイトル画面のボタン・文字画像(Game Start等)の作り方

 検索はしてみましたか?



>LoadDivGraph関数で読み込むための分割された画像を作成するソフト等

 ひとまず別々に絵を描いておいて

Vector:分割結合「あ」 (WindowsNT/2000/XP/Vista / 画像&サウンド) - ソフトの詳細
ttp://www.vector.co.jp/soft/winnt/art/se346589.html

のようなツールで1つに統合するといいのかも。

 そうでなければ、画像編集ソフトで1つ1つ並べて作るしかないです。


270ポイント を手に入れた。

Name: R2D2  ..ぴよぴよ(243ポイント)   Date: 2009/06/11(木) 15:41   No:34847     
Title: Re:画像ファイル作成について    
チルチル様
 ありがとうございます。
 DrawRectGraph関数ですか。今、はじめて知りました・・・。
 まだまだ、初心者ですが試行錯誤をしながらゲーム制作を続けていきたいと思います。 

Justy様
 検索はしてみましたが、検索の仕方が悪いのか出てきませんでした。。。
 自分ではワードアートで作る方法しか思いつかないのですが
 一人一人によって作り方は違うのでしょうが、皆さんはタイトル画面の
 ボタン画像(画像の文字)を作るソフトはどのようなものをお使いなのでしょうか?


142ポイント を手に入れた。

Name: ねこ  ..かけだし(2,414ポイント)   Date: 2009/06/11(木) 16:34   No:34855     
Title: Re:画像ファイル作成について    
僕はFLASH CS4とかPhotoShopで描いてます。

最初の頃ならButton Makerというサイトを利用すると簡単に見栄えの良いボタンが作れるかもしれません。
サイトは検索してください。


36ポイント を手に入れた。

Name: チルチル  ..上級者(24,825ポイント)   Date: 2009/06/11(木) 18:10   No:34858     
Title: Re:画像ファイル作成について    
まあ画像処理ソフトには文字を入力する機能が大体付いていると思うので
背景を透過して文字を入力した後にぼかしをかければそれっぽくなるんじゃないでしょうか


68ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,027,733ポイント)   Date: 2009/06/11(木) 21:44   No:34868     
Title: Re:画像ファイル作成について    
確かにキャラの周りとかが透明である画像をいくつも同じファイルに書くのは難しいですよね。
私はキャラを並べるときは、画像の両端に印をつけてから並べて、くっつけてから消しています。
とりあえず画像編集ソフトを使った事がないのなら、
GIMPを使ってみるか、シェアでいいならフォトショップあたりをいじってみてはどうでしょうか。


81ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(371,967ポイント)   Date: 2009/06/11(木) 22:32   No:34882     
Title: Re:画像ファイル作成について    

>検索はしてみましたが、検索の仕方が悪いのか出てきませんでした

 タイトル画像は「ロゴ」と置き換えると見つかりやすいですね。
 
 併せて、使っているソフトの名前も一緒につけておくと、
目的にあったものが見つかりやすいです。


Photoshop ロゴ - Google 検索
ttp://www.google.com/search?hl=ja&num=50&q=Photoshop+%E3%83%AD%E3%82%B4&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja

Photoshop ボタン 作成 - Google 検索
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Photoshop+%E3%83%9C%E3%82%BF%E3%83%B3+%E4%BD%9C%E6%88%90&num=50

gimp ボタン 作成 - Google 検索
ttp://www.google.com/search?hl=ja&num=50&q=gimp+%E3%83%9C%E3%82%BF%E3%83%B3+%E4%BD%9C%E6%88%90&lr=lang_ja

 とか。

 とはいえ、書いてあることそのままを使ってゲームの素材として使えるものになるとは
限らないので、そのあたりは腕を磨くしかないですけど。




>タイトル画面のボタン画像(画像の文字)を作るソフトはどのようなものをお使いなのでしょうか

 タイトル画面を作っている、というわけではないですが、
私は専ら画像作成は CS3系の Photoshop Extendedと Illustratorを
使っています。

 なんだかんだ言ってデファクトスタンダードなので、情報を集めるのに苦労しないのが
いいですね(w


416ポイント を手に入れた。

Name: R2D2  ..ぴよぴよ(312ポイント)   Date: 2009/06/12(金) 17:39   No:34934 解決!     
Title: Re:画像ファイル作成について    
皆様ありがとうございます。
初めてのゲーム制作なのでまだまだわからないことはたくさんありますが、
少しずつがんばっていきたいと思います。

本当にありがとうございました!


69ポイント を手に入れた。



Name: 研修生  ..初心者(8,781ポイント)   Date: 2009/06/12(金) 11:30   No:34909       
Title: 辞書順    
C言語の記号における辞書順ってどういうことでしょうか?
よく参考書などの目次などで記号の項目がありずらっと並んでいますがこれは辞書順なのでしょうか?
ネットで調べたら辞書順=アルファベット順・五十音順とか書いてあるんですが・・
統一性がなくてさっぱりわかりません。

,(カンマ)
\n(改行)
"(ダブルクォーテーション)
\(円記号)
EOF

これを辞書順に並べるとどうなりますか?
くだらない質問で申し訳ないですが教えて下さい。


217ポイント を手に入れた。


Name: やそ  ..比類無きプログラマー(90,255ポイント)   Date: 2009/06/12(金) 12:00   No:34910     
Title: Re:辞書順    
ttp://www9.plala.or.jp/sgwr-t/c_sub/ascii.html

EOFは「EOF 値」とかで調べられませんか?

ネットでいうところの辞書順はまさしく本の辞書をイメージしているから
五十音順ということになるんじゃないのかな?


94ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(104,363ポイント)   Date: 2009/06/12(金) 12:34   No:34911     
Title: Re:辞書順    
辞書順というのは辞書の編集者が勝手に決めることです。
今回の場合も、設計者が定義すればよいのではないでしょうか?

ちなみにC++の場合、辞書順の比較にはstd::lexicographical_compareを使います。
その場合でも、具体的な比較方法はプログラマが指定しなければなりません(デフォルトでは値を単純比較するだけです)。


141ポイント を手に入れた。

Name: 研修生  ..初心者(8,805ポイント)   Date: 2009/06/12(金) 13:10   No:34915     
Title: Re:辞書順    
一種のコンピューター用語だから調べるべきとか言われたのですが
どこか載ってるサイトないかな


24ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(104,517ポイント)   Date: 2009/06/12(金) 13:40   No:34916     
Title: Re:辞書順    
> 一種のコンピューター用語だから調べるべきとか言われたのですが

コンピュータ用語というよりは数学の用語です。
http://ja.wikipedia.org/wiki/%E8%BE%9E%E6%9B%B8%E5%BC%8F%E9%A0%86%E5%BA%8F

一般的な意味での辞書順にするには、文字だけを比べたのでは不十分です。
単語にならなければ漢字の読みが確定しませんので。
日本語の辞書は、文字の順序ではなく、読みの順序になっていることに要注意です。
(五十音順の話が出ているので、当然日本語を想定しているのですよね?)


154ポイント を手に入れた。

Name: 研修生  ..初心者(8,886ポイント)   Date: 2009/06/12(金) 13:46   No:34917     
Title: Re:辞書順    
五十音順というのはネットでちらっとみたらそうかいてあっただけです。
なんかASCUコード表を参考にとかもネットにあったのでバラバラですね・・

とりあえず
\n
"
,
\
EOFを辞書順に並べ替えた順番が知りたいだけなんだけどさっぱりわからなく・・


81ポイント を手に入れた。

Name: やそ  ..比類無きプログラマー(90,326ポイント)   Date: 2009/06/12(金) 14:53   No:34918     
Title: Re:辞書順    
EOFならstdio.hの中身を覗いてみるといいんじゃないかな??

,(カンマ)
\n(改行)
"(ダブルクォーテーション)
\(円記号)

はASCIIコード表にあったよね?
改行は別の表記になっていると思いますが。



71ポイント を手に入れた。

Name: 研修生  ..初心者(8,974ポイント)   Date: 2009/06/12(金) 15:43   No:34920     
Title: Re:辞書順    
何か数学用語でもあるとのことだからたかぎさんの意見のことかな。
直積集合とかいわれてもさっぱりわからないんですが並び替えたらどうなるんですかね。。


2倍のポイントを手に入れた! 88ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(104,693ポイント)   Date: 2009/06/12(金) 16:00   No:34923     
Title: Re:辞書順    
> 並び替えたらどうなるんですかね。。

どうなるかは辞書式順序の定義次第で決まります。
ですので、まずは仕様を定めることが重要なのです。

もっと具体的にいうと、'あ'と'A'ではどちらが先かといわれても、それを決めるのは仕様を作る人が決めることなのです。記号についても同じことがいえます。


2倍のポイントを手に入れた! 176ポイント を手に入れた。

Name: toyo  ..プログラマー(36,023ポイント)   Date: 2009/06/12(金) 16:15   No:34925     
Title: Re:辞書順    
辞書順の決まりはないのでいくら調べてもわかりませんよ
とりあえず記号の辞書順はASCIIコード順とすると自分で決めたらいいのではないでしょうか


71ポイント を手に入れた。

Name: 研修生  ..中級者(9,046ポイント)   Date: 2009/06/12(金) 16:20   No:34927     
Title: Re:辞書順    
なんか変な考えだったようです。
<

Flag cの値 dの値 動作
TRUE " " ○
FALSE " "   △
TRUE ,  " □
FALSE , " X


この表を
Flagの値の集合、cの値の集合、dの値の集合で直積集合の順序の並び替えをしたらどうなりますか?


72ポイント を手に入れた。

Name: 研修生  ..中級者(9,054ポイント)   Date: 2009/06/12(金) 16:54   No:34929 解決!     
Title: Re:辞書順    
すいません。自己解決しました。ありがとうございました。

8ポイント を手に入れた。



Name: MiMi  ..ぴよぴよ(106ポイント)   Date: 2009/06/11(木) 22:31   No:34881       
Title: JavaでいうとこのJavadocとJunit    
C++での開発(特にWindowsネイティブ)において,
JavaでいうとこのJavadocとJunitには,
どのようなものが使われているのでしょうか?

また,Visual Studioでは,
ドキュメント作成とテストは,
どのように行うのが一般的なのでしょうか?

教えてください.


106ポイント を手に入れた。


Name: 御津凪 [URL]  ..比類無きプログラマー(93,031ポイント)   Date: 2009/06/11(木) 23:43   No:34888     
Title: Re:JavaでいうとこのJavadocとJunit    
私の場合、 Javadoc にあたるものは Doxygen (オープンソース)を使用しています。

あと、 Junit に対応するものとしては CppUnit があります。

Visual Studio にはテストプロジェクトを作れるバージョンがあり(詳しくは調べていません)、
それであれば Visual Studio 上でテストを組めます。


123ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(104,222ポイント)   Date: 2009/06/11(木) 23:46   No:34889     
Title: Re:JavaでいうとこのJavadocとJunit    
Javadocに相当するのは、Doxygenですね。
(ちなみにDoxygenの翻訳サイトは私が管理しています)

ユニットテストについてですが、私はBoost.Testを使っています。


109ポイント を手に入れた。

Name: MiMi  ..ぴよぴよ(284ポイント)   Date: 2009/06/12(金) 00:33   No:34893 解決!     
Title: Re:JavaでいうとこのJavadocとJunit    
お二方とも,すばやい回答をありがとうございました.

Doxygen,CppUnit,Boost.Testですね.
ぜひ,調べてみたいと思います.

>(ちなみにDoxygenの翻訳サイトは私が管理しています)
何かのメーリングリストに入っていたり,
実際に開発をしているという人には会ったことがありますが,
翻訳サイト(いうなれば日本の公式サイト!?)を管理しているという人は初めてです.
頭が下がります.これからも頑張ってください.


178ポイント を手に入れた。



Name: 錦鯉  ..ぴよぴよ(129ポイント)   Date: 2009/06/11(木) 21:49   No:34871       
Title: VisualStudioの設定    
プログラミングの質問ではないです。

開発環境VisualStudio2005について
C++とかでソースを書くときとJ#で書くときでユーザ補助の仕方が違います。

// C++
if(〜〜){

}

// J#
if(〜〜)
{

}

かってにこうなってしまうのですけど
直すのが面倒くさいです。
どうにかこの機能を切ることができないでしょうか?


129ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(371,551ポイント)   Date: 2009/06/11(木) 22:01   No:34874     
Title: Re:VisualStudioの設定    
 オプションのテキストエディタの中の各言語の改行関連の設定で変更できたような気がします。
 そのあたりの設定を見直してみてください。


57ポイント を手に入れた。

Name: 錦鯉  ..ぴよぴよ(288ポイント)   Date: 2009/06/11(木) 22:16   No:34878     
Title: Re:VisualStudioの設定    
justy様

できました><
ありがとうございました。

できればもう一つ質問なのですが
j#だけ
{}や()の隣にカーソルがあると選択?されている見たくなるのですが
これが見にくいので
C+のときみたいに太字にするとかできないのでしょうか?

オプションをいじってはみたのですが
ちょっとわかりませんでした・・


159ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(372,205ポイント)   Date: 2009/06/11(木) 23:04   No:34885     
Title: Re:VisualStudioの設定    

>C+のときみたいに太字にするとかできないのでしょうか?

自動一致機能
ttp://msdn.microsoft.com/ja-jp/library/be94e8aw(VS.80).aspx

によると、J#/C#は同様に背景色が変化するタイプのようなので、
VS2008のC#の方でオプションの環境の「フォントおよび色」の中で「括弧の一致(四角形)」を
変更して試したところ、背景色は変えられましたが、太字設定は有効になりませんでした。

 2008ではこういう状況ですが、うちは 2005も J#もインストールしていないので
2005 J#でどうなのかは確認ができません。

 なので、ダメもとで試してみてください。


238ポイント を手に入れた。

Name: 錦鯉  ..ぴよぴよ(293ポイント)   Date: 2009/06/11(木) 23:55   No:34892     
Title: Re:VisualStudioの設定    
できました。
助かります><


5ポイント を手に入れた。



Name: pic  ..かけだし(1,107ポイント)   Date: 2009/06/09(火) 21:05   No:34750       
Title: 音楽との同期について    
こんばんわ。二つほど質問させてもらいます。C言語初心者です
現在[龍神録プログラミングの館]の[番外2章〜音楽とコラボさせた弾幕〜]を見て、作ってみようかと思っているのですが、まず

//曲のリズムデータ
int tm12[1000]={
459,509,559,605,653,703,751,798,848,893,941
//↓以下略...
};

この、[//曲のリズムデータ]はどのようにして決めているのでしょうか。

もう一つは、

if(abs(gettm-nowflame)>100){
StopSoundMem(sound_handle);
SetSoundCurrentTime( (int)(t*16.666666) , sound_handle);
PlaySoundMem(sound_handle, DX_PLAYTYPE_BACK,FALSE);
printfDx("調整後%d\n",GetSoundCurrentTime(sound_handle));
}

これは、音楽がずれたときにSetSoundCurrentTimeで再生位置を修正して、PlaySoundMemで再生しているってことなんでしょうか?




54ポイント を手に入れた。


Name: yu  ..プログラマー(29,919ポイント)   Date: 2009/06/09(火) 22:24   No:34756     
Title: Re:音楽との同期について    
>この、[//曲のリズムデータ]はどのようにして決めているのでしょうか。

以前ですが管理人様は
キーボードを叩いたら(キーを押したら)その時のカウンタを保存する簡単なツールを
作ってリズムデータを作成したと言っていたような気がします。

ですので音楽を流し、フレームをカウントして
叩いたときに数値を記憶し外部ファイルに保存するツールを作ってみてはいかがでしょうか。
修正機能とかあればもっと簡単に作成できそうですね。


>これは、音楽がずれたときにSetSoundCurrentTimeで再生位置を修正して、
>PlaySoundMemで再生しているってことなんでしょうか?

合っていると思います。


236ポイント を手に入れた。

Name: pic  ..かけだし(1,068ポイント)   Date: 2009/06/10(水) 21:35   No:34826 解決!     
Title: Re:音楽との同期について    
こんばんわ。遅くなりすいません。
返信ありがとうございます。
頑張って作ってみます。


39ポイント を落としてしまった。

Name: Dixq (管理人) [URL]  ..ウィザード(1,027,550ポイント)   Date: 2009/06/10(水) 21:44   No:34827     
Title: Re:音楽との同期について    
この辺の記事ですかね?

ニコニコ弾幕
http://www.play21.jp/board/formz.cgi?action=res&resno=21427&page=&lognum=68&id=dixq&rln=21527

神曲同調弾幕
http://www.play21.jp/board/formz.cgi?action=res&resno=21525&page=&lognum=68&id=dixq&rln=21561

楽譜データを作ったり波形からなんとか出せないか考えましたが、途中でテンポが変わったりすると難しくなるし、それならキーボードでトントン叩いてリズム出したほうが楽だなということになりました。
まぁどっちみちホントめんどくさいんですけどね^^;
テンポもわからないタダの時間の数字が羅列されたところでホントわからないし・・。
何か視覚的に表現出来るツールを作った方がいいかもしれませんね。
音ゲー作成ツールなんか参考にしてみるといいかもしれません。


2倍のポイントを手に入れた! 532ポイント を手に入れた。

Name: pic  ..かけだし(1,189ポイント)   Date: 2009/06/10(水) 22:52   No:34833 解決!     
Title: Re:音楽との同期について    
管理人さん。返信ありがとうございます。
すいません。探し方が下手でした。記事ありがとうございます。

yuさんが教えてくれたので、ツール作ってみました。
自分リズム感が悪いので、データ取ってみても、微妙にずれてたりして苦戦していますが;;


お二人とも返信ありがとうございました。


121ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(369,767ポイント)   Date: 2009/06/10(水) 23:32   No:34835     
Title: Re:音楽との同期について    

>自分リズム感が悪いので、データ取ってみても、微妙にずれてたりして苦戦していますが

 そのままのテンポで記録をとるのは難しい曲もあるでしょうから、
曲の再生速度を落として、記録をとるといいですよ。


129ポイント を手に入れた。

Name: pic  ..かけだし(1,304ポイント)   Date: 2009/06/11(木) 18:39   No:34862 解決!     
Title: Re:音楽との同期について    
Justyさん。返信ありがとうございます。

なるほど。気づきませんでした;;
ひたすら聞いて、覚えて、データとって平均だしてました。。
丁度、テンポが早い曲のデータを取ろうとしてたとこなので、助かりました。
ありがとうございます。


115ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,027,652ポイント)   Date: 2009/06/11(木) 21:40   No:34867     
Title: Re:音楽との同期について    
>>そのままのテンポで記録をとるのは難しい曲もあるでしょうから曲の再生速度を落として、記録をとるといいですよ。

いや〜さすがですねJustyさん。
技術のみならず発想力も豊かでいらっしゃるとは。
私が作る時もそうすればよかったですorz

>>探し方が下手でした。記事ありがとうございます。

いえいえ、うちは過去ログが探しにくいですからね・・。
う〜ん、もっと便利に出来ないかなぁ・・。


102ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(372,470ポイント)   Date: 2009/06/11(木) 23:25   No:34887     
Title: Re:音楽との同期について    

>私が作る時もそうすればよかったです

 昔、音楽ではなかったのですが、効果音を入れるタイミングを計るのに
似たようなことをしたことがあったんですよ。

 各ボタンにそれぞれ効果音を割り当て、再生速度を実行中に可変にできるようにして
適宜速度を調整しながらタイミングよく押して記録をとってました。

 その時はタイミングを間違えることはそうなかったのですが、押すボタンを間違えて
別の音がなって鳴ってしまい、何度かやり直したのを覚えています……。


265ポイント を手に入れた。



Name: ken  ..かけだし(2,106ポイント)   Date: 2009/06/11(木) 18:18   No:34859       
Title: アクションゲームにおける、マップチップとキャラクターとの当たり判定について    
はじめまして。

今僕はアクションゲームの、マップチップとキャラクターとの判定の仕方で悩んでいます。
下記コードのようにして、現在キャラクターがいる座標からどこのマップチップの位置にいるか判定し、そこに障害物があれば移動できないようにする、というふうに作ってみたつもりなのですが…。
キャラクターが上または下の障害物に当たった場合に、その場でキャラクターが停止せず右方向に移動してしまいます。
もし、原因わかりましたらご教示お願いします。
(Cに関する知識は、基礎Cを読んだ程度です。


#include "DxLib.h"

#define MAP_SIZE 32 // マップチップ一つのドットサイズ

#define MAP_WIDTH 20 // マップの幅
#define MAP_HEIGHT 15 // マップの縦長さ

// マップのデータ
int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] =
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
} ;


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了

SetDrawScreen( DX_SCREEN_BACK ) ;

int i , j, imageMap, imageChara, charax, charay;
char Key[256];

charax = 320;
charay = 240;
imageMap = LoadGraph( "map.png" ) ;
imageChara = LoadGraph( "robo.png") ;


while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
{

// マップを描く
for( i = 0 ; i < MAP_HEIGHT ; i ++ )
{
for( j = 0 ; j < MAP_WIDTH ; j ++ )
{
if( MapData[ i ][ j ] == 0 ) //0のとき障害物描画
{
DrawGraph( j * MAP_SIZE , i * MAP_SIZE , imageMap , FALSE ) ;
}
}
}
//------------------

//キャラクターの描画
DrawGraph(charax , charay , imageChara , TRUE ) ;
if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら
charax--; //左に移動
if( Key[ KEY_INPUT_RIGHT] == 1 ) //右ボタンが押されたら
charax++; //右に移動
if( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
charay--; //上に移動
if( Key[ KEY_INPUT_DOWN] == 1 ) //下ボタンが押されたら
charay++; //下に移動

//マップチップとの判定
//左
if(MapData[(int)charay / 32][(int)charax / 32] == 0
|| MapData[(int)(charay + 32 - 1) / 32][(int)charax / 32] == 0)
{
charax = ((int)charax / 32 + 1) * 32;
}
//右
if(MapData[(int)charay / 32][(int)(charax + 32 - 1) / 32] == 0
|| MapData[(int)(charay + 32 - 1) / 32][(int)(charax + 32 - 1) / 32] == 0)
{
charax = ((int)charax / 32 + 1) * 32 - 32;
}
// 上
if(MapData[(int)charay / 32][(int)charax / 32] == 0
|| MapData[(int)charay / 32][(int)(charax + 32 - 1) / 32] == 0)
{
charay = ((int)charay / 32 + 1) * 32;
}
// 下
if(MapData[(int)(charay + 32 - 1) / 32][(int)charax / 32] == 0
|| MapData[(int)(charay + 32 - 1) / 32][(int)(charax + 32 - 1) / 32] == 0)
{
charay = ((int)(charay + 32 + 1) / 32) * 32 - 32;
}




DrawFormatString(100,100, GetColor( 255 , 255 , 255 ) , "%d" , charax);
DrawFormatString(100,120, GetColor( 255 , 255 , 255 ) , "%d" , charay);

ScreenFlip();

}


DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}


1,730ポイント を手に入れた。


Name: conio [URL]  ..上級者(19,785ポイント)   Date: 2009/06/11(木) 21:31   No:34866     
Title: Re:アクションゲームにおける、マップチップとキャラクターとの当たり判定について    
--------------------------------------------------------------------------------------------

//上記省略//

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了

SetDrawScreen( DX_SCREEN_BACK ) ;

int i , j, imageMap, imageChara, charax, charay;
char Key[256];

charax = 32 * 4;
charay = 32 * 3;
int SPEED = 2;
imageMap = LoadGraph( "map.png" ) ;
imageChara = LoadGraph( "robo.png") ;


while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
{
// マップを描く
for( i = 0 ; i < MAP_HEIGHT ; i ++ )
{
for( j = 0 ; j < MAP_WIDTH ; j ++ )
{
if( MapData[ i ][ j ] == 0 ) //0のとき障害物描画
{
DrawGraph( j * MAP_SIZE , i * MAP_SIZE , imageMap , FALSE ) ;
}
}
}
//------------------
//キャラクターの描画
//------------------
DrawGraph(charax , charay , imageChara , TRUE ) ;

if( Key[ KEY_INPUT_LEFT ] == 1 ){ //左ボタンが押されたら
if(MapData[charay/32][(charax - SPEED)/32] != 0&& MapData[(charay + 31)/32][(charax - SPEED)/32] != 0)
charax -= SPEED; //左に移動
}
if( Key[ KEY_INPUT_RIGHT] == 1 ){ //右ボタンが押されたら
if(MapData[charay/32][(charax + 31 + SPEED)/32] != 0 && MapData[(charay + 31)/32][(charax + 31 + SPEED)/32] != 0)
charax += SPEED; //右に移動
}
if( Key[ KEY_INPUT_UP ] == 1 ){ //上ボタンが押されたら
if(MapData[(charay - SPEED)/32][charax/32] != 0 && MapData[(charay - SPEED)/32][(charax + 31)/32] != 0)
charay -= SPEED; //上に移動
}
if( Key[ KEY_INPUT_DOWN] == 1 ){ //下ボタンが押されたら
if(MapData[(charay + 31 + SPEED)/32][charax/32] != 0 && MapData[(charay + 31 + SPEED)/32][(charax + 31)/32] != 0)
charay += SPEED; //下に移動
}

DrawFormatString(100,100, GetColor( 255 , 255 , 255 ) , "%d" , charax);
DrawFormatString(100,120, GetColor( 255 , 255 , 255 ) , "%d" , charay);
ScreenFlip();
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
--------------------------------------------------------------------------------------------
こんな感じでどうでしょうか。(多分、動くと思います。)
移動する前に、「移動後のMapDataが0でないか」を調べてます。

ただ、当たり判定は単純なものにしてあるので、
初期値を32で割り切れない場所に指定したり、 移動速度を32で割り切れない速度にすると
中途半端なところで止まってしまいます。


1,259ポイント を手に入れた。

Name: pooka [URL]  ..初心者(5,139ポイント)   Date: 2009/06/11(木) 21:58   No:34873     
Title: Re:アクションゲームにおける、マップチップとキャラクターとの当たり判定について    
conioさんのプログラムですが、何箇所か全角のスペースがあるようなので、
コピーして使用するときは注意したほうがいいですね。


31ポイント を手に入れた。

Name: conio [URL]  ..上級者(19,685ポイント)   Date: 2009/06/11(木) 22:04   No:34876     
Title: Re:アクションゲームにおける、マップチップとキャラクターとの当たり判定について    
プレビューした時の微調整で、全角を使っていたようです。
今後は気をつけるようにします(_ _)


33ポイント を手に入れた。

Name: ken  ..かけだし(2,093ポイント)   Date: 2009/06/11(木) 22:30   No:34880 解決!     
Title: Re:アクションゲームにおける、マップチップとキャラクターとの当たり判定について    
pookaさん、coniaさん、レスありがとうございます。
まさに理想のソースコードです。
しばらくソースを見て理解を深めてみようと思います。

本当にありがとうございました<(_ _)>


13ポイント を落としてしまった。



Name: ニギハヤミコハクヌシ  ..ぴよぴよ(297ポイント)   Date: 2009/06/11(木) 15:48   No:34848       
Title: C言語宿題    
1〜256文字の文字列Sを入力し,それから単語Wを1つ入力する.文字列Sが単語Wを含むとき,その単語の前にあるスペースに*を挿入するプログラムを作成しなさい.但し,検索する単語Wが文字列Sの先頭にあるときは,S全体を1文字ずつずらし先頭に*を付ける.

課題実行においては以下の点に注意すること.

* プログラム名は「search」とすること.
* 入力する文字列に2つ以上の連続したスペースはないとする.
* 入力する文字列の最初と最後はスペースでないとする.

[b1009xxx@C*LPC* ~/pp8]% ./search
 I found a red apple and green apples yesterday.
 apple
 I found a red*apple and green apples yesterday.
[b1009xxx@C*LPC* ~/pp8]% ./search
 pa pa pa pa pa Papagena!
 pa
 *pa*pa*pa*pa*pa Papagena!

みたいな感じで表示されるように作らなきゃいけないみたいなんですけど、
何度やっても答えにたどり着きません。どなたか回答をお願いします。


297ポイント を手に入れた。


Name: non  ..熟練のプログラマー(47,670ポイント)   Date: 2009/06/11(木) 16:01   No:34849     
Title: Re:C言語宿題    
>何度やっても答えにたどり着きません。

丸投げ禁止。
できているところまで、転載するのがルールです。

質問
>単語の前にあるスペースに*を挿入する
と書いてありますが、1文字目以外は挿入ではなく、置換されています。
置換でいいですね。

単語の定義はどうなっていますか?
スペースで区切られている以外になにがありますか。
例えば、ピリオドとかカンマとかアポストロフィとかはどう処理しますか。
また、大文字と小文字は区別しますか。




124ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,027,760ポイント)   Date: 2009/06/11(木) 21:46   No:34869     
Title: Re:C言語宿題    
投稿の仕方がわからない時は、規約のテンプレートをご利用下さい。

27ポイント を手に入れた。



Name: はなたれパンダ  ..ぴよぴよ(522ポイント)   Date: 2009/06/11(木) 18:08   No:34857       
Title: プロトタイプ宣言のない関数って    
”警告 W8065 adv.c 59: プロトタイプ宣言のない関数 'bamen0' の呼び出し(関数 main )”
”警告 W8065 adv.c 62: プロトタイプ宣言のない関数 'bamen1' の呼び出し(関数 main )”
”Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland”
”Error: 外部シンボル '_bamen0' が未解決(E:\BORLAND\新しいフォルダ\ADV.OBJ が参照)”
”Error: 外部シンボル '_bamen1' が未解決(E:\BORLAND\新しいフォルダ\ADV.OBJ が参照)”

というエラーが出て実行できないのですがどうすればいいのか教えてください。


235ポイント を手に入れた。


Name: Mist  ..熟練のプログラマー(64,335ポイント)   Date: 2009/06/11(木) 18:19   No:34860     
Title: Re:プロトタイプ宣言のない関数って    
関数のほうで名前が間違ってます。

bamenn0 → bamen0
bamenn1 → bamen1

引数がない関数を宣言する場合はvoidを書いてください。
int bamen0(void); /*場面0*/
int bamen1(void); /*場面1*/


86ポイント を手に入れた。

Name: はなたれパンダ  ..ぴよぴよ(534ポイント)   Date: 2009/06/11(木) 20:40   No:34865     
Title: Re:プロトタイプ宣言のない関数って    
ど-もありがとうございました。

12ポイント を手に入れた。



Name: kazuoni [URL]  ..比類無きプログラマー(90,044ポイント)   Date: 2009/06/10(水) 12:59   No:34785       
Title: 基底クラスで子クラス参照    
お邪魔します。

今回は基底クラスで
子クラス参照ができるのかどうなのか教えていただきたいです。

例を挙げてみます
基底(親)クラス・・・mammal(哺にゅう類)
派生クラス・・・human,dog,house...
哺にゅう類は自分の親と同種から生まれ、同種の子を持ちます。
この時、mammalクラスに年齢、性別などの情報の他に
親、子が誰なのかを持たせたいです。(親は父母一人ずつ、子は複数)

自分が考えたのは
例えば、humanインスタンス生成時に
両親が誰なのかを参照できるようにし、
子供が生まれたときに子供が誰か参照できるようにする機能
を基底クラスmammalで管理したいのです。
(親がいる、子が生まれるのはmammal共通の為)
基底クラスで、子クラスを
テンプレートみたいにうまく扱えないでしょうか?
そもそもこの管理は不可能でしょうか?
(自分的には、直観的に分かりやすかったのですが・・・。)

また、みなさんなら、親と子の関係を(基底)クラスで管理するとすれば、
どのように実装しますか?(どのように実装できますか?)

よろしくお願いします。


445ポイント を手に入れた。


Name: dic  ..上級者(22,864ポイント)   Date: 2009/06/10(水) 16:10   No:34792     
Title: Re:基底クラスで子クラス参照    
意図がつかめてなかったらすいません


#include <iostream>
using namespace std;

class Animal
{
char name[80];
public:
void Show();
void SetName( char *c );
};

class Human : public Animal
{
Animal *animal;
public:
void SetParent( Animal *a );
void CallParent();
};

void Animal::SetName( char *c )
{
strcpy( name, c );
}
void Human::SetParent( Animal *a )
{
animal = a;
}
void Human::CallParent()
{
cout << "親は";
animal->Show();
}

void Animal::Show()
{
cout << name << endl;
}


void main()
{
Animal *a = new Animal;
Human *h = new Human;

a->SetName( "イルカ" );
h->SetName( "たろべぇ" );

a->Show();
h->Show();

h->SetParent( a );
h->CallParent();

delete a;
delete h;
}



こんなのではどうでしょうか?


416ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(90,229ポイント)   Date: 2009/06/10(水) 16:49   No:34794     
Title: Re:基底クラスで子クラス参照    
dicさん、ご回答有難う御座います。

折角解答してくださったのですが、
これでなら確かに実装できるのですが、
親、子供を持つのは哺にゅう類共通ですので、
これを基底クラスで管理したいのです。

っと書きながら自分でつっこみます。。
基底クラスで親、子供のクラスをテンプレートみたいに持てたとしても
基底クラスでは、その内容が分からないので、どうも扱えそうに無いですね。

...やはり、
人間は人間の親と人間の子を持つ
犬は犬の親と、犬の子を持つ
...

としたほうが自然ですかね?^^;


185ポイント を手に入れた。

Name: sizuma [URL]  ..ぴよぴよ(797ポイント)   Date: 2009/06/10(水) 17:38   No:34798     
Title: Re:基底クラスで子クラス参照    
僕は基底クラスに利用するメソッドを定義しておく方がいいと思います。

僕は勉強不足でOOPのデザインパターンを理解できてるわけではないんですが。
のなかで、templateMethoodパターンっていうのがあるんですが(検索すればヒットすると思います


この場合だと、哺にゅう類っていう特に処理を持たないクラスを窓口にして、実際に作った派生クラスのインスタンスにアクセスするように実装するのが拡張性が高くなると思います。


class Animal{
virtual void showParent(){
}
}


class Human : Animal{
override void showParent(){
Console.WriteLine("人間の子と親を持つ");
   }
}


//アクセスするのはanimal型の変数から

Animal human = new Human();
human.showParent();


C++勉強中なんで、C#です・・・


5ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(62,143ポイント)   Date: 2009/06/10(水) 17:54   No:34803     
Title: Re:基底クラスで子クラス参照    

>人間は人間の親と人間の子を持つ
>犬は犬の親と、犬の子を持つ

これでいいんじゃないですかね。

class Human {
Human* father_; // 父
Human* mother_; // 母
std::vector<Human*> child_; // 子

public :
// 両親のセット
void SetParents(Human* father, Human* mother) {
father_ = father;
mother_ = mother;
}

// 子のセット
void SetChild(Human* child) {
child_.push_back(child);
}
};
 


155ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(90,381ポイント)   Date: 2009/06/10(水) 18:06   No:34806     
Title: Re:基底クラスで子クラス参照    
sizumaさん、GPGAさん、ご回答有難う御座います。

自分はGPGAさんとほぼ(っというか、humanは全く同じ)様に実装しておりました。
ただ、これだと、dogクラスが新たに出てきても、またfather,mother,children
をメンバに持たせなければいけないので、
なんとか基底クラスで上手くまとめられないかと試行錯誤していたのです。。


152ポイント を手に入れた。

Name: dic  ..上級者(23,410ポイント)   Date: 2009/06/10(水) 18:30   No:34811     
Title: Re:基底クラスで子クラス参照    
Decorator パターンではどうでしょうかね?

#include <iostream>
using namespace std;

class Animal
{
char name[80];
public:
void Show();
void SetName( char *c );
};

class Decorator : public Animal
{
protected:
Animal *_father;
Animal *_mother;
public:
void SetParent( Animal *fathre, Animal *mother );
void CallParent();
};

class Human : public Decorator
{
public:
// Human 専用メンバ関数
};

class Dog : public Decorator
{
public:
// Dog 専用メンバ関数
};


void Decorator::SetParent( Animal *father, Animal *mother )
{
_father = father;
_mother = mother;
}
void Decorator::CallParent()
{
cout << "父親は";
_father->Show();

cout << "母親は";
_mother->Show();
}

void Animal::SetName( char *c )
{
strcpy( name, c );
}

void Animal::Show()
{
cout << name << endl;
}


void main()
{
Animal *f = new Animal;
Animal *m = new Animal;
Human *h = new Human;

f->SetName( "たろべぇの父" );
m->SetName( "たろべぇの母" );
h->SetName( "たろべぇ" );

f->Show();
m->Show();
h->Show();

h->SetParent( f, m );
h->CallParent();

delete f;
delete m;
delete h;
}



546ポイント を手に入れた。

Name: sizuma [URL]  ..かけだし(1,059ポイント)   Date: 2009/06/10(水) 18:32   No:34813     
Title: Re:基底クラスで子クラス参照    
僕だったらこうですかねー
(大部分をGPGAさんからコピペしました。vectorがどう管理してるかとか分からずのコメントなんでなんか勘違いしてたらごめんなさい)

class Animal {

Animal* father_; // 父

Animal* mother_; // 母

std::vector<Animal*> child_; // 子



public :

// セット

Animal(Animal* father, Animal* mother,Animal* child) {

father_ = father;

mother_ = mother;

child_.push_back(child)

}
};

class Human : Animal{
Human(Animal* father, Animal* mother,Animal* child){
base();
}
};

というのはダメでしょうか?
フィールドが全部同じならこれで大丈夫かな?
ていうかC++わからなすぎるんでちょっと勉強してきますーー


26ポイント を手に入れた。

Name: dic  ..上級者(23,837ポイント)   Date: 2009/06/10(水) 19:13   No:34818     
Title: Re:基底クラスで子クラス参照    
基底クラスで管理でき なおかつ拡張できそうでしたら

#include <iostream>
using namespace std;


class Human;
class Dog;

class Animal
{
Human *_h;
Dog *_d;
public:
Animal();
Animal( Human *h );
Animal( Dog *d );
void Show();
};
class Human
{
public:
Human();
void Show();
};
class Dog
{
public:
Dog();
void Show();
};

Animal::Animal( Human *h ){
_h = h;
_d = 0;
}
Animal::Animal( Dog *d ){
_h = 0;
_d = d;
}
Animal::Animal(){ _h = 0; _d = 0; }
Human::Human(){}
Dog::Dog(){}


void Animal::Show() {
cout << "Animal" << endl;
if( _h ) _h->Show();
if( _d ) _d->Show();
}
void Human::Show() { cout << "オラァ人間だぁ!" << endl; }
void Dog::Show() { cout << "ワンワン" << endl; }


void main()
{
Human *h = new Human;

Animal *a = new Animal(h);

a->Show();


delete h;
delete a;

Dog *d = new Dog;
a = new Animal(d);

a->Show();

delete d;
delete a;
}

なんていかがでしょう?


427ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(90,600ポイント)   Date: 2009/06/10(水) 19:19   No:34819     
Title: Re:基底クラスで子クラス参照    
dicさん、sizumaさん、ご回答有難う御座います。

sizumaさんのコードの
親クラスを基底クラスメンバに持たせれば
自分の本当のやりたいことが上手来そうな気がしてきました。


>dicさん
本当に何度もソースを組んでいただいて有難う御座います。
今回は基底クラスからの派生クラスを用いることが自分の中で前堤となってました。。
説明不足ですみませんでした。
挙げていただいたコードは必ず一度自分の手で組み、実行、検討させていただきます!
本当に有難う御座います。


今、ちょっと出来ないですが、
帰ったら皆さんのコードを参考に組んでみたいと思います。


219ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(90,808ポイント)   Date: 2009/06/10(水) 22:23   No:34828     
Title: Re:基底クラスで子クラス参照    
組む前に早速疑問が・・・。

親・子にアクセスするときは、sizumaさんのコードでは、
常に基底クラスでアクセスするわけで、
年齢とか等、情報は得ることはできますが、
親・子のデータを子クラスというクラスからは操作できないですよね?

例えば、
第一世代のインスタンスを生成し、第二世代が誕生したとします。
第二世代は常に基底クラスとしてアクセスするので、人間としてアクセスするのではなく、
哺にゅう類でアクセスすることになります。
すると、人間クラスのみで操作したいものは、
第二世代以降使用できないということになる気がするのですが・・・
どうでしょうか?


208ポイント を手に入れた。

Name: sizuma [URL]  ..かけだし(1,359ポイント)   Date: 2009/06/11(木) 00:19   No:34836     
Title: Re:基底クラスで子クラス参照    
もしかしたら、僕が質問の意味をちゃんと理解できていないかもしれないんですが(汗
派生クラス(人間)で新たな機能をもつメソッドを定義した場合、利用できなくなる、ということでしょうか?

それならば、あまり美しくない気がしますが(笑)キャストすれば、アクセスできるようになります。

例えば
Animal human = new human();
として宣言して、humanに新しいメソッドcodeWrite()を定義したら、このままではアクセスできませんが、

Human super_human = (Human)human;
//基底クラスの変数(もちろんインスタンスは派生クラス) ⇔ 派生クラスの変数

として、Human型にキャストすることができます。
逆に親クラス型の変数にはキャストが必要ないんですけどね。

でも直感的に分かりやすく書けそうにないんで、クラス設計を他のアプローチに変えたほうがいいかもしれませんね。


と、ここまで書いて、C++だったらポインタとかでなんか違うのかな?とか思ってきました・・・


300ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(369,910ポイント)   Date: 2009/06/11(木) 00:28   No:34837     
Title: Re:基底クラスで子クラス参照    
「犬や猫、人間といったクラス全てをインスタンスの保持を基底クラスの
ポインタ(あるいは参照)で行うので「哺ニュウ類クラス」という基底でまとめる必要があり、
親子関係を結ぶメソッドも同じ基底クラスで実装しておきたい」

のか
「ただ単に共通するメソッドなので、とりあえず基底でまとめたい」

のどちらでしょう?

 後者であれば、「哺ニュウ類クラス」に親子関係を入れる必要はないように思いますが。



143ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(62,306ポイント)   Date: 2009/06/11(木) 00:29   No:34838     
Title: Re:基底クラスで子クラス参照    
以下のやり方でできないことも無い。


template <class T>
class Mammal {
T* father_;
T* mother_;
std::vector<T*> child_;
};


// パターン1
// 人間クラス
class Human : public Mammal<Human> {

};

// パターン2
// 犬クラス
class Dog {

};

int main()
{
// パターン1
Human human;

// パターン2
Mammal<Dog> dog;
}

 


163ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(371,494ポイント)   Date: 2009/06/11(木) 00:45   No:34839     
Title: Re:基底クラスで子クラス参照    

>後者であれば、「哺ニュウ類クラス」に親子関係を入れる必要はないように思いますが。

 例えば、こんなかんじだと、Relationshipクラスは他にも使い回せます。


#include <memory>
#include <list>
#include <algorithm>

// 哺ニュウ類
class Mammal
{
public:
    enum Gender { Gender_Male, Gender_Female };

    Mammal(Gender gender) : m_Gender(gender) {}
    virtual ~Mammal() {}

    Gender GetGender() const { return m_Gender; }

private:

    Mammal::Gender m_Gender;
};

// 関係性
template <class T>
class Relationship
{
public:
    typedef T Type;
    Relationship() : m_Father(), m_Mother() {}
    Relationship(Type *father, Type *mother) : m_Father(father), m_Mother(mother) {}
    
    virtual ~Relationship()
    {
        // 適切にリストから破棄する
    }

    Type * CreateChild(Type *parent, Mammal::Gender gender)
    {
        Type * this_ = static_cast<Type*>(this);
        if(!parent || this_->GetGender() == parent->GetGender()) return 0;
        
        Type *child;
        if(parent->GetGender() == Mammal::Gender_Male)
            child = new Type(gender, parent, static_cast<Type*>(this));
        else
            child = new Type(gender, this_, parent);
        m_Childrens.push_back(child);
        parent->m_Childrens.push_back(child);
        return child;
    }

    // 親子関係を取得するメソッドを追加しておく

private:

    typedef std::list<Type*> ListType;

    Type* m_Father;
    Type* m_Mother;
    std::list<Type*> m_Childrens;
};

// 人
class Human
    : public Mammal, public Relationship<Human>
{
public:
    typedef Relationship<Human> RelationshipType;
    Human(Gender gender) : Mammal(gender) {}
    Human(Gender gender, Human *father, Human *mother)
    : Mammal(gender), RelationshipType( father, mother) {}
};


// 男女が
Human humanM1(Human::Gender_Male), humanF1(Human::Gender_Female);

// 3人の子を産む
std::auto_ptr<Human> humanChild1a(humanM1.CreateChild(&humanF1, Human::Gender_Male));
std::auto_ptr<Human> humanChild1b(humanM1.CreateChild(&humanF1, Human::Gender_Female));
std::auto_ptr<Human> humanChild1c(humanM1.CreateChild(&humanF1, Human::Gender_Female));

// 長女が二人の産む
Human humanChildM2(Human::Gender_Male);
std::auto_ptr<Human> humanChild2a(humanChild1b->CreateChild(&humanChildM2, Human::Gender_Male));
std::auto_ptr<Human> humanChild2b(humanChild1b->CreateChild(&humanChildM2, Human::Gender_Female));

// 長女の長男が叔母と!
std::auto_ptr<Human> humanChild3a(humanChild2a->CreateChild(humanChild1c.get(), Human::Gender_Female));

// 長女の長男が同性と!(生成されない)
Human humanChildM3(Human::Gender_Male);
std::auto_ptr<Human> humanChild3b(humanChild2a->CreateChild(&humanChildM3, Human::Gender_Female));




※ std::auto_ptrを使って居ますが、普通に Human*でもかまいません。


1,584ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(91,319ポイント)   Date: 2009/06/11(木) 09:34   No:34842     
Title: Re:基底クラスで子クラス参照    
sizumaさん、Justyさん、GPGAさんご回答ありがとうございます。

>sizumaさん
もしキャストが使えるとしても、なんだか気持ちがよくはないですね^^;
拡張している感じが。。

またもや、GPGAさんの回答が自分のコードが自分の書いていたのとドンピシャ
だったんですが、
Humanのコンストラクタで、Mammalのコンストラクタを呼ぼうとすると、
どうしても未解決の外部シンボルとでてしまうので、
これはできないんじゃ。。っと思って、今回のスレを立てるに至りました。
こんな感じにしています。

Mammalコンストラクタ
template <class Temp>
Mammal<Temp>::Mammal(Temp* Father , Temp* Mother ,int Gene , bool 性別 , int Born_max , int Age , int Child_num , bool Ismarry)
: father(Father) ,
mother(Mother) ,
......
{}

Humanコンストラクタ
Human::Human(Human* father , Human* mother ,int Gene , bool 性別 , int Age , int Child_num , bool Ismarry)
: Mammal(father , mother , Gene , 性別 , born_max ,Age , Child_num , Ismarry)
{}


HumanでMammalのコンストラクタを呼ぶ時、Mammal<Human>(...)とか試しましたが、
結局は同じく、未定義エラーが出てしまいます。
・・・できないこともないということは、無理やりすぎますかね?^^;


>Justyさん
恐らく後者かと思います。。
なるほど。親子関係を新たなクラスにし、基底クラスに持たせるのですね。
確かにこちらのほうが、クラスの機能がはっきりしています。
上に挙げた自分のコードは、Mammalですべてをくくってしまってるので、
管理がしづらくなる可能性がある気がしてきました。


#今回NGワードが多くて、何回も投稿できませんでしたがでました・・・。


511ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(62,711ポイント)   Date: 2009/06/11(木) 10:57   No:34844     
Title: Re:基底クラスで子クラス参照    

テンプレートを使う場合、メソッドの定義はクラス定義内に書く必要があります。


正しい書き方
-------------------------------------------------------------------------------------------
☆mammal.h
template <class T>
class Mammal {
T* father_;
T* mother_;
std::vector<T*> child_;

protected :
Mammal(T* father, T* mother) : father_(father), mother_(mother) {}
};
-------------------------------------------------------------------------------------------

間違っている書き方
-------------------------------------------------------------------------------------------
☆mammal.h
template <class T>
class Mammal {
T* father_;
T* mother_;
std::vector<T*> child_;

protected :
Mammal(T* father, T* mother);
};

☆mammal.cpp
template <class T>
Mammal<T>::Mammal(T* father, T* mother) : father_(father), mother_(mother) {}
-------------------------------------------------------------------------------------------

 


405ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(91,804ポイント)   Date: 2009/06/11(木) 16:44   No:34856 解決!     
Title: Re:基底クラスで子クラス参照    
GPGAさん、ご回答ありがとうございます。
また一つ勉強になりました。
テンプレートはほとんど使ったことがなかったもので。。

いろいろ実装してみて、最終的に解放のところで行き詰まりました。。
解放では、今までの生まれてきた子供たちです。
自分の考えでは、
ある一番最初に生まれた人から再帰的に子供を見ていって、
ある子どもが、子どもを持たないなら、両親の子どものvector
から外していき、解放っと考えたのですが、
自分の組み方では、親も子も、テンプレート型なので、
基底クラスでの解放は不可能になり、結局は、新たな解放クラス(基底はMammal)
を作り、子クラスに持たせる必要性が出てきました。
→生成、破棄を同じクラスにする
→結局はJustyさんの親子クラスですね^^;

これで、基底クラスですべて管理することになんのメリットもなくなりました^^;
おとなしくJustyさんのおっしゃるように、親子関係をクラスにします。

これで自分の作る方針ができました。
ここで、今回の質問は解決とさせていただきます。
ご回答していただいた皆さん、本当にどうもありがとうございました。

もっといろいろ継承等を実際に組んで、経験しないといけないなと実感しました。

本当にありがとうございました。
次回もよろしくお願いします。


485ポイント を手に入れた。



Name: 零崎虚識  ..ぴよぴよ(541ポイント)   Date: 2009/06/10(水) 17:54   No:34804       
Title: ショット強化について。    
自機ショットを数段階で強化したいんですが何処をどうすればいいでしょうか?
龍神録プログラミングの館を参考に作ってます。
よろしくお願いします。


38ポイント を手に入れた。


Name: b  ..ぴよぴよ(593ポイント)   Date: 2009/06/10(水) 18:01   No:34805     
Title: Re:ショット強化について。    
まず、自分で手順を考えることをお勧めします。

21ポイント を手に入れた。

Name: 零崎虚識  ..ぴよぴよ(520ポイント)   Date: 2009/06/10(水) 18:19   No:34808     
Title: Re:ショット強化について。    
えと、自分で試行したうえでの質問なんですが…
あと時間も押してますのでorz


21ポイント を落としてしまった。

Name: yu  ..プログラマー(30,276ポイント)   Date: 2009/06/10(水) 18:27   No:34809     
Title: Re:ショット強化について。    
cshot.cppで

cshot[k].power

の値が決定されていますよ
この値がそのまま敵のHPを減らします


>自分で試行したうえでの質問なんですが…

具体的に何を試行したのでしょうか?


69ポイント を手に入れた。

Name: 零崎虚識  ..ぴよぴよ(568ポイント)   Date: 2009/06/10(水) 18:33   No:34814     
Title: Re:ショット強化について。    
それと思しき数値を変更したりですね。
パワーx以上でy列ショット、パワーz、を目指してたんですが…orz


48ポイント を手に入れた。

Name: yu  ..プログラマー(30,520ポイント)   Date: 2009/06/10(水) 18:42   No:34816     
Title: Re:ショット強化について。    
自分は龍神録を弄ってC言語を覚えたので
そういうことは大事だと思いますよw
(参考書を見たほうがよっぽど早く、正確に覚えられると思いますが・・・)


龍神録では cshot.cpp の cshot0num[2] が列の数ですね。
あくまで一例ですが
この配列の最大要素数を任意の数にして


int n;

if( ch.power >= 0 && ch.power < 100 )
  n = 0;
else if( ch.power < 200 )
n = 1;
else
.
.
.
//(百単位で変更するなら n = ch.power/100 で大丈夫かもしれません)

cshot0num[n] の数だけ弾を撃つようにすれば良いのではないでしょうか


119ポイント を手に入れた。

Name: 零崎虚識  ..ぴよぴよ(623ポイント)   Date: 2009/06/11(木) 16:08   No:34851 解決!     
Title: Re:ショット強化について。    
( ̄□ ̄;)!!!
大変わかりやすいです!ありがとうございます!


24ポイント を手に入れた。



Name: uzu  ..ぴよぴよ(159ポイント)   Date: 2009/06/10(水) 16:15   No:34793       
Title: strtokについて    
毎度お世話になってます。
宜しくお願いします。

strtokについてですが、

例えばある文字列を「,」コンマで分割したい場合、

char *tp;
char *moji;
tp = strtok(moji, ",");

文字列にコンマがある場合、1回目の分割では先頭アドレスが返ってきますが、
1個もコンマが無い場合はNULLが返ってくるんですよね??


90ポイント を手に入れた。


Name: non  ..熟練のプログラマー(47,546ポイント)   Date: 2009/06/10(水) 18:28   No:34810     
Title: Re:strtokについて    
>1個もコンマが無い場合はNULLが返ってくるんですよね??

msdn
http://msdn.microsoft.com/ja-jp/library/2c8d19sb(VS.80).aspx
の説明に

strToken で見つかった次のトークンへのポインタを返します。それ以上トークンが見つからない
場合は、NULL を返します。呼び出されるたびに、見つかった区切り文字を null 文字に置換して
strToken を変更します。

とありますので、先頭のアドレスが返ってくると思われます。



174ポイント を手に入れた。

Name: 初級者  ..初心者(6,196ポイント)   Date: 2009/06/10(水) 18:56   No:34817     
Title: Re:strtokについて    
>質問者さん

まずは自分でテストプログラムを書いてみる、
という発想が出てこないのでしょうか?


27ポイント を手に入れた。

Name: uzu  ..ぴよぴよ(282ポイント)   Date: 2009/06/11(木) 08:44   No:34841 解決!     
Title: Re:strtokについて    
>non様
>初級者様
返信ありがとうございます。
テストプログラムを書いて、
strtokを実行して返ってくるアドレスを確認しましたが、
@区切り文字が1つもない文字列 →先頭アドレス
A区切り文字のみの文字列 →NULL
という結果になりました。
私は@の場合もNULLが返ってくるのではと思っていたので、
みなさまに確認したかったのです。
ありがとうございました。


123ポイント を手に入れた。



Name: チルチル  ..上級者(21,625ポイント)   Date: 2009/06/03(水) 23:06   No:34474       
Title: 3Dポリゴンが表示されない    
3Dポリゴンを描画しようと思ったのですが
なぜか表示されません・・
一応コードを添付しますが
本家リファレンスをコピーしただけです
何か原因に心当たりはないでしょうか?
#include "DxLib.h"


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int GrHandle ;
float Z, ZAdd ;
VERTEX_3D Vertex[6] ; // ポリゴン2枚なので、頂点は6個

// DXライブラリ初期化処理
if( DxLib_Init() == -1 )
return -1 ; // エラーが起きたら直ちに終了

// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;

// テクスチャの読み込み
GrHandle = LoadGraph( "TestTex1.jpg" ) ;

// Z値の初期化
Z = 0.0F ;

// Z値の加算値を初期化(最初は近づける)
ZAdd = -1.0F ;

// 何かキーが押されるまでループ
while( CheckHitKeyAll() == 0 )
{
// メッセージ処理
if( ProcessMessage() != 0 ) break ;

// 画面の初期化
ClearDrawScreen() ;

// Z値の処理
Z += ZAdd ;

// 一定のラインを越えていたら進行方向を反転する
if( Z < -300.0F || Z > 300.0F ) ZAdd = -ZAdd ;

// 頂点情報のセット
{
// 画面の中央に幅・高さ100で描画
Vertex[0].pos.x = 320.0F - 50.0F ; Vertex[0].pos.y = 240.0F + 50.0F ; Vertex[0].pos.z = Z ;
Vertex[0].u = 0.0F ;
Vertex[0].v = 0.0F ;

Vertex[1].pos.x = 320.0F + 50.0F ; Vertex[1].pos.y = 240.0F + 50.0F ; Vertex[1].pos.z = Z ;
Vertex[1].u = 1.0F ;
Vertex[1].v = 0.0F ;

Vertex[2].pos.x = 320.0F - 50.0F ; Vertex[2].pos.y = 240.0F - 50.0F ; Vertex[2].pos.z = Z ;
Vertex[2].u = 0.0F ;
Vertex[2].v = 1.0F ;

Vertex[3].pos.x = 320.0F + 50.0F ; Vertex[3].pos.y = 240.0F - 50.0F ; Vertex[3].pos.z = Z ;
Vertex[3].u = 1.0F ;
Vertex[3].v = 1.0F ;

Vertex[4].pos.x = 320.0F - 50.0F ; Vertex[4].pos.y = 240.0F - 50.0F ; Vertex[4].pos.z = Z ;
Vertex[4].u = 0.0F ;
Vertex[4].v = 1.0F ;

Vertex[5].pos.x = 320.0F + 50.0F ; Vertex[5].pos.y = 240.0F + 50.0F ; Vertex[5].pos.z = Z ;
Vertex[5].u = 1.0F ;
Vertex[5].v = 0.0F ;

// 輝度は全要素100%
Vertex[0].r = Vertex[0].g = Vertex[0].b = 255 ;
Vertex[1].r = Vertex[1].g = Vertex[1].b = 255 ;
Vertex[2].r = Vertex[2].g = Vertex[2].b = 255 ;
Vertex[3].r = Vertex[3].g = Vertex[3].b = 255 ;
Vertex[4].r = Vertex[4].g = Vertex[4].b = 255 ;
Vertex[5].r = Vertex[5].g = Vertex[5].b = 255 ;

// a も最大値
Vertex[0].a = 255 ;
Vertex[1].a = 255 ;
Vertex[2].a = 255 ;
Vertex[3].a = 255 ;
Vertex[4].a = 255 ;
Vertex[5].a = 255 ;
}

// ポリゴンを透過色無しで2枚描画
DrawPolygon3D( Vertex, 2, GrHandle, FALSE ) ;

// 裏画面の内容を表画面に反映
ScreenFlip() ;
}

// DXライブラリ使用の終了処理
DxLib_End() ;

// ソフトの終了
return 0 ;
}


1,002ポイント を手に入れた。


Name: yu  ..プログラマー(28,248ポイント)   Date: 2009/06/03(水) 23:39   No:34475     
Title: Re:3Dポリゴンが表示されない    
TestTex1.jpg は正常にロードできていますか?

2倍のポイントを手に入れた! 32ポイント を手に入れた。

Name: チルチル  ..上級者(21,630ポイント)   Date: 2009/06/03(水) 23:40   No:34476     
Title: Re:3Dポリゴンが表示されない    
できているようです

5ポイント を手に入れた。

Name: yu  ..プログラマー(28,287ポイント)   Date: 2009/06/03(水) 23:48   No:34477     
Title: Re:3Dポリゴンが表示されない    
過去にこのプログラムを試しましたが正常に動作しました。

すみませんが、何が原因なのか私ではわかりません;


39ポイント を手に入れた。

Name: yu  ..プログラマー(28,503ポイント)   Date: 2009/06/04(木) 00:14   No:34478     
Title: Re:3Dポリゴンが表示されない    
今試したところ
自分も同じようなことが起こりました。

真中に消失点があると描画されない?・・・

以下の3行をDrawPolygon3D関数の上に書くと自分の方では描画されました。


MATRIX Matrix;
CreateViewportMatrix(&Matrix , 320.0F , 240.0F + 1.0F , 640.0F , 480.0F);
SetTransformToViewport(&Matrix);




2倍のポイントを手に入れた! 216ポイント を手に入れた。

Name: チルチル  ..上級者(21,731ポイント)   Date: 2009/06/04(木) 00:49   No:34479     
Title: Re:3Dポリゴンが表示されない    
DrawPolygon3D関数の上に処理を加えてみると確かに描画されました

どうもありがとうございます

しかし、描画されない→真中に消失点があるから?
という考えに行きつくのがすごいですね・・

とりあえず問題は解決しましたが
原因がよくわからないので
もう少し解決にはしないでおきます


101ポイント を手に入れた。

Name: yu  ..プログラマー(28,556ポイント)   Date: 2009/06/04(木) 18:23   No:34504     
Title: Re:3Dポリゴンが表示されない    
以前のバージョンでは指定しなくても描画されたので
最新のDXライブラリの問題でしょうか・・・

あちらの掲示板で質問されたほうがよろしいかもしれません;


53ポイント を手に入れた。

Name: チルチル  ..上級者(21,878ポイント)   Date: 2009/06/05(金) 20:23   No:34544     
Title: Re:3Dポリゴンが表示されない    
そういえば最近ヘッダファイルを更新したような・・

ちなみにあちらってどこですか?

あとSetUseZBufferFlagを有効にすると描画されなくなるんですが・・


51ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(63,105ポイント)   Date: 2009/06/05(金) 20:47   No:34546     
Title: Re:3Dポリゴンが表示されない    
あちら

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?


16ポイント を手に入れた。

Name: チルチル  ..上級者(21,953ポイント)   Date: 2009/06/05(金) 21:13   No:34548     
Title: Re:3Dポリゴンが表示されない    
あ〜なるほど本家の掲示板ですか
下の方に小さく表示されていたので気付きませんでした・・

あとx,y,zの値を大きくしすぎると正常に描画されないという問題も発生しました・・


75ポイント を手に入れた。

Name: yu  ..プログラマー(29,142ポイント)   Date: 2009/06/06(土) 14:58   No:34594     
Title: Re:3Dポリゴンが表示されない    
>ちなみにあちらってどこですか?

Mist様が貼ってくださったURL先です。
って、もう質問されてましたねw


>あとSetUseZBufferFlagを有効にすると描画されなくなるんですが・・

ZBufferは使ったことが無いです。orz

ですが、確かにUseFlagとWriteFlagを立てても描画されませんでした。
しかし比較モードを変更すると描画されました。
描画はされました。
が、どの比較モードにしてもZ値が小さい値(カメラとの距離)ものを先に描画させることができませんでした;

使い方が悪いのでしょうか。orz
それとDrawFormatStringで描画していた文字が消えたりしました;


>あとx,y,zの値を大きくしすぎると正常に描画されないという問題も発生しました・・

これはかなり前から気になっていました。一部が欠けるように描画されるんですよね・・・
大きくなりすぎる前に描画しないようにすれば対処できました。


2倍のポイントを手に入れた! 516ポイント を手に入れた。

Name: チルチル  ..上級者(23,141ポイント)   Date: 2009/06/06(土) 20:17   No:34607     
Title: Re:3Dポリゴンが表示されない    
う〜んこれは厄介な問題ですね・・

18ポイント を手に入れた。

Name: チルチル  ..上級者(23,363ポイント)   Date: 2009/06/08(月) 16:20   No:34695     
Title: Re:3Dポリゴンが表示されない    
やっぱり大きく描画しないといけない時もありますからね・・
何か方法はないものか・・


37ポイント を落としてしまった。

Name: チルチル  ..上級者(24,170ポイント)   Date: 2009/06/09(火) 22:53   No:34763     
Title: Re:3Dポリゴンが表示されない    
本家の掲示板でヘッダファイルを最新の物に更新したらポリゴンが表示されなくなりました・・

24ポイント を手に入れた。

Name: yu  ..プログラマー(29,985ポイント)   Date: 2009/06/09(火) 22:57   No:34765     
Title: Re:3Dポリゴンが表示されない    
私の場合だけかもしれませんが、
消失点が中心にあっても描画されるようになりました。

ですが、ZBufferの問題は変わりません・・・


66ポイント を手に入れた。

Name: チルチル  ..上級者(24,249ポイント)   Date: 2009/06/09(火) 23:17   No:34769     
Title: Re:3Dポリゴンが表示されない    
って事はやはりヘッダファイルのバージョンが関係していると言う事か・・?
最新版にするとX,Y,Zの最大値が低くなって今まで表示されていたポリゴンが表示されないようです・・


79ポイント を手に入れた。

Name: チルチル  ..上級者(24,613ポイント)   Date: 2009/06/10(水) 17:48   No:34801     
Title: Re:3Dポリゴンが表示されない    
小さいポリゴンに分ければ描画できるのですが・・

21ポイント を手に入れた。

Name: チルチル  ..上級者(24,757ポイント)   Date: 2009/06/10(水) 22:38   No:34830     
Title: Re:3Dポリゴンが表示されない    
そもそもポリゴンの大きさと消失距離は関係するんでしょうか・・

24ポイント を手に入れた。



Name: Huzzy  ..入門者(3,895ポイント)   Date: 2009/06/09(火) 10:34   No:34719       
Title: 落ち物パズルのCPU対戦について    
C++にて落ち物パズルゲーム(所謂『ぷよ○よ』やコナ○の『ぱず○だま』)
を作成しようと考えており、只今、参考資料を探しています。

↓参考までに
ぷよ○よ
ttp://www.youtube.com/watch?v=cC_zk7yg3Sg
ぱず○だま
ttp://www.youtube.com/watch?v=SCReidLHsLM&feature=related

そこで1つ質問なのですが、
落ち物パズルによくあるCPU対戦について詳しく解説
してあるサイト(もしくは本)は有るのでしょうか?

幾ら落ちゲー関連のサイトを探してもパズルゲーム特有の
CPU対戦について情報が一向に見つかりません;

何となくでは有りますが、CPUにはAIが必要なのではと思い
ゲーム関連のAI冊子を見てみましたが、落ちゲーについては
余り書かれていない?のでお手上げ状態です;;

何かサイト・本・落ちゲー関連の知識等何でもかまいませんので
情報をお持ちの方が居られましたら是非ともアドバイスの程、
よろしくお願いします。


325ポイント を手に入れた。


Name: バグ  ..ハッカー(159,438ポイント)   Date: 2009/06/09(火) 11:08   No:34721     
Title: Re:落ち物パズルのCPU対戦について    
ぷよぷよ、アルゴリズム、AI…などでググると色々と引っかかりますよ(^-^)

38ポイント を手に入れた。

Name: Huzzy  ..入門者(4,111ポイント)   Date: 2009/06/10(水) 11:18   No:34780     
Title: Re:落ち物パズルのCPU対戦について    
アドバイス有り難うございます。
バグさんの言われたとおり探してみたとこ
いくつかの落ち物パズルについてのロジックが
説明して有りました^.^!

しかし、そのようなサイトは主に
JAVA言語で書かれていることが多く
c++にて作成しようとしていた分、
どのように使用したらよいのか分かりません;;

ttp://kamoland.com/wiki/wiki.cgi?RensaWiki

初歩的な質問なのですが、このような場合
JAVAとC++の違いとは何なのでしょうか?

あと、落ち物パズルを作る場合C++では
作ることは出来ないのでしょうか?




216ポイント を手に入れた。

Name: sizuma [URL]  ..かけだし(1,033ポイント)   Date: 2009/06/10(水) 18:09   No:34807     
Title: Re:落ち物パズルのCPU対戦について    
C++は勉強不足なので、絶対とは言えませんが、Javaのいいところは
・JVMがあればどこでも動くんで移植性が高い
・簡単

な所だと思います。
もちろんC++でJavaのパッケージを使うことはできないんで、C++でAIを作っている人のコードを参考するか、ライブラリを探して、docを読んで自分でライブラリの使い方を勉強するかじゃないですか?
DXライブラリにもいろんなAIに使えるものがあるんじゃないかと思うんですがねー

C++を理解しているんなら、Javaは3日もあれば読めるようになって、JavaのコードをC++で書ける様になると思いますが。Javaにある機能はC++にもあると思うんで。


236ポイント を手に入れた。

Name: バグ  ..ハッカー(159,541ポイント)   Date: 2009/06/10(水) 20:28   No:34821     
Title: Re:落ち物パズルのCPU対戦について    
おそらく…ですが、アルゴリズムの部分だけを抜き出したならば、C++もJAVAも大差ないと思います。
文法的にはほとんど同じですしね。C++のコードが読めるならば、解析はさほど難しくないと思いますよ(o^-')b


103ポイント を手に入れた。

Name: Huzzy  ..入門者(4,158ポイント)   Date: 2009/06/10(水) 21:26   No:34825 解決!     
Title: Re:落ち物パズルのCPU対戦について    
sizumaさん、バグさんアドバイス有難うございます。
それでは少しC++に移行、もしくはJAVAに変更も
視野に入れてちょっと考えて見ます^^!




47ポイント を手に入れた。



Name: 初心者  ..プログラマー(32,917ポイント)   Date: 2009/06/08(月) 23:35   No:34715       
Title: 質問    
これからげーむを作ろうと思っているのですが、
コンパイラをダウンロードするときにお金はかかりますか?


46ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(104,113ポイント)   Date: 2009/06/09(火) 00:02   No:34716     
Title: Re:質問    
何をダウンロードするかによります。


18ポイント を手に入れた。

Name: 山崎  ..中級者(10,807ポイント)   Date: 2009/06/09(火) 01:16   No:34717     
Title: Re:質問    
こんばんは。

コンパイラは無料で入手できるものがいくつかあるので、
それを利用すればお金をかけずにゲームを作ることができますね。
エディタも無料のものがあるので、それを利用すると良いでしょう。

ん〜、この辺は結構基本的な事柄なので、
掲示板で質問する前に、このサイトでゲームを作るにあたっての最低限の知識を深めてみてはいかがでしょう。
このサイトのほかにも、DXライブラリを配布している下記のサイトでも、
ゲームを作るための無料の環境を揃える手順を詳しく紹介しています。
ttp://homepage2.nifty.com/natupaji/DxLib/index.html(h抜いてあります)

プログラミングの技術をお持ちなら言うまでもないかもしれませんが、
ゲームを作るってかなり大変なのでがんばってくださいね・・・。
まぁ、どんなゲームを作りたくて、どのくらいの数学の知識やプログラムの技術があるかによりますが・・・。


338ポイント を手に入れた。

Name: 初心者  ..プログラマー(34,172ポイント)   Date: 2009/06/10(水) 21:00   No:34823     
Title: Re:質問    
説明不足でした。
自分がダウンロードしようとしているのは
このサイトで紹介されているVisualC++2008というコンパイラです


35ポイント を落としてしまった。

Name: ねこ  ..かけだし(2,126ポイント)   Date: 2009/06/10(水) 21:12   No:34824     
Title: Re:質問    
VC2008のExpress Editionなら無料です。
この開発ソフトでゲーム作りには問題無いと思いますよ


24ポイント を手に入れた。



Name: ユーリ  ..かけだし(1,218ポイント)   Date: 2009/06/09(火) 18:34   No:34734       
Title: 質問です    
これは学校の課題なのですが
「お金を貯金したい。最初の月は一円、次の月は2円、その次の月は4円と前の月の倍額を毎月貯金していく。
合計金額が100万を超えるのは何カ月目になるか、毎月ためる金額と貯金額を表示するプログラムを作成しなしい(while文)」という問題なんですが
while文をどのように組み合わせていくのかわかりません
基本的なことはわかっています。
プログラムの流れについてヒントを頂けませんか?


137ポイント を手に入れた。


Name: lbfuvab  ..上級者(20,987ポイント)   Date: 2009/06/09(火) 18:41   No:34735     
Title: Re:質問です    
貯める額をループごとに倍にして合計に足していけばいいと思いますよ。
int sum=0,i=1;

while(終了条件){
  sum+=i;
  i*=2;
}


2倍のポイントを手に入れた! 112ポイント を手に入れた。

Name: 初級者  ..初心者(6,169ポイント)   Date: 2009/06/09(火) 18:43   No:34736     
Title: Re:質問です    
基本的なことに、while文を含んでいないのでしょうか?

私にしてみれば、じゅうぶん基本的なことだと思います。


47ポイント を手に入れた。

Name: conio [URL]  ..上級者(17,349ポイント)   Date: 2009/06/09(火) 21:05   No:34749     
Title: Re:質問です    
とりあえず、作ってみました。
日本語で書いてあるところを、どうにかすれば完成するようになってます。
参考程度にどうぞ。

----------------------------------------------------------------------------------
int sum = 0, benefit = 1, month = 1;
while(//終了条件){
  //貯金額に、一ヶ月に貯めた金額を足す処理//
  printf("【%3dヶ月目】 貯金額:%7d円, 今月貯めた金額:%6d\n",month,sum,i);
  //利益を2倍にする処理//
  //一ヶ月経過させる処理//
}
----------------------------------------------------------------------------------


196ポイント を手に入れた。

Name: ユーリ  ..かけだし(1,203ポイント)   Date: 2009/06/09(火) 21:11   No:34751     
Title: 無題    
ありがとうございます。
頑張ってみます


15ポイント を落としてしまった。

Name: ユーリ  ..かけだし(1,227ポイント)   Date: 2009/06/09(火) 22:10   No:34755     
Title: Re:無題    
1,2,4,8・・・・・と表示するにはどうしたらいいですかね?

24ポイント を手に入れた。

Name: MNS  ..中級者(9,633ポイント)   Date: 2009/06/09(火) 22:31   No:34759     
Title: Re:無題    
conioさんのコードのように、
ループ毎にprintf等で金額を出力すればいいと思いますが。


26ポイント を手に入れた。

Name: 通りすがり  ..上級者(16,984ポイント)   Date: 2009/06/09(火) 22:37   No:34760     
Title: Re:無題    
ユーリさんの言っている「基本的なことはわかっています。」は
どんな事を意味してるんでしょうか?


45ポイント を手に入れた。

Name: ユーリ  ..かけだし(1,292ポイント)   Date: 2009/06/09(火) 23:05   No:34766     
Title: Re:無題    
基本的というよりは基礎的なことです。
といっても基礎の基礎がわかってるくらいですかね。
一向に進む気配がないですし


65ポイント を手に入れた。

Name: ユーリ  ..かけだし(1,319ポイント)   Date: 2009/06/10(水) 01:41   No:34772     
Title: Re:無題    
貯金額に、一ヶ月に貯めた金額を足す処理
これがいまいちわからいのですがどうすればいいのですか?


27ポイント を手に入れた。

Name: b  ..ぴよぴよ(572ポイント)   Date: 2009/06/10(水) 02:15   No:34773     
Title: Re:無題    
金額を足す処理というのは、プログラムで足し算を行う処理です。これが分からないということは、基礎の基礎がわかってないということです。
上の書き込みにもあるように、課題を解く手順は既に示されています。
一度課題から離れて、文法を調べてみてはいかがでしょう?


113ポイント を落としてしまった。

Name: 通りすがり  ..上級者(17,027ポイント)   Date: 2009/06/10(水) 10:48   No:34777     
Title: Re:無題    
(管理人により記事が修正されました)

以下、マルチポスト先と思われるURLです。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1127091451


43ポイント を手に入れた。

Name: やそ  ..比類無きプログラマー(89,849ポイント)   Date: 2009/06/10(水) 11:28   No:34781     
Title: Re:無題    
こたえは全て出ています。
>「お金を貯金したい。最初の月は一円、次の月は2円、その次の月は4円と前の月の倍額を毎月貯金していく。
合計金額が100万を超えるのは何カ月目になるか、毎月ためる金額と貯金額を表示するプログラムを作成しなしい

毎月ためた金額(1からはじまり前月の倍額)
貯金合計
経過月数
100万円を越えるまで

が出ているのですから。

whileの()の中身は継続条件を書きます。つまり100万円以下なら続けるよということ。
経過月数は1づつ増えていけばいいですよね。
今月ためた金額は前月ためた金額の2倍(どうやって稼ぐんだ?丁半ばくちか?(笑))
貯金合計は前月までの合計+今月ためた金額
それぞれ画面?に表示

を繰り返せばいいのではないでしょうか?



269ポイント を手に入れた。

Name: conio  ..上級者(17,498ポイント)   Date: 2009/06/10(水) 15:48   No:34791     
Title: Re:無題    
>>貯金額に、一ヶ月に貯めた金額を足す処理
>>これがいまいちわからいのですがどうすればいいのですか?


上のほうでプログラムを書いたのですが、
補足しておきますと、言葉と変数は 下記のように対応します。
-----------------------------------
貯金額 = sum
一か月に貯めた金額 = benefit
-----------------------------------

なので、sum に benefit を足す式を書けばよいということになります。



149ポイント を手に入れた。

Name: ユーリ  ..かけだし(1,330ポイント)   Date: 2009/06/10(水) 18:38   No:34815 解決!     
Title: Re:無題    
ありがとうございました。
解決しました


11ポイント を手に入れた。



Name: 初心者  ..プログラマー(34,207ポイント)   Date: 2009/06/10(水) 17:32   No:34796       
Title: 弾の座標のバグ    
C言語〜ゲームプログラミングの館〜の26.シューティング基本を参考にして、移動するキャラクターの位置から弾を発射するプログラムなのですが、キャラクターを移動させるとたまに変な位置から弾が発射されます。
キャラクターは十字キーで移動で、スペースキーで弾を発射します。
どうすれば、このバグが直るのでしょうか?

開発環境はVisual C++ 2008 Express Editionです。

ソースコードを下に示します

#include "DxLib.h"

#include <math.h>

typedef struct{
double x, y;
}ch_t;

struct shot { //弾発射
double x, y;
int flag;
};

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

int image[16];
double rad = 0.0; // キャラクターの角度(rad)
char Key[256];
ch_t ch;
int n_flag = 1; //0:ななめ移動 1:十字移動
struct shot tama[10]; //弾10個
int i, counter = 0;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

ch.x =320;
ch.y =160;

for(i = 0; i < 10; i++) { //弾発射の準備
tama[i].x = ch.x - 16;
tama[i].y = ch.y - 16;
tama[i].flag = 0;
}

SetDrawScreen( DX_SCREEN_BACK ); //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
if(counter < 5)
counter++;
else if(Key[KEY_INPUT_SPACE] == 1) {
counter = 0;
for(i = 0; i < 10; i++) {
if(tama[i].flag == 0) {
tama[i].flag = 1;
break;
}
}
}

for(i = 0; i < 10; i++) {
if(tama[i].flag == 1) {
tama[i].y -= 8;
DrawGraph(tama[i].x, tama[i].y, image[1], TRUE);
if(tama[i].y < -32) {
tama[i].x = ch.x - 16;
tama[i].y = ch.y - 16;
tama[i].flag = 0;
}
}
}

if(n_flag == 1){ //ななめフラグなしのとき
if( Key[ KEY_INPUT_UP ] == 1 )
ch.y--;
if( Key[ KEY_INPUT_LEFT ] == 1 )
ch.x--;
if( Key[ KEY_INPUT_DOWN ] == 1 )
ch.y++;
if( Key[ KEY_INPUT_RIGHT] == 1 )
ch.x++;
}

else{ //ななめフラグ立ってるとき
if(Key[KEY_INPUT_UP] == 1 && Key[KEY_INPUT_RIGHT] == 1) {
ch.y -= 1 / sqrt(2.0);
ch.x += 1 / sqrt(2.0);
}
if(Key[KEY_INPUT_UP] == 1 && Key[KEY_INPUT_LEFT] == 1) {
n_flag = 0;
ch.y -= 1 / sqrt(2.0);
ch.x -= 1 / sqrt(2.0);
}
if(Key[KEY_INPUT_DOWN] == 1 && Key[KEY_INPUT_RIGHT] == 1) {
n_flag = 0;
ch.y += 1 / sqrt(2.0);
ch.x += 1 / sqrt(2.0);
}
if(Key[KEY_INPUT_DOWN] == 1 && Key[KEY_INPUT_LEFT] == 1) {
n_flag = 0;
ch.y += 1 / sqrt(2.0);
ch.x -= 1 / sqrt(2.0);
}
}

if(Key[KEY_INPUT_Z] == 1) //左回転
rad -= 0.05;
else if(Key[KEY_INPUT_X] == 1) //右回転
rad += 0.05;

DrawRotaGraph( ch.x, ch.y , 1.0 , rad , image[12] , TRUE );

ScreenFlip();
}

DxLib_End();

return 0;
}


1,290ポイント を手に入れた。


Name: yu  ..プログラマー(30,207ポイント)   Date: 2009/06/10(水) 17:39   No:34799     
Title: Re:弾の座標のバグ    
弾の位置を戻す時に

その瞬間のキャラの位置をもとに決定しているからではないでしょうか

決定した後でキャラを動かすと弾の位置から離れるので変なところから発射されたように見えますね。

tama[i].flag = 1 のところで座標を代入してはいかがでしょうか


2倍のポイントを手に入れた! 222ポイント を手に入れた。

Name: 初心者   Date: 2009/06/17(水) 15:45   No:347961245221150     
Title: Re:弾の座標のバグ    
無事解決しました。
ありがとうございました。


Name: 初心者   Date: 2009/06/17(水) 15:46   No:347961245221162 解決!     
Title: Re:弾の座標のバグ    
無事解決しました。
ありがとうございました。




Name: 研修生  ..初心者(8,265ポイント)   Date: 2009/06/08(月) 16:54   No:34697       
Title: while文のループ脱出    

while((c = getchar() != EOF){
switch(c){
case 'a':
(処理)
break;
case 'b':
c = getchar();
(処理)
break;

  ・
  ・
  ・
 }
}


のようなプログラムがあるとき,case bのときに次の値をcに代入していますが
このときにcがEOFだった場合即座にwhileのループを抜ける方法を探しています。
教えて下さい。



198ポイント を手に入れた。


Name: 研修生  ..初心者(8,284ポイント)   Date: 2009/06/08(月) 17:02   No:34698     
Title: Re:while文のループ脱出    
break使えばいい事にきづきました。自己解決しました。

19ポイント を手に入れた。

Name: 研修生  ..初心者(8,349ポイント)   Date: 2009/06/08(月) 18:05   No:34701     
Title: Re:while文のループ脱出    
と思ったのですがこの場合switch文から抜けるだけでwhileは抜けません・・
switch文を抜けた後にさらに判定式を行なってbreakすればいけそうですが
どうも冗長のように思えます。他にいい方法ないでしょうか?


65ポイント を手に入れた。

Name: yu  ..プログラマー(29,683ポイント)   Date: 2009/06/08(月) 18:09   No:34702     
Title: Re:while文のループ脱出    

int flag = 0;

while((c = getchar())!= EOF){
switch(c){
case 'a':
(処理)
break;
case 'b':
if((c = getchar()) != EOF){
(処理)
}
else
flag = 1;
break;

  ・
  ・
  ・
 }
if(flag == 1)
break;
}



とするのはだめですか?

他に goto を使う方法もあります。

#一部編集しました。


185ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,026,988ポイント)   Date: 2009/06/08(月) 21:20   No:34711     
Title: Re:while文のループ脱出    
後、抜けたいループ部分を関数化してしまい、returnで抜けるという手もあるかもしれませんね。

4ポイント を手に入れた。

Name: フリオ  ..プログラマー(29,674ポイント)   Date: 2009/06/08(月) 21:56   No:34713     
Title: Re:while文のループ脱出    
 
 こういうのはどうでしょう。



#include <stdio.h>

int main(void)
{
int c;

do{
switch(c = getchar()){
case 'a': puts("a"); break;
case 'b':
if((c = getchar()) == EOF) break;
puts("b");
break;
case 'c': puts("c"); break;
case EOF: break;
default : puts("default"); break;
}
}while(c != EOF);
return 0;
}

 
> switch文を抜けた後にさらに判定式を行なって
と、かわらないかな。
 


171ポイント を手に入れた。

Name: toyo  ..プログラマー(35,952ポイント)   Date: 2009/06/09(火) 09:18   No:34718     
Title: Re:while文のループ脱出    
私は多重ループから一番外に抜けるときや複数の処理で共通のエラー処理をしたいときはgotoを使います
gotoを使えば簡単に書ける処理をgotoを避けるがためにフラグ変数を追加したり条件判定を追加したりするのは本末転倒な気がします


2倍のポイントを手に入れた! 128ポイント を手に入れた。

Name: sizuma  ..ぴよぴよ(703ポイント)   Date: 2009/06/09(火) 17:34   No:34731     
Title: Re:while文のループ脱出    
switchを使わないで、ifとelse ifで書けば、breakでwhileから抜けられるのでは?
とは言うものの、僕はifばっかり使うのはなんだか抵抗があるし、わざわざこれだけのために書き換える気にはならないですよね(笑


131ポイント を手に入れた。

Name: やそ  ..比類無きプログラマー(89,381ポイント)   Date: 2009/06/09(火) 17:46   No:34732     
Title: Re:while文のループ脱出    
http://www9.plala.or.jp/sgwr-t/c/sec06-6.html
でgoto抜けの解説あり。


24ポイント を手に入れた。

Name: 研修生  ..初心者(8,564ポイント)   Date: 2009/06/10(水) 13:32   No:34787     
Title: Re:while文のループ脱出    
ご意見ありがとうございます。
if-elseにすれば抜けれますがswitch文の方がみやすいらしくそちらを使用しなければなりません。
goto文を使おうと色々やってますが

while((c = getchar() != EOF){
switch(c){
case 'a':
(処理)
break;
case 'b':
c = getchar();
switch(c){
case EOF:
goto err;




default:
(処理)
   break;
}

  ・
  ・
  ・
 }
}

err:
if(c != '\n'){
putchar('\n');
}

return 0;
}


<pre>
のような感じでgoto文を使うとgotoの所の次が

err:
if(c != '\n'){
putchar('\n');
}

return 0;
}

のerrの部分ではなくreturnに飛ぶのですが・・
gotoでの抜け出しが起こっているようですが調べてもさっぱりわかりません。
教えて下さい。




215ポイント を手に入れた。

Name: Libra  ..初心者(8,489ポイント)   Date: 2009/06/10(水) 14:20   No:34789     
Title: Re:while文のループ脱出    
自分の"経験"なので参考までに。
switch文の中でswitchを用いると、コンパイラが読み間違いを起こす時があるみたいです。
特にswitch(A)の中に同じswitch(A)があると起こりやすいようです。

ソースが同じなのにコンパイルするたびに、動作が意図したものと意図しないものになるという不定動作になりました。書いてる側は2個目のswitchを意図しているのに、1個目のswitchと混ざってしまった動作をしたことがあります。

この時にswitch文の中のswitchをif文に直したところ、意図した動作になったことがあります。
また、どうしてもswitchを使いたいときはその2個目のswitchでの処理を関数化して処理するようにしてます。


>>switch文の方がみやすいらしく
時と場合によると思います。


230ポイント を手に入れた。

Name: Libra  ..初心者(8,685ポイント)   Date: 2009/06/10(水) 14:34   No:34790     
Title: Re:while文のループ脱出    

if( c != '\n' )
{
putchar('aaaaa\n');
}
else{
putchar('a');
}
return


とかにソースを書き換えて、実際にプログラムがそこを通っているか確かめてみるのもいいかもしれません。


2倍のポイントを手に入れた! 196ポイント を手に入れた。



Name: toshi  ..ぴよぴよ(715ポイント)   Date: 2009/06/09(火) 22:31   No:34758       
Title: linked list の件について    
C言語を勉強して、時間が経っていなく分からない所があるので教えてください。
僕は今singly linked list を使ってstruct構造体を使ったポインタ形式のC言語のプログラミングを作っています。以下にソースコードを示します。

#include "stdafx.h"
#include "stdlib.h"

struct card {
char name[20];
int age;
struct card *next;
};



int _tmain(int argc,_TCHAR* argv[]){
struct card *member;
member = (struct card*)malloc(sizeof(struct card));
struct card *head,*current;
int a;



while(printf("入力しますか?\n続けつる場合は1、辞める場合はCtrl+Z\n"),scanf("%d",&a) !=EOF){
head=(struct card *)malloc(sizeof(struct card));
head->next=NULL;
printf("名前と年齢を入力してください\n");
scanf("%s%d",head->name,&head->age);
head->next=NULL;


if(head->next!=NULL)
head = head->next;
head->next=(struct card*)malloc(sizeof(struct card));

}

printf("名前:%s\n",head->name);
printf("年齢:%d\n",head->age);

return 0;

}

目指しているのは、名前と年齢を無限に打ち込み、Ctrl+Zを入力するとプログラムが終了して今までに打ってきた名前と年齢が表示されるというプログラミングを組みたいんですが、コンパイルして実行すると最後に入力した名前と年齢しか表示されません。
どのようなソースソースコードにすればいいのか教えていただけませんか?
*currentを使うのかもしれませんが、さっぱり分かりません。
僕はVisual Studio 2008を使用しています。
内容がわかりにくいかもしれませんが、よろしくお願いします。


421ポイント を手に入れた。


Name: lbfuvab  ..上級者(21,008ポイント)   Date: 2009/06/09(火) 22:43   No:34761     
Title: Re:linked list の件について    
せめて字下げぐらいきちんとしてください。

21ポイント を手に入れた。

Name: toshi  ..ぴよぴよ(778ポイント)   Date: 2009/06/09(火) 22:55   No:34764     
Title: Re:linked list の件について    
あっすいません。
これからは、気を付けます。
掲示板に書くのが初めてだったので。
以後気を付けます。
メールありがとうございます。


63ポイント を手に入れた。

Name: non  ..熟練のプログラマー(47,014ポイント)   Date: 2009/06/10(水) 08:41   No:34775     
Title: Re:linked list の件について    
さて、直そうにも、全部書き直した方が、早そうな・・・
読み込んだ、データのノードは先頭に追加したいのか、最後尾に追加
したいのか。どっちでしょ?
一番最初の
member = (struct card*)malloc(sizeof(struct card));
は何をしたいのでしょうか。番兵ですか?
表示を、whileやforで回さなきゃ、1つしか出力されないのは当たり前ですよね。
もちろん、リンクがうまくいってないから、でないけど。


103ポイント を手に入れた。

Name: toshi  ..ぴよぴよ(913ポイント)   Date: 2009/06/10(水) 10:37   No:34776     
Title: Re:linked list の件について    
メールありがとうございます。
データのノードは最後尾に追加したいです。
member = (struct card*)malloc(sizeof(struct card));

は領域を確保しなければいけないのかと思いまして・・・。
whileとかでループさせるってことですか。
もし良ければで結構なんですが、
nonさんが作ったソースコードとか教えていただけませんか?


135ポイント を手に入れた。

Name: non  ..熟練のプログラマー(47,372ポイント)   Date: 2009/06/10(水) 11:10   No:34779     
Title: Re:linked list の件について    

#include "stdio.h"
#include "stdlib.h"

struct card {
char name[20];
struct card *next;
};

int main(void)
{
struct card *head,*current,*p;
int a;
head=NULL;
while(printf("入力しますか?\n続ける場合は1、辞める場合はCtrl+Z\n"),scanf("%d",&a) !=EOF){
current=(struct card *)malloc(sizeof(struct card));
current->next=NULL;
printf("名前を入力してください\n");
scanf("%s",current->name);
if(head==NULL)
head=current;
else{
for(p=head;p->next!=NULL;p=p->next){}
p->next=current;
}
}
for(p=head;p!=NULL;p=p->next)
printf("名前:%s\n",p->name);

return 0;
}

Cに変更しました。
エラー処理をしてません。
freeをしてません。
年齢をはぶきました。


358ポイント を手に入れた。

Name: toshi  ..ぴよぴよ(978ポイント)   Date: 2009/06/10(水) 11:37   No:34782 解決!     
Title: Re:linked list の件について    
メールありがとうございます。
コンパイルして実行したら、できました!
本当にありがとうございました。
これからもわからない所が多々あると思いますので、
そのときはよろしくお願いします。
本当にありがとうございました。


65ポイント を手に入れた。



Name: HBK  ..ぴよぴよ(136ポイント)   Date: 2009/06/09(火) 17:48   No:34733       
Title: プログラム    
株の売買システムを作成したいのですが、どんなふうに作ったらいいでしょうか?
どなたかアドバイスをください?
構造体定義→値の設定→売値・買値の設定→値と売値・買値の比較
→結果をファイルに表示 の感じで作成しなければならないです。

値は20マン以下の株で設定して売値・買値は1割ごとに売買させたいです。


136ポイント を手に入れた。


Name: 山崎  ..中級者(11,953ポイント)   Date: 2009/06/09(火) 19:32   No:34742     
Title: Re:プログラム    
こんばんは。

株について詳しくない私がアドバイスなんてしていいのか疑問ですが、少し。

その前に、記事のタイトルはもう少し具体的なものすることをお勧めします。
その方が、答える側の心証も良いですしね。

質問がちょっと抽象的過ぎる気がします。
構造体の定義の仕方がわからない、とか
ファイルに書き込んで保存する方法がわからない、のでしょうかな?
何がわからないのか、具体的に挙げて頂けると答える方も助かります。

もし、現実の株取引に即した実用性のあるシステムを作りたいのであれば、
私は先ほども書いたとおり株に詳しくないので、ちょっとアドバイスできませんが・・・。

ちょっと失礼かもしれませんが、学校の課題なら、
もっと具体的な課題の問題文や前提が欲しいところですね。

(長かったので記事編集しました)


371ポイント を手に入れた。

Name: たいちう  ..プログラマー(31,430ポイント)   Date: 2009/06/09(火) 20:08   No:34745     
Title: Re:プログラム    
こんな本もあったりする。
http://www.amazon.co.jp/dp/4798013900


30ポイント を手に入れた。

Name: やそ  ..比類無きプログラマー(89,580ポイント)   Date: 2009/06/10(水) 10:50   No:34778     
Title: Re:プログラム    
リアルに取引するためのソフト開発?
学校やら、企業やらの課題(研修)?

課題だったとして、
前提条件というか、情報が足りなくないですか?
刻一刻と変化する株価をどう表現しますか?
取引できる企業の数、取引単位、企業情報、
TOPIXなどの指標を用いるか?
時間の概念を取り入れるのか?(取引時間の制限や、期間の設定)
チャート表示をするか?
構造体の中身についての情報はあるか?
ETC

なんにせよ、いまのままではたいした回答は出づらいかと思います。


199ポイント を手に入れた。



Name: まる  ..ぴよぴよ(228ポイント)   Date: 2009/06/09(火) 20:47   No:34746       
Title: 格納について    
#include <stdio.h>
int main(void)

{
int sum=0,i;
int a[10]={80,15,30,50,70,90,55,88,45,95,};

for(i=0;i<10;i++){
sum +=a[i];
}
printf("sum=%d\n",sum);

return 0;
}

このプログラムで1次配列a[1]〜a[10]の各要素に任意の数値を格納した後すべての加算した合計値を出す。
という問題なのですが。格納の意味がいまいちわからなくこれだとa[0]〜a[9]までの数値を格納したことに
なるのでしょうか?ということはa[10]をa[11]にしてfor(i=1;i<11;i++)とすれば求めている答えになりますでしょうか?


228ポイント を手に入れた。


Name: まる  ..ぴよぴよ(249ポイント)   Date: 2009/06/09(火) 20:49   No:34747     
Title: Re:格納について    
すいません<pre>で囲んだはずなのですが見にくくなって申し訳ないです。

21ポイント を手に入れた。

Name: box  ..ハッカー(141,020ポイント)   Date: 2009/06/09(火) 20:57   No:34748     
Title: Re:格納について    
> int a[10]={80,15,30,50,70,90,55,88,45,95,};

10個の要素からなるaという配列を定義しています。
よって、アクセスできるのは、a[0]〜a[9]の10個です。

> 1次配列a[1]〜a[10]の各要素に任意の数値を格納した後

この問題に対応するには、11個の要素を持つ配列を定義して、
先頭の[0]は使わずに、残りの[1]〜[10]の要素を計算に使います。


88ポイント を落としてしまった。

Name: 山崎  ..中級者(12,366ポイント)   Date: 2009/06/09(火) 21:15   No:34752     
Title: Re:格納について    
こんばんは。

「格納」という言葉の意味がはっきりしない、ということでしょうか?
格納というのは、主に「ある変数に値を代入する」意味で使われることが多いですね。
質問にあるように、配列に値を代入することも格納と言います。

>これだとa[0]〜a[9]までの数値を格納したことになるのでしょうか?
そのとおりですね。
配列のインデックス0から順番に格納していく、という意味になっています。

>ということはa[10]をa[11]にしてfor(i=1;i<11;i++)とすれば求めている答えになりますでしょうか?
そのとおりです。
a[1]からa[10]までの要素に値を入れるということは、
a[0]からa[10]までの11個の要素が必要ということになります。
つまり、
int a[11];
というふうに配列を準備する必要があります。
あと、a[10]にも数値を格納しておかなければいけませんね。
そしてa[1]からa[10]までの合計を求めるので、
for文のカウンタの値の範囲は1〜10であるひつようがあるので、for(i=1;i<11;i++)でOKです。

その課題ですと、要素a[0]の意味がほとんど無いですね。
ホントは a[0]からa[9]までの10個の合計を求める という課題にしたかったはずが
間違えて a[1]からa[10] にしてしまった、という臭いがします・・・。
配列の個数やインデックス、ループのカウンタを理解させるため敢えてそうした課題なんでしょうかな〜。


413ポイント を手に入れた。

Name: まる  ..ぴよぴよ(444ポイント)   Date: 2009/06/09(火) 21:41   No:34753     
Title: Re:格納について    
#include <stdio.h>

int main(void)
{
int sum=0,i;
int a[11]={0,80,15,30,50,70,90,55,88,45,95,};

for(i=1;i<11;i++){
sum +=a[i];
}
printf("sum=%d\n",sum);

return 0;
}
ということはi=0をi=1に直し先ほどの合計を計算したい場合は80の前に0をいれてこういうプログラムになるということですかね?


195ポイント を手に入れた。

Name: box  ..ハッカー(140,939ポイント)   Date: 2009/06/09(火) 22:05   No:34754     
Title: Re:格納について    
> こういうプログラムになるということですかね?

コンパイルして動かしてみればわかるのではないでしょうか。
動かしてみて、題意に沿っていなければ、
ソースを修正して、コンパイルして、実行して…
の繰り返しです。


81ポイント を落としてしまった。

Name: まる  ..ぴよぴよ(634ポイント)   Date: 2009/06/09(火) 23:06   No:34767     
Title: Re:格納について    
みなさんご回答ありがとうございました。
#include <stdio.h> 


int main(void)
{
int kei=0,i;
int a[6]={0,1,2,3,4,5};

for(i=1;i<6;i++){
kei =a[1]*a[2]*a[3]*a[4]*a[5];
}
printf("kei=%d\n",kei);

return 0;
}

というa[1]〜a[5]の掛け算のプログラムを作ってみたのですがkei =a[1]*a[2]*a[3]*a[4]*a[5]の部分をもう少し短くすることは可能でしょうか?


190ポイント を手に入れた。

Name: pooka [URL]  ..初心者(5,108ポイント)   Date: 2009/06/09(火) 23:15   No:34768     
Title: Re:格納について    
>for(i=1;i<6;i++){
>kei =a[1]*a[2]*a[3]*a[4]*a[5];
>}
これだとfor文を使う必要はありませんね^^;

kei = 1;
for(i=1;i<6;i++)
kei *= a[i];



76ポイント を手に入れた。



Name: 山崎  ..中級者(11,654ポイント)   Date: 2009/06/09(火) 10:51   No:34720       
Title: 文字列を全ての組み合わせで2つに分割する    
毎度お世話になっております、山崎です。
今回は、文字列の分割についての方法をお伺いに参りました。

ある文字列Sを、考えられる全ての組み合わせで 文字列Aと文字列Bの2つの文字列に分割し、その文字列を得る
というプログラムを考えているのですが、何日考え続けても有効なプログラムが浮かんできません。

分割の条件としては、
・文字列Sは'A'から'Z'までの文字で構成され、同じ文字は2つ以上存在しない。長さは2文字以上。
・各文字列中の文字の並び順が違っても区別しない。"AC"と"CA"は同じもの。(常にA→Zの順でソートされる)
・文字列A,Bは1文字以上。

例えば文字列Sが"ABCD"だとします。
そうするとこれは、(文字列A,文字列B の順番で記述しています)
A,BCD   B,ACD   C,ABD   D,ABC
AB,CD   AC,BD   AD,BC   BC,AD   BD,AC   CD,AB
ABC,D   ABD,C   ACD,B   BCD,A
この14通りに分割することができます。

文字列Sが"AB"のときは
A,B と B,A の2通りが考えられます。

言うまでもないかもしれませんが、文字列Aが決まれば自動的に文字列Bも決まります。

私は以下のコードのように、文字列Aの文字数によってswitch文を分岐させ、
文字列Aがn文字のときはfor文のn重ループで文字列Sから1ループで1文字ずつ合計n個選びAを決める、
という方法を考えたのですが、この方法ではnが大きな数値のときに対応できません。


void GetStrA(char* S)
{
for(int i=1;i<strlen(S);i++)
switch(i)
{
case 1:
for(...){
//文字列Sから1文字選び文字列Aとする。
//Aを保存する
}
break;
case 2:
for(...)
for(...){
//文字列Sから1文字ずつ選び文字列Aに加える
//Aを保存する
}
break;
case 3:
for(...)
for(...)
for(...){
//文字列Sから1文字ずつ選び文字列Aに加える
//Aを保存する
}
break;
case ...
...
}
}


なお、Sを分割して得た文字列A、Bの保存のやり方は特に指定はありません。
文字列型のvectorにpushする、というのが適当でしょうか。
Aが決まればBも自然に決まるので、ここではBを求める処理は記述していません。

どうすれば、文字列Sを上の条件を満たす考えられる全ての組み合わせで2つに分割できるのでしょうか。


847ポイント を手に入れた。


Name: ねこ  ..かけだし(1,467ポイント)   Date: 2009/06/09(火) 12:57   No:34725     
Title: Re:文字列を全ての組み合わせで2つに分割する    
ぱっと見て答えてるので間違ってるかもしれません。

1.FOR文で1〜文字数−1までループ
2.文字数分のパターン( 文字数x(文字数−1))ループ
  4文字なら1234,1243、1423等すべてのパターンを取得する

3.パターンに対応する文字をBYTE型で取得。ABCDで1234なら65,66,67,68(・・・だったかな)
4.Aのバイトコード(65)を引いてシフトする↑の例なら (1 << 0, 1 << 1, 1 << 2, 1 << 3)となる
5.5で求めた値をパイプでつなげる( 1,3分けなら「@とA|B|C」 )
6.A,B配列(ベクターでもなんでも良い)に5で計算した値( DWORD )を格納
7.格納する毎にA,Bに既に追加された値をチェックして同じ値なら追加しない
8.全パターンが格納されるので、取得時はビットから逆キャストして文字コードを取得する

4〜6でビットにしているのはアルファベットが26個(32ビット未満)で
そのまま保持しているとABCとBCA等を比較する際に何通りかのチェックが必要で手間だからです。
ビットにしておくとif( ( A == B )で済みます。
取得時は値に対して
for( int i = 0; i < 26; i++ ) {
if( ( 1 << i ) & 配列の値 ) {
char( 65 + i )をどっか追加
}
}

見直してみて自分でもすごく分かりにくい説明だと思いました。
他にもっと簡単なやり方知ってる方は僕のを無視して書き込んでやってくださいorz


579ポイント を手に入れた。

Name: たいちう  ..プログラマー(31,328ポイント)   Date: 2009/06/09(火) 13:25   No:34726     
Title: Re:文字列を全ての組み合わせで2つに分割する    
こんな感じでいいんでない

int n = Sの長さ;
for (int i = 1; i < (1 << n) - 1; i++) {
for (int j = 0; j < n; j++) {
if (i & (1 << j))
S[j]をAに追加
else
S[j]をBに追加
}
AとBを表示
}


2倍のポイントを手に入れた! 210ポイント を手に入れた。

Name: non  ..熟練のプログラマー(46,911ポイント)   Date: 2009/06/09(火) 13:40   No:34727     
Title: Re:文字列を全ての組み合わせで2つに分割する    
2つに分けた文字列で左側のグループに必ずAが含まれるとしたら、
14通りではなく
A,BCD   B,ACD   C,ABD   D,ABC
AB,CD   AC,BD   AD,BC   BC,AD   BD,AC   CD,AB
ABC,D   ABD,C   ACD,B   BCD,A
7通りですよね。
ですから、かならずAが含まれている文字列のみを表示するように作ってみました。
プログラムの説明は面倒なのでしません。自分で考えてね。

#include<stdio.h>
#include<string.h>

char str[]="ABCD";
char str1[100];
void disp(int n,int m,int z)
{
int i;
if(n==z-1)
return;
for(i=m+1;i<z;i++){
str1[n]=str[i];
str1[n+1]='\0';
puts(str1);
disp(n+1,i,z);
}
}
int main(void)
{
str1[0]=str[0];
puts(str1);
disp(1,0,strlen(str));
return;
}



260ポイント を手に入れた。

Name: 山崎  ..中級者(11,582ポイント)   Date: 2009/06/09(火) 19:13   No:34739 解決!     
Title: Re:文字列を全ての組み合わせで2つに分割する    
ねこさん、たいちうさん、nonさん、ご返答誠にありがとうございます。
おかげさまで、文字列の分割を実現することができました。

今回は、たいちうさんのコードを参考とさせて頂きました。
ねこさんとnonさんの方法も後ほど検討させて頂きますね。

たいちうさんのコードを見て大感激しました…!!
私が何日考えても思いつかなかったアルゴリズムを、
たった数行のコードで実現なさってしまいますとは…!
尊敬と同時に、私の腕の無さを実感いたしました。
これからも精進したいと思います。

ご返事くださった皆様、誠にありがとうございました。


72ポイント を落としてしまった。

Name: たいちう  ..プログラマー(31,400ポイント)   Date: 2009/06/09(火) 20:05   No:34744     
Title: Re:文字列を全ての組み合わせで2つに分割する    
そこまで書かれると少し照れるな。
コードを理解できて感激できるならば、山崎さんもなかなかです。
今後このパターンを応用できることでしょう。

# preタグを付け忘れて見にくくなってすみません。


72ポイント を手に入れた。



Name: milk  ..ぴよぴよ(11ポイント)   Date: 2009/06/08(月) 16:00   No:34691       
Title: ゲーム中の効果音再生について    
ゲームに効果音をつけたのですが、その効果音が鳴るときにゲームが重くなってしまいます。
何か改善の方法はないでしょうか?

PlaySound( "効果音.wav" , DX_PLAYTYPE_NORMAL ) ;

みたいに使っています。

(21:22 管理人によりタイトルが編集されました)


11ポイント を手に入れた。


Name: ひよこ  ..プログラマー(38,210ポイント)   Date: 2009/06/08(月) 16:07   No:34693     
Title: Re:無題    
これでいいのでは、

下のソースで読み込み
int Sound = LoadSoundMem( "効果音.wav" ); //wavファイルを読み込む
下のソースで再生します。
PlaySoundMem( Sound , DX_PLAYTYPE_BACK );//バックグラウンド再生


119ポイント を手に入れた。

Name: チルチル  ..上級者(24,116ポイント)   Date: 2009/06/09(火) 19:34   No:34743     
Title: Re:無題    
補足すると

PlaySound関数だとデータを毎回読み込むのでその間は処理が止まってしまう

DX_PLAYTYPE_NORMALだとノーマル再生になり再生中は処理が止まってしまう

みたいな感じでしょうか


80ポイント を手に入れた。



Name: 与一  ..ぴよぴよ(280ポイント)   Date: 2009/06/07(日) 18:09   No:34660       
Title: 正誤判定がいかない?    
昨日質問して、表示に関することは解決したんですが、選択したものが合っているか判定する部分がうまくいきません。
選んだ選択肢が順番に配列に格納されて、その順番が正しいかを判定するようにしたいんですが、正しい順番に選択しても、間違っているということになっているみたいなんです。
それと、4回目に選択肢を選択すると、その選択肢を表示した後にPが表示されるのはなぜでしょう?
どうかよろしくお願いします。


136ポイント を手に入れた。


Name: やそ  ..比類無きプログラマー(88,772ポイント)   Date: 2009/06/08(月) 15:29   No:34690     
Title: Re:正誤判定がいかない?    
このソース、このままコンパイルできますか?
どうやって4回入力させてるの?

配列(文字列)の中身の比較なら、
strcmpとかで検証してみては?
ttp://www9.plala.or.jp/sgwr-t/lib/strcmp.html

また結果の”表示”ってされてました?


71ポイント を手に入れた。

Name: 与一  ..ぴよぴよ(414ポイント)   Date: 2009/06/08(月) 16:36   No:34696     
Title: Re:正誤判定がいかない?    
すみません。
先に添付したファイルだけでは、コンパイルはいきません。
今回添付するファイルにヘッダファイルとメイン部分のプログラムを入れました。
本当にすみませんでした。

>>どうやって4回入力させてるの?
入力というか、選択肢を上下キーで4回選んで、それを表示させています。

>>結果の”表示”ってされてました?
選択肢を4回選ぶと、「正解!!」か「残念!!」が表示されます。
でも、今の状態だと常に「残念!!」と表示されてしまいます。


お願いします。


134ポイント を手に入れた。

Name: やそ  ..比類無きプログラマー(89,357ポイント)   Date: 2009/06/09(火) 17:32   No:34730     
Title: Re:正誤判定がいかない?    
配列 inputの中身がどうなっているか。
正誤判定をする前にprintfなどをはさんで検証したほうが分かりやすくないですか?

answerは関数(DrawTalk)の外で宣言してますよね。
inputは関数の中で宣言されていますよね。
で、4回入力されるまでDrawTalk関数を毎回呼んでいますよね。

ということは・・・




125ポイント を手に入れた。



Name: TN  ..かけだし(1,206ポイント)   Date: 2009/06/09(火) 14:37   No:34729       
Title: 3D衝突判定について    
アクションゲームを作成中なのですが内積と外積を使い、床とキャラの衝突判定を取ろうと思うのですが、
平面の取得方法が悪いのかキャラが床に埋まってしまいます。
ソースを載せますので修正点を教えてください。
MakePlane( LPCSTR pFileName )

{
LPD3DXMESH p_mesh; //メッシュ
LPMESHTABLE p_m_table; //作業用

/*** 三頂点の座標と平面得る ***/
//メッシュインタフェースを得る
p_m_table = CMesh::GetMeshTable( pFileName );
p_mesh = p_m_table->m_pMesh;

/*** 頂点フォーマットのサイズを得る ***/
UINT fvf_size = D3DXGetFVFVertexSize( p_mesh->GetFVF() );

do{

/*** 頂点バッファをLockする ***/
BYTE* p_vertex = NULL;
if(FAILED( p_mesh->LockVertexBuffer( 0, (LPVOID*)&p_vertex )) ){

/*** エラー ***/
Dialog( "CFieldHitCheck ","Line 66 : 頂点バッファのLockに失敗 " );
break;
}

/*** インデックスバッファLockする ***/
WORD* p_index = NULL; //インデックスバッファポインタ
if(FAILED( p_mesh->LockIndexBuffer(0, (LPVOID*)&p_index )))
{
/*** エラー ***/
Dialog( "CFieldHitCheck", "Line 74 : インデックスバッファのLockに失敗" );
break;
}

/*** メッシ構成しているポリゴンの枚数を得る ***/
INT polygon = p_mesh->GetNumFaces(); //ポリゴンの枚数

/*** すべてのポリゴンから当たり判定用の平面情報を取得する ***/
LPPLANETABLE p_work = m_pPlaneTableList; //作業用
//枚数分ループ
for( INT i = 0; i < polygon; i++ )
{

/* 頂点を取り出す */
for(INT j = 0; j < 3; j++)
{
/* 頂点を得る */ // ↓キャストすることで1度に代入 ↓インデックス * 頂点サイズ(32byte)
p_work->m_Vertex[ j ] = *( D3DXVECTOR3* )(p_vertex + *p_index * fvf_size);

//次のインデックスへ
p_index++;
}

/*** 頂点データから平面を作る ***/
//頂点から法泉を算出
D3DXPlaneFromPoints( &p_work->m_Plane, //格納先
&p_work->m_Vertex[ 0 ], //頂点1
&p_work->m_Vertex[ 1 ], //頂点2
&p_work->m_Vertex[ 2 ]); //頂点2

/*** メモリ確保 ***/
//まだすべてのポリゴンを読み込んでいなければ次のメモリを確保
if(i + 1 < polygon )
{

/* メモリ確保 */
p_work->m_pNext = new PLANETABLE;
p_work = p_work->m_pNext;

}
else
{
/* 終端なのでNULLを設定 */
p_work->m_pNext = NULL;

}

}

}while(0);

/*** インデックスバッファをunlockする ***/
p_mesh->UnlockIndexBuffer();

/*** 頂点バッファをunlockする ***/
p_mesh->UnlockVertexBuffer();
}


1,206ポイント を手に入れた。




Name: uzu  ..ぴよぴよ(54ポイント)   Date: 2009/06/09(火) 11:25   No:34722       
Title: 質問    
毎度お世話になります。

reallocについて質問なんですが、

reallocで追加できる、というのは、

mallocで一度確保した領域について、ということでしょうか。

たとえば、

char *c;

と定義したcに対して、

@mallocで一度領域を確保してから、必要であればreallocで拡充するものなのか、

Areallocでいきなりメモリを確保できるものなのか、

どちらなんでしょうか。

(プログラム的に言えば、たとえばループ内で文字列テーブルを作成する場合、
 @ループ1回目はmallocで1つ目の文字列を格納する領域を確保し、
  ループ2回目以降はreallocで領域を確保する

 なのか
 Aループ何回目でもreallocで領域を確保できる)


54ポイント を手に入れた。


Name: YuO  ..プログラマー(30,342ポイント)   Date: 2009/06/09(火) 11:37   No:34723     
Title: Re:質問    
いきなりreallocで確保可能です。
realloc(NULL, size)とmalloc(size)は同等の動作をします。

ref) ISO/IEC 9899:1999 7.20.3.4 The realloc function / Paragraph. 3
> If ptr is a null pointer, the realloc function behaves like the malloc function for the specified size.


49ポイント を手に入れた。

Name: uzu  ..ぴよぴよ(69ポイント)   Date: 2009/06/09(火) 11:43   No:34724 解決!     
Title: Re:質問    
>YuO様
ありがとうございます。
すっきりしました。


15ポイント を手に入れた。



Name: 初心者  ..プログラマー(32,785ポイント)   Date: 2009/06/07(日) 22:35   No:34674       
Title: 喰らいボム    
こんばんわ、はじめまして。こちらの龍神録のプログラミングの館を見ながら、作成しているのですが、
22、23章のところの話なのですが、

void graph_main(){

graph_effect(0);//敵が死ぬエフェクト

graph_effect(4);//喰らいボムのエフェクト
graph_effect(1);//ボムのエフェクト
graph_effect(2);//ボム線のエフェクト
graph_effect(3);//ボムキャラのエフェクト
}

省略していますが、このままgraph_effectの()に数をいれたままと

'graph_effect' : 関数に 1 個の引数を指定できません。

というエラーがでます。 数を取り除くと21章の方では問題なかったのですが、

22章の方の喰らいボムが発生させることができなくなります。

どうしたらよいのでしょうか?お願いします。




211ポイント を手に入れた。


Name: yu  ..プログラマー(29,449ポイント)   Date: 2009/06/07(日) 22:46   No:34675     
Title: Re:喰らいボム    
引数を与えないといけないです。
graph_effect()を変更しましょう。
(館のほうでは書かれていませんね)



void graph_effect(int knd){
for(int i=0;i<EFFECT_MAX;i++){
if(effect[i].flag>0 && effect[i].knd==knd){
if(effect[i].eff==1)//エフェクトが光エフェクトなら
SetDrawBlendMode( DX_BLENDMODE_ADD, effect[i].brt) ;
if(effect[i].eff==2)//エフェクトがαエフェクトなら
SetDrawBlendMode( DX_BLENDMODE_ALPHA, effect[i].brt) ;
DrawRotaGraphF(effect[i].x+FIELD_X+dn.x,effect[i].y+FIELD_Y+dn.y,effect,[i].r,effect[i].ang,effect[i].img,TRUE);
if(effect[i].eff==1 || effect[i].eff==2)
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
}
}
}


206ポイント を手に入れた。

Name: 初心者  ..プログラマー(32,676ポイント)   Date: 2009/06/07(日) 23:32   No:34678     
Title: Re:喰らいボム    
 yuさん、回答していただきありがとうございます。言っていたエラーはなくなりはしたのですが、

教えていただいたプログラムの8行目で、

構文エラー:'['   というのがでてきてします^^; これはどこがいけないのでしょうか?

すいません、わからないことばかりで。


109ポイント を落としてしまった。

Name: 初心者  ..プログラマー(32,720ポイント)   Date: 2009/06/07(日) 23:45   No:34679     
Title: Re:喰らいボム    
yuさん、エラーはなくなり、実行はできたのですが、喰らいボムがなぜかできないみたいですToT



44ポイント を手に入れた。

Name: 初心者  ..プログラマー(32,795ポイント)   Date: 2009/06/08(月) 00:09   No:34680     
Title: Re:喰らいボム    
喰らいボムは撃てるようにはなったのですが、なぜか死んだエフェクトというか、喰らいボム発動したのに

下から浮き上がってきてしまうのですが、これは、char.cppのところに問題があるのでしょうか?


75ポイント を手に入れた。

Name: yu  ..プログラマー(29,498ポイント)   Date: 2009/06/08(月) 17:36   No:34700     
Title: Re:喰らいボム    

おそらく

effect.cpp の enter_bom() の中に

ch.flag=0;


が書かれていないのだと思います。
これも館のほうでは書かれていませんね。
ですが、23章のフォルダの中のソースをみるとしっかり書かれていますよ。

でも最初のうちは見つけるのが大変ですね;


49ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,027,018ポイント)   Date: 2009/06/08(月) 21:21   No:34712     
Title: Re:喰らいボム    
記載漏れがあっていつもご迷惑おかけします;
今後ももしも記載漏れがあったらご報告頂けると幸いです^^;


30ポイント を手に入れた。

Name: 初心者  ..プログラマー(32,871ポイント)   Date: 2009/06/08(月) 23:05   No:34714 解決!     
Title: Re:喰らいボム    
 yuさん回答ありがとうございます。無事いけました^^ すみません、これからは頑張ってみつけられるように頑張りますm(_)m ありがとうございました。

 管理人さん、はじめまして。いつも勉強させてもらってます。わかりました、記載漏れを見つけられたらご報告いたします。


76ポイント を手に入れた。



Name: tune  ..ぴよぴよ(614ポイント)   Date: 2009/06/08(月) 19:33   No:34703       
Title: ファイルの分割    
ファイルの分割について、2つ質問があります。

まず、以下が、first.cppの内容です。

#include "Dxlib.h"
#include "second.cpp"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

ProcessMessage();
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 )return -1; //ウィンドウ化と初期化処理
SetDrawScreen( DX_SCREEN_BACK );//描画先を裏画面に設定

printfDx("%d",san());
WaitKey();

DxLib_End();
return 0;
}



そして以下が、second.cppの内容です。

int san(){
return 3;
}




1つめの質問です。
上記の状態で実行しようとすると、
「既に定義されています」
「1つ以上の複数回定義されているシンボルが見つかりました」
といったエラーが出ました。

2つめの質問です。
second.cppの2行目の、
return 3;
の部分を、
return GetRand(10);
に変えたら、
「'GetRand': 識別子が見つかりませんでした」
といったエラーが出ました。


それぞれのエラーの原因がよくわかりません。
includeのやり方がおかしいのでしょうか?教えてください。
また、ぼくの質問の仕方に不備があれば指摘していただければと思います。


614ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(89,519ポイント)   Date: 2009/06/08(月) 19:57   No:34704     
Title: Re:ファイルの分割    
>1つめの質問です。
>2つめの質問です。

分割コンパイル
多重インクルードガード

と検索すればいろいろ出てきますよ。

#GetRand()はDxLib.hをインクルードすればよいです


2倍のポイントを手に入れた! 116ポイント を手に入れた。

Name: box  ..ハッカー(141,103ポイント)   Date: 2009/06/08(月) 20:12   No:34705     
Title: Re:ファイルの分割    
> 1つめの質問です。
> 上記の状態で実行しようとすると、

実行しようとすると、とは、具体的にどのような操作を指していますか?


29ポイント を手に入れた。

Name: 紅葉  ..中級者(11,021ポイント)   Date: 2009/06/08(月) 20:12   No:34706     
Title: Re:ファイルの分割    
#include "second.cpp"

#include "second.h"

にかえて

second.hをつくりここに

int san(void);

とプロトコル宣言して実行してください。

includeではヘッダファイルを読み込むものです。


70ポイント を手に入れた。

Name: box  ..ハッカー(141,108ポイント)   Date: 2009/06/08(月) 20:28   No:34707     
Title: Re:ファイルの分割    
> includeではヘッダファイルを読み込むものです。

必ずしもそうとばかりは言い切れません。
ヘッダー以外、例えば.cや.cppをインクルードすることは、
いっこうに差し支えありません。

また、インクルードするのは、ファイルであるとも限らないそうです。


5ポイント を手に入れた。

Name: tune  ..ぴよぴよ(940ポイント)   Date: 2009/06/08(月) 20:34   No:34708     
Title: Re:ファイルの分割    
>>kazuoniさん
キーワードを教えていただきありがとうございます。
いろいろ検索してみて、ヘッダファイルの用途が分かったような気がします。

>>boxさん
言葉が曖昧で失礼しました。コンパイルのことです。
インクルードは奥が深いものですね。調べてみたいと思います。

>>紅葉さん
おかげでできました。勉強になりました。
これで質問1は解決しました。

質問2(GetRandの件)ですが、second.cppでもDxlib.hをインクルードすることで解決しました。
しかし、すでにfirst.cppでDxlib.hをインクルードしているのに、
second.cppでもインクルードするというのが、どうも不可解です。
これはいわゆる多重インクルードにならないのでしょうか?
(まぁエラーが出なかったのですから多重ではないと思いますが…)
それと、これから先、さらにcppファイルを増やす際、
毎回Dxlib.hをインクルードしなくてはならないのでしょうか?


326ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(89,599ポイント)   Date: 2009/06/08(月) 20:54   No:34709     
Title: Re:ファイルの分割    
>しかし、すでにfirst.cppでDxlib.hをインクルードしているのに、
>second.cppでもインクルードするというのが、どうも不可解です。

ヘッダーでは多重インクルードガードがかかっていると思うので
問題ないです。

例えばですが、
DxLib.hをインクルードするヘッダーファイルhd.hを
first.cpp
second.cpp
の両ファイルでインクルードすれば、毎回DxLib.hを書かなくてもよくなります。

ですが、原則として、そのソースファイル中で必要なヘッダーを
随時インクルードしたほうが、管理もしやすいかと思います。
(無駄なインクルードも避けられる)


80ポイント を手に入れた。

Name: tune  ..ぴよぴよ(996ポイント)   Date: 2009/06/08(月) 21:02   No:34710 解決!     
Title: Re:ファイルの分割    
すでにガードがかかっているということでしたか。

> ですが、原則として、そのソースファイル中で必要なヘッダーを
> 随時インクルードしたほうが、管理もしやすいかと思います。

言われてみればそうですね。
今日は理解が深まりました。ありがとうございました。


56ポイント を手に入れた。



Name: 無題  ..ぴよぴよ(399ポイント)   Date: 2009/06/08(月) 13:45   No:34689       
Title: タイトルへの戻り方について    
ゲームをクリアしたり、ゲームオーバーになったらタイトルに
戻りたいのですがどのような処理をいれたらいいですか?

(21:22 管理人によりタイトルと名前を変更いたしました。)


9ポイント を手に入れた。


Name: チルチル  ..上級者(23,400ポイント)   Date: 2009/06/08(月) 16:15   No:34694     
Title: Re:無題    
タイトルの処理の中でゲームの処理を行い
クリアした時とかに処理から抜ければ良いんじゃないでしょうか?


26ポイント を手に入れた。



Name: ほのか  ..入門者(4,199ポイント)   Date: 2009/06/04(木) 09:56   No:34481       
Title: 住所録プログラム…    
いつもお世話になっております。
C言語の課題で住所録プログラムを作成中なのですが、課題担当の方に
「ソースのiCntはアドレスにして下さい。
関数の戻り値は正常終了か異常終了を示す指標。
異常応答した際は、プログラムを終了してください。」

と言われてしまい、完成したと思っていたのですが修正しなくてはなりません。
「*」等を付けるだけではいけませんよね?;
修正方法がよくわからなくて困っています;

ソースは添付ファイルをご覧いただけると幸いです。


208ポイント を手に入れた。


Name: Mist  ..熟練のプログラマー(62,561ポイント)   Date: 2009/06/04(木) 10:06   No:34482     
Title: Re:住所録プログラム…    
こういうふうに変えればいいんじゃないでしょうか。


/* 関数名: henkou
引数 : jusyoroku *data 登録データ先頭アドレス
int *iCnt 登録者数
戻り値: bool 実行結果(true=正常, false=異常)
説明 : 登録されたデータの変更を行う関数 */
bool henkou(Jusyoroku *data,int *iCnt);


で、関数の実行もとはfalseが返ってきた場合はプログラムを安全に終了するようにする。


あと、他の掲示板で再質問されるなら規約は守ってください。

> マルチポストはOKとしています。複数の掲示板で同じ質問をするときは相互リンクし、
> どこの掲示板で同じ質問をしているか明確にして下さい。


35ポイント を手に入れた。

Name: non  ..熟練のプログラマー(45,432ポイント)   Date: 2009/06/04(木) 10:27   No:34483     
Title: Re:住所録プログラム…    
ファイルのreadとwriteの異常終了はわかりますが、他はどうするのか。
仕様をはっきり決めるべきではありませんか?


32ポイント を手に入れた。

Name: ほのか [URL]  ..入門者(4,325ポイント)   Date: 2009/06/04(木) 10:45   No:34484     
Title: Re:住所録プログラム…    
回答ありがとうございます。
申し訳ございません;Yahoo知恵袋の方でも質問させていただいておりました;

全ての関数においてiCntをアドレスにするということでしょうか?;
最初の処理区分のところでそれぞれ正常か異常かを判定すれば良いのでしょうか??;


126ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(62,744ポイント)   Date: 2009/06/04(木) 11:24   No:34485     
Title: Re:住所録プログラム…    
> 全ての関数においてiCntをアドレスにするということでしょうか?;

関数の戻り値を関数の実行結果として使用するのであれば、関数内でiCntの値を変更するような関数(現状でいえばiCntが戻り値の関数かな?)はアドレスを渡すしかないでしょう。
関数内でiCntを参照しかしない関数は値渡しでも問題ありません。(値渡しにすべき)

> 最初の処理区分のところでそれぞれ正常か異常かを判定すれば良いのでしょうか??;

nonさんも指摘されていますが何をもって異常とするかを、ほのかさんが仕様として決定しないとどこで処理すればよいかは答えようがありません。
あと、「最初の処理区分」ってなんですか?


183ポイント を手に入れた。

Name: ほのか  ..入門者(4,451ポイント)   Date: 2009/06/04(木) 11:40   No:34486     
Title: Re:住所録プログラム…    
回答ありがとうございます。

問題なく新規登録・削除・変更等が行えた場合は正常、不具合が起きた場合は異常とするようにしたいのですが…それでも大丈夫でしょうか?;

最初の処理区分というのは、「処理区分を入力してください」のswitch判定の部分です。


2倍のポイントを手に入れた! 126ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(62,657ポイント)   Date: 2009/06/04(木) 11:58   No:34487     
Title: Re:住所録プログラム…    
> 問題なく新規登録・削除・変更等が行えた場合は正常、不具合が起きた場合は異常とするようにしたいのですが…それでも大丈夫でしょうか?;

何が大丈夫かを聞きたいのでしょうか?
仕様として正しいのかどうかを聞きたいのであれば、ここではなく担当官に聞くべきでしょう。
プログラムとしてできるかどうかということであれば、まず組んでみて問題があるなら再度質問してください、としか言えないです。



87ポイント を落としてしまった。

Name: non  ..熟練のプログラマー(46,192ポイント)   Date: 2009/06/04(木) 13:24   No:34488     
Title: Re:住所録プログラム…    
例えば、新規登録のint shinki(Jusyoroku *data,int iCnt)の関数ですが、
どうなった場合があなたがいうところの不具合が起きたといえるのでしょうか?

関数の最初に
if(data!=NULL){
と、書かれていますから、data==NULLのときが不具合ということなのでしょうか?
しかし、dataがそもそもNULLなんてことがあるのでしょうか。担当教官はよく指摘しませんね。

では、最大文字数を超えた場合再入力を促すようになっていますが、これを再入力しないように
して不具合が起きたと判断することもできるでしょう。

また、printf("データを登録します。\nよろしいですか?(Y/N)>>>");で登録しなかった時を
不具合が起きたと判断することもできます。

このように仕様によって、何が不具合か変わってきます。仕様は課題を出した人か、本人が
決めなければ、私たち外野が口を出すことではありません。


2倍のポイントを手に入れた! 760ポイント を手に入れた。

Name: ほのか  ..入門者(4,490ポイント)   Date: 2009/06/04(木) 13:49   No:34489     
Title: Re:住所録プログラム…    
回答ありがとうございます。

それぞれの関数が正常に動作してiCntの値が変動した場合は正常、登録や削除をしたのにiCntの値が変わらなかった場合は異常という形にしたいです;


39ポイント を手に入れた。

Name: ほのか  ..入門者(4,590ポイント)   Date: 2009/06/04(木) 14:06   No:34490     
Title: Re:住所録プログラム…    
すみません;
引数で渡された値が、現在保持しているメンバ変数の値と同じであればTRUE、違った場合FALSEを返すという感じの方が良いでしょうか…
仕様は特に決められていないため自分で考えているのですが、どのようにすれば1番良いものなのかよくわからないので…;


100ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(62,808ポイント)   Date: 2009/06/04(木) 14:14   No:34491     
Title: Re:住所録プログラム…    
仕様の解釈なんて人それですから、ここで誰かの回答でこれが一番といっても担当官がどう評価するかなんてわかりません。
研修なんだから無理に最高のものを作ろうとせず自分の思いつく範囲、できる範囲の仕様で作ったほうがいいと思いますよ。
第一、ここで言われたとおりの仕様で作ってもあなたの勉強にはならないでしょう。


151ポイント を手に入れた。

Name: ほのか  ..入門者(4,605ポイント)   Date: 2009/06/04(木) 14:52   No:34492     
Title: Re:住所録プログラム…    
回答ありがとうございます。
引数で渡された値が、現在保持しているメンバ変数の値と同じであればTRUE、違った場合FALSEを返すという形にしたいと思います…

iCntをアドレスに変えてみたのですが、ただ「*」や「&」をつけるだけではだめなのでしょうか?;
また、それぞれの関数だけでなく、main関数で宣言しているiCntもアドレスにするべきなのでしょうか?


15ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(62,904ポイント)   Date: 2009/06/04(木) 15:30   No:34493     
Title: Re:住所録プログラム…    
> iCntをアドレスに変えてみたのですが、ただ「*」や「&」をつけるだけではだめなのでしょうか?;

どこをどう変えたのかが分からないと答えようがありません。
現在のソースを見せてください。

> それぞれの関数だけでなく、main関数で宣言しているiCntもアドレスにするべきなのでしょうか?

意味不明です。
ポインタの概念が理解できていないのか、もしくは何か思いっきり勘違いしているように思います。


96ポイント を手に入れた。

Name: ほのか  ..入門者(4,693ポイント)   Date: 2009/06/04(木) 15:39   No:34494     
Title: Re:住所録プログラム…    
現在のソースを添付しました。
このソースだと新規登録や削除等がうまくいきません…;


2倍のポイントを手に入れた! 88ポイント を手に入れた。

Name: non  ..熟練のプログラマー(46,249ポイント)   Date: 2009/06/04(木) 15:52   No:34495     
Title: Re:住所録プログラム…    
>iCnt = shinki(&data[iCnt],&iCnt);

戻り値がiCntに入ったらまずいでしょう。
関数内では、異常終了の処理をしていませんし、iCnt++;なんてのが、まだ残ってます。
関数から戻ってからの処理もありません。





57ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(63,035ポイント)   Date: 2009/06/04(木) 16:06   No:34496     
Title: Re:住所録プログラム…    
> ただ「*」や「&」をつけるだけではだめなのでしょうか?

これの言いたいことが何となくわかりました。
横着しようとしてもダメです。
そんなに簡単には修正できません。

各関数の引数、戻り値はNo:34482での私の回答を元に修正してください。
アドレスとわかるように変数名はpiCntとかにしたほうがいいかもしれませんが。
あと、iCntをアドレスで渡すのであれば関数の中も修正する必要があります。


131ポイント を手に入れた。

Name: ほのか  ..入門者(4,762ポイント)   Date: 2009/06/04(木) 16:13   No:34497     
Title: Re:住所録プログラム…    
回答ありがとうございます。

Mist様の回答を元に修正を行っているのですが、「bool shinki(Jusyoroku *data,int *piCnt);」と宣言すると下記エラーが出ました;

c:42: error: 構文解析エラー が "shinki" の前にあります
c:42: 警告: データ定義が型や記憶クラスを持っていません


69ポイント を手に入れた。

Name: ほのか  ..入門者(4,778ポイント)   Date: 2009/06/04(木) 16:15   No:34498     
Title: Re:住所録プログラム…    
申し訳ございません;
includeしていなかっただけでした;


16ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(63,065ポイント)   Date: 2009/06/04(木) 18:53   No:34506     
Title: Re:住所録プログラム…    
質問するなら規約ぐらい守りましょうよ。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1026890545


30ポイント を手に入れた。

Name: ほのか  ..入門者(4,829ポイント)   Date: 2009/06/05(金) 09:38   No:34528     
Title: Re:住所録プログラム…    
申し訳ございません;
No:34484の記事でURLを載せていたのですが…コメント部分に記載していませんでした;


51ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(63,089ポイント)   Date: 2009/06/05(金) 09:59   No:34529     
Title: Re:住所録プログラム…    
ああ、そういうことでしたか。
ただ、URLのところは発言者のHPアドレスが入っている事がほとんどなので、何か書いておいてもらわないとわかりにくいですね。


24ポイント を手に入れた。

Name: ほのか  ..入門者(4,942ポイント)   Date: 2009/06/08(月) 09:17   No:34683     
Title: Re:住所録プログラム…    
今後はコメント欄に掲載させていただきます。申し訳ございませんでした;

ソースを全体的に修正したのですが、ファイル読み込み関数もカウンタをアドレスにした方が良いのでしょうか??;
ファイル読み込み関数はiCntでなく人数が戻り値なのですが…


113ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(63,487ポイント)   Date: 2009/06/08(月) 10:49   No:34684     
Title: Re:住所録プログラム…    
> ソースを全体的に修正したのですが、ファイル読み込み関数もカウンタをアドレスにした方が良いのでしょうか??;

担当が「関数の戻り値は正常終了か異常終了を示す指標。」と言ってるのにそれを無視するのはまずいんじゃないですか?

あと、「異常応答した際は、プログラムを終了してください。」も全然できてないし。
shinki関数とかsakujo関数の戻り値はboolなのに「return *piCnt;」とか書いてるし。
こことか知恵袋で指摘されたことだけを鵜呑みで直してる感じがするんですが・・・。
修正する以前にソースコード全体を理解できていますか?


2倍のポイントを手に入れた! 382ポイント を手に入れた。

Name: ほのか  ..入門者(4,964ポイント)   Date: 2009/06/08(月) 11:14   No:34685     
Title: Re:住所録プログラム…    
すみません…;
とりあえず修正しました。


22ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(63,743ポイント)   Date: 2009/06/08(月) 11:45   No:34686     
Title: Re:住所録プログラム…    

shinki(&data[iCnt],&iCnt);
if(shinki==false){
exit(1);
}


ここは完全に間違っています。
また、shinki関数とかsakujo関数はfalseを返す所がないしdata=NULLのときは何も返していません。
どちらも、コンパイル時にエラーか警告になっていると思いますが。

今までの流れを見て思ったのは、ほのかさんは基礎的な部分でのC言語でのプログラミングが理解できておられないようですので担当官に正直に言ってもうすこし簡単なことからやり直したほうがいいと思います。


256ポイント を手に入れた。

Name: ほのか  ..入門者(4,982ポイント)   Date: 2009/06/08(月) 11:51   No:34687     
Title: Re:住所録プログラム…    
コンパイルエラー等は出ていないのですが、では戻り値がfalseだった場合はどうやって判定すれば良いのでしょうか?;

先週までの課題ですし、来週からは違う言語をやることになっているので、やり直すことは難しいです…;


18ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(64,249ポイント)   Date: 2009/06/08(月) 12:11   No:34688     
Title: Re:住所録プログラム…    
> では戻り値がfalseだった場合はどうやって判定すれば良いのでしょうか?;

私は会社で研修担当していたことがあるのでよくわかるのですが、こういう質問をすること自体基本が理解できていない証拠なんです。
関数の戻り値をどうやってチェックするかなんて基礎中の基礎です。

担当官がどこまでの完成度を求めているかはわかりませんが、私が指摘していないだけで間違いはほかにもたくさんあります。
現状では誰かに完璧な答えをもらわないと、ほのかさんの今の実力だと担当官からの指摘は解決できないと思います。
だから、「自分にはできません」と正直に報告して担当から答えを教えてもらって、それを理解するほうがよっぽどほのかさんのためになると思いますよ。


私からの回答はこれで最後にします。


2倍のポイントを手に入れた! 506ポイント を手に入れた。



Name:  ..かけだし(1,083ポイント)   Date: 2009/06/07(日) 22:24   No:34672       
Title: pngの変換について    
http://www.play21.jp/board/formz.cgi?action=res&resno=34159&page=&lognum=105&id=dixq&rln=34370
のスレ主です。

皆さん折角回答していただいたのに、返事が出来ないですみませんでした。

この質問について探していたのですが現行スレから落ちてしまってたので
もう一度上げさせていただきます。

APIとC++だけでpngを読み込めるようにしようと考えております。
今使っている↓のものではBMPしか利用できません。



//==============================================================================================
// ビットマップ読み込み(ファイルから)
//==============================================================================================
HDC LoadFileBMP(HDC hdc, LPCTSTR f_name_of_bmp){
HBITMAP hbmp;
HDC hdc_work; // 作業用ハンドル

hbmp = (HBITMAP)LoadImage(0, f_name_of_bmp, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
hdc_work = CreateCompatibleDC(hdc);
SelectObject(hdc_work, hbmp);
DeleteObject(hbmp);
// if(FAILED(hdc_work)){
// MessageBox(hWnd,TEXT("読み込みに失敗しました。"),NULL,MB_OK);
// }
return hdc_work;
}


これを拡張するか新規に関数を作ってpngも対応させたいです。
前スレのURLをみたのですがコンパイルできないものもありました・・・。

できればAPIとC++だけで読み込みたいのですが、どうにかならないでしょうか?
できるのでしたらサンプルコードを書いていただけますと助かります・・・。
人任せで申しわけないです。

VS2005AC


654ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(369,509ポイント)   Date: 2009/06/08(月) 01:49   No:34681     
Title: Re:pngの変換について    

>前スレのURLをみたのですがコンパイルできないものもありました・・

 逆に言えば、コンパイルできたものもあったわけですよね。
 
 ちなみに試してみましたところ、libpngはそのままビルドできました。
 GDI+の方は、たしかに載っていたコードそのままではコンパイルは通りませんでしたが、
ヘッダを調べたら2,3分ほどですんなり出来ました。
 クラスなどの APIが Gdiplusの名前空間内にあったことと、GetHbitmap()が GetHBITMAP()だった
ことくらいでした。

 再チャレンジしてみては?



>できるのでしたらサンプルコードを書いていただけますと助かります・

 フルスクラッチでの pngのデコードはいろいろ面倒です。


PNG 仕様書: チャンク仕様書
ttp://www.sutv.zaq.ne.jp/linuz/tks/PngSpec1.2/PNG-Chunks.html

PNG ファイルフォーマット
ttp://www.river.sannet.ne.jp/yuui/fileformat/png.html

PNG ファイルフォーマット
ttp://www14.ocn.ne.jp/~setsuki/ext/png.htm
ttp://www14.ocn.ne.jp/~setsuki/ext/chunk/IHDR.htm



 見ての通り色深度とカラータイプだけでも組み合わせればそれなりの種類になりますし、
そもそもイメージデータは圧縮されているのでそれもデコードしなければなりません。
 そのほか、インターレース形式、ガンマ値補正、ホワイトバランスなどもあり
それらも対応しなければなりません。

 そんなものをサンプルで、というのはちょっと……。


86ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(369,368ポイント)   Date: 2009/06/08(月) 01:57   No:34682     
Title: Re:pngの変換について    
Vector:imgctl.dll (Windows95/98/Me / プログラミング)
ttp://www.vector.co.jp/soft/win95/prog/se222453.html

 フリーウェアですが、これも使えそうですね(試してはいませんが)。
 PNGtoDIB()で DIBにしてから、imgctl_util.cにある DIBtoOBJ()を使えば
HBITMAPに変換できそうです。


141ポイント を落としてしまった。



Name: ルリ  ..ぴよぴよ(71ポイント)   Date: 2009/06/07(日) 22:52   No:34676       
Title: フォントについて    
フォントをWIndowsにインストールされているものを使いたいです。

以下だと論理フォント?で自分でしか作り出せないのかと思います。
これをゴシック体とか名前で指定できないでしょうか?



HFONT hfont = CreateFont(Size, 0, 0, 0, 0, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, NULL);




71ポイント を手に入れた。


Name: YuO  ..プログラマー(30,293ポイント)   Date: 2009/06/07(日) 23:06   No:34677     
Title: Re:フォントについて    
最後の引数がフォント名です。
http://msdn.microsoft.com/en-us/library/dd183499.aspx

ただし,CHARSETの指定の矛盾はフォント名の矛盾よりも優先されます。
このため,SHIFTJIS_CHARSETを持たないフォント名を指定しても,他のフォントが選択されます。


121ポイント を手に入れた。



Name: 蒼空(初心者)  ..ぴよぴよ(563ポイント)   Date: 2009/06/07(日) 18:48   No:34665       
Title: ちょっと、弾幕について    
ちょっと弾幕について聞きたいのですが、
ボス本体から円状の弾が出て、60カウントで、
20カウント止まって、すべての弾が自機に向かって
飛んでくるって言う弾幕を作りたいのですが、
なぜか、自機に向かってくるとき、
円状のまま向かってくるのです。
ちなみにソースは、龍神録のものを使いさせていただいております。
念のため、ソースも乗せておいて置きます。

void boss_shot_bulletH015(){
#define TM002 650
int i,k,t=boss_shot.cnt%TM002;
double angle;

if(t%60 == 0){
bullet_way(boss.x, boss.y, 30, bossatan2(), PI/15, 3, 3, 0, 0
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].flag = 1;
}
for(i=0;i < BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].flag > 0){
int cnt=boss_shot.bullet[i].cnt;
if( cnt == 60 ){
boss_shot.bullet[i].spd = 0;
boss_shot.bullet[i].angle=bossatan2();
}
if( cnt == 80 ){
boss_shot.bullet[i].spd= 3;
}
}
}
}

あ、ちなみに「龍神録プログラミングの支館」で「弾幕を簡略化してみる」をしています。


303ポイント を手に入れた。


Name: yu  ..プログラマー(29,243ポイント)   Date: 2009/06/07(日) 19:37   No:34667     
Title: Re:ちょっと、弾幕について    
bossatan2();
は自機とボスの角度を出します。

弾と自機の角度を入れれば期待通りになるはずです。


#以下追記

具体的には
bossatan2(); のところを
bossatan3( i , ch.x , ch.y ); に変更してやれば良いです。

後、cntが80のときに角度変更したほうが良いかもしれません。
60から80の20フレーム内で自機が移動するとずれてしまいますよ。


45ポイント を手に入れた。

Name: 蒼空(初心者)  ..ぴよぴよ(599ポイント)   Date: 2009/06/07(日) 22:32   No:34673 解決!     
Title: Re:ちょっと、弾幕について    
早速、試したところ無事解決できました!

本当にありがとうございました。


36ポイント を手に入れた。



Name: 文字の表示位置  ..ぴよぴよ(107ポイント)   Date: 2009/06/07(日) 13:46   No:34647       
Title: 文字列を全体的に中央に表示    

文字列を全体的に中央に表示する関数を作っております。


// 定義されてます
WIN_W = 640
FONT_SIZE 16
str[128] = "ここが動的に変わります。主に2バイト文字"
int str_l = strlen(str); // 文字の長さ
Px = (WIN_W-(str_l/2 * FONT_SIZE))/2;


これでTextOutなどでPxを渡して表示すると
文字数が少ないと中心に見えるのですが
多くなると左にずれていってしまいます。

説明がわかりにくいのですが
イメージとしてはワード等の周王よりみたいな機能を作っております。




107ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(369,423ポイント)   Date: 2009/06/07(日) 15:28   No:34657     
Title: Re:文字列を全体的に中央に表示    
 環境不明で、しかも「ワード等の周王より」というのがどうにも意味不明なので
望んだ回答である自信はありませんが、

GetTextExtentPoint32
ttp://msdn.microsoft.com/en-us/library/ms901137.aspx
ttp://msdn.microsoft.com/ja-jp/library/cc410400.aspx

この関数を使って計算すれば、出来るかもしれません。

 あ、但し strの型が charであるなら、GetTextExtentPoint32Aとしてください。

 ついでに言えば WIN_Wがウインドウの横幅のつもりであるなら、
決めうちせずに GetClientRect()で取得した方が大きさが変わっても
正しく処理できるようになるはずです。


166ポイント を手に入れた。

Name: 文字の表示位置  ..ぴよぴよ(209ポイント)   Date: 2009/06/07(日) 15:56   No:34658     
Title: Re:文字列を全体的に中央に表示    
すいません。
環境を書いていませんでした
環境はWindowsAPIとC++です。

誤字で申し訳ないです。
周王ではなく中央にです。

BOOL GetTextExtentPoint32

となっているのですが戻り値は2種類しか返らないのに
文字のサイズを取得できるのでしょうか?

参考になるのかわからないのですが
http://www.youtube.com/watch?v=RAUwNxA5Gn0&feature=PlayList&p=669DDE5809DEBBF1&index=19
こういうかんじのメッセージを1行でだしたいんです。


209ポイント を手に入れた。

Name: MNS  ..中級者(9,607ポイント)   Date: 2009/06/07(日) 16:39   No:34659     
Title: Re:文字列を全体的に中央に表示    
BOOL GetTextExtentPoint32(

HDC hdc, // デバイスコンテキストのハンドル
LPCTSTR lpString, // 文字列
int cbString, // 文字列内の文字数
LPSIZE lpSize // 文字列のサイズ
);
とありますので、
SIZE構造体を作って、そのポインタをlpSizeに渡せば良いのではないでしょうか?
参考:http://wisdom.sakura.ne.jp/system/winapi/win32/win133.html


138ポイント を手に入れた。

Name: 文字の表示位置  ..ぴよぴよ(129ポイント)   Date: 2009/06/07(日) 22:08   No:34671     
Title: Re:文字列を全体的に中央に表示    
すみません。
できました〜

皆様ありがとうございます。


22ポイント を手に入れた。



Name: you  ..ぴよぴよ(672ポイント)   Date: 2009/06/07(日) 20:03   No:34668       
Title: 無題    
すみません、また止まってしまいました・・・今度は19章の敵の消滅エフェクトをつくろうのところなんですが、

---- effect.cpp ----

#include "../include/GV.h"

//エフェクトの登録空き番号を探す
int search_effect(){

のところで

1>..\dat\img\effect\eff.cpp(1) : fatal error C1083: include ファイルを開けまん。'../include/GV.h': No such file or directory

といったエラーがでたのですが、これはどう対処すればいいのでしょうか?

よろしく願いします。


169ポイント を手に入れた。


Name: pooka [URL]  ..初心者(5,032ポイント)   Date: 2009/06/07(日) 20:32   No:34669     
Title: Re:無題    
>..\dat\img\effect\eff.cpp
eff.cppはdat\img\effectというフォルダにあるようですがここであってますか?
龍神録ではmydat\sourceにcppファイルは保存されているので確認してみてください。


34ポイント を落としてしまった。

Name: you  ..ぴよぴよ(735ポイント)   Date: 2009/06/07(日) 20:49   No:34670 解決!     
Title: Re:無題    
>>pookaさん
毎回回答ありがとうございます。無事いけました。effect.cppの追加の方法がいまいちわかってなかったみたいです。

mybot\sourceにeffect.cppを作成でいけました^^

ありがとうございました。


63ポイント を手に入れた。



Name: Gokuri  ..ぴよぴよ(137ポイント)   Date: 2009/06/07(日) 06:09   No:34625       
Title: セーブファイルの作り方    
セーブファイルの作り方

数値をテキストなどで書き込んだり
読み込んだりすることはできるようになったのですが

複数の値を書き込んだり
読み込んだりするにはどうすればよいのでしょうか?



typedef struct{
int Score;
int Stage;
int PlayTime;
}SAVE;

SAVE Save;



こんなセーブデータをつくりたいです・・・。

現在の書き込み用関数です。
これでは1つしかセーブできずに何のデータかわからないです・・・



void WriteFile(int Num)
{

// printf("Data = %d\n",(int)Num);

FILE *fp; // ファイルポインタを宣言

// ファイルを開く
if((fp = fopen("Save.txt", "w")) == NULL){ // wは書き込み rで読み込み
printf("FILE OPEN ERROR\n"); // エラー処理
}

fprintf(fp, "%d",(int)Num); // ファイルへ文字列を書き込む

// ファイルを閉じる
if(fclose(fp) == EOF){
MessageBox(hWnd,TEXT("セーブに失敗しました。"),NULL,MB_OK); // エラー処理
}
}




137ポイント を手に入れた。


Name: Gokuri  ..ぴよぴよ(197ポイント)   Date: 2009/06/07(日) 06:10   No:34626     
Title: Re:セーブファイルの作り方    
こんなセーブデータをつくりたいです・・・。

こんなデータがあるのですがこれを同じテキストファイルにセーブしたいです。


60ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,026,984ポイント)   Date: 2009/06/07(日) 10:09   No:34629     
Title: Re:セーブファイルの作り方    
うちで解説しているゲームの館の
http://dixq.net/g/#t0
この辺参考にならないでしょうか?

構造体はまとめて書き出し、読み込みが出来るので便利です。



46ポイント を手に入れた。

Name: Gokuri  ..ぴよぴよ(46ポイント)   Date: 2009/06/07(日) 13:06   No:34640     
Title: Re:セーブファイルの作り方    
管理人さま

使っている環境をのせないですみません。

DXをつかわずにAPIだけで組んでいるので
DXで用意されています関数が使えません。


46ポイント を手に入れた。

Name: Libra  ..初心者(8,259ポイント)   Date: 2009/06/07(日) 13:33   No:34644     
Title: Re:セーブファイルの作り方    
上のURLはファイル入出力を用いたセーブデータの作り方の解説なので、DxLibは用いられてません。
標準ライブラリのみの関数です。

質問者さんのソースの

fprintf(fp, "%d",(int)Num);

は、NUMに入っているデータをファイルに書き込むという動作なので

fprintf(fp, "%d %d %d",(int)Num,(int)Time,(int)Score);
↑最初の書き込みを修正
と、3つ書いてやれば3種類のデータを書き込めます。


237ポイント を手に入れた。

Name: MNS  ..中級者(9,378ポイント)   Date: 2009/06/07(日) 13:35   No:34645     
Title: Re:セーブファイルの作り方    
fwrite や fread は特にDirectX関連の関数ではなく、
標準入出力ライブラリの関数だったと思いますが?


31ポイント を手に入れた。

Name: bitter_orange  ..かけだし(1,883ポイント)   Date: 2009/06/07(日) 19:17   No:34666     
Title: Re:セーブファイルの作り方    
fwrite や fread 関数をどうしても使いたくないなら、
Win32API の ReadFile や WriteFile を使ってみたらどうですか?
自分は使わないのでよくわかりませんが、
たしかこれらの関数も構造体を入出力できたと思います。
ttp://www.geocities.jp/ky_webid/win32c/051.html
個人的な意見ですが、他の方々が仰る通り、fread や fwrite を使用したほうがいいと思います。
あとエラー時は perror 関数を使ったほうがいいかもしれないです。


136ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +