C言語何でも質問掲示板

Total hit  今日  昨日  



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

 
   Viual studioのEditio ....   
     ・[38801] YuO 
     ・[38802] バグ 
     ・[38844] ターボ 
   龍神録とシューティン ....   
     ・[38832] situmon 
   セーブデータ作成につ ....   
     ・[38765] ねこ 
     ・[38776] rs 
     ・[38778] rs 
     ・[38786] non 
     ・[38790] バグ 
     ・[38792] バグ 
     ・[38831] rs 
   d3dx8.hが開けない   
     ・[38731] 御津凪 
     ・[38752] toyo 
     ・[38762] スー 
     ・[38763] 御津凪 
     ・[38830] スー 
   開けません!!   
     ・[38773] zwi 
     ・[38775] ねこ 
     ・[38777] zwi 
     ・[38827] ねこ 
   自機ショットのエラー ....   
     ・[38804] conio 
     ・[38805] まる 
     ・[38806] conio 
     ・[38807] まる 
   ボス弾幕について   
     ・[38744] situmon 
     ・[38803] mik 
   当たり判定について   
     ・[38707] MNS 
     ・[38719] マナ 
     ・[38720] TRUTH 
     ・[38748] マナ 
     ・[38753] pooka 
     ・[38782] マナ 
     ・[38784] pooka 
   'SHOT_BULLET_MAX' : ....   
     ・[38742] APS 
     ・[38743] あ〜る 
     ・[38745] APS 
     ・[38746] box 
     ・[38747] APS 
     ・[38749] zwi 
     ・[38750] suzume 
     ・[38780] APS 
   中ボス出現時について   
     ・[38764] ねこ 
     ・[38766] 夢夢 
   初心者からの質問   
     ・[38759] MNS 
     ・[387541252547938] Ain 
   画像の移動について   
     ・[38756] ねこ 
     ・[38757] 華穂 
     ・[38758] Mist 
   FC音源について   
     ・[38681] 羽流布 
     ・[38682] situmon 
     ・[38683] 羽流布 
     ・[38686] 銘茶ハリガネ 
     ・[38751] 256bit 
   音楽同調弾幕をつくっ ....   
     ・[38645] kazuoni 
     ・[38646] 御津凪 
     ・[38656] kazuoni 
     ・[38659] 御津凪 
     ・[38728] 御津凪 
     ・[38732] にょろーん 
     ・[38736] 御津凪 
   ゲーム(DXライブラリ ....   
     ・[38733] 御津凪 
     ・[38734] にょろーん 
     ・[38735] にょろーん 
   シーンごとのソース管 ....   
     ・[38693] kazuoni 
     ・[38698] おむずび 
     ・[38701] zwi 
     ・[38702] おむずび 
     ・[38703] MNS 
     ・[38711] おむずび 
     ・[38713] MNS 
     ・[38714] おむずび  
     ・[38715] MNS 
     ・[38716] おむすび 
     ・[38717] zwi 
     ・[38718] Justy 
     ・[38722] zwi 
     ・[38723] おむすび 
     ・[38724] omusubi 
     ・[38725] おむすび 
     ・[38726] Justy 
     ・[38727] おむすび 
     ・[386901253013777] おむすび  
   無題   
     ・[38695] Mist 
     ・[38696] UKONN 
     ・[38697] UKONN 
   宣言と定義について   
     ・[38673] zwi 
     ・[38676] T.C.D 
     ・[38679] zwi 
   Ryujin.exe   
     ・[38561] zwi 
     ・[38564] fnny 
     ・[38579] zwi 
     ・[38581] Justy 
     ・[38633] fnny 
     ・[38635] zwi 
     ・[38636] fnny 
     ・[38637] Justy 
     ・[38664] T.C.D 
     ・[38678] fnny 
   無限大について   
     ・[38674] ルファー 
     ・[38675] ルファー 
   エラー   
     ・[38510] Dixq (管理人) 
     ・[38512] あいーん 
     ・[38513] box 
     ・[38666] あいーん 
     ・[38667] Mist 
     ・[38668] あいーん 
     ・[38670] Mist 
     ・[38671] バグ 
   slnファイルが開け ....   
     ・[38654] 羽流布 
     ・[38658] へたれ 
     ・[38665] non 
   DirectXSDKについて   
     ・[38360] 御津凪 
     ・[38364] nestaw 
     ・[38655] wisteria 
     ・[38657] 御津凪 
     ・[38663] wisteria 
   C++についてなのですが ....   
     ・[38568] sizuma 
     ・[38599] ふぁみた 
     ・[38614] sizuma 
     ・[38617] ふぁみた 
     ・[38620] sizuma 
     ・[38650] ふぁみた 
     ・[385661253071951] ふぁみた 
   datフォルダとinclude ....   
     ・[38644] Justy 
     ・[38649] 朽木 
   オプションを自機の周 ....   
     ・[38640] mnkr 
     ・[38642] pooka 
     ・[38648] kai 
   プログラミングの参考 ....   
     ・[38550] 初級者 
     ・[38551] sizuma 
     ・[38552] kazuoni 
     ・[38553] MNS 
     ・[38555] zwi 
     ・[38556] たかぎ 
     ・[38647] ととろ 
   コンパイル時のエラー ....   
     ・[38616] box 
     ・[38618] T.C.D 
     ・[38621] box 
     ・[38622] sizuma 
     ・[38623] T.C.D 
     ・[38624] box 
     ・[38625] T.C.D 
     ・[38634] zwi 
     ・[38639] T.C.D 
   漢字弾幕の警告「'fop ....   
     ・[38595] conio 
     ・[38613] 御津凪 
     ・[38627] 坂本 
     ・[38628] kazuoni 
     ・[38629] 御津凪 
     ・[38632] 坂本 
   ゲームの配布について   
     ・[38604] zwi 
     ・[38606] Justy 
     ・[38607] mnkr 
     ・[38608] mnkr 
     ・[38609] バグ 
     ・[38610] mnkr 
     ・[38611] sizuma 
     ・[38612] 御津凪 
     ・[38619] mnkr 
   自機オプションについ ....   
     ・[38600] Justy 
     ・[38605] @ 
   無題   
     ・[38542] バグ 
     ・[38559] SCI 
     ・[38582] UKONN 
     ・[38585] box 
     ・[38603] UKONN 
   自動実行   
     ・[38588] バグ 
     ・[38594] 恐 
     ・[38596] バグ 
     ・[38602] zwi 
   ファイルデータ→二次 ....   
     ・[38572] box 
     ・[38590] yussanstar 
     ・[38591] sizuma 
   無題   
     ・[38586] kazuoni 
   一筆書きゲーム   
     ・[38584] lbfuvab 
   ショットが発射されま ....   
     ・[38368] box 
     ・[38379] zyf 
     ・[38384] pooka 
     ・[38435] zyf 
     ・[38440] pooka 
     ・[38563] zyf 
   プログラミングの問題   
     ・[38516] たいちう 
     ・[38518] matsu 
     ・[38519] sizuma 
     ・[38526] Dixq (管理人) 
     ・[38538] 夏天 
     ・[38540] クロウ 
     ・[38541] クロウ 
     ・[38562] Kou 
     ・[385151252331906] matsu 
   「雑談」プロジェクト ....   
     ・[38445] たいちう 
     ・[38446] 御津凪 
     ・[38448] zwi 
     ・[38464] dic 
     ・[38509] Dixq (管理人) 
     ・[38529] 山崎 
     ・[38534] zwi 
     ・[38560] zwi 
   フェードインとフェー ....   
     ・[38494] Dixq (管理人) 
     ・[38554] kai 
     ・[38557] kazuoni 
   変数の入れ物は必要な ....   
     ・[38528] kazuoni 
     ・[38533] zwi 
     ・[38535] conio 
     ・[38548] ととろ 
   無題   
     ・[38527] Dixq (管理人) 
     ・[38537] under 
   typedefについてちゃん ....   
     ・[38522] tkmakwins15 
     ・[38524] たかぎ 
     ・[38531] uwlover 
     ・[38532] uwlover 
     ・[38536] 初級者 
   東方文花帖でよく使わ ....   
     ・[38461] チルチル 
     ・[38462] チルチル 
     ・[38465] チルチル 
     ・[38467] situmon 
     ・[38469] チルチル 
     ・[38471] チルチル 
     ・[38474] situmon 
     ・[38475] チルチル 
     ・[38476] 御津凪 
     ・[38478] チルチル 
     ・[38481] 御津凪 
     ・[38485] チルチル 
     ・[38489] situmon 
     ・[38490] situmon 
     ・[38492] チルチル 
     ・[38496] チルチル 
     ・[38497] チルチル 
     ・[38498] チルチル 
     ・[38499] situmon 
     ・[38500] チルチル 
     ・[38502] チルチル 
     ・[38503] situmon 
     ・[38504] チルチル 
     ・[38505] チルチル 
     ・[38511] situmon 
     ・[38514] チルチル 
     ・[38520] チルチル 
     ・[38530] situmon 
     ・[384581259067360] icon 

Name: ターボ  ..かけだし(2,199ポイント)   Date: 2009/09/04(金) 19:02   No:38798       
Title: Viual studioのEditionと専門書    
こんばんは。

Visual Studioには色々なEditionが有りますが、専門書は各Editionごとに分かれていない様に思われるのですが、例えばVisual C++のプログラミングをする時、まず本を見て勉強すると思うのですが、通常売っている本はどのEdition対応になるのでしょうか?初心者というかVisual Stdioは無知なので親切な方がいっらっしゃったら教えてほしいのです。プログラミングは趣味でGCCでc言語の本に書いてある事を数冊分やった程度です。

また各EditionごとExpress EditionとStandrd EditionとProfessionl Editionの違いを知りたいと思った場合、どのようにして勉強すればよいのでしょうか?マイクロソフトのホームページを見たのですが、専門用語が色々書いてあって良く解りませんでした。

よろしくお願いします。


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


Name: YuO  ..プログラマー(33,296ポイント)   Date: 2009/09/04(金) 19:45   No:38801     
Title: Re:Viual studioのEditionと専門書    
基本的に,各Editionは機能について上位・下位の関係にあります。
上位のEditionは原則的に下位の機能をすべて含みます。
最下位 Express Editions - Standard Edition - Professional Edition - Team Editions - Team Suite 最上位
Express Editions: Visual C# / Visual Basic / Visual C++ / Visual Web Developer
Team Editions: Architecture Edition / Development Edition / Test Edition

通常,書籍は特定の機能・バージョンを対象としている場合を除いて,Express Edition以上を対象に書いてあるものがほとんどです。
# VC++だとMFC関連はExpress Editionの対象外ですが。
なので,大抵の本はそのままどのEditionでも使えます。というより,Express Editionを対象外にするような内容の本が少ないのが現状です。
また,普通に買えるのはおそらくProfessional Editionまででしょうから,そうなると本当に「出来る事が違う」程度の差になってきます。
http://www.microsoft.com/japan/msdn/vstudio/2008/product/compare.aspx
# Team Editionsは参考価格で787,500円, Team Suiteは参考価格で1,575,000円 ( https://msdn.microsoft.com/ja-jp/subscriptions/dd197624.aspx )


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

Name: バグ  ..ハッカー(169,965ポイント)   Date: 2009/09/04(金) 19:50   No:38802     
Title: Re:Viual studioのEditionと専門書    
Editionによる違いというよりは開発に使用するライブラリの違いで選択した方がいいのではないかと思います。

.NETを使用するならC++/CLIの解説書を、MFCを使用するならMFCの解説書を、WINAPIを使用するならWINAPIの解説書を…といった具合です。

全部がある程度解説されている本ならば、個人的には林晴比古さんの著書がいいかな?

ただし、C++の入門書ではなく、あくまでもVC++に関する書籍です。内容もリファレンスに近い感じではあるので、MSDNを読んで理解できるならば無理して購入する必要もないかな?

ttp://www.amazon.co.jp/gp/aw/d.html?a=4797352256


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

Name: ターボ  ..かけだし(2,234ポイント)   Date: 2009/09/05(土) 14:59   No:38844 解決!     
Title: Re:Viual studioのEditionと専門書    
YuOさんバグさん返信ありがとうございます。

大変参考になりました。


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



Name: situmon  ..熟練のプログラマー(44,443ポイント)   Date: 2009/09/04(金) 15:25   No:38788       
Title: 龍神録とシューティングゲームの館での敵表示、敵の弾幕表示の大きな違い。    
タイトルのとおりなのですが 、龍神録とシューティングゲームの館での敵表示、敵の弾幕表示の大きな違い
はなんでしょう?
またメリットデメリットを教えてください。


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


Name: situmon  ..熟練のプログラマー(44,459ポイント)   Date: 2009/09/05(土) 10:50   No:38832 解決!     
Title: Re:龍神録とシューティングゲームの館での敵表示、敵の弾幕表示の大きな違い。    
すいません、自己解決しました。

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



Name: rs  ..ぴよぴよ(42ポイント)   Date: 2009/09/03(木) 13:22   No:38760       
Title: セーブデータ作成について    
現在シューティングゲームの環境設定などを保存する
セーブデータをプログラム側からでも直接テキストファイルからでも変更できるようにと
考えています。そこで↓のように
*---------------------[ 音量関係 ]---------------------
*BGM VOLUME
bgm volume = 100%

*SE VOLUME
se volume = 100%
テキストファイルに記述しているのですが思ったとおりに操作できなかったので質問させていただきます。
具体的にやりたいことは
・ファイルの数字の部分だけが読み込む
・プログラム側から変更を保存する場合できるだけ手間を減らしたい
("bgm volume = %d %%"と一々書くのを省略したい)
です、初歩的な質問かもしれませんがよろしくお願いします。
Cはファイル操作が苦手ですがポインタ操作の方法などは習得しています。


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


Name: ねこ  ..プログラマー(38,320ポイント)   Date: 2009/09/03(木) 14:51   No:38765     
Title: Re:セーブデータ作成について    
テキストに書き出してるならINIでも良いんじゃないでしょうか。


// 書き出し
char cBgm[ 64 ] = "";
char cSe[ 64 ] = "";
sprintf( cBgm, "%d", iBgmVolume ); // 文字列に変換
sprintf( cSe, "%d", iSeVolume ); // 文字列に変換

// 書き出し( セクション名、パラム名、書き出す文字、ファイル名 )
WritePrivateProfileString( "SOUND", "BGM_VOLUME", cBgm, "CONFIG.INI" );
WritePrivateProfileString( "SOUND", "SE_VOLUME", cSe, "CONFIG.INI" );

// 読み込み( セクション名、パラム名、データが無かった時の戻り値、ファイル名 )
iBgmVolume = GetPrivateProfileInt( "SOUND", "BGM_VOLUME", 100, "CONFIG.INI" );
iSeVolume = GetPrivateProfileInt( "SOUND", "SE_VOLUME", 100, "CONFIG.INI" );

// CONFIG.INIの中
[SOUND]
BGM_VOLUME=100
SE_VOLUME=100


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

Name: rs  ..ぴよぴよ(9ポイント)   Date: 2009/09/03(木) 23:35   No:38776     
Title: Re:セーブデータ作成について    
御返信ありがとうございます。
できうる限りtxtファイルでの実装が好ましいのですが
ソースを拝見する限り簡潔で便利そうですね、
参考にさせていただきます。


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

Name: rs  ..ぴよぴよ(40ポイント)   Date: 2009/09/04(金) 00:38   No:38778     
Title: Re:セーブデータ作成について    
すいません読み込みに関しては自己解決いたしました、
引き続き保存の方法をご教授お願いいたします。


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

Name: non  ..熟練のプログラマー(61,918ポイント)   Date: 2009/09/04(金) 12:15   No:38786     
Title: Re:セーブデータ作成について    
>・プログラム側から変更を保存する場合できるだけ手間を減らしたい
>("bgm volume = %d %%"と一々書くのを省略したい)

誰の手間を減らしたいのでしょうか?
すでにあるファイルの特定の場所の値だけを書き直すプログラムを作ると、
それ以上に面倒なプログラムになり、プログラマの手間は増えますが・・・・



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

Name: バグ  ..ハッカー(169,548ポイント)   Date: 2009/09/04(金) 15:58   No:38790     
Title: Re:セーブデータ作成について    
現実逃避気味(苦笑)にお手軽保存&読み込み用のクラスを作成してみました。
汚いソースなのは仕様なので気にしないでください(笑)
まずは、クラスのソースを…




#pragma once

#include <map>
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>

class StatusFile
{
private:
std::map<std::string, std::string> m_data;

public:
StatusFile(void)
{
clear();
}

~StatusFile(void)
{
}

void clear(void)
{
m_data.clear();
}

void set(std::string name, std::string data)
{
m_data.insert(std::map<std::string, std::string>::value_type(name, data));
}

void set(const char* name, std::string data)
{
std::string buf = name;
set(buf, data);
}

std::string get(std::string name)
{
return m_data[name];
}

std::string get(const char* name)
{
std::string buf = name;
return get(buf);
}

bool save(const char* path)
{
std::fstream fs(path, std::ios::out);
if (fs.fail() == true)
{
return false;
}

for each (const std::pair<std::string, std::string> buf in m_data)
{
fs << buf.first << "=" << buf.second << std::endl;
}
fs.close();
return true;
}

bool load(const char* path)
{
std::fstream fs(path, std::ios::in);
if (fs.fail() == true)
{
return false;
}

m_data.clear();
while (fs.eof() == false)
{
std::string buf, pat("="), rep(" ");
std::getline(fs, buf);
if (buf.length() < 3) continue;
buf = replace(buf, pat, rep);
std::stringstream ss(buf);
std::string name, data;
ss >> name >> data;
set(name, data);
}
fs.close();
return true;
}

private:
std::string replace(const std::string& source, const std::string& pattern, const std::string& placement)
{
std::string result;
std::string::size_type pos_before = 0;
std::string::size_type pos = 0;
std::string::size_type len = pattern.size();
while ((pos = source.find(pattern, pos)) != std::string::npos)
{
result.append(source, pos_before, pos - pos_before);
result.append(placement);
pos += len;
pos_before = pos;
}
result.append(source, pos_before, source.size() - pos_before);
return result;
}
private:
};


#include <string>
#include <sstream>

template <class Type>
class Convert
{
public:
static std::string toString(const Type& val)
{
std::stringstream ss;
ss << val;
return ss.str();
}

static Type toValue(std::string str)
{
std::stringstream ss;
ss << str;
Type type;
ss >> type;
return type;
}
};



次に使用例を…



#include <iostream>
#include "StatusFile.h"

void main(void)
{
// StatusFileクラスの実体を作成する
StatusFile sf;

// 保存したいデータをセットしていく
sf.set("HP", Convert<int>::toString(10));
sf.set("MP", Convert<int>::toString(20));
sf.set("AP", Convert<int>::toString(30));
sf.set("DP", Convert<int>::toString(40));
sf.set("SP", Convert<int>::toString(50));
sf.set("PositionX", Convert<double>::toString(123.45));
sf.set("PositionY", Convert<double>::toString(678.90));
sf.set("EventFlag", Convert<bool>::toString(true));
sf.set("String", Convert<char*>::toString("TestString"));

// パスを指定して保存する
sf.save("test.txt");

// パスを指定してStatusFileクラス内へデータを展開する
sf.load("test.txt");

// 値を取り出して、文字列→数値へ
int hp = Convert<int>::toValue(sf.get("HP"));
int mp = Convert<int>::toValue(sf.get("MP"));
int ap = Convert<int>::toValue(sf.get("AP"));
int dp = Convert<int>::toValue(sf.get("DP"));
int sp = Convert<int>::toValue(sf.get("SP"));
double posx = Convert<double>::toValue(sf.get("PositionX"));
double posy = Convert<double>::toValue(sf.get("PositionY"));
bool flag = Convert<bool>::toValue(sf.get("EventFlag"));
}



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

Name: バグ  ..ハッカー(169,798ポイント)   Date: 2009/09/04(金) 16:10   No:38792     
Title: Re:セーブデータ作成について    
えっと、忘れてました…
上記使用例を実行した際のファイルへの出力です。

AP=30
DP=40
EventFlag=1
HP=10
MP=20
PositionX=123.45
PositionY=678.9
SP=50
String=TestString

こんな感じで出力されます。勿論、テキストエディタで編集してもらっても問題ありません。
大事な事を書き忘れておりました。このプログラムは、"="でステータス名とデータを分けていますので、文字列を保存する際に"="が含まれていると、正常に読み込む事が出来ません。
そういう訳ですので、どうしても"="を使いたい場合には、自分でなんとかしてください(ぉぃ)


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

Name: rs  ..ぴよぴよ(187ポイント)   Date: 2009/09/05(土) 06:44   No:38831 解決!     
Title: Re:セーブデータ作成について    
ご返信ありがとうございます。
>>すでにあるファイルの特定の場所の値だけを書き直すプログラムを作ると、
それ以上に面倒なプログラムになり、プログラマの手間は増えますが・・・・
確かにそうなってしまうようですね、設計を見直すことを考えてみます。
ソースコードありがとうございます。>>ハッカー氏
わからない所はググリながら参考にさせていただこうと思います、
皆様本当にありがとうございました。


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



Name: スー  ..初心者(7,753ポイント)   Date: 2009/09/02(水) 02:07   No:38729       
Title: d3dx8.hが開けない    
こんばんはスーです。
早速ですが質問?です。

DirectXでゲームを作ろうと思いました。
ネットの解説サイトを参考にしながら勉強しているのですが、ソースをコピーしたときに
include ファイルを開けません。'd3dx8.h'
と表示されます。

インストールされているDirectXのバージョンは
Microsoft DirectX SDK (November 2008)
Microsoft DirectX SDK (August 2007)
の二つです。
このバージョンにはd3dx8.hは含まれていない様子です。
d3dx8.hのバージョンが入ったDirectX SDKをダウンロードできるような場所を教えいただける方、あるいはインストーラーをいただける方はいませんでしょうか?
よろしくお願いします。




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


Name: 御津凪 [URL]  ..ハッカー(111,819ポイント)   Date: 2009/09/02(水) 02:36   No:38731     
Title: Re:d3dx8.hが開けない    
d3dx8.h があるバージョンは DirectX 8 系で、マイクロソフトのダウンロードサイトで探せばあると思いますが、
たいていの場合そこまでせずに d3dx9.h に書き換えるだけで大体通ると思います。

そもそもその解説サイトのソースが古いので、現行のバージョン 9 に対応した解説サイトを探した方がいいと思いますよ。
(8 と 9 とでは結構違いがあるので)


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

Name: toyo  ..熟練のプログラマー(40,943ポイント)   Date: 2009/09/03(木) 07:06   No:38752     
Title: Re:d3dx8.hが開けない    
自分のパソコンにインストールしてあるのを見てみましたが
Microsoft DirectX 9.0 SDK (Summer 2004)
にはありました
Microsoft DirectX 9.0 SDK (February 2005)
ではなくなってますね

http://www.microsoft.com/downloads/details.aspx?familyid=FD044A42-9912-42A3-9A9E-D857199F888E&displaylang=en


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

Name: スー  ..初心者(7,817ポイント)   Date: 2009/09/03(木) 13:56   No:38762 解決!     
Title: Re:d3dx8.hが開けない    
御津凪さん、toyoさんお返事ありがとうございます。

無事にMicrosoft DirectX 9.0 SDK (Summer 2004) をインストールし、コンパイルできました。
ありがとうございます。

バージョン 9の解説サイトが少なく、バージョン 8の方が多かったのでバージョン 8で勉強しようと思っていました。
よろしければバージョン 9の解説サイトを教えていただけないでしょうか?

解決はしましたので解決にしておきます。


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

Name: 御津凪 [URL]  ..ハッカー(112,185ポイント)   Date: 2009/09/03(木) 14:25   No:38763     
Title: Re:d3dx8.hが開けない    
ゲームつくろー!
ttp://marupeke296.com/GameMain.html

基本ここで DirectX 9 は覚えられると思います。


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

Name: スー  ..初心者(7,855ポイント)   Date: 2009/09/05(土) 03:01   No:38830     
Title: Re:d3dx8.hが開けない    
御津凪さんお返事ありがとうございます。

親切な解説サイトなので助かっています。
DirectXを使えるようにがんばってみます。

ありがとうございました。


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



Name: ねこ  ..プログラマー(38,511ポイント)   Date: 2009/09/03(木) 17:28   No:38770       
Title: 開けません!!    
龍神録を作ろうと一括ダウンロードし、
Visual C++で「RyuJin.sln」を開こうとしたのですが、
「選択されたファイルはソリューションファイルではありません。
 現在のソリューションを閉じて、このファイルをソリューションとして開きますか?」と出て、
「はい」を押すと何も出ないのです。
なぜでしょうか?
ちなみに、なぜか「RyuJin.sln」のアイコンの「8」が「9」になっています。
これも原因の一つなのでしょうか?
回答、よろしくお願いします!!


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


Name: zwi  ..入門者(2,690ポイント)   Date: 2009/09/03(木) 19:22   No:38773     
Title: Re:開けません!!    
VC8は、VC++2005でVC9はVC++2008です。
どちらも開けるはずなんですが・・・。


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

Name: ねこ  ..プログラマー(38,538ポイント)   Date: 2009/09/03(木) 23:23   No:38775     
Title: Re:開けません!!    
zwiさん>これって、開いてから新規作成をしないといけないのでしょうか?

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

Name: zwi  ..入門者(2,730ポイント)   Date: 2009/09/03(木) 23:40   No:38777     
Title: Re:開けません!!    
ためしにVC++を起動後にファイル→開くで開いてみてください。
我が家はvistaですので、slnからはVC++2005は開けません。


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

Name: ねこ  ..プログラマー(38,663ポイント)   Date: 2009/09/05(土) 01:37   No:38827     
Title: Re:開けません!!    
あ、もしかして私が使っているものが違うのでしょうか?
私が使っているのはVisual C++ 2008です。
よく見ると、ゲームプログラミングの館でDLしたものは「9」、
龍神録プログラミングの館でDLしたものは「8」となっていました。
だから出来なかったのでしょうか…?
ちなみに、ゲームプログラミングの館のは全て実行出来ました。
2005はDL出来ますか?
(質問ばかりで申し訳ないです;)


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



Name: まる  ..かけだし(1,353ポイント)   Date: 2009/09/04(金) 19:09   No:38799       
Title: 自機ショットのエラーについて    
プログラミングの館でC言語について勉強させてもらってます。

プログラミングの館の自機にショットをうたせてみようを作ってるのですが、エラーが吐かれます。
自分ではC言語の力不足で原因がわかりませんでした。
エラーはこんな感じです。
c:\documents and settings\shi\デスクトップ\project\1章\mydat\source\cshot.cpp(56) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
c:\documents and settings\shi\デスクトップ\project\1章\mydat\include\struct.h(2) : 'ch_t' の宣言を確認してください。
c:\documents and settings\shi\デスクトップ\project\1章\mydat\source\cshot.cpp(57) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
c:\documents and settings\shi\デスクトップ\project\1章\mydat\include\struct.h(2) : 'ch_t' の宣言を確認してください。
c:\documents and settings\shi\デスクトップ\project\1章\mydat\source\cshot.cpp(65) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
c:\documents and settings\shi\デスクトップ\project\1章\mydat\include\struct.h(2) : 'ch_t' の宣言を確認してください。


解決方法分かる方よろしくお願いします。


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


Name: conio [URL]  ..熟練のプログラマー(40,471ポイント)   Date: 2009/09/04(金) 20:59   No:38804     
Title: Re:自機ショットのエラーについて    

エラーに書いてある通り、
------------------------------------------------------------
構造体"ch_t"の中に"shot_cnt"というメンバは存在しませんよ?
------------------------------------------------------------
という意味です。

で、構造体"ch_t"は下記の様になっているみたいですね。
------------------------------------
typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img; //画像
int slow; //スローかどうか
double x,y; //座標
}ch_t;
------------------------------------

見たところ、"shot_cnt"というメンバは無いようなので、下記の様に変更すればよいと思います。
"shot_cnt"は、多分ショットのカウンタだと思いますので、とりあえずint型にしてます。
(勝手に推測してしまいましたので、確認をしておいた方が良いと思います。)

------------------------------------
typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int shot_cnt //ショットカウンタ(?)
int money; //お金
int img; //画像
int slow; //スローかどうか
double x,y; //座標
}ch_t;
------------------------------------


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

Name: まる  ..かけだし(1,356ポイント)   Date: 2009/09/04(金) 21:07   No:38805     
Title: Re:自機ショットのエラーについて    
対応ありがとうございます。

その方法試してみたところ、今度はつぎのようなエラーが吐かれるようになってしまいました。

c:\documents and settings\shi\デスクトップ\project\1章\mydat\include\struct.h(12) : error C2144: 構文エラー : 'int' は ';' によって先行されなければなりません。


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

Name: conio [URL]  ..熟練のプログラマー(40,633ポイント)   Date: 2009/09/04(金) 21:13   No:38806     
Title: Re:自機ショットのエラーについて    
すいません
セミコロンが消えてました。

---------------------------------------------------------
【誤】 int shot_cnt //ショットカウンタ(?)
【正】 int shot_cnt; //ショットカウンタ(?)
---------------------------------------------------------

これでどうでしょうか。


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

Name: まる  ..かけだし(1,380ポイント)   Date: 2009/09/04(金) 21:21   No:38807 解決!     
Title: Re:自機ショットのエラーについて    
エラーなく起動する事ができました。とても勉強になりました。
ありがとうございました。


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



Name: mik  ..ぴよぴよ(163ポイント)   Date: 2009/09/01(火) 14:45   No:38699       
Title: ボス弾幕について    
はじめまして。
龍神録プログラミングの館でプログラミングの勉強をさせていただいています。
ボス弾幕を、ヤマメの「フィルドミアズマ」のようにボスの周りをくるくると回したいのですが、
実装の仕方がわかりません。
どなたか教えてください。

よろしくお願いします。


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


Name: situmon  ..熟練のプログラマー(44,351ポイント)   Date: 2009/09/02(水) 20:55   No:38744     
Title: Re:ボス弾幕について    
ああ、あれは自分も実装してみたいと思いましたが、
自分の考えでは、あれは少しずつ、螺旋になってってますよね、
つまりみょん弾幕でみた、あの円の大きさを決める数を利用して、
弾ごとに少しずつ、円の大きさを大きくしていけばできます。

shot[n].bullet[k].x =enemy[shot[n].num].x+cos(PI/2-PI/150*t)*100;
shot[n].bullet[k].y =enemy[shot[n].num].y+sin(PI/2-PI/150*t)*100;

の*100の部分が円の大きさです。
だから、螺旋にしたいなら、
for文で100+繰り返した回数、すればできるのではないでしょうか?
しかし(PI/2-PI/150*t)とかは少し考えて変えなければならないですが。


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

Name: mik  ..ぴよぴよ(193ポイント)   Date: 2009/09/04(金) 20:06   No:38803 解決!     
Title: Re:ボス弾幕について    
ありがとうございました!
おかげで実装することができました!



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



Name: マナ  ..かけだし(1,055ポイント)   Date: 2009/09/01(火) 19:38   No:38705       
Title: 当たり判定について    
初めまして、シューティングゲームの館を参考にしているマナと申します。
質問なんですが、自分の撃った弾と敵とが接触した時の当たり判定は上手くいったのですが
逆に自分と敵の弾が接触した時の判定がどうしても出来ません。
「19、プレイヤーと敵との当り判定」に書いてあったものを自分なりに考えて

void out(){
for(int i=0;i<ENEMY_TOTAL_SHOT_NUM;i++){//ショットの全列分
if(EnemyShot[i].flag==1){//その弾が発射中なら
for(int s=0;s<ENEMY_TOTAL_NUM;s++){//全敵100体分
if(enemy[s].flag==1){//その敵のショットが出現中なら
double x,y;
int range;
x=(int)(Player.x-EnemyShots[i].x);
y=(int)(Player.y-EnemyShots[i].x);
range=5;
if( (int)sqrt(x*x+y*y) < range+Player.range){
Player.flag=0;
EnemyShot[i].flag=0;
if(CheckSoundMem(sound_player_death)==1)
StopSoundMem(sound_player_death);
PlaySoundMem(sound_player_death,DX_PLAYTYPE_BACK);
}
}
}
}
}
}

とし、
自機の当たり判定をいろいろと変えてみたのですが上手くいきません。
何故か左上に当り判定が固定されてしまったり
自機とまったく関係ない位置で敵弾が反応したりしてしまいます。
最終的には東方シリーズのように赤い点を表示して、そこを当り判定にしたいのですが…
どなたか詳しい方教えて下さい、お願いします。


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


Name: MNS  ..中級者(14,438ポイント)   Date: 2009/09/01(火) 19:41   No:38707     
Title: Re:当たり判定について    
y=(int)(Player.y-EnemyShots[i].x);
これは
y=(int)(Player.y-EnemyShots[i].y);
こうではないでしょうか?


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

Name: マナ  ..かけだし(1,208ポイント)   Date: 2009/09/01(火) 23:02   No:38719     
Title: Re:当たり判定について    
>MNS様

すみません、そこはおっしゃる通りのウッカリミスでした。
ですがそこを直しても判定は前と変わらず固定されているようです;
当ったかどうかの処理ではなく、自機の当たり判定設定がおかしいのでしょうか…
三平方の定理を使えばいい、ということは分かるのですが…。

それとひとつめの投稿、タグを使うのを忘れてしまったので
もう一度書き直しておきますm(_ _)m

void out(){

for(int i=0;i<ENEMY_TOTAL_SHOT_NUM;i++){//ショットの全列分
if(EnemyShot[i].flag==1){//その弾が発射中なら
for(int s=0;s<ENEMY_TOTAL_NUM;s++){//全敵100体分
if(enemy[s].flag==1){//その敵のショットが出現中なら
double x,y;
int range;
x=(int)(Player.x-EnemyShots[i].x);
y=(int)(Player.y-EnemyShots[i].y);
range=5;
if( (int)sqrt(x*x+y*y) < range+Player.range){
Player.flag=0;
EnemyShot[i].flag=0;
if(CheckSoundMem(sound_player_death)==1)
StopSoundMem(sound_player_death);
PlaySoundMem(sound_player_death,DX_PLAYTYPE_BACK);
}
}
}
}
}
}


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

Name: TRUTH  ..中級者(12,976ポイント)   Date: 2009/09/01(火) 23:15   No:38720     
Title: Re:当たり判定について    
>>何故か左上に当り判定が固定されてしまったり

このことから座標設定がおかしいのだとおもいます。
Player.xやEnemyShots[i].x 共にしっかり値がはいってるか確認してみると分かると思います。


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

Name: マナ  ..かけだし(1,432ポイント)   Date: 2009/09/02(水) 23:08   No:38748     
Title: Re:当たり判定について    
>TRUTH様

仰る通りだと思います。
おそらく当たり判定が「プレイヤーの画像のx、y」ではなく
「画面全体のx、y」で計算されてしまい、
左上に設定されてしまっているのだと思います。

そこまでは分かっているんです。
解説で
enemy[i].range=(MONSTER1_X_SIZE-60)/2.0f*enemy[i].size;

と書かれている敵の当たり判定部分を
どう書き換えれば自機の当たり判定になるのかが分からないんです。
おそらくここの書き換えが間違っているのだろうとは思っているのですが…
分かる方、引き続きお願いします。


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

Name: pooka [URL]  ..上級者(16,977ポイント)   Date: 2009/09/03(木) 10:27   No:38753     
Title: Re:当たり判定について    
ちょっと気になったんですが、シューティングゲームの館を参考にしているということなので、
もしかすると敵のショットの実装方法を変えているかもしれないので違うかもしれませんが、
館のとおりだとすると
void out()
{
    for(int i=0;i < ENEMY_TOTAL_NUM;i++)    //全敵分ループ
    {
        if(EnemyShot[i].flag == 1)    //ショットしている組があれば
        {
            for(int j=0;j < ENEMY_TOTAL_SHOT_NUM;j++)    //個々の弾について
            {
                if(EnemyShot[i].EnemyShots[j].flag == 1)//実際にショットしている弾なら
                {    
                    double x,y;
                    int range;
                    x = (int)(Player.x-EnemyShot[i].EnemyShots[j].x);
                    y = (int)(Player.y-EnemyShot[i].EnemyShots[j].y);
                    range = 5;
                    if((int)sqrt(x*x+y*y) < range+Player.range)
                    {
                        Player.flag = 0;
                        EnemyShot[i].EnemyShots[j].flag = 0;
                        if(CheckSoundMem(sound_player_death) == 1)
                        {
                            StopSoundMem(sound_player_death);
                        }
                        PlaySoundMem(sound_player_death,DX_PLAYTYPE_BACK);
                    }
                }
            }
        }
    }
}
こんな感じで判定できるかと思います。

>enemy[i].range=(MONSTER1_X_SIZE-60)/2.0f*enemy[i].size;
>と書かれている敵の当たり判定部分を
>どう書き換えれば自機の当たり判定になるのかが分からないんです。
敵の場合は画像の表示サイズを変えることができるため上のような式になっていますが、
自機の場合はPlayer.range = 2のように自分の設定したい値を設定すればいいかと思います。


2,068ポイント を手に入れた。

Name: マナ  ..かけだし(1,542ポイント)   Date: 2009/09/04(金) 01:59   No:38782 解決!     
Title: Re:当たり判定について    
> pooka様

なるほど、表示サイズのための計算だったんですか…。
てっきり、rangeで当たり判定を設定しているのかと思っていました。
どうやら私の勘違いが原因だったようで;

ばっちり弾に当たるようになりました!
自分の書いたものと見比べて、しっかり勉強させていただこうと思います。

答えて下さった皆様、本当にありがとうございました!
また何かあったらよろしくお願いしますm(_ _)m


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

Name: pooka [URL]  ..上級者(17,187ポイント)   Date: 2009/09/04(金) 09:55   No:38784     
Title: Re:当たり判定について    
>なるほど、表示サイズのための計算だったんですか…。
>てっきり、rangeで当たり判定を設定しているのかと思っていました。
いえrangeで当たり判定を設定していますよ。
敵はenemy[i].sizeによって画像の表示サイズを変更できるので、
それに伴い当たり判定のサイズも変えています。
(例えば小さく表示した敵に合わせて設定した当たり判定のままでは、大きな敵の場合敵に当たっているのに死なないなんてことに)
自機は表示サイズを変更できるようにはなっていないので、固定の値でいいかなと。

説明不足で混乱させてしまったようで、すみません。


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



Name: APS  ..ぴよぴよ(21ポイント)   Date: 2009/09/02(水) 20:20   No:38741       
Title: 'SHOT_BULLET_MAX' : 定義されていない識別子です。・・・とでます。    
mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
というふうにエラーが出るのですが、何回見直しても原因がわかりません。
どうしたらいいのでしょうか?
お願いします。


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


Name: APS  ..ぴよぴよ(105ポイント)   Date: 2009/09/02(水) 20:33   No:38742     
Title: Re:'SHOT_BULLET_MAX' : 定義されていない識別子です。・・・とでます。    
プログラミングの館の敵にショットを打たせてみようという所をやっているんですが、
mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
というふうにエラーが出るのですが、何回見直しても原因がわかりません。
どうしたらいいのでしょうか?
お願いします。



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

Name: あ〜る  ..中級者(11,521ポイント)   Date: 2009/09/02(水) 20:51   No:38743     
Title: Re:    
define.hに
#define SHOT_BULLET_MAX 1000
が抜けてないですか?
若しくはちゃんとGV.hをインクルードしてないか確認して見てください


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

Name: APS  ..ぴよぴよ(22ポイント)   Date: 2009/09/02(水) 22:06   No:38745     
Title: Re:    
#define SHOT_BULLET_MAX 1000は
define.hにちゃんといれています。
あと、
project\1章\mydat\source\shot.cpp(30) : error C3861: 'shot_calc': 識別子が見つかりませんでした
というエラーがでます。


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

Name: box  ..ハッカー(143,278ポイント)   Date: 2009/09/02(水) 22:14   No:38746     
Title: Re:    
> project\1章\mydat\source\shot.cpp(30) : error C3861: 'shot_calc': 識別子が見つかりませんでした
> というエラーがでます。

shot_calc のスペルが正しいかどうか、など、
ご自分でチェックできる項目はいくつかあるはずです。

エラーが出た、即投稿、という動きよりも、
まずはご自分でエラーの原因を探してみるほうが、
実力が付きやすくなると思います。


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

Name: APS  ..かけだし(1,349ポイント)   Date: 2009/09/02(水) 22:26   No:38747     
Title: Re:    
いろいろ質問だらけですいません。
一応自分で、できるかぎりのチェックはしたつもりです。
それと、エラー文はこんな感じです。

------ ビルド開始: プロジェクト: RyuJin, 構成: Debug Win32 ------
コンパイルしています...
cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。
ini.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
load.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
main.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
music.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
enemy.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
enemy_act_pattern.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
graph.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
c:\documents and settings\aps\デスクトップ\project\1章\mydat\source\graph.cpp(7) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
c:\documents and settings\aps\デスクトップ\project\1章\mydat\source\graph.cpp(7) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
c:\documents and settings\aps\デスクトップ\project\1章\mydat\source\graph.cpp(13) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
c:\documents and settings\aps\デスクトップ\project\1章\mydat\source\graph.cpp(13) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
c:\documents and settings\aps\デスクトップ\project\1章\mydat\source\graph.cpp(37) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
c:\documents and settings\aps\デスクトップ\project\1章\mydat\source\graph.cpp(37) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
shot.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
c:\documents and settings\aps\デスクトップ\project\1章\mydat\source\shot.cpp(30) : error C3861: 'shot_calc': 識別子が見つかりませんでした
shotH.cpp
c:\documents and settings\aps\デスクトップ\project\1章\mydat\include\struct.h(60) : error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です。
コードを生成中...
ビルドログは "file://c:\Documents and Settings\APS\デスクトップ\project\1章\Debug\BuildLog.htm" に保存されました。
RyuJin - エラー 10、警告 7
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

それと即座な対応ありがとうございます。


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

Name: zwi  ..かけだし(2,237ポイント)   Date: 2009/09/02(水) 23:23   No:38749     
Title: Re:    
エラーを見る限り、struct.hとdefine.hの順番間違いだと思います。
参照する前に、#define定義されていないとエラーになります。
#include "struct.h"
#include "define.h"
となっていませんか?

エラーを無くすには、
#include "define.h"
#include "struct.h"
が正しいです。


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

Name: suzume  ..ぴよぴよ(7ポイント)   Date: 2009/09/02(水) 23:31   No:38750     
Title: Re:    
zwiさんと同じですが、
define.hの一番下に
#include "struct.h"が書かれて
いないような気がします。


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

Name: APS  ..ぴよぴよ(138ポイント)   Date: 2009/09/04(金) 01:10   No:38780 解決!     
Title: Re:    
zwiさんとsuzumeさんの言ったとうりでした。
助かりました。ありがとうございます。


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



Name: kai  ..初心者(5,244ポイント)   Date: 2009/09/03(木) 13:37   No:38761       
Title: 中ボス出現時について    
改造龍神録についてです。
中ボスが出現するときは、
そこにいた雑魚敵は初期化するので消えますよね?
これを、初期化ではなく、強制死亡するにしたいのですが
どうしたらいいでしょうか?アドバイスお願いします。


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


Name: ねこ  ..プログラマー(37,903ポイント)   Date: 2009/09/03(木) 14:41   No:38764     
Title: Re:中ボス出現時について    
プレイヤーの弾が当たって倒した時の処理を敵配列にある存在する敵全てに対して実行すれば良いのではないでしょうか〜。

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

Name: 夢夢  ..入門者(2,716ポイント)   Date: 2009/09/03(木) 15:12   No:38766     
Title: Re:中ボス出現時について    
ボムは実装されてますか?
スコアを加算しないボムを実行する関数を作ればいいと思います。


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



Name: Ain  ..ぴよぴよ(13ポイント)   Date: 2009/09/03(木) 10:31   No:38754       
Title: 初心者からの質問    
敵を倒した後も弾を撃ってくるのを防ぎたいのですが、
どうすればいいのかわかりません。
どなたかご助力お願いいたします。


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


Name: MNS  ..中級者(14,797ポイント)   Date: 2009/09/03(木) 12:07   No:38759     
Title: Re:初心者からの質問    
情報が少なすぎます。
例えば、敵にライフなどがあるとするならば、

if(敵.life > 0)
{
弾を撃つ処理
}

などの手立てがありますが。

いずれにせよ、コードを提示されたほうが回答が得やすいかと思います。


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

Name: Ain   Date: 2009/09/10(木) 10:58   No:387541252547938     
Title: Re:初心者からの質問    
ありがとうございました。
参考にさせてもらいます。


さらに新しい問題が出てきたので、質問させていただきます。

error LNK2019: 未解決の外部シンボル "void __cdecl Background(void)" (?Background@@YAXXZ) が関数 _WinMain@16 で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。

と出てくるのですが、原因はなんでしょうか?
ネットで調べてみてもよくわからないので、できれば詳しく教えて下さい。


それとさらにもうひとつ…

typedef struct{
int flag,pattern,counter,img;
double
ENEMY_SHOTS_t EnemyShots[ENEMY_TOTAL_SHOT_NUM];//[200];
} ENEMY_SHOT_t;

と宣言したのですがENEMY_SHOT.xを使おうとすると共用体、構造体でなければならないと出てきます。








Name: 華穂  ..中級者(13,409ポイント)   Date: 2009/09/03(木) 10:37   No:38755       
Title: 画像の移動について    



お久しぶりです。
夏休みをあける前に、なんとか課題を終わらせ、今そのソースの整備を
詳細設計とともに見ていたんですが、完全に間違えていたところがあり、
直していました。

問題は、マップ内での画像の移動についてで、少し困ったことろで出たため
そこを教えてもらいたく久しぶりに書き込ませていただきました。


ソースは・・。





if(Stage==3){

if(ZK_MapX <= 680){
ZK_MapX += 5;

if(ZK_MapX >= 680){
ZK_MapX = -15;
ZK_MapY = 360;
}
}

if(ZK_MapX > -15 && ZK_MapX < 90){
ZK_MapX += 5;
}
}





というものです。
画像は、ステージごとにその決められた場所へと移動する
というももなんですが、私の作ったマップ画像はステージ4に行く時一度右端を通りぬけ、(画面外に消える)
Y軸360のところに移動(最初のステージ3まではY軸110)し、左端から
やってくるというものを作りたいんですが、なぜか、画像はX軸の90のところ
でとまらずえんえんと回り続けている(右端通り抜けて左端からやってくる)ん
です。

これは、何が間違っているのでしょうか?
いったんY軸X軸とも下がるための条件の書き方が悪いのか・・。



どうぞ、ご指摘やアドバイス、よろしくお願いします。


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


Name: ねこ  ..プログラマー(37,875ポイント)   Date: 2009/09/03(木) 11:00   No:38756     
Title: Re:画像の移動について    
ソースのインデントくらいちゃんと整えてください。

680超えた時点でStage変数は4になってますか?
なってないなら

if( Stage == 3 ) { // TRUE
if( ZK_MapX <= 680 ) { // TRUE
ZK_MapX += 5;

の部分に入っちゃうからでしょう。


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

Name: 華穂  ..中級者(13,544ポイント)   Date: 2009/09/03(木) 11:11   No:38757 解決!     
Title: Re:画像の移動について    



ねこ様、ご指摘ありがとうございます。

一応、ダグというか『<pre>』は使ったんですが・・設置場所に問題があったんでしょうか?
最初の方と、最後にきちんとつけたんですが・・。

申し訳ありません。
ダグとかあまり慣れていない分、使い勝手が・・。




ソースの方ですが、そこを変えてもう少し付け足したりしたいと思います。

ご指摘、本当にありがとうございました。


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

Name: Mist  ..熟練のプログラマー(66,220ポイント)   Date: 2009/09/03(木) 11:33   No:38758     
Title: Re:画像の移動について    
タグの使い方の問題じゃなく、元のソースがインデントされていないことが問題なのでは?
preタグはタブや空白が省略されないようになるだけで、自動的にインデントしてくれるものではないですよ。


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



Name: 256bit  ..かけだし(1,528ポイント)   Date: 2009/08/31(月) 21:56   No:38680       
Title: FC音源について    
 チップチューンのようなファミコン音源が作りたいのですが、フリーソフトでファミコン音源が作成できるソフトはありますか? 

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


Name: 羽流布 [URL]  ..中級者(10,777ポイント)   Date: 2009/08/31(月) 22:15   No:38681     
Title: Re:FC音源について    
DAWが使えるのでしたら、こういうものがあります。

http://www.geocities.jp/mu_station/

フリーのDAWもいくつかあります。
http://www.frieve.com/musicstd/download.html


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

Name: situmon  ..熟練のプログラマー(44,033ポイント)   Date: 2009/08/31(月) 22:28   No:38682     
Title: Re:FC音源について    
えっと、ファミコン音源とはいいきれませんが、
工夫次第で、ピストンコラージュをつかうとそういう曲ができますよ。
あと音源もファミコン音源にしてくれるのがあった気が。。。
でも自由で面白いのがつくりたいならばピスコラですね。


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

Name: 羽流布 [URL]  ..中級者(10,816ポイント)   Date: 2009/08/31(月) 22:45   No:38683     
Title: Re:FC音源について    
あと、効果音作成ソフトに面白いものがあります。
実は僕も最初はこれで音楽を作ってました(;^^

http://www.vector.co.jp/soft/win95/art/se232653.html

これにSoundEngineとかあると便利ですよ^^
http://www.cycleof5th.com/products/soundengine/


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

Name: 銘茶ハリガネ  ..ぴよぴよ(233ポイント)   Date: 2009/09/01(火) 00:05   No:38686     
Title: Re:FC音源について    
少々手間はかかりますが、MCKというソフトを使えば
ファミコン本体でも鳴らせるデータを作れます。
MCKWiki
http://wikiwiki.jp/mck/


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

Name: 256bit  ..かけだし(1,626ポイント)   Date: 2009/09/03(木) 01:51   No:38751 解決!     
Title: Re:FC音源について    
 >>みなさん

 みなさんどうもありがとうございます。
 いろいろ拝見させてもらいました。^^使いこなせばいい音源ができそうです。
 またわからないことがあったら、よろしくお願いしますm(_ _)m
 
 がんばります!∩(^^)∩


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



Name: 御津凪 [URL]  ..ハッカー(110,824ポイント)   Date: 2009/08/30(日) 23:13   No:38641       
Title: 音楽同調弾幕をつくってみた    
トピ主としては久しぶりの御津凪です。


以前、こちらのトピにて制作したゲームですが、
ほぼ完成版として公開することになりました。
こちらのページにてダウンロードできます。

そして、題名の通り、音楽同調弾幕(とはいってもそれほど豪華ではないです)に挑戦してみましたので
ぜひ遊んでみてください。

なお、これはテスト版なので何かしらバグがあるかもしれませんので、
もしバグが起きたら報告いただければ幸いです。

以下特徴。

・対応 OS は XP 以降。
・いくつか東方の簡単な弾幕を模してます。
・曲は自サイトで公開している曲そのまま使用してます。
・総ステージ長 6:22。
・最新の DirectX ランタイムが必要です。



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


Name: kazuoni [URL]  ..ハッカー(102,450ポイント)   Date: 2009/08/31(月) 01:08   No:38645     
Title: Re:音楽同調弾幕をつくってみた    
あまり弾幕回避がうまくないので、まったくやり込めていませんが、
初心者が遊ぶ分には不具合はありませんでした。

なんでこんな軽いのかが不思議でなりません。。
CPU使用率も全く上がらず・・・。
ガジェットで見ただけなんで、細かくは分かりませんが、
それにしても軽いです。。
自分はWINAPIで組んでいますが、こんなに軽くは実現できません。。
そしたら、軽いと思っていたWINAPIを使う必要が無っ(ry

制作お疲れ様でした!!


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

Name: 御津凪 [URL]  ..ハッカー(110,899ポイント)   Date: 2009/08/31(月) 01:33   No:38646     
Title: Re:音楽同調弾幕をつくってみた    
kazuoni さん、遊んでいただいてありがとうございます。

> なんでこんな軽いのかが不思議でなりません。。
> CPU使用率も全く上がらず・・・。

このゲームの基底(ライブラリ)では、マルチスレッドを使って
メインスレッドはウインドウメッセージループのみ、
サブスレッドにゲーム全体の処理をするように組んだり、
読み込み部分は別のスレッドで行ったりなど、
いくつかの点でスレッドを使った分散処理をしています。
ただ、それでここまで軽くなるということではないはずですので知識程度まで。
(軽い要因は恐らくゲームループにあると思います)

> 自分はWINAPIで組んでいますが、こんなに軽くは実現できません。。

描画処理全般は DirectX を中心に使用しており、 WINAPI はほとんど使用してませんね。
描画処理が一番早いのはグラフィックデバイスを扱う DirectX や OpenGL なので、
間接的に扱う WINAPI だと必然的に遅くなりやすい(CPUに負荷が高くなりやすい)ですね。


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

Name: kazuoni [URL]  ..ハッカー(103,030ポイント)   Date: 2009/08/31(月) 11:18   No:38656     
Title: Re:音楽同調弾幕をつくってみた    
>マルチスレッドを使って
ここでもマルチスレッドがキーワードなんですね^^;
本当に一度真剣に勉強してみようかと思います。
マルチスレッドだけで本が一冊出せるぐらいなんで・・・
そんなに簡単に使いこなせるものではないとは思いますが。。


>描画処理が一番早いのはグラフィックデバイスを扱う DirectX や OpenGL
そうだったんですかorz
WINAPIでDXライブラリもどき作っても、得はほとんどありませんねww
自分の中で、3DはDirectX、2DはWINAPI??
なんてわけのわからない固定観念がありました。。

ここは御津凪さんの作品の紹介のスレなので、
脱線はこの辺にします^^;

・・・にしても、ノーマルがぎりぎりクリアって・・・
自分のレベルの低さを痛感します。。


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

Name: 御津凪 [URL]  ..ハッカー(111,303ポイント)   Date: 2009/08/31(月) 11:49   No:38659     
Title: Re:音楽同調弾幕をつくってみた    
プログラミングの話は別にかまいませんよ。
元々そういう掲示板なのですから。

> そんなに簡単に使いこなせるものではないとは思いますが。。
マルチスレッドで一番苦労したのは DirectX のテクスチャ読み込み部分ですね。
何も対処せずに描画処理との非同期読み込みをするとフルスクリーン時にフリーズして大変なことになったりしましたから。

> WINAPIでDXライブラリもどき作っても、得はほとんどありませんねww
Windows 7 では Direct2D なる機能がサポートされて、GDI、GDI+ との相互運用性もあってか以前より高速にはなるみたいですよ。

> ・・・にしても、ノーマルがぎりぎりクリアって・・・
> 自分のレベルの低さを痛感します。。

元々難易度が高い前提で製作しましたので、結構難しいかと思います。
残機やボムの追加がない上に長期戦かつ避け方がシビアな部分があるので、
一段階レベルを下げたほうが良いかなと思ってます。

…特に最初と最後がシビアかと思います。


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

Name: 御津凪 [URL]  ..ハッカー(111,677ポイント)   Date: 2009/09/02(水) 00:43   No:38728     
Title: Re:音楽同調弾幕をつくってみた    
ということで少し簡単にしたパッチを作ってきました。
自分の方のサイトに置きましたが、とりあえずこちらにも…と思ったけど微妙にサイズオーバーだったので
サイトの方からお願いします。
(本体を公開しているページにあります)

これで初心者でもある程度は遊べると思います。
でも、いくつかの弾幕はそのままだったりするので、まだ難しいかもしれません。
避けるだけなら最弱レベルでもクリアできると思います。

因みに、積極的に弾にかすりに行かないと高得点をとれない仕様になってますので、
そういう意味ではやりこめるかもしれません。


それと書き忘れてましたが、この(サンプル)ゲームの開発はこれで完了としたいと思います。
(もちろんバグなどがあれば直しますが)
ソースも公開しているので、新機能やステージを作ってみたい方などは自由に改造していただいてかまいません。


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

Name: にょろーん  ..ぴよぴよ(164ポイント)   Date: 2009/09/02(水) 02:39   No:38732     
Title: Re:音楽同調弾幕をつくってみた    
遊ばせていただきました。
最難易度やう゛ぇえ。

開発お疲れ様でした。
まだ面白要素が掘り出せそうなゲームなので、完了されてしまうのは残念ですが。
自分のゲーム開発の励みにもなりました、ありがとうございました。


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

Name: 御津凪 [URL]  ..ハッカー(112,135ポイント)   Date: 2009/09/02(水) 02:55   No:38736     
Title: Re:音楽同調弾幕をつくってみた    
にょろーん さん、遊んで頂きありがとうございます。

> 最難易度やう゛ぇえ。

はい。やう゛ぁいです。(笑
避ける場所は必ずあるのですが、
何せ長いので、気力の維持がカギになると思います。
と言ってる私はそれ以前に実力的に無理でしたが。

昔並みの難易度を考えると、これくらいがちょうどいいのかなと思います。


> まだ面白要素が掘り出せそうなゲームなので、完了されてしまうのは残念ですが。

背景の3D化、エフェクトの増量なども考えていたのですが、
いかんせん元々がサンプルだったわけで、本番(本来作りたいと思っていたゲーム)も控えていたの為、
ここで区切りをつけました。
なので、ソースコードには追加しようとした機能の名残や残骸があります。


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



Name: にょろーん  ..ぴよぴよ(259ポイント)   Date: 2009/09/02(水) 02:19   No:38730       
Title: ゲーム(DXライブラリ)にて、文字列入力ボックスを作るには    
初めまして。
DXライブラリを用いてゲーム制作をしています。
この度、詰まるところが出てきてしまいましたので、質問させて下さい。

キャラの名前をプレイヤーが自由につけられるようなシステムを実装したいと思っています。
その方法として、MessageBoxのようなものを立ち上げ(ダイアログ……って言うんですかね?)、そこでプレイヤーに入力してもらう方法を取りたいと思います。
こういう文字列入力ボックスを作るには、どういう手順を踏めば良いのでしょうか。
(また、違う話になってしまいますが、フルスクリーン時にMessageBoxのようなものを立ち上げると、下手すると固まってしまいますよね。(フルスクリーン機能は妥協しどころですかね……。))

何かキーワードだけでも頂けると嬉しいです。
よろしくお願いします。


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


Name: 御津凪 [URL]  ..ハッカー(111,947ポイント)   Date: 2009/09/02(水) 02:41   No:38733     
Title: Re:ゲーム(DXライブラリ)にて、文字列入力ボックスを作るには    
たしか、ここの掲示板の過去にも同じような質問がありましたが、
結論から言うと、MessageBox を出すのは場合によっては厳しいです。
出せないことはないのですが、おっしゃる通りやり方を下手すると固まってしまう場合がありますし、
メッセージボックスが出ている間は画面の更新がされないので、
メッセージボックスを移動すると単色になる等、見栄えが悪くなります。

入力機能処理自体は DXライブラリにあるので、
自前で入力画面を作った方が良いと思いますよ。
(日本語入力も対応してますし)


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

Name: にょろーん  ..ぴよぴよ(268ポイント)   Date: 2009/09/02(水) 02:54   No:38734     
Title: Re:ゲーム(DXライブラリ)にて、文字列入力ボックスを作るには    
返信ありがとうございます。
過去ログをよく調べていなくてすいません。(簡単に検索かけるぐらいはしたのですが。)

こんな関数がDXライブラリにあったんですね……思いもしませんでした。
これなら大丈夫そうです。
ありがとうございました。


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

Name: にょろーん  ..ぴよぴよ(280ポイント)   Date: 2009/09/02(水) 02:54   No:38735 解決!     
Title: Re:ゲーム(DXライブラリ)にて、文字列入力ボックスを作るには    
解決踏み忘れ;;

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



Name: おむずび  ..ぴよぴよ(91ポイント)   Date: 2009/09/01(火) 10:23   No:38690       
Title: シーンごとのソース管理    
DXライブラリを使わせてもらって数ヶ月がたちました。
こちらのライブラリ製作者様には本当に感謝しております。

このライブラリを使って今まで色々なゲームを作ってきたのですが
どれもシーンの管理をフラグでやっていた為、
1つのファイルにソースコードを書いてしまっております。

最近、見づらくなり解析が面倒になってきたので
今後の為にDXライブラリをシーンごとにファイルを管理できるように改変したいです。
ただよくやり方がわかりません。
多分できるかと思うのですが、本当にできるのでしょうか?(分割コンパイル?)

主に

初期化
処理(メインループ)
画像の読み込み
描画
後処理 − 変数の後処理など

の5つの関数をそれぞれのファイルに書いて呼び出したいです。
ただ作り方が全く検討もつかないのでサンプルコードを頂けますと助かります。
丸投げになってしまって申し訳ないのですがご教授頂けますと助かります。


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


Name: kazuoni [URL]  ..ハッカー(103,577ポイント)   Date: 2009/09/01(火) 13:05   No:38693     
Title: Re:シーンごとのソース管理    
>DXライブラリを使わせてもらって数ヶ月がたちました。
>こちらのライブラリ製作者様には本当に感謝しております。

大きな勘違いを・・・w
DXライブラリを制作された方のページを以下に。
ttp://homepage2.nifty.com/natupaji/DxLib/index.html

いきなりは厳しいので、まず、分割コンパイルと検索かければ、
入門ページが出てきますので、一度一通り目を通されてはいかがでしょうか?
それから分からないことがあれば、再度質問するとよいと思います。


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

Name: おむずび  ..ぴよぴよ(212ポイント)   Date: 2009/09/01(火) 14:05   No:38698     
Title: Re:シーンごとのソース管理    
分割コンパイルのやり方はわかるのですが
私がしたいことのロジックがわかりません。
どのように組めばよいかアドバイスをいただきたいです。

分割コンパイル
ヘッダにプロトコル宣言してcppに実際の処理を書きメインでインクルードするみたいな
流れかとおもいます。

今回やりたいのは毎回インクルードするのでは手間なので一箇所にどんなシーンがあるかを登録?してやる感じにしたいです。

なるほど、勘違いしておりました><
ご指摘ありがとうございます。


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

Name: zwi  ..かけだし(1,978ポイント)   Date: 2009/09/01(火) 16:26   No:38701     
Title: Re:シーンごとのソース管理    
>今後の為にDXライブラリをシーンごとにファイルを管理できるように改変したいです。
ただよくやり方がわかりません。
>今回やりたいのは毎回インクルードするのでは手間なので一箇所にどんなシーンがあるかを登録?してやる感じにしたいです。

よく分からないですが、もしかしてシューティング等で定番のシーン管理のシステムの擬似タスクシステムのことを言っているのでしょうか?
とりあえず下記サイトを読んでもらって狙っているものか確認してもらえますか?
http://www5f.biglobe.ne.jp/~kenmo/program/task/task2/task2.html
話の内容からソースファイル分割をちゃんとしたいのか、ゲームとしての流れ・組み立てをちゃんとしたいのかはっきりしないんで答え辛い状況です。両方いっぺんにやりたいのでも良いんですけどね。


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

Name: おむずび  ..ぴよぴよ(594ポイント)   Date: 2009/09/01(火) 19:03   No:38702     
Title: Re:シーンごとのソース管理    
早速のご回答ありがとうございます。
多分、そのような考え方ではないかと思います。
ただそのような考え方があるのですねw

上手く説明できなくて申し訳ないです。

シーンごとに管理したいというのは
・タイトルシーン(ゲームロゴなどが出るシーン)
・ゲームシーン
・エンディングシーン

各シーンごとにソースを管理したいということです。

またこれをメイン処理する部分に
include "title.h"
include "game.h"
include "ending.h"
などと描くのは面倒なので

またシーンごとに変数を初期化するエリア等、同じものを設けるといったやり方です。
私のプログラムの書き方がおかしいかもしれないのですが
・初期化
・処理
・描画
・後処理
を関数でまとめて管理しております。

include "scene.h"
などとして
scene.hかscene.cにテーブルデータなどでそれぞれのシーンを登録したいです。

よくわからないかと思いますのでご指摘頂けますと幸いです。


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

Name: MNS  ..中級者(14,409ポイント)   Date: 2009/09/01(火) 19:11   No:38703     
Title: Re:シーンごとのソース管理    
おむずびさんの仰っていることがいまいち分かりかねるんですが、

----scene.h-----
void Init();
void MainLoop();
void Draw();
void Finish();
----------------

----init.c----
#include "scene.h"
void Init()
{
  処理
}
--------------
----mainloop.c----
#include "scene.h"
void MainLoop()
{
  処理
}
--------------

同じようにDrawとFinishの分も用意して、
あとはmain.cでscene.hをインクルードして、
各関数を呼び出す、ということでしょうか?


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

Name: おむずび  ..ぴよぴよ(51ポイント)   Date: 2009/09/01(火) 21:00   No:38711     
Title: Re:シーンごとのソース管理    
皆さん曖昧な表現の中、ご回答誠にありがとうございます。



//現在のプログラムのイメージ
//main.c
enum{SCENE_START,SCENE_GAME,SCENE_LAST}
void Init(void);
int Scene_Num = SCENE_START;

main関数{
Init();
Loop();
Draw();
Finish();
}
void Init(void){
switch(Scene_Num){
case SCENE_START:
〜処理〜
break;
case SCENE_GAME:
〜処理〜
break;
case SCENE_LAST:
〜処理〜
break;
}
}
〜LOOPなども同様〜


上記な感じでシーンを管理しております。
その為1枚のソースに数千行書いてしまっております。
//////////////////////////////////////////////////////////////////////

これを修正して以下のようにしたいです

////////////
main.cpp
////////////
main関数{
〜シーンを呼び出す処理・関数〜 //引数にSCENE_STARTなどと入れたらそのシーンへ移動
}
////////////
tbl.cpp どんなシーンがあるか登録
////////////
enum{SCENE_START,SCENE_GAME,SCENE_LAST};

////////////
START.cpp
////////////
void Init(void){
〜処理〜
}
〜LOOPなども同様〜

みにくくて申し訳ございません


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

Name: MNS  ..中級者(14,639ポイント)   Date: 2009/09/01(火) 21:21   No:38713     
Title: Re:シーンごとのソース管理    
メイン関数と、シーンを定める定数の定義と、各関数の定義を分けたい、
という認識であっているでしょうか?

---scene.h---
enum{SCENE_START,SCENE_GAME,SCENE_LAST};

void Init(int sn);
void Loop(int sn);
//...


---init.cpp---
#include "scene.h"

void Init(int sn)
{
switch(sn)
{
case SCENE_START:
//...
break;
case SCENE_GAME:
//...
break;
case SCENE_LAST:
//...
break;
}
}


---loop.cpp---
#include "scene.h"

void Loop(int sn)
{
//...
}


---main.cpp---
#include "scene.h"

int main()
{
Init(SCENE_START);
//...
return 0;
}


こういうことでしょうか?


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

Name: おむずび  ..ぴよぴよ(291ポイント)   Date: 2009/09/01(火) 21:42   No:38714     
Title: Re:シーンごとのソース管理    
何度も回答させてしまいまして申し訳ございません。
惜しいです。
その場合ですとシーンが仮に100あった場合100ソースに分けられず
5ソースくらいなってしまうかと思います。


//strat_scene.cpp
Init(){}
Loop(){}
Draw(){}
Finish(){}

//game_scene.cpp
Init(){}
Loop(){}
Draw(){}
Finish(){}
//finish_scene.cpp
Init(){}
Loop(){}
Draw(){}
Finish(){}
//main.cpp
main{
〜シーンを呼び出す処理〜
SceneChange(SCENE_START);
}


ただこれだとシーンごとに関数名がかぶりダメかと思います。
strat_scene.cppとSCENE_STARTをどう紐付けすればよいかもわかりません。

ですのでシーンごとに列挙した値をいれるのかと考えております
↑自分でもよくわかりません。



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

Name: MNS  ..中級者(14,718ポイント)   Date: 2009/09/01(火) 22:00   No:38715     
Title: Re:シーンごとのソース管理    
なるほど、各シーンごとにInit,Loop,Draw、Finish等の関数が必要だということですね?

そういったことになると、C言語の範囲でやるのは難しいかもしれません。
C++のクラスの機能を使えば実装できますが、おむずびさんはC++の経験はお有りでしょうか?


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

Name: おむすび  ..ぴよぴよ(195ポイント)   Date: 2009/09/01(火) 22:14   No:38716     
Title: Re:シーンごとのソース管理    
かじる程度ならあります。
私もクラスでならできそうかと思ったのですが
ややこしいのでアマリ使いたくないです。

ですのでデータテーブルに登録すると言った考え方をしました。
例えば2つシーンがある場合

//strat_scene.cpp
start_Init(){}
start_Loop(){}
start_Draw(){}
start_Finish(){}

//game_scene.cpp
game_Init(){}
game_Loop(){}
game_Draw(){}
game_Finish(){}


などど名前を変えてしまい
//data_tbl.cpp
〜シーンの登録〜
のようにしメインで呼び出すと考えております。

私のソースの書き方の癖が悪いのですが
何せこれで続けていきたいです。


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

Name: zwi  ..かけだし(2,029ポイント)   Date: 2009/09/01(火) 22:22   No:38717     
Title: Re:シーンごとのソース管理    
お話を伺うと、それこそ何らかのタスクシステムを使った方が管理しやすそうですけどね。
良いサンプルソースが無いか探してみます。


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

Name: Justy  ..伝説なるハッカー(412,216ポイント)   Date: 2009/09/01(火) 22:33   No:38718     
Title: Re:シーンごとのソース管理    
 C言語におけるタスクシステムに近いものがありますが、



>ただこれだとシーンごとに関数名がかぶりダメかと思います。

 static にすればかぶりませんよ。


typedef struct SceneFunc
{
    void (*init)();
    void (*loop)();
    void (*draw)();
    void (*finish)();
} SceneFunc;

 こんな感じの構造体を用意しておいて

// -----strat_scene.cpp
static void Init() {}
static void Draw() {}
static void Finish() {}
const SceneFunc *GetSceneFunc_Start()
{
    static const SceneFunc func = { &Init, NULL, &Draw, &Finish };
    return &func;
}

// -----strat_scene.h
const SceneFunc *GetSceneFunc_Start();

// -----game_scene.cpp
static void Init() {}
static void Loop() {}
static void Draw() {}
static void Finish() {}
const SceneFunc *GetSceneFunc_Game()
{
    static const SceneFunc func = { &Init, &Loop, &Draw, &Finish };
    return &func;
}

// -----game_scene.h
const SceneFunc *GetSceneFunc_Start();

と、各ファイルで staticにした Init()〜Finish()を用意します。

 関数がなければ NULLを入れておきます。

 次に IDに応じて各 SceneFuncの情報を取得するする関数を作ります。

// -----main.cpp
// シーンID
typedef enum SceneID
{
    SCENE_START,
    SCENE_GAME,
    SCENE_MAX
} SceneID;

// シーンIDから呼び出す関数の情報を取得
const SceneFunc *GetSceneFunc(SceneID id)
{
    const SceneFunc *sceneFunc;
    switch(id)
    {
    case SCENE_START:
        sceneFunc = GetSceneFunc_Start();
        break;
    case SCENE_GAME:
        sceneFunc = GetSceneFunc_Game();
        break;
    default:
        sceneFunc = NULL;
        break;
    }
    return sceneFunc;
}



 これで準備は終わりです。
 あとは


{
    const SceneFunc *sceneFunc = GetSceneFunc(SCENE_START);
    if(sceneFunc)
    {
        if(sceneFunc->init)
            sceneFunc->init();
        if(sceneFunc->loop)
            sceneFunc->loop();
        if(sceneFunc->draw)
            sceneFunc->draw();
        if(sceneFunc->finish)
            sceneFunc->finish();
    }
}


とすることで、各ファイルの Init〜〜Finish()を呼び出すことができます。

 あ、あとGetSceneFunc()は今回は switch-caseで実装しましたが、関数の型が統一できるのであれば、
関数テーブルにしてもいいですね。
 特に 100もあるなら。


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

Name: zwi  ..かけだし(2,143ポイント)   Date: 2009/09/01(火) 23:27   No:38722     
Title: Re:シーンごとのソース管理    
すいません。
タスクシステムは良いサンプルを見つけれなかったので、シンプルなJustyさんの案で検討してみてください。
キャラの重ねあわせ制御や、シーンの切り替えが複雑になる場合、同じルーチンを複数のキャラで使いたい(キャラ毎にワークを切り替えて複数のキャラを1つの関数で操る機能)等が必要ならタスクシステムが有効なのですが、そこまで必要ないですかね。


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

Name: おむすび  ..ぴよぴよ(300ポイント)   Date: 2009/09/01(火) 23:45   No:38723     
Title: Re:シーンごとのソース管理    
Justy様
それです!!
試してみます。
ありがとうございます。

zwi様
いえいえ><
タスクシステムといった言葉自体知らなかったので
勉強になりました。
私レベルのPGではまだそのような処理の実相はむずがしそうです。
善処いたします。


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

Name: omusubi  ..ぴよぴよ(32ポイント)   Date: 2009/09/01(火) 23:58   No:38724     
Title: Re:シーンごとのソース管理    
画像を描画できないのですがなぜでしょうか・・・
普通に書くと問題なくできます。




start_scene.h
//////////////
const SceneFunc *GetSceneFunc_Start();

start_scene.cpp
//////////////
#include "DxLib.h"
#include "main.h"

// 画像の読み込み
int H_Chr = LoadGraph("BMP/chr.png");

static void Init(){
}
static void Loop(){}
static void Draw(){
//DrawGraph( (int)Play.Px , (int)Play.Py , H_Chr , true );

DrawGraph( 0 , 0 , H_Chr , true );
}
static void Finish(){}

const SceneFunc *GetSceneFunc_Start(){
static const SceneFunc func = { &Init, &Loop, &Draw, &Finish };
return &func;
}

main.cpp
//////////////
#include "DxLib.h"
#include "main.h"
#include "start_scene.h"

typedef enum SceneID{
SCENE_START,
SCENE_GAME,
SCENE_MAX
}SceneID;

// シーンIDから呼び出す関数の情報を取得
const SceneFunc *GetSceneFunc(SceneID id)
{
const SceneFunc *sceneFunc;
switch(id){
case SCENE_START:
sceneFunc = GetSceneFunc_Start();
break;
case SCENE_GAME:
break;
default:
// sceneFunc = NULL;
break;
}
return sceneFunc;
}


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

ChangeWindowMode(true); // ウインドウの変更 フルスクリーン・ウインドウ
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定

// DXライブラリ初期化処理
if( DxLib_Init() == -1 ){
return -1; // エラーが起きたら直ちに終了
}

const SceneFunc *sceneFunc = GetSceneFunc(SCENE_START);
// if(sceneFunc){
// if(sceneFunc->init) sceneFunc->init();
// if(sceneFunc->loop) sceneFunc->loop();

// if(sceneFunc->finish) sceneFunc->finish();
// }


// 処理
while(1){

// BMP画像の表示
ClearDrawScreen();
if(sceneFunc->draw) sceneFunc->draw();
ScreenFlip();

// 処理の終了
if(CheckHitKey(KEY_INPUT_ESCAPE)) break;

}
// 描画が終ったのでグラフィックをメモリ上から削除する
// DeleteGraph( H_Chr ) ;

DxLib_End() ; // DXライブラリ使用の終了処理

return 0 ; // ソフトの終了
}



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

Name: おむすび  ..ぴよぴよ(344ポイント)   Date: 2009/09/02(水) 00:00   No:38725     
Title: Re:シーンごとのソース管理    
すみません。
名前をローマ字のまま投稿してしまいました。

上記のバグ?の対処法を教えていただけますと助かります。


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

Name: Justy  ..伝説なるハッカー(412,334ポイント)   Date: 2009/09/02(水) 00:22   No:38726     
Title: Re:シーンごとのソース管理    

>画像を描画できないのですがなぜでしょうか・
H_Chr = LoadGraph("BMP/chr.png");

 ここが原因のような気がします。
 DxLib_Init関数の呼び出し前の LoadGraph()は無効なので、Init()の中とかで
呼んでみてはどうでしょうか。


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

Name: おむすび  ..ぴよぴよ(343ポイント)   Date: 2009/09/02(水) 00:33   No:38727     
Title: Re:シーンごとのソース管理    
justyさん
原因はそれでした。
ありがとうございます。


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

Name: おむすび   Date: 2009/09/15(火) 20:22   No:386901253013777     
Title: Re:シーンごとのソース管理    




Name: UKONN  ..ぴよぴよ(752ポイント)   Date: 2009/09/01(火) 12:55   No:38691       
Title: 無題    
やりたいことは明確なのですがプログラムにできないのでお力をお貸しください。

円(動作物体)と線分にて衝突判定を行おうと考えております。

@線分A(ax,ay)B(bx,by)ベクトルを定める。
AABの法線(nx,ny)を求める。
B時間tの式を求める。
var d = -(ax * nx + ay * ny)
var t = -(nx * x + ny * y + d)/(nx * dx + ny * dy)

x,yは動作物体の位置
dx,dyは動作物体の移動量

C動作物体の半径を考慮した(実際に当たるまでの時間)tdを求める。
var td = t-{r/sqrt((dx * dx)+(dy * dy))};

Dtdの値により衝突するか否かを判定する。

といったアルゴリズムなのですが、これらの計算式をどのファイルに入れるかであったり、配置する場所・仕方がわかりません。

c言語についてホントに何から何までわかっておらず手つかず状態です。アドバイスをいただきたいです。


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


Name: Mist  ..熟練のプログラマー(66,288ポイント)   Date: 2009/09/01(火) 13:24   No:38695     
Title: Re:無題    
> これらの計算式をどのファイルに入れるかであったり、配置する場所・仕方がわかりません。

どのファイルに入れるか聞かれても質問者さんの環境がこちらにはわかりませんから答えようがないでしょう。
配置する場所・仕方を聞かれても、これだけでは「ソースファイルをテキストエディタで開いてそこに書いてください」、としか言えません。
これらは提示されたアルゴリズムとは何の関係もない話ですし。

テンパってるということだけは伝わりますが、少し落ち着いて質問内容を吟味してみてはどうでしょうか。


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

Name: UKONN  ..ぴよぴよ(748ポイント)   Date: 2009/09/01(火) 13:53   No:38696     
Title: Re:無題    
確かにテンパッてました。落ち着いて見直してみます。
ありがとうございます。


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

Name: UKONN  ..ぴよぴよ(741ポイント)   Date: 2009/09/01(火) 13:54   No:38697 解決!     
Title: Re:無題    
解決です。

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



Name: T.C.D  ..かけだし(1,117ポイント)   Date: 2009/08/31(月) 18:40   No:38669       
Title: 宣言と定義について    
宣言と定義の違いを詳しく教えてください。(ヘッダーソースは以前の物と同様)

(ヘッダーファイル)

#ifndef _MYGAME_
#define _MYGAME_

#define s_size 50
#define rank_max 10

//ゲームシステム関係の変数(構造体)
//ソースはva.[変数]の形で使用
struct variable{
short score,
level,
rank,
tp,
over,
kazu;
};
struct variable g_va = {0, 0, 1, 1};

void error(void);
void kaitou(void);
void sistem(struct variable *g_va);


#endif



"定義"というのは、この場合、ヘッダファイルで具体的な数値を
構造体に代入する動作のことなのでしょうか?ー>「struct variable g_va = {0, 0, 1, 1}」の部分

ある解説書では、
下のようにヘッダファイルでグローバル変数(構造体)をヘッダファイルで示し(宣言?)、
2つの .c ソースファイルから
#include "CALORIE.h"で
呼び出しているのですが、

これは"定義"にはならないのでしょうか?

[CALORIE.h]

--略---
typedef struct _CALORIE {
char name[40];
float value;
} CALORIE;

-------


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


Name: zwi  ..かけだし(1,915ポイント)   Date: 2009/08/31(月) 19:17   No:38673     
Title: Re:宣言と定義について    
>struct variable g_va = {0, 0, 1, 1}」
はデータ実体を定義しています。

>typedef struct _CALORIE {
>char name[40];
>float value;
>} CALORIE;
は、CALORIEの構造を宣言しています。
値も領域も持っていませんのでデータ実体はありません。

問題なのはデータの実体があるかデータの型や構造宣言だけなのかって事になります。
前回の問題は、ヘッダにデータ実体があったためインクルードしている全部のソースに同じデータ実体が定義さててしまいコンパイラが出力する複数のオブジェクトファイルに同じ名前g_vaのデータを持ってしまいました。
exeファイルを作るリンカは、オブジェクトファイルを読み込んでリンク時に名前参照を解決しますので同じ名前のデータ実体が複数あると何を選んでよいのか分からないのでエラーにするしかないのです。


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

Name: T.C.D  ..かけだし(1,224ポイント)   Date: 2009/08/31(月) 20:17   No:38676 解決!     
Title: Re:宣言と定義について    
ありがとうございました。

ということは、
< struct variable g_va = {0, 0, 1, 1} >
を1つのソースファイルに移し、
2つのソースから自分が作ったヘッダーを
インクルードすれば問題ないという事ですね。


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

Name: zwi  ..かけだし(1,938ポイント)   Date: 2009/08/31(月) 21:54   No:38679     
Title: Re:宣言と定義について    
はい。そうですね。
ヘッダにstruct variableの構造体宣言だけあれば問題ないです。


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



Name: fnny  ..ぴよぴよ(87ポイント)   Date: 2009/08/29(土) 10:58   No:38558       
Title: Ryujin.exe    
ビルドする際に、デバッグのRyujin.exeが見つかりませんとエラーが出てきて起動できません。

何度もダウンロードしなおしているんですがそれらしいファイルも見つかりませんでした。
どうすればいいですか?


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


Name: zwi  ..かけだし(1,091ポイント)   Date: 2009/08/29(土) 12:52   No:38561     
Title: Re:Ryujin.exe    
ビルドでRyujin.exe自体を作っているのではじめは無いのは当たり前なんですが、たぶんエラーの解釈が間違っているんだと思います。
ビルドの状況も含めて出ているエラーをここに全て貼り付けてもらえますか。


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

Name: fnny  ..ぴよぴよ(893ポイント)   Date: 2009/08/29(土) 16:33   No:38564     
Title: Re:Ryujin.exe    
1>------ ビルド開始: プロジェクト: RyuJin, 構成: Debug Win32 ------
1>コンパイルしています...
1>cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。
1>main.cpp
1>リンクしています...
1>LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>load.obj : error LNK2001: 外部シンボル ""int (* img_ch)[12]" (?img_ch@@3PAY0M@HA)" は未解決です。
1>graph.obj : error LNK2001: 外部シンボル ""int (* img_ch)[12]" (?img_ch@@3PAY0M@HA)" は未解決です。
1>graph.obj : error LNK2001: 外部シンボル ""struct ch_t ch" (?ch@@3Uch_t@@A)" は未解決です。
1>C:\Users\Desktop\project\1章\Debug\RyuJin.exe : fatal error LNK1120: 外部参照 2 が未解決です。
1>RyuJin - エラー 4、警告 1


でしょうか?
さっきまた起動したらさらに悪くなってました;


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

Name: zwi  ..かけだし(1,258ポイント)   Date: 2009/08/29(土) 21:37   No:38579     
Title: Re:Ryujin.exe    
変ですね。デバッグ版なのにリリース版のLIBCMTをリンクしようとしています。
どの章のサンプルをコンパイルしたのでしょうか?
自分でソースに手を加えたかも教えてください。


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

Name: Justy  ..伝説なるハッカー(409,159ポイント)   Date: 2009/08/29(土) 23:06   No:38581     
Title: Re:Ryujin.exe    

>デバッグのRyujin.exeが見つかりませんとエラーが出てきて起動できません

 第一章は元々ビルドは失敗するようになっていたと思うのですが、
だとしても解せないエラーが出ているようですね。

 第二章をビルドするとどうなりますか?


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

Name: fnny  ..ぴよぴよ(929ポイント)   Date: 2009/08/30(日) 21:17   No:38633     
Title: Re:Ryujin.exe    
第一章です。
順番に進めていこうとしてまだ最初で、起動するところです。

第二章ではエラーは出ませんでした、が起動しませんでした。


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

Name: zwi  ..かけだし(1,720ポイント)   Date: 2009/08/30(日) 21:38   No:38635     
Title: Re:Ryujin.exe    
第一章はエラーになって当たり前なのですがエラーが変ですね。
気になりますが後回しにします。

・第二章でウィンドウは開きませんでしたか?
・デバッグ開始(F5)は押されてますよね?
・ビルドだけって事は無いですか?
念のため第三十章あたりをコンパイル・実行してみて結果を教えてください。


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

Name: fnny  ..ぴよぴよ(969ポイント)   Date: 2009/08/30(日) 21:38   No:38636     
Title: Re:Ryujin.exe    
先ほど何度かしてみたら第二章は起動しました。
第一章のみエラーが出ます。


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

Name: Justy  ..伝説なるハッカー(409,785ポイント)   Date: 2009/08/30(日) 21:43   No:38637     
Title: Re:Ryujin.exe    

>第一章のみエラーが出ます

 仕様です。
 最初からそうなるようになっているので、気にしないで進めて構わないと思います。


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

Name: T.C.D  ..ぴよぴよ(812ポイント)   Date: 2009/08/31(月) 16:28   No:38664     
Title: Re:Ryujin.exe    
違うかも知れませんが、、
もしかしたら、お使いのコンパイラー自体が悪いのかも知れません。

余裕があれば、再インストールしてみてはいかがでしょうか?

それと、別ですが
デバッグ用のフォルダに"Ryujin.exe”は問題なくあるのでしょうか?

間違ってたらすみませんが。


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

Name: fnny  ..かけだし(1,031ポイント)   Date: 2009/08/31(月) 21:33   No:38678 解決!     
Title: Re:Ryujin.exe    
>  最初からそうなるようになっているので、気にしないで進めて構わないと思います。

なるほど・・・
第二章以降は問題なく起動できました。
二章以降から制作を始めて問題ないですね?
というか、やってみてて問題なさそうです(笑)

エラーは気になりますが、今のところ現状危惧は打開できました。

皆様、ありがとうございました。


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



Name: ルファー [URL]  ..入門者(4,455ポイント)   Date: 2009/08/31(月) 18:57   No:38672       
Title: 無限大について    
C言語で、atan∞が求められるかなーってためしにatan(1.0 / 0.0)の結果を出力するプログラムを作ったら
ゼロ除算しようとしていますってエラーが出ました。
なんか他の言語かなんかはこの方法で∞を扱えた気がするんですが、どうすればできますか?
ちなみに1E+999で試したら定数が大きすぎるって言われました。
あ、開発環境はVC++2008です。


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


Name: ルファー [URL]  ..入門者(4,516ポイント)   Date: 2009/08/31(月) 19:57   No:38674     
Title: 続・無限大について    
自己解決しました。
どうもすみませんでした。

コード
#define PI acos(-1)
#define PlusInfinity tan(PI / 2.0)
#define MinusInfinity tan(PI * 3.0 / 2.0)
#define Infinity PlusInfinity


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

Name: ルファー [URL]  ..入門者(4,526ポイント)   Date: 2009/08/31(月) 19:59   No:38675 解決!     
Title: 無題    


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



Name:  ..ぴよぴよ(820ポイント)   Date: 2009/08/27(木) 21:35   No:38508       
Title: エラー    
char *p = new char[m_sText.GetLength()+1];
strcpy( p, m_sText );

delete [] p;

CString newText;
char *p2="";

int i=0;
while(1){
if(p[i]=='。')
break;
else if(p[i]=='\0')
break;
p2[i] = p[i++];
}
文章「。」で止まってくれません!!!!!!!!!


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,050,109ポイント)   Date: 2009/08/27(木) 21:51   No:38510     
Title: Re:エラー    
「。」というのは2バイト文字ではないでしょうか?
全角文字だと配列要素一つでは表せず、2つで1つの文字を表しますが、
上のプログラムだと配列要素一つとしか比較をしていないので出来ないのだと思います。

また、タイトルには解り易い記述を、そしてお名前はなるべくユニークなものにして頂けると助かります。


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

Name: あいーん  ..ぴよぴよ(24ポイント)   Date: 2009/08/27(木) 22:01   No:38512     
Title: Re:エラー    
すいません初心者で、、、char型は4バイトではないのでしょうか?

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

Name: box  ..ハッカー(142,906ポイント)   Date: 2009/08/27(木) 22:18   No:38513     
Title: Re:エラー    
> char型は4バイトではないのでしょうか?

違います。
sizeof(char)は1です。

ところで、ソースコードを貼り付ける際、
全体がそれほど長くないのであれば
すべて貼り付けませんか?
というのは、一部分だけ貼り付けてあっても、
回答しようとする側でコンパイルできないためです。




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

Name: あいーん  ..かけだし(2,296ポイント)   Date: 2009/08/31(月) 18:08   No:38666     
Title: 音声合成の改良    
すいません。
このプログラムは、音声合成ができるものです。そこで元のプログラムを改良して、文字を読み上げる際に「。」という文字が来たら次の文字を読む前に一時停止するというものを作りたいのですが、なかなかエラーで作れません。どうしたらよいのでしょうか?


プログラム


#include "stdafx.h"
#include "SampleSpeech.h"
#include "SampleSpeechDlg.h"
#include <sapi.h>
#include<stdio.h>
#include <time.h>


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



/////////////////////////////////////////////////////////////////////////////
// アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// ダイアログ データ
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard は仮想関数のオーバーライドを生成します
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV のサポート
//}}AFX_VIRTUAL

// インプリメンテーション
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// メッセージ ハンドラがありません。
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSampleSpeechDlg ダイアログ

CSampleSpeechDlg::CSampleSpeechDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSampleSpeechDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSampleSpeechDlg)
m_sText = _T("");
//}}AFX_DATA_INIT
// メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSampleSpeechDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSampleSpeechDlg)
DDX_Text(pDX, IDC_EDIT1, m_sText);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSampleSpeechDlg, CDialog)
//{{AFX_MSG_MAP(CSampleSpeechDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSampleSpeechDlg メッセージ ハンドラ

BOOL CSampleSpeechDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// "バージョン情報..." メニュー項目をシステム メニューへ追加します。

// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定

// TODO: 特別な初期化を行う時はこの場所に追加してください。

return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}

void CSampleSpeechDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}


void CSampleSpeechDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CSampleSpeechDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CSampleSpeechDlg::OnButton1()
{

UpdateData();
ISpVoice* pVoice = NULL;

if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("Error to intiliaze COM");
return;
}

HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);

if( SUCCEEDED( hr ) )
{

/*ここが変更した場所*/
char *p = new char[m_sText.GetLength()+1];
strcpy( p, m_sText );

delete [] p;

CString newText;
char *p2 = new char[m_sText.GetLength()+1];
strcpy( p2, "" );
delete [] p2;

int i = 0;
while(1){
if(*p=='。')
break;
else if(*p=='\0')
break;
*p2++ = *p++;
}

newText = p2;



hr = pVoice->Speak(newText.AllocSysString(), SPF_DEFAULT, NULL);
pVoice->Release();
pVoice = NULL;
}


CoUninitialize();

}

void CSampleSpeechDlg::OnButton2()
{ AfxGetMainWnd()->PostMessage(WM_CLOSE);


}


2,272ポイント を手に入れた。

Name: Mist  ..熟練のプログラマー(66,102ポイント)   Date: 2009/08/31(月) 18:26   No:38667     
Title: Re:音声合成の改良    
ソースを掲示する場合は規約に従いpreタグを使用してください。

変更した場所についてざっと見ましたがC++をよく理解されいないご様子。
元がどうだったのかわかりませんがnewして確保し領域を即座にdeleteで解放していたり
していて、「。」の判定以外にもおかしなところだらけです。

質問者さんはC++についてどの程度習得されていますか?


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

Name: あいーん  ..かけだし(2,302ポイント)   Date: 2009/08/31(月) 18:31   No:38668     
Title: Re:音声合成の改良    
全くの初心者です。。
char *p = new char[m_sText.GetLength()+1];
strcpy( p, m_sText );

delete [] p;

の部分はCCString型からchar型へ変更するためのプログラムを参考にしました。


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

Name: Mist  ..熟練のプログラマー(66,239ポイント)   Date: 2009/08/31(月) 18:44   No:38670     
Title: Re:音声合成の改良    
参考にしたのはここですかね?
http://rararahp.cool.ne.jp/vc/vctips/cstringchar.htm

参考にするのはいいんですけど理解していないと意味がないですね。
いろいろな例を理解せず流用してくっつけただけでは正しいプログラムはできません。

例えば

delete [] p;

とした段階でnewで確保したメモリは解放されているためアクセスしてはいけません。
pに確保した領域を使用するのはdeleteよりも前です。
まず、これだけでも修正できますか?


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

Name: バグ  ..ハッカー(168,458ポイント)   Date: 2009/08/31(月) 18:47   No:38671     
Title: Re:エラー    
CStringの中身をconst char*として扱いたいなら、GetBuffer関数が手軽ですよ。

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



Name: らっしゅ  ..ぴよぴよ(113ポイント)   Date: 2009/08/30(日) 23:26   No:38643       
Title: slnファイルが開けない    
[1] 質問文
 [1.1] 自分が今行いたい事は何か 自作ゲームを作りたい
 [1.2] どのように取り組んだか(プログラムコードがある場合記載) ゲームプログラミングの館のDXライブラリの設定のリンクからVisualC++ 2005 Express Edition を使用した場合のDXライブラリの使い方 を選び5番まで取り組んだ
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載) DxLib_VC2008_and_2005用.slnを開こうとしても開けない
 [1.4] 今何がわからないのか、知りたいのか DxLib_VC2008_and_2005用.slnの開き方

[2] 環境  
 [2.1] OS : Windows, Linux等々 WindowsXP
 [2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々 VisualC++2008

[3] その他
 ・どの程度C言語を理解しているか まだ初心者です。あまりわかっていません
 ・ライブラリを使っている場合は何を使っているか DXライブラリ VisualC++用(Ver2.25b)


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


Name: 羽流布 [URL]  ..中級者(12,540ポイント)   Date: 2009/08/31(月) 11:08   No:38654     
Title: Re:slnファイルが開けない    
まだ状況がよく理解できていないのですが・・・
そのSLNファイルのアイコンがVisualCのものに変わっていますか?

うーん、例えばVC++ 2008EEを起動してソリューションを開く(?)でやってみるとか。。。


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

Name: へたれ  ..ぴよぴよ(918ポイント)   Date: 2009/08/31(月) 11:46   No:38658 解決!     
Title: Re:slnファイルが開けない    
できました!

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

Name: non  ..熟練のプログラマー(61,580ポイント)   Date: 2009/08/31(月) 17:06   No:38665     
Title: Re:slnファイルが開けない    
らっしゅさんの質問をへたれさんが解決にしてしまったらまずいでしょ。
しかし、この質問多いですね。




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



Name: nestaw  ..ぴよぴよ(104ポイント)   Date: 2009/08/23(日) 00:27   No:38355       
Title: DirectXSDKについて    
いつも勉強させていただいてます。
またまた質問させていただきたいことがあるのですが、
今まで自分はDXライブラリだけがプログラミングの者と思っていたのですが、
他にも、DirectXsdkというものがあると知りました。

そのことで質問なのですが、
・DXライブラリとDXSDKは何が違うのか。
・DirectXsdkもDXライブラリと同じような文法(?)でプログラミングできるのか
余談 何か分かりやすいwebサイト等ありますか(これは見過ごしていただいて結構です笑)

調べてみたのですが違い等良く分かりませんでしたので質問させていただきました。初歩的な質問で済みません。宜しくお願いします


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


Name: 御津凪 [URL]  ..ハッカー(108,166ポイント)   Date: 2009/08/23(日) 04:06   No:38360     
Title: Re:DirectXSDKについて    
DXライブラリは DirectX SDK を使いやすく、そして画像や音声などのデータを扱いやすく機能を盛り込んだゲーム向きのライブラリです。
その代わり、現在ではほとんど使用されていない(現行ハードウェアが対応していない) DirectDraw という機能を描画処理に使用しているため、エフェクトが重くなりやすく、3D 描画処理に弱いなどの欠点があります。

その元となっている DirectX SDK では、高速な 3D 描画処理が行えるので、複雑なエフェクトでも比較的重くならないほか、現行のハードウェアが対応しています。
その分、複雑な初期化処理(ほとんど定型ですが)や、描画プロセスを自身で構築しなければならず、DXライブラリと比べれば格段に難易度は高いと言えます。

※ DirectDraw は、DirectX がバージョン 7 までサポートしていた機能で、現在の DirectX のバージョンでは
DirectDraw は存在しないため、それらを扱う関数などは存在しません。


余談の方ですが、DirectX SDK については下記のサイトがお勧めです。
ttp://marupeke296.com/GameMain.html


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

Name: nestaw  ..ぴよぴよ(158ポイント)   Date: 2009/08/23(日) 14:12   No:38364 解決!     
Title: Re:DirectXSDKについて    
ご回答ありがとうございます!
む、難しそうですよね・・・ヤッパリ

まずはDXライブラリをマスター(?)してから、DirectXに望んだほうが良さそうと思えたので
勉強しつつ頑張ってみます

ありがとうございました


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

Name: wisteria  ..ぴよぴよ(2ポイント)   Date: 2009/08/31(月) 11:12   No:38655     
Title: Re:DirectXSDKについて    
ということは将来的にはDXライブラリで作ったゲームはいずれ動かなくなるのでしょうか

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

Name: 御津凪 [URL]  ..ハッカー(111,140ポイント)   Date: 2009/08/31(月) 11:34   No:38657     
Title: Re:DirectXSDKについて    
DirectDraw という機能が DirectX のランタイムに残っている限り、対応していない PC でも動作します。

これは、ソフトウェアモードで動作(CPUでシミュレート)出来るようになっているためです。

もちろん、最新のランタイムに DirectDraw が含まれなくなった時が現在のDXライブラリで作ったゲームは動かなくなる、ということを意味しますが、
今のところ古いバージョンがランタイムに含まれないといったことは無いため、心配する必要は無いと思います。


ちなみに、Windows 7 (正確には現在公開されているランタイム)には DirectDraw の代わりとなる、 Direct2D がサポートされるそうです。


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

Name: wisteria  ..ぴよぴよ(40ポイント)   Date: 2009/08/31(月) 14:35   No:38663 解決!     
Title: Re:DirectXSDKについて    
まだまだDXライブラリでやっていけるということですね。

ありがとうございました。


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



Name: ふぁみた  ..ぴよぴよ(228ポイント)   Date: 2009/08/29(土) 17:38   No:38566       
Title: C++についてなのですが    
今、C++で球体の集まりで液体を表現するものを作っています。
球と球が積み重なっていくようにしたいのですが球と球の接触判定はできているのですが、
球と球がぶつかると跳ね返るときもあるのですが、なぜかくっついてしまいます。
なにか意見をお聞かせ願います。


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


Name: sizuma [URL]  ..中級者(14,512ポイント)   Date: 2009/08/29(土) 18:16   No:38568     
Title: Re:C++についてなのですが    
抽象的で、よくわからないですが。
水分子のシミュレーションソフトのようなものでしょうか。
どういう条件で重なるか、跳ね返るかを分けているかによるのでは?

もし水分子だとすれば、疎水性の低いものはくっついて、高いものは反発して離れる、となってるのかな。
どういう風に水分子の静電気的力を表現して球を重ねるのかわからないですけど。

if(接触){
  if(疎水性低い){
    重なる
  }else{
    反発
  }
}

この疎水性が低いかを判断するif文がちゃんと機能していないほではないでしょうか?


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

Name: ふぁみた  ..ぴよぴよ(320ポイント)   Date: 2009/08/30(日) 10:01   No:38599     
Title: Re:C++についてなのですが    
さっそくのご意見ありがとうございます。
プログラムは、OpenGLとC++を使っています。球はOpenGLで描画しています。球は、中心から半径を設定して描画されています。

球同士の当たり判定は、球と球の座標で設定しています。判定の仕方は、座標で判断させているので、中心に半径をたして、それが違うボールの中心に半径を引いたものがあたれば、反発しあうようにしています。

もしよろしければ作ったプログラムを添付しましたので、よろしければ、見ていただけないでしょうか??
よろしくお願いします。


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

Name: sizuma [URL]  ..上級者(15,328ポイント)   Date: 2009/08/30(日) 16:23   No:38614     
Title: Re:C++についてなのですが    
反発力が0.6と結構跳ね返らないのが原因ではないでしょうか?
このコードだと、例えば壁や球に囲まれるなどして、連続で接触するとベクトルの成分がすぐなくなります。
特にxは加速度もないんで、xでくっつくと、yも連続で接触することになり、ベクトルが0になる
と、なってるんじゃないかなぁ・・・と思います。


あとは仕様の問題でしょうけど
  ○
  ↓
   ○

このようにぶつかってもy成分がx成分に変わることがないんで、不自然な動きをしてる気がします。


自信がないんで参考程度にお願いしますね


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

Name: ふぁみた  ..ぴよぴよ(548ポイント)   Date: 2009/08/30(日) 17:41   No:38617     
Title: Re:C++についてなのですが    
何度もありがとうございます 参考になります。
ということは、if文のなかにx成分やy成分の両方の条件を追加したものを書けばいいってことですかね
あと、もしよろしければ、私ならこうするなどの意見もあれば教えていただけないでしょうか??
めんどくさい質問で申し訳ないです。


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

Name: sizuma [URL]  ..上級者(15,632ポイント)   Date: 2009/08/30(日) 18:28   No:38620     
Title: Re:C++についてなのですが    
物理シミュレーションなんてしたことないんで、的外れなこといってるかもしれませんが。


>if文のなかにx成分やy成分の両方の条件
接触判定してる球の角度をもとめて、ベクトル成分yを分解してxに足せばいいんじゃないでしょうか?
真上からあたることなんてほとんどないと思うんで条件は追加しなくてもいいと思います。
あと、yが0のときは地面の摩擦を考慮して速度を減速すればくっつかないでとまりそうです。
このままだと、壁と球にぶつかった時しか減速しないのでくっつかないと止まらないと。


>私ならこうする
実はC++は使ったことがないんです(汗
というわけでC++の効率のいいコーディング方法もわからないんです。
僕はいつもVectorじゃなくてLinkedListをつかいます(Java、C#)
描写と更新はPaticleクラスの中に入れて、制御するかな・・・
OpenGLがどういう動きをするのかわからないんで、なんともいえないですけど。


距離を求める計算は、重そうだし(平方根)、接触すれば4回同じ計算をしてるんで
double distance = sqrt(test_x*test_x + test_y*test_y + test_z*test_z);
if(distance < 2*BALL_SIZE2){
って書くと思います。


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

Name: ふぁみた  ..ぴよぴよ(533ポイント)   Date: 2009/08/31(月) 09:13   No:38650     
Title: Re:C++についてなのですが    
何度も答えてくれえありがとうございます。

アドバイスやご意見参考になりました。
また何かあればよろしくお願いします!!


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

Name: ふぁみた   Date: 2009/09/16(水) 12:32   No:385661253071951 解決!     
Title: Re:C++についてなのですが    
ありがとうございました!!




Name: 朽木  ..中級者(10,965ポイント)   Date: 2009/08/30(日) 21:03   No:38630       
Title: datフォルダとincludeフォルダがある場所を変える方法を教えてください    
ちょっとお聞きしたいのですが、
龍神録50章で
datフォルダとincludeフォルダを
XXXX.slnがあるところに置きたいのですが、
沢山エラーがでます。
どの部分を直せばdatフォルダとincludeフォルダを
XXXX.slnがあるところに持ってくることができますでしょうか?


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


Name: Justy  ..伝説なるハッカー(410,234ポイント)   Date: 2009/08/30(日) 23:49   No:38644     
Title: Re:datフォルダとincludeフォルダがある場所を変える方法を教えてください    

>どの部分を直せばdatフォルダとincludeフォルダを
>XXXX.slnがあるところに持ってくることができますでしょうか?

 各ファイルをテキストエディタで開いて、以下のように修正して下さい。
(一応、いつでも元に戻せるようバックアップをとっておいた方がいいですね)

■ RyuJin.vcproj
     "../include"
のところを全て
     "./include"
に変更

     "..\include"
のところを全て
     ".\include"
に変更

■ gv.h
     #include "../../../include/DxLib.h"

     #include "../../include/DxLib.h"
に変更

■ load.cpp /music.cpp / calc.cpp
     ../dat/
となっているところを全て
     ./dat/
に変更

 多分これでいける、かと。


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

Name: 朽木  ..中級者(11,007ポイント)   Date: 2009/08/31(月) 05:17   No:38649 解決!     
Title: Re:datフォルダとincludeフォルダがある場所を変える方法を教えてください    
>>Justyさん
返答ありがとうございます。
リンカもいじる必要もありましたが
無事出来ました。
ありがとうございました


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



Name: kai  ..初心者(5,106ポイント)   Date: 2009/08/30(日) 22:15   No:38638       
Title: オプションを自機の周りをくるくる回させる方法    
を龍神録で実装してみたいのですが
回転させる方法が分かりません。
アドバイスがほしいです。
お願いします><


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


Name: mnkr  ..ぴよぴよ(741ポイント)   Date: 2009/08/30(日) 23:00   No:38640     
Title: Re:オプションを自機の周りをくるくる回させる方法    
はじめまして。

ゲーム開発をしたことがないので自信がありませんが、

オプションのX座標=自機X座標+sinの値
オプションのY座標=自機Y座標+sinの値

↓このあたりの波形の動きはどうでしょうか
SIN波形を作る
http://homepage2.nifty.com/takeuchiyosinori/page073.html


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

Name: pooka [URL]  ..中級者(14,909ポイント)   Date: 2009/08/30(日) 23:20   No:38642     
Title: Re:オプションを自機の周りをくるくる回させる方法    
過去ログに同じような質問があるので参考にしてみてください。
ttp://www.play21.jp/board/formz.cgi?action=res&resno=35987&page=&lognum=110&id=dixq&rln=36000


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

Name: kai  ..初心者(5,145ポイント)   Date: 2009/08/31(月) 04:28   No:38648 解決!     
Title: Re:オプションを自機の周りをくるくる回させる方法    
mnkrさん、pookaさん
アドバイスありがとうございます。
ぶじにできました。
ありがとうございました!


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



Name: ととろ  ..初心者(5,607ポイント)   Date: 2009/08/28(金) 21:11   No:38549       
Title: プログラミングの参考書    
すみません。プログラムの質問ではないですが、
基礎を身に付けるためにプログラミングの本を買おうとおもうのですが
・すごく分厚くて内容が用語の辞書みたいになっている本
・問題を解いていくやつなのだけれど内容が薄そうな本
どっちがいいでしょうか?


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


Name: 初級者  ..初心者(6,544ポイント)   Date: 2009/08/28(金) 21:42   No:38550     
Title: Re:プログラミングの参考書    
前者をすすめる人
後者をすすめる人

の両方がいると思います。
というわけで、最後は自分で決めねばなりません。
当たり前ですね。


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

Name: sizuma [URL]  ..中級者(14,256ポイント)   Date: 2009/08/28(金) 22:32   No:38551     
Title: Re:プログラミングの参考書    
前者派。

問題演習中心のプログラミングの本というのはほとんどないのではないでしょうか?
章末にちょこっと問題がのってるぐらいがほとんどだと思います。

ちなみに僕は独習Cで基礎を勉強しましたが、独習Cは結構問題がのってますよ。
分かりやすいかといえば、普通と答えますけどね。


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

Name: kazuoni [URL]  ..ハッカー(101,547ポイント)   Date: 2009/08/28(金) 22:58   No:38552     
Title: Re:プログラミングの参考書    
演習中心というと、近くの大学付属図書館とかにいけば、
古いですが、結構あります。
それを解いていくのもありといえば、ありですけど、
まだ基礎ができてないうちに、いきなり演習は難しいかと思います。
こういう古い本は、エッセンスはしっかりしているように自分は感じますけど、
詳細の組み方までは載っていないのがほとんどかと思います。
この手は、演習だけではなく、
「あ、ここは線形の双方使えばよかった」
「今は動いているけど、ここが怪しいなぁ・・・」
など、評価もかなり大切になってきます。
身近に教師、プログラムができる方が一緒にやってくれることが
一番望ましいです。

っといっても、分厚い辞書ってのもかなり苦労すると思います。
(ページのレイアウト、本の重さ、ページ数・・・)

なので、自分は基礎を勉強するなら
「一通り基礎をできる程度かつ自分に読みやすそうなもの」
を選びます。
確かに、仕事で使えるほど、詳しくは学べませんが、
無駄とは思ってません。

結局は何でも、完走できそうならなんでもよいって感じですかね^^;

#偉そうなこと言っても、自分もまだかなりの初心者です・・・

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

Name: MNS  ..中級者(14,141ポイント)   Date: 2009/08/28(金) 23:05   No:38553     
Title: Re:プログラミングの参考書    
とにかく、プログラミングというものを知りたいという人なら前者でも良いでしょうが、
辞書のような本は余程やる気がないと難しいでしょう。
それよりも、とにかくプログラムを組んでみたいという人や、
ただ本を読んでいるのがつまらないと思う人なら後者が良いのではないでしょうか。

どの本が良いかは、とろろさんの好みによっても分かれますし、
何を目的としているのか、どのくらいプログラミングが出来るのか、
ということでも変わってきます。

言語がC,C++だとすると、
Cが全く、もしくはほとんど分からないというのなら、
「Cの絵本」という本が分かりやすいでしょう。
また、とにかくゲーム作りがしたいというのなら、
「14歳からはじめるC言語わくわくゲームプログラミング」
というものが非常に分かりやすいです。


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

Name: zwi  ..ぴよぴよ(693ポイント)   Date: 2009/08/29(土) 00:03   No:38555     
Title: Re:プログラミングの参考書    
とりあえず本屋で、C言語に関して自分の知らない事や不十分な事をしっかり書いてくれている本を探してみてはどうでしょうか?
「明解C言語 実践編」を読んでみて分からなさそうであれば「明解C言語 入門編」から読んでみるとか。
自分にとっては何が必要でどんな学習方法が良いかは自分で判断してもらうのが一番ですので。


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

Name: たかぎ [URL]  ..ハッカー(110,877ポイント)   Date: 2009/08/29(土) 00:55   No:38556     
Title: Re:プログラミングの参考書    
本気で基礎力を身につけようと思うのであれば、プログラミングに限定せず、まずはコンピュータの原理をしっかり押さえるべきです。
これをやらずに表面的な勉強だけをしようとするから、「ポインタが理解できない」といった状態に陥ります。
薄い中学生向けの本でもよいので、コンピュータの原理を勉強しましょう。
その上で書店に行けば、何を購入すべきかが見えてくるはずです。


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

Name: ととろ  ..初心者(5,626ポイント)   Date: 2009/08/31(月) 01:49   No:38647 解決!     
Title: Re:プログラミングの参考書    
さまざまな意見ありがとうございます。
結論としては辞書系のを買うことにしました。
問題を解くほうは一回とけば終わりで、多分自分だと応用が利かなそうなので。


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



Name: T.C.D  ..ぴよぴよ(6ポイント)   Date: 2009/08/30(日) 16:53   No:38615       
Title: コンパイル時のエラーについて    
初質問です。基本的な内容なら分かる程度のレベルです。
XPでVC++2008を使っているのですが、どうしても分からないエラー(コンパイル時)が起きました。

ーーーーーmein.cを全て公開しました。ーーーーー

ソース"main.c"

/*数を当てるゲーム*/
/*文字を入れた場合の問題あり*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "game.h"
#include "timer.h"

//変数
int num[s_size],
rep, cnt = 0,
yosou, answer = -1,worng,
i, hugou, sa;
int* p;


int main() {

FILE *fp; //ファイルポインタ*
puts("ゲーム...\nランキング...");

for (i = 0; i <= s_size; i++) //念のためnum全てに0を代入
num[i] = 0;
puts(" [数あてゲーム]");
printf("スタートランクを指定してください(スタートは1〜5(最大%d)) >",rank_max);
scanf_s("%1d",&g_va.rank);
if(!(g_va.rank>0 && g_va.rank<=5)) { //もしエラーなら
error();
g_va.rank = 1;
main();
}
g_va.tp = g_va.rank * 3;
puts("・・・・・・・・・・・・・・・・・・・・・・・・・");

do {
yosou = -1;
cnt = 0,worng = 0;
p='\0';

printf("STAGE%d[現在 ランク%d]\nゲームのレベルを選択してください。(1〜100) ",g_va.tp,g_va.rank);
scanf_s("%d",&g_va.level);
if(!(g_va.level>0 && g_va.level<=100)) {
printf("\n\tErorr\n\n");
continue;
}
sistem(&g_va);

printf("\t---1から%dまでの乱数を予想せよ!(回数制限=%d)---\n",g_va.kazu,g_va.over);
//注:現段階では、文字を入力しないでください!

while(yosou != answer) { //メイン
if(cnt>=g_va.over){ //もし回数制限を越えていたら終了
puts("GAMEOVER!!");
}
kaitou();
}
sleep(1000);

printf("おめでとうございます。「%d回」で正解しました!\n\n",cnt);
printf("----------入力履歴----------\n"); //入力履歴表示&プラスマイナスいくつか
printf(" 1回目 : %3d\n",num[0]);
for(i = 1; i < cnt; i++) { //前後の数値の差の絶対値 及び '+'or'ー'を求めるため
if(cnt>=s_size)
continue;
p = &num[i];
if (*p < *(p-1)) { //前の数より*Pの方が小さい

hugou = '-'; //-
sa = *(p-1) - *p;

} else if(*p > *(p-1)){ //前の数より*Pの方が大きい

hugou = '+'; //+
sa = *p - *(p-1);

} else { //前の数と*Pが等しい

printf("%2d回目 : %3d (±0)\n",i+1,*p);
continue;
}
printf("%2d回目 : %3d (%c %d)\n",i+1,*p,hugou,sa);
}
if (cnt<=5 && cnt>1)
printf("5回以内で正解!お見事!\n");
if(cnt==1)
printf("….\n\n");
g_va.score += g_va.level * g_va.rank; //スコア表示と計算
g_va.rank = g_va.tp++ / 3; //ランク変更(後置インクリメント)
if(g_va.rank>rank_max)
g_va.rank = rank_max;
sleep(3000);
printf("現在のスコアは%dです\nもう一度やりますか?Yes..1 No..0 >",g_va.score);
scanf_s("%d",&rep);

for(i = 1; i <= 10; i++)
printf("\n");
puts ("----------------------------\n\n");

} while (rep == 1);
}

//問題に解答する
void kaitou(void) {

putchar ('>');
scanf_s("%d",&yosou);
if (cnt<s_size)
num[cnt] = yosou; //num[0〜cut]に入力値を代入(s_size回まで)

if (!(1<=yosou && yosou<=g_va.kazu)) {
printf("\t\a\aError 1から%dまでの数ではありません\n",g_va.kazu);
cnt--; //num[]への場所を戻す
worng++;
if (worng>=5)
printf("エラーを確認しましたか?\n");
}else if (answer == yosou+1 || answer == yosou-1) {
printf("惜しい!(%d回目)\n",cnt+1);
}else if (yosou < answer){
printf("\aもっと大きい数です(%d回目)\n",cnt+1);
}else if (yosou > answer){
printf("\aもっと小さい数です(%d回目)\n",cnt+1);
}
cnt++;
}


//数を決定する
void sistem(struct variable *g_va) {

//回数制限...150−レベル+?÷ランク
g_va->over = (150 - g_va->level + (num[0] % 10 /2)) / g_va->rank ;
if (g_va->over<2)
g_va->over = 2;
else if (g_va->over>100)
g_va->over = 100;

//数の上限...レベル×10+? の100〜190%
g_va->kazu = (g_va->level * 10 + (num[0] % 10)) * (1.0 + (g_va->rank - 1.0) / 10.0);

//(乱数の発生)
srand((unsigned)time(NULL));
answer = (rand() % g_va->kazu) + 1;
}

また、これがtimer.hは、xミリ秒待つ関数です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
リンクしています...
ERROR.obj : error LNK2005: _g_va は既に main.obj で定義されています。
D:\data\My Data\Visual Studio 2008\Projects\game\Debug\game.exe : fatal error LNK1169:
1 つ以上の複数回定義されているシンボルが見つかりました。
game - エラー 2、警告 2
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 上のように、「1 つ以上の複数回定義されているシンボルが見つかりました。」と出力ウィンドウにありますが、この意味が分かりません。ちなみに、"g_va"はヘッダファイルで構造体としてのみ宣言しています。


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


Name: box  ..ハッカー(142,874ポイント)   Date: 2009/08/30(日) 16:57   No:38616     
Title: Re:コンパイル時のエラーについて    
自作のヘッダーファイルがあるのでしたら、
それを含めて、そのプログラムに関する
すべてのソースコードを見せていただきたいです。


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

Name: T.C.D  ..ぴよぴよ(293ポイント)   Date: 2009/08/30(日) 17:42   No:38618     
Title: Re:コンパイル時のエラーについて    
すみません、忘れていました。
これがそのヘッダーファイルです。

game.h

#ifndef _MYGAME_
#define _MYGAME_

#define s_size 50
#define rank_max 10

//ゲームシステム関係の変数(構造体)
//ソースはva.[変数]の形で使用
struct variable{
short score,
level,
rank,
tp,
over,
kazu;
};
struct variable g_va = {0, 0, 1, 1};

void error(void);
void kaitou(void);
void sistem(struct variable *g_va);


#endif




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

Name: box  ..ハッカー(143,055ポイント)   Date: 2009/08/30(日) 18:47   No:38621     
Title: Re:コンパイル時のエラーについて    
全部見せてくださいましたか?

>ERROR.obj : error LNK2005: _g_va は既に main.obj で定義されています。

このメッセージからは、main.c と ERROR.c という
ソースファイルがあるように見えます。

ERROR.c の内容は、今のところ見えておりません。

また、先に見せてくださっていた main.c には
ヘッダーファイルをインクルードしている箇所が見あたりませんでした。

そういった点を含めて、「すべてを」見せてほしいとお願いしております。
どうせなら一度にさらけ出した方が、早く解決すると思います。


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

Name: sizuma [URL]  ..上級者(15,699ポイント)   Date: 2009/08/30(日) 18:51   No:38622     
Title: Re:コンパイル時のエラーについて    
mainで変数の定義となにをincludeしてるのかわかりません。
複数回定義されてる、んだったらそこらへんが怪しいと思うんですけど・・・



#ボーっとしてたらかぶりました・・・


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

Name: T.C.D  ..ぴよぴよ(583ポイント)   Date: 2009/08/30(日) 19:43   No:38623     
Title: コンパイル時のエラーについて -追記2    
二回目ですみません。これで全てだと思います。(main.c のmain以外の関数を除いて)
このソースはご覧のとおりとても短いので、はじめは載せませんでした。


#include <stdio.h>
#include "game.h"

void error(void) {
printf("\t---Erorr---\n");
}


それから、分かりやすいようにコンパイル済みの途中段階の実行ファイルを添付しました(LZH)。
(デバック用ですので、少しソースとは違うかもしれません)


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

Name: box  ..ハッカー(143,150ポイント)   Date: 2009/08/30(日) 20:07   No:38624     
Title: Re:コンパイル時のエラーについて -追記2    

> #include <stdio.h>
> #include "game.h"

main.c でも同じようにインクルードしているのですか?

つまり、複数の .c ファイルから同じ game.h を
インクルードしているかどうか、そこがいちばん知りたい点なのです。

まあ、おそらく、そういう風にインクルードしているのでしょうけれど。
リンク時(コンパイル時ではないです)のエラーメッセージから推測して。

> struct variable g_va = {0, 0, 1, 1};

結果として、この変数定義を
main.c
ERROR.c
の両方で行なっている点が問題であると思います。


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

Name: T.C.D  ..ぴよぴよ(724ポイント)   Date: 2009/08/30(日) 20:23   No:38625     
Title: Re:コンパイル時のエラーについて    
確かに、両方でインクルードしているようでした。boxさん、ありがとうございます。
ところで、私はgame.h に

#ifndef _MYGAME_
#define _MYGAME_

・・・

#endif

と言う風に書き、二重インクルードを防いだはずなのですが、
なぜ二回インクルードしてしまったのでしょか?
どなたか教えてください。

*一番最初のを編集し直してmain.cを全て公開することにしました。


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

Name: zwi  ..かけだし(1,684ポイント)   Date: 2009/08/30(日) 21:26   No:38634     
Title: Re:コンパイル時のエラーについて    
>#ifndef _MYGAME_
これは1つのソースで二重のヘッダの読み込みを防ぐためのものです。
今回の問題は同じグローバル変数が別々のソースで定義されたことになるので、まったく別の問題です。
そもそも、グローバル変数の実体定義をヘッダに書いたのが間違いです。


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

Name: T.C.D  ..ぴよぴよ(742ポイント)   Date: 2009/08/30(日) 22:35   No:38639 解決!     
Title: Re:コンパイル時のエラーについて    
ありがとうございました。ある程度解決しました。

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



Name: 坂本  ..ぴよぴよ(439ポイント)   Date: 2009/08/30(日) 05:09   No:38593       
Title: 漢字弾幕の警告「'fopen' の宣言を確認してください」がとれない    

漢字弾幕のところについてですが
'fopen' の宣言を確認してください。
と警告が表示するのですが、
警告が消せなくて困ってます。
どうしたら消えるのでしょうか?
何を追加したら消えるか教えていただけたら幸いです。

//文字弾幕の弾座標データロード(53)
int load_font_dat(char name[64], BlPoint_t *Bp){
char fname[128];
FILE *fp;
sprintf_s(fname,"../dat/font/%s.dat",name);//受け取ったファイル名をパスに入れる
fp = fopen( fname , "rb" );//そのパスとファイル名を使ってファイルを開く
if( fp == NULL )
return -1;
fread( Bp, sizeof(BlPoint_t), 1, fp );
fclose(fp);
return 0;
}
//文字弾幕の弾座標データロード(53)
int load_AA_dat(char name[64], BlAAPoint_t *Bp){
char fname[128];
FILE *fp;
sprintf_s(fname,"../dat/font/%s.dat",name);//受け取ったファイル名をパスに入れる
fp = fopen( fname , "rb" );//そのパスとファイル名を使ってファイルを開く
if( fp == NULL )
return -1;
fread( Bp, sizeof(BlAAPoint_t), 1, fp );
fclose(fp);
return 0;
}



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


Name: conio  ..プログラマー(39,852ポイント)   Date: 2009/08/30(日) 08:29   No:38595     
Title: Re:漢字弾幕の警告「'fopen' の宣言を確認してください」がとれない    
特定の警告を無視する命令を出しておけば、警告は消えると思います。
で、その命令というのが「#pragmaディレクティブ」です。

どの警告を表示させなくするかを指定する事が出来ます。


↓これを、ソースの初めの方にでも追加してみてください。
----------------------------------
#pragma warning( disable : 4996 )
----------------------------------

ただ、何でもかんでも警告を消してしまうとよろしくないので、
そこら辺は、自分の書いたコードに応じて考える必要があると思います。


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

Name: 御津凪 [URL]  ..ハッカー(111,287ポイント)   Date: 2009/08/30(日) 15:41   No:38613     
Title: Re:漢字弾幕の警告「'fopen' の宣言を確認してください」がとれない    
そこの警告は fopen の代わりに fopen_s を使用することを推薦するような文が前の行に出ているはずですので、
fopen 関数をその英文内に書かれている fopen_s 関数に代えれば消えるはずです。
(引数と戻り値が違うことに注意)

sprintf_s 関数をすでに使っているので、セーフティ関数への変更を推薦する警告文を消すのは余りよろしくないと思うので、どちらか(セーフティ関数にすべて代えるか一切使わないか)に統一した方がいいでしょう。


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

Name: 坂本  ..ぴよぴよ(601ポイント)   Date: 2009/08/30(日) 20:47   No:38627     
Title: Re:漢字弾幕の警告「'fopen' の宣言を確認してください」がとれない    
>御津凪さん
えと、すなわちどうすればいいのでしょうか?
fopenをfopen_sに置き換えても
error C2660: 'fopen_s' : 関数に 2 個の引数を指定できません。
という、今度は警告ではなくエラーが返ってくるのですが


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

Name: kazuoni [URL]  ..ハッカー(102,248ポイント)   Date: 2009/08/30(日) 20:57   No:38628     
Title: Re:漢字弾幕の警告「'fopen' の宣言を確認してください」がとれない    
時には検索することも重要かと思います。

msdn
ttp://msdn.microsoft.com/ja-jp/library/z5hh6ee9(VS.80).aspx


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

Name: 御津凪 [URL]  ..ハッカー(111,149ポイント)   Date: 2009/08/30(日) 20:57   No:38629     
Title: Re:漢字弾幕の警告「'fopen' の宣言を確認してください」がとれない    
fopen_s 関数は、 fopen 関数とは引数、戻り値共に違います。

上記のコードから変更する場合は、

//そのパスとファイル名を使ってファイルを開く
if( fopen_s( &fp , fname , "rb" ) != 0)
return -1;


のようにしてください。
詳しいことは関数名で検索すれば見つかります。


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

Name: 坂本  ..ぴよぴよ(644ポイント)   Date: 2009/08/30(日) 21:11   No:38632 解決!     
Title: Re:漢字弾幕の警告「'fopen' の宣言を確認してください」がとれない    
>御津凪さん
警告が無事とれました。
なるほど。
引数を3つ入れるやり方が分からなかったので助かりました。勉強になります。
ありがとうございました。


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



Name: mnkr  ..ぴよぴよ(238ポイント)   Date: 2009/08/30(日) 02:57   No:38589       
Title: ゲームの配布について    
教えてください、よろしくお願いします。

VC++とVC#を比べた場合、
VC++のほうが配布しやすくて一般的なのでしょうか?

VC++で作成した場合、exeのみでOK
VC#で作成した場合、exeと.netフレームワークが必要
とありました。

最近のXPなら.netフレームワークは標準で入っている。。。ような気がしますが、
VC++のほうが配布しやすいでしょうか?

また、VC++.netでの配布を考えた場合、VC++と違って
exeと.netフレームワークが必要
となるのでしょうか?

現在所有しているのはVisualStudio2003.netです。
VC++(VC++.net?)で勉強しようか、VC#(VC#.net?)で勉強しようか悩んでいるところです。

よろしくお願いします。


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


Name: zwi  ..かけだし(1,596ポイント)   Date: 2009/08/30(日) 12:14   No:38604     
Title: Re:ゲームの配布について    
VC#とVC++/CLRは同じ.netフレームワーク環境を必要とします。
古いVS2003時点の.netフレームワークならたぶんXP以降なら入っているとは思いますが断言は出来ません。
なので再頒布前提で「.NET Framework の再頒布」と言うページがあるので読んでみてください。
http://msdn.microsoft.com/ja-jp/library/xak0tsbd%28VS.80%29.aspx
それとVS2003はかなり古いので、ExpressEdtionで良いので2008版を使う事をお勧めします。なぜかと言うとC#とC++/CLRの完成度がVS2003ではかなり低いのが問題だと思いますので。

で、ゲームの話ですがDirectXを直接使うならC++/CLIをXNA GAME STUDIOを使うならC#を選択してください。
XNA GAME STUDIOの方がDirectXを直接使うより難易度が低いのとXbox360でゲームを販売出来たりするおまけもあります。
DXライブラリはC++/CLIでも使えると思いますがチャレンジした人がいるのかは私は知りません。C++を使ったほうが無難だと思います。


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

Name: Justy  ..伝説なるハッカー(409,723ポイント)   Date: 2009/08/30(日) 13:24   No:38606     
Title: Re:ゲームの配布について    

>VC++のほうが配布しやすくて一般的なのでしょうか?

 Windowsでゲームで一般的というならネイティブ(非.Net)だと思いますが……。

 ただ、ネイティブアプリも設定や使うライブラリによってはランタイムを
要求することがあるので、.Netと同じようにランタイムをインストールする必要が
ある可能性があります。

 どちらにしてもランタイムが入ってなければ入れてもらえばいいだけですし、
インストーラに組み込んでしまって未インストールであれば入れるようにすれば
配布のしやすさはさほど変わらないと思います。

 ちなみに .Netで作る場合 VisualStudio2003では .Net 1.1までの対応になるので、
Windows98/ME/NT/2000/XP/Vistaと一通り動くので対応 OSの少なさの心配は
さほどないと思います。



>最近のXPなら.netフレームワークは標準で入っている。。。ような気がしますが

 市販の PCを購入したときはいろんなソフトに混ざってプリインストールされてる
可能性はありますが、XPの OSそのものには入っていなかったと思います。


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

Name: mnkr  ..ぴよぴよ(334ポイント)   Date: 2009/08/30(日) 13:25   No:38607 解決!     
Title: Re:ゲームの配布について    
ご教授ありがとうございます。
C++がC++/CLRにパワーアップしていたのですね。。。知りませんでした。

書き込みの内容から、
C#を選択する理由はないような気がしてきました。

C++とC++/CLIについて調べてみようと思います。
ありがとうございました。


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

Name: mnkr  ..ぴよぴよ(392ポイント)   Date: 2009/08/30(日) 13:29   No:38608 解決!     
Title: Re:ゲームの配布について    
書き込み中に他の方の書き込みが。。。
ありがとうございます。

インストーラーに組み込む方法もあるんですね!
勉強になります。


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

Name: バグ  ..ハッカー(168,428ポイント)   Date: 2009/08/30(日) 13:35   No:38609     
Title: Re:ゲームの配布について    
C#を選択する理由というと、個人的な意見ではありますが、C++より分かり易いと思います。

特に.NETを使用するのならば、C++よりC#をオススメします。ただ、.NETを使用するのならば、コーディング的な部分から言えば、どの言語を使おうが大きな違いはありませんけどね(^_^;)

C#の文法は、VBとC++の中間のような感じですので、C#をある程度勉強しておけば、応用が利きやすいような気がします。更に言えば、JAVAを勉強しておけばなお理解が早いかと思います。(C#って、C++とJAVAの良いとこ取りな言語だと思いますので)

単純に速度が必要で、かなり切り詰めていく必要でも無い限りはC#で良いんじゃないでしょうか?


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

Name: mnkr  ..ぴよぴよ(529ポイント)   Date: 2009/08/30(日) 14:06   No:38610     
Title: Re:ゲームの配布について    
書き込みありがとうございます。

仕事関係でVBA、JAVAでの開発(というより元々あるソースの修正、バージョンアップ)を
多少行ったことがあります。
また、VS2003購入時に付属してきた入門本でVC#を多少触ったことがあります。

という経験も考えるとVC#もアリかなぁという気持ちになっちゃいます。

でも龍神録の講座を見るとVC++なのかなぁと考えたり。。。


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

Name: sizuma [URL]  ..上級者(15,227ポイント)   Date: 2009/08/30(日) 15:18   No:38611     
Title: Re:ゲームの配布について    
C#だと、DirectXを使ってる参考サイトってあんまりないと思います。(調べてないですけど・・・)
書籍でもDirectXを使う場合C++が多いんじゃないでしょうか。
でもC#,JAVAを使ってるなら、C,C++は文法を勉強するだけでもちょっと時間がかかりますよね。
僕もC#のほうが分かりやすいと思うんで。

C#だと、XNAがほとんどな気がします。
(DirectXやC#版のDXライブラリもあるみたいですけどね)
もちろんXBOXの環境があるなら、XNAが簡単でゲームプログラミングに集中できていいとは思いますけど、グラボがないとPCじゃ実行できないんで、配布はかなりしにくいですかね。
解説サイトも多いわけではないですし・・・

もし、C#じゃない言語で書いてある参考コード(龍神録の講座など)をみて、C#版のライブラリに書き換えるのがわからなかったりするなら、C、C++を勉強するほうが逆に近道かもしれません。


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

Name: 御津凪 [URL]  ..ハッカー(111,087ポイント)   Date: 2009/08/30(日) 15:32   No:38612     
Title: Re:ゲームの配布について    
C# で DirectX を扱ったゲームを開発する場合、XNA を利用しないといけません。
(Managed DirectX で開発することもできますが、すでにサポート(開発)は中止されており、 XNA を利用するように推薦されています)
XNA なら、 XBOX でもゲームが出来る形なので、それを目的とするなら C# で開発してもいいでしょう。
(MSDN に日本語リファレンスがあるので、読める力があるのならそんなに難しくはないです)

ゲームというジャンルの開発が初めてなのであれば、 sizuma さんの通り、 C、C++ でゲームの知識を覚える等していった方が良いと思いますよ。


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

Name: mnkr  ..ぴよぴよ(630ポイント)   Date: 2009/08/30(日) 18:20   No:38619     
Title: Re:ゲームの配布について    
なるほどっ

たくさんの意見、アドバイスありがとうございます!

ゲームというジャンルは初めてなので、
何から手を付けたらよいのかよくわからない状態でした。

ここで質問して、たくさんの方からの回答を頂き、
ある程度方向性が見えてきました。

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

VC++2008 ExpressEdtionで龍神録の講座を勉強してみようと思います!


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



Name:  ..かけだし(1,025ポイント)   Date: 2009/08/30(日) 05:03   No:38592       
Title: 自機オプションについて    
龍神録を改造してて気づいたのですが
cshot.cpp内のcshot[k].spdを2にし、
スピードをゆるくしたあと
Zキーを押しっぱなしでショットを放つと
とぎれとぎれになるときがあるのですが
これはどこのプログラムが原因でこうなるのでしょうか?
また、改善策があれば教えてください


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


Name: Justy  ..伝説なるハッカー(409,281ポイント)   Date: 2009/08/30(日) 10:40   No:38600     
Title: Re:自機オプションについて    

>これはどこのプログラムが原因でこうなるのでしょうか?

 察するに同時に出せるショットの数に制限があるからでしょう。
 どこかにショットの最大数が書かれているはずなので、その数を調整してみて下さい。


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

Name:  ..かけだし(1,100ポイント)   Date: 2009/08/30(日) 12:59   No:38605 解決!     
Title: Re:自機オプションについて    
仰る通りで
//自機ショットの登録最大数
#define CSHOT_MAX
の値を増やすことにより、消えなくなりました。
Justyさんありがとうございました。


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



Name: UKONN  ..ぴよぴよ(306ポイント)   Date: 2009/08/28(金) 15:03   No:38539       
Title: 無題    
c言語というより計算式に関する質問です。
プログラムの作成上回転中心の計算を行う必要があります。
if(fabs(out_r)>fabs(out_l))
{
center_x = robot->x + (robot->radius + 2*robot->radius*out_l/(out_r-out_l))*cos(robot->theta + PAI/2.0);
center_y = robot->y + (robot->radius + 2*robot->radius*out_l/(out_r-out_l))*sin(robot->theta + PAI/2.0);
}

else{
center_x = robot->x + (robot->radius + 2*robot->radius*out_r/(out_l-out_r))*cos(robot->theta - PAI/2.0);
center_y = robot->y + (robot->radius + 2*robot->radius*out_r/(out_l-out_r))*sin(robot->theta - PAI/2.0);
}

この式の解説をお願いしたいです。 
見づらいと思いますがよろしくお願いします。


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


Name: バグ  ..ハッカー(168,575ポイント)   Date: 2009/08/28(金) 16:24   No:38542     
Title: Re:無題    
robotというのは構造体?クラス?
out_rとかout_lとか…せめて変数の役割くらいは書いてくださいな。
なんとなく予想はつくけど見当違いの回答をしてもアレなんで…


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

Name: SCI  ..上級者(22,973ポイント)   Date: 2009/08/29(土) 12:20   No:38559     
Title: Re:無題    
高校数学のある分野の知識が必要です。
具体的には「一次変換」「回転行列」などをキーワードに調べてみてください。

ここで説明してもいいのですが、その場凌ぎの説明では「そのまま」か、逆に「難解」な説明になってしまいそうで(笑

------------------
と思いましたが、よく見たら三角関数をそのまま使っているだけでしたね(笑
各変数の意味もそうですが、「三角関数自体が分からないのか」「それ以外の式の意味が分からないのか」・・・
などを書いてもらえると解答しやすいですね。


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

Name: UKONN  ..ぴよぴよ(348ポイント)   Date: 2009/08/29(土) 23:15   No:38582     
Title: Re:無題    
>バグさん
ロボット(robot)と言うのは構造体にあたります。
out_l,out_rはロボットに付属する車輪の右車輪と左車輪における出力値になります。
説明足らずで申し訳ありません。


>SCIさん
三角関数はもちろんわかってるつもりですが・・・。この式で表されてしまうとわかりません。
また、center_xはロボットの中心を表しているのだと思うのですが、それではrobot->xはどの部分を表すのでしょうか?
度々の質問で申し訳ないですが、よろしくおねがいします。


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

Name: box  ..ハッカー(142,941ポイント)   Date: 2009/08/29(土) 23:43   No:38585     
Title: Re:無題    
> ロボット(robot)と言うのは構造体にあたります。

「何のための」構造体ですか?

> それではrobot->xはどの部分を表すのでしょうか?

答えろ、という方が無茶だと思います。
こちらは、その構造体についてほとんどわからないのに。
そう思いませんか?

近くに、その構造体を設計した人がいれば、
その人にたずねるのが最も手っ取り早いです。


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

Name: UKONN  ..ぴよぴよ(405ポイント)   Date: 2009/08/30(日) 12:01   No:38603 解決!     
Title: Re:無題    
>boxさん
確かにあらゆることが不明確ですね。
設計した人に連絡を図り、聞いてみようとおもいます。

質問に答えていただいた方たちに感謝します。
ありがとうございます。


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



Name:  ..ぴよぴよ(507ポイント)   Date: 2009/08/30(日) 01:32   No:38587       
Title: 自動実行    
VC++を使っています。

いまパソコンを何回再起動したかを調べるためのプログラムを組んでいます。


常駐のソフト(メッセンジャー)などは自動実行されますが、それをCで組むにはどのようになるのでしょう?


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


Name: バグ  ..ハッカー(168,608ポイント)   Date: 2009/08/30(日) 01:57   No:38588     
Title: Re:自動実行    
一番手っ取り早いのは、スタートアップフォルダにショートカットを追加してやる方法かな?

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

Name:  ..ぴよぴよ(611ポイント)   Date: 2009/08/30(日) 06:07   No:38594     
Title: Re:自動実行    
>>バグさん
ありがとうございます。

続けてで申し訳ないのですが・・・・
VC++で作成したプログラムで僕が作ったプログラムのショートカットを作成して、スタートアップフォルダに保存するということは可能なのですか?

なんか、C言語にはフォルダの概念がないと調べたのですが・・・


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

Name: バグ  ..ハッカー(168,627ポイント)   Date: 2009/08/30(日) 09:02   No:38596     
Title: Re:自動実行    
まずは、試してみてはいかがでしょうか?

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

Name: zwi  ..かけだし(1,365ポイント)   Date: 2009/08/30(日) 11:54   No:38602     
Title: Re:自動実行    
WindowsAPIを使えばショートカットを作成できます。

こちらを参考に。
http://www13.plala.or.jp/kmaeda/winc/shortcut.htm

後は自分(exe)のパスを得る事とスタートアップのパスを得る事です。

スタートアップを得るには以下の関数でCSIDL_STARTUPで呼び出すと得る事ができます。
http://yokohama.cool.ne.jp/chokuto/urawaza/api/SHGetSpecialFolderLocation.html


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



Name: yussanstar  ..かけだし(1,243ポイント)   Date: 2009/08/29(土) 18:54   No:38570       
Title: ファイルデータ→二次元配列    
ソースコード内で、

char ar[4][6];

などと宣言します。
一方、別のテキストエディタで、

asdfgh
aswrfg
ajjrft
qwkii@

などと文字列を書いておき、
これをar[4][6]に二次元配列として格納するにはどうすればいいですか?
要素数は固定でかまいません。


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


Name: box  ..ハッカー(142,886ポイント)   Date: 2009/08/29(土) 19:13   No:38572     
Title: Re:ファイルデータ→二次元配列    
> これをar[4][6]に二次元配列として格納するにはどうすればいいですか?

文字列終端の '\0' は意識しなくていいのですか?


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

Name: yussanstar  ..かけだし(1,281ポイント)   Date: 2009/08/30(日) 03:49   No:38590     
Title: Re:ファイルデータ→二次元配列    
boxさん
よくわからないのですが、

ar[1][2]='s'

のようにできればいいです。
少しでもヒントになればいいと思っているので、
できれば質問返しはなしで、回答にもコードを載せてください。



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

Name: sizuma [URL]  ..中級者(14,930ポイント)   Date: 2009/08/30(日) 04:33   No:38591     
Title: Re:ファイルデータ→二次元配列    
>少しでもヒントになればいいと思っているので
boxさんの質問がわからない時点で、Cの文字列についてわかってないのが分かります。
入門サイトで調べればわかるので調べましょう。すげー大事ですんで。


>ar[1][2]='s'
C言語では配列の要素は0から始まります。
ar[1][2]はwですね。
あと、ar[1][2] = 's'は、ar[1][2]に's'を代入するって意味なんでおかしいです
(もしそれが表現したかったのならすいません)


>回答にもコードを載せてください
もしそう思うのであれば、質問にもコードをのせましょう。
まったくわからない場合はコードを教えてもらうのではなくてどうアプローチすればいいかを教えてもらう方がためになります。
模範解答書いてくれる人もいますけどね。


(1)テキストファイルをオープンする
FILE *fp;
fp = fopen("xxx.txt","r");

(2)テキストファイルの文字列を読み込む
ファイル入力関連の関数で。

(3)ファイルをクローズする
fclose(fp);

まったく分からないのであれば、入門サイトでファイル入出力を勉強しましょう。


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



Name: latte  ..ぴよぴよ(84ポイント)   Date: 2009/08/29(土) 22:57   No:38580       
Title: 無題    
一筆書きを授業でやったRPGフィールド移動を応用して作らなくてはいけないんですが通過すると通過不可にする方法がわかりません。課題の条件が、ゲームマップのデータは0:通行可の通路、1:通行不可の壁、2:通行不可の通過マスとする。0の通路を通過すると2の通過マスとなる。のやりかたがわかりません。

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


Name: kazuoni [URL]  ..ハッカー(101,916ポイント)   Date: 2009/08/30(日) 00:00   No:38586     
Title: Re:無題    
ゲームプログラミングの館をご覧になりましたか?
学校がどのようにマップを構成しているか分かりませんが、
結構近いことが解説されてますので、参考になるかと思います。
http://dixq.net/g/



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



Name: Age  ..ぴよぴよ(22ポイント)   Date: 2009/08/29(土) 23:18   No:38583       
Title: 一筆書きゲーム    
一筆書きゲームを作りたいのですが一度通った所を通れなくするにはどうプログラミングしたらいいでしょうか?

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


Name: lbfuvab  ..上級者(21,738ポイント)   Date: 2009/08/29(土) 23:39   No:38584     
Title: Re:一筆書きゲーム    
一度通ったところを配列などで保存すれば良いです。

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



Name: zyf  ..ぴよぴよ(895ポイント)   Date: 2009/08/23(日) 15:57   No:38366       
Title: ショットが発射されません    
ゲームプログラミングの館を見ながら、横スクロールシューティングゲームを作ろうと思っているのですが、

19章のキャラをキー入力によって移動させる。と、26章のシューティング基本。を組み合わせてみると、

Run-Time Check Failure #3 - The variable 'ch' is being used without being initialized.
[中断][続行][無視]

といったエラーのようなものが出て実行できません。
ショットの開始する座標にキャラクターの座標を入れたのですがどこが悪いのでしょうか?


#include "DxLib.h"

typedef struct{//キャラクターの構造体
int x,y,img;
}ch_t;
struct shot{//ショットの構造体
int x,y;
int flag;
};

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
//////定義
int image001[1];
int back1[1];
int na_shot[3],i,counter=0;//counter=発射してからのカウントをする変数。
struct shot tama[10];//tamaを10個作る。
char Key[256];
ch_t ch;
//////定義ここまで
for(i=0;i<10;i++){//ショットの初期化処理。
tama[i].x=ch.x;tama[i].y=ch.y;//座標代入
tama[i].flag=0;//飛んでいないことを示す。フラグ=0
}

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

ch.x=120;
ch.y=240;

SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "sample00.png" , 1 , 1 , 1 , 64 , 64 , image001 );//画像を分割してimage001配列に保存
LoadDivGraph( "back00.bmp" , 1 , 1 , 1 , 640 , 480 , back1 );
LoadDivGraph("na_shot.png",3,1,3,36,36,na_shot);
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了

////////移動
if(Key[KEY_INPUT_RIGHT]==1)
ch.x++;
if(Key[KEY_INPUT_LEFT]==1)
ch.x--;
if(Key[KEY_INPUT_UP]==1)
ch.y--;
if(Key[KEY_INPUT_DOWN]==1)
ch.y++;
////////移動ここまで
ch.img=image001[0];

DrawGraph(0,0,back1[0],FALSE);
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//[12]の画像を描画

///////ショット
if(counter<5)
counter++;

else if(Key[KEY_INPUT_Z]==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[1].flag==1){
tama[i].x+=8;
if(tama[i].x>500){
tama[i].x=ch.x;
tama[i].flag=0;
}
}
}

ScreenFlip();//裏画面を表画面に反映
}

DxLib_End();
return 0;
}


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


Name: box  ..ハッカー(142,760ポイント)   Date: 2009/08/23(日) 16:13   No:38368     
Title: Re:よくわからないエラー(?)が出てしまいます。    

> ch_t ch;

ここで定義したchのメンバーに、何もセットしていない状態で

> for(i=0;i<10;i++){//ショットの初期化処理。
> tama[i].x=ch.x;tama[i].y=ch.y;//座標代入

ここで参照しています。よいのでしょうか?




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

Name: zyf  ..かけだし(1,066ポイント)   Date: 2009/08/24(月) 02:28   No:38379     
Title: Re:よくわからないエラー(?)が出てしまいます。    
解決しました!
と思ったら、Zキーを押ても弾が出ないのですがどこが問題でしょうか?

ショット部分はお手本を丸写ししたはずなんですが・・・


(関係ない部分なので略)
///////ショット
for(i=0;i<10;i++){//ショットの初期化処理。
tama[i].x=ch.x;tama[i].y=ch.y;//座標代入
tama[i].flag=0;//飛んでいないことを示す。フラグ=0
}

if(counter<5)
counter++;

else if(Key[KEY_INPUT_Z]==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[1].flag==1){
tama[i].x+=8;
DrawGraph(tama[i].x,tama[i].y,na_shot[1],TRUE);
if(tama[i].x>500){
tama[i].x=ch.x;
tama[i].flag=0;
}
}
}

ScreenFlip();//裏画面を表画面に反映
}

DxLib_End();
return 0;
}


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

Name: pooka [URL]  ..中級者(14,758ポイント)   Date: 2009/08/24(月) 04:26   No:38384     
Title: Re:よくわからないエラー(?)が出てしまいます。    
確認してませんが、
zキーを押して弾のフラグを立てても、次のフレームで

for(i=0;i<10;i++){//ショットの初期化処理。
tama[i].x=ch.x;tama[i].y=ch.y;//座標代入
tama[i].flag=0;//飛んでいないことを示す。フラグ=0
}

としているので弾は表示されないかと・・・

上の4行を削除して、tama[i].x = ch.x;とtama[i].y = ch.y;を

else if(Key[KEY_INPUT_Z]==1){
counter = 0;
for(i=0;i<10;i++){
if(tama[i].flag==0){
tama[i].x = ch.x;
tama[i].y = ch.y;
tama[i].flag=1;
break;
}
}
}

のようにすれば、とりあえず表示されるかと思います。

あと

for(i=0;i<10;i++){
if(tama[1].flag==1){
tama[i].x+=8;
//以下略

赤字の部分はiだと思いますよ。


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

Name: zyf  ..かけだし(1,434ポイント)   Date: 2009/08/25(火) 19:47   No:38435     
Title: Re:よくわからないエラー(?)が出てしまいます。    
直してみたのですが、結果が変わりませんでした。
一応ソースを全部貼ってみます。これで駄目だったら一回書き直します。

#include "DxLib.h"

typedef struct{//キャラクターの構造体
int x,y,img;
}ch_t;
struct shot{//ショットの構造体
int x,y;
int flag;
};

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
//////定義
int image001[1];
int back1[1];
int na_shot[3],i,counter=0;//counter=発射してからのカウントをする変数。
struct shot tama[10];//tamaを10個作る。
char Key[256];
ch_t ch;
//////定義ここまで

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

ch.x=120;
ch.y=240;


SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "nanoha00.png" , 1 , 1 , 1 , 64 , 64 , image001 );//画像を分割してimage001配列に保存
LoadDivGraph( "back00.bmp" , 1 , 1 , 1 , 640 , 480 , back1 );
LoadDivGraph("na_shot.png",3,1,3,36,36,na_shot);
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了

////////移動
if(Key[KEY_INPUT_RIGHT]==1)//右
ch.x+=3;
if(Key[KEY_INPUT_LEFT]==1)//左
ch.x-=3;
if(Key[KEY_INPUT_UP]==1)//上
ch.y-=3;
if(Key[KEY_INPUT_DOWN]==1)//下
ch.y+=3;

if(ch.x<-15)//左の限界
ch.x=-15;
if(ch.x>610)//右の限界
ch.x=610;
if(ch.y<-10)//上の限界
ch.y=-10;
if(ch.y>450)//下の限界
ch.y=450;
////////移動ここまで
ch.img=image001[0];

DrawGraph(0,0,back1[0],FALSE);
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//[12]の画像を描画


///////ショット


if(counter<5)
counter++;

else if(Key[KEY_INPUT_Z]==1){
counter=0;
for(i=0;i<10;i++){
if(tama[i].flag==0){
tama[i].x=ch.x;
tama[i].y=ch.y;
tama[i].flag=1;
break;
}
}
}
for(i=0;i<10;i++){
if(tama[i].flag==1){
tama[i].x+=8;
DrawGraph(tama[i].x,tama[i].y,na_shot[1],TRUE);
if(tama[i].x>500){
tama[i].x=ch.x;
tama[i].flag=0;
}
}
}

ScreenFlip();//裏画面を表画面に反映
}

DxLib_End();
return 0;
}


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

Name: pooka [URL]  ..中級者(14,865ポイント)   Date: 2009/08/25(火) 21:27   No:38440     
Title: Re:よくわからないエラー(?)が出てしまいます。    
No:38366では
//////定義ここまで
の後に弾の初期化があるのに消えているようです。
なので書き加えてみてください。


# No:38379では
///////ショット
の部分に弾の初期化があったのでそれを消せばいいと言いたかったんですが^^;


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

Name: zyf  ..かけだし(1,474ポイント)   Date: 2009/08/29(土) 16:08   No:38563 解決!     
Title: Re:よくわからないエラー(?)が出てしまいます。    
無事にショットが発射されるようになりました。

ありがとうございます!


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



Name: matsu  ..ぴよぴよ(417ポイント)   Date: 2009/08/27(木) 22:41   No:38515       
Title: プログラミングの問題    
今プログラミングの宿題をしています。
以下の問題で立ち止まっています。

(1)16進数で入力された二つの整数の和と差を計算して、
16進数と10進数で出力するプログラムをつくりなさい。

(2)入力された30000以下の秒数を、
「○○時間、○○分、○○秒」の形式で出力
するプログラムをつくりなさい。
≪ヒント≫
まず、秒を分に変換し、次に分を時間に変換する。
そのとき出てきた余りが、それぞれ秒と分である。

(3)次のようなデータを扱う4個の変数を宣言して、キーボードから
数値を入力し、入力結果を出力するプログラムをつくりなさい。
ただし、入力はそれぞれ、「身長=」などと表示したあとに続けて
入力させるものとする。また、出力もそれぞれ「身長=」などに続けて
表示し、改行するものとする。

身長のデータ sintyou
各クラスの人数 ninzuu
各教科の平均点 heikin
都市の人工 zinkou


(1)は
/* 2数の和と差 */
#include <stdio.h>
int main(void)
{
int wa, sa;
とここまでは「こうじゃないかな〜?」程度で考えたの
ですがこれ以降どうすればいいのか分かりません。

(2)は
どこから手をつけて良いのかわかりません。

(3)は
/* 4個のデータ */
#include <stdio.h>
int main(void)
{
printf("身長 =
printf("人数 =
  printf("平均点 =
printf("人口 =
という所まで考えましたが
printf("身長 =
printf("人数 =
  printf("平均点 =
printf("人口 =
の=以降と
とそれ以降が分かりません。

どう解けば(どこから手をつければ)いいでしょうか?
よろしくお願いします。


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


Name: たいちう  ..プログラマー(33,606ポイント)   Date: 2009/08/27(木) 23:02   No:38516     
Title: Re:プログラミングの問題    
こんな所から手を付けてみてはどうでしょうか。

(0)10進数で入力された二つの整数の和と差を計算して、
10進数で出力するプログラムをつくりなさい。


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

Name: matsu  ..ぴよぴよ(434ポイント)   Date: 2009/08/27(木) 23:25   No:38518     
Title: Re:プログラミングの問題    
申し訳ありません。

分かりません。


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

Name: sizuma [URL]  ..中級者(14,136ポイント)   Date: 2009/08/27(木) 23:31   No:38519     
Title: Re:プログラミングの問題    
宿題ということは、なにかテキストで学習してるのではないですか?
習ったところまで復習した方がいいと思います。

printfとscanfを調べればできると思いますが。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,050,234ポイント)   Date: 2009/08/28(金) 06:14   No:38526     
Title: Re:プログラミングの問題    
>申し訳ありません。
>分かりません。

どの位ならわかりますか?
では、こういうのはどうでしょう?

(a) 数値の「10」を画面に表示するプログラムを作りなさい。
(b) 変数aと変数bにキーボードから入力された整数を格納しなさい。
(c) (b)の和を計算しなさい。


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

Name: 夏天  ..初心者(6,247ポイント)   Date: 2009/08/28(金) 13:36   No:38538     
Title: Re:プログラミングの問題    
(1)
まずは入力用の変数を用意しましょう
次に計算結果を入れる変数を用意します
入出力のときに%Xを使えれば解決したようなものです

(2)
時間を分に、分を秒にといった計算をまずは自分で紙にやってみてください
その逆算をすれば完成です

(3)
printfとscanfについてレポートを提出しましょうw

がんばってくださいね^^b


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

Name: クロウ  ..中級者(12,835ポイント)   Date: 2009/08/28(金) 15:17   No:38540     
Title: Re:プログラミングの問題    
質問文をみてパッと思いついた程度ですが、
考え方としては
(1)
16進数→16進数:一度10進数に変換して計算して16進数に戻す
16進数→10進数:16進数のN桁目を見て(N >= 1)、
例えば
16進数で3桁の数、N = 3のとき
112だとすれば、10進数は1*(16^2) + 1*(16^1) + 2*(16^0) = 256 + 16 + 2 = 274となります。
16進数での112 + 11 の結果は
10進数でいう274 + 17 = 291となります

291(16進数→10進数)
291% (16 * 16) = 1余り35
36 % 16 = 2余り3
3

結果123

16進数→10進数の分解の方法としては

value;//入力された数値を入れる
keta1,keta2,keta3;//1,2,3桁目の数を格納

(入力)

(変数valueに値が入る)

(分解処理 (後ろから分解する。理由は10で割ると一桁ずつ落ちるから))
keta3 = value % 10;(例えば112のとき10で割った余りの2が入る)
value = value / 10;(10で割る(小数点以下は切り捨てられる) value = 11)

keta2 = value % 10;(11を10で割った余りの1が入る)
value = value / 10;(10で割る(小数点以下は切り捨てられる) value = 1)

keta1 = value % 10;(1を10で割った余りの1が入る)
value = value / 10;(10で割る(小数点以下は切り捨てられる) value = 0)

(計算処理)

keta1 * (16*16) + keta2 * 16 + keta3;

(出力)

みたいな構造になるかと思います。
10進数から16進数への変換はできた10進数を上と同じように今度は分解部分で16で割って計算部分で10を掛けてあげます。
まあ、配列やループを用いればもっと簡単になりますが問題のレベルからまだやっていないようなので省略しました。

(1)
1分→60秒
1時間→60分

つまり、上の(0)でやっている分解処理を60で割ればそのままになります。

(2)
続けて入力
printf→scanf→printf→scanfとつなげる。
改行
printf内の最後に"\n"をつける。

あとはprintfとscanfでググってみてください。


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

Name: クロウ  ..中級者(12,897ポイント)   Date: 2009/08/28(金) 15:30   No:38541     
Title: Re:プログラミングの問題    
よく見たら結構ごちゃごちゃ・・・
もし、わかりにくかったらスルーしちゃってください。
むしろ「16進数」「10進数」でググったほうがわかりやすいかと。


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

Name: Kou  ..初心者(8,659ポイント)   Date: 2009/08/29(土) 13:55   No:38562     
Title: Re:プログラミングの問題    

こんにちは。

(1)
 こちらのサイトが参考になりませんか?
 http://7ujm.net/play/DECtoHEX/TOH.html

(2)
 C言語 余りで検索すればいろいろ引っ掛かりますよ。
 基本的な演算子なんで、簡単に理解できると思います。
 ただし、30000以下の秒数を入力してもらう際に、入力エラーのチェックをするのであれば、if文が必要になります。

(3)
 基本的にprintf関数scanf関数を参考書なりサイトで調べれば、ほぼクリアできると思いますよ。

どの問題に関しても、printf関数scanf関数は必要となりますので、もう一度おさらいしてみてください。

※宿題なんですから、現時点で問題をクリアする為の知識(授業)は、既にあるはずです。

もしいきなりコードにするのが難しければ、紙に日本語で必要と思われる処理、順序等を書き出し、
それを参考書(教科書)、サイトで調べながらコードに直していけば、頭がゴチャゴチャにならないかも・・・


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

Name: matsu   Date: 2009/09/07(月) 22:58   No:385151252331906 解決!     
Title: Re:プログラミングの問題    
みなさんありがとうございました。



Name: dic  ..プログラマー(31,151ポイント)   Date: 2009/08/25(火) 20:47   No:38437       
Title: 「雑談」プロジェクトを完成させるには?    
とあるIT系ニュースサイトでもあったのですが、
趣味のプロジェクトをきちんと仕上げるには、どのような心がけが必要でしょうか?

お金をもらってやるプロジェクトだと、完全なロードマップや納期もあるし、
プロジェクトに集中することになりますが、趣味でやっているプロジェクトは
完成したためしがなく、品質にも納得したことがないという風な始まりなのですが

私も、その一人です
どのようにしたらプロジェクトは完成しやすくできるでしょうか?
何か工夫や経験などあれば教えていただきたいです


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


Name: たいちう  ..プログラマー(33,673ポイント)   Date: 2009/08/25(火) 22:19   No:38445     
Title: Re:「雑談」プロジェクトを完成させるには?    
私が作る場合は、完全に学習のための物を除くと、
殆どが自分で使える(遊べる)ものです。

最低限使えるものを作り、後は気が向いたときに
改良していきます。改良すべき点を思いついても
時間が無いときなどは、TODOリストに書くだけ。

完璧になったら完成だとすると、私は殆ど完成させていませんが、
自分のプログラムは常に改良中であると考えてはどうですか?


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

Name: 御津凪 [URL]  ..ハッカー(110,022ポイント)   Date: 2009/08/25(火) 22:30   No:38446     
Title: Re:「雑談」プロジェクトを完成させるには?    
趣味のプロジェクトとして失敗・挫折する要因としては下記十箇条に当てはまるかもしれません。

1.ぶっつけ本番で始める(後で修正が効かなくなりやすい)
2.安易な機能追加を行う(統一性のない仕様になりやすい)
3.動けばいいやと思って作り始める(1.と似てるがこちらの場合は飽きやすい)
4.目標となる完成までのプロセスを見ていない(どこかで狂いが生じやすい)
5.後でソースを見直す際に配慮したコードを書いていない(修正が困難になる)
6.統一した処理をしていない(バグが起きやすく、また起きた時の原因がつかみづらい)
7.プロジェクトの仕様が定まっていない(後の機能追加や動作確認に支障が出る)
8.目的の機能を実装する知識・技術が定まっていない(プロジェクトの停滞・挫折につながる)
9.先を見据えすぎた仕様で書こうとする(難易度が高くなりやすく、挫折の原因に)
10.コメントが無い(見直したときにコードの状況を掴みづらくなり、無駄な時間を消費する)

特に、「ただの趣味だ」と軽い気持ちで始めると、
上記十箇条に引っ掛かりやすくなります。
(自分の経験からの十箇条なので、参考程度に)

一応、プロジェクトを完成しやすくするための対処としては、

1.メモでもなんでもいいので、案を書きとめておく(仕様書的なものでも可)
2.機能追加を想定するならそれに予測する(あるいは対処した)コードを書く
3.完成する意思を持つ
4.プログラムの制作段階を見据える(システム部分、UI部分などの区切りとかで)
5.適当なコードを書かない
6.同様の処理は関数化(C++ならクラス・モジュール化)する
7.何を作るのかを常に記憶する(趣味で作っていると横道にそれやすい)
8.事前に必要な機能の実装を試す
9.いったん完成となるバージョンでの機能に限定して作る
10.関数(クラス)毎にコメントを入れ、後で見てわからなくなりそうなところ(処理等)もコメントを入れる(doxygen の書式で書けばリファレンスも作れて一石二鳥)

長くなりましたがこんな感じでしょうかね。

因みに現在私のサイトで公開しているライブラリは 4 年の間に 6 回も作り直した結果のものです。
どれも作りなおした原因は上記の十箇条に当てはまっていました。


2倍のポイントを手に入れた! 1,856ポイント を手に入れた。

Name: zwi  ..ぴよぴよ(38ポイント)   Date: 2009/08/25(火) 22:50   No:38448     
Title: Re:「雑談」プロジェクトを完成させるには?    
提案としては、ブログに開発状況を書く。ホームページに開発途中でもアルファ版として公開してしまうのはどうでしょうか?
ようは、完成させなければいけない気分にさせるんです(自分にプレッシャーを掛けるとも言います)。
みんなが公開しているフリー/シェアソフトも市販ソフトも完成しているわけではなく常にバージョンアップしています。完成や高い品質を求めるから挫折しているのかも知れません。
1.とりあえず公開する時点の仕様と時期を決める。
2.段階を追ってバージョンアップする機能を決めておく。
3.実装が可能か先にコアな機能を試しておく(インターフェイスも一緒に作ろうとすると挫折しやすいです)。
要するに自分で納期とロードマップを作ってしまうわけです。
ブログでそれを発表するのも効果的ですね。


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

Name: dic  ..プログラマー(31,553ポイント)   Date: 2009/08/26(水) 15:34   No:38464     
Title: Re:「雑談」プロジェクトを完成させるには?    
たいちうさん 御津凪さん zwiさん
回答ありがとうございます

御津凪さんの十箇条にほぼ90%以上当てはまり
うわぁって自分でなってしまいました

たしかにこれで完成って決めてしまうのも優柔不断な私には難しい方法かもしれませんので
常に改良中という認識でプログラムに挑むというのもいいですね
開発手法としてはスパイラス開発方式が合っているかもしれませんね

意思決定がなかなかできない私ですので、色々本などをよみあさっています
そこで、ある本にて意思決定方法について書かれてる本がありました
その本によると

1.候補案を出す
2.選択基準をつくる
3.最適案を選択する
4.行動する

とあり、また、よくデキる人たちの思考特性として

物事を考えるときに何について考えるかを決めてから考える
どのような手順で考えるかを決める
手順をふんでいっときにあれこれ考えない
与えられた時間の中で、今日はどこまでを考えるかを決めてから考える
基本的には原因と結果の論理的なつながりを立証しようとしている
案の選択とは、将来の得たい結果に向けての今日の手段づくりである

とあり、頭では多少理解できてるのですが、実行はなかなか難しいですね

実を言うと、あまりにも悩んでいるので、精神科の先生に聞いてみたところ
「ザツでいいからやりなさい」とおっしゃってくれました

まずは完璧を目指さず、ゆっくりやっていきたいです


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,050,009ポイント)   Date: 2009/08/27(木) 21:45   No:38509     
Title: Re:「雑談」プロジェクトを完成させるには?    
昨日雑談に参加したかったのですが、昨日忙しくて出来ませんでした。
全く参考にならない意見を言うDixqです、こんばんは(ぇ

私はとにかく「作りたいものから作る」「動いたり、目に見えて作った気がするものから作る」という酷いスタンスですf^_^;
作りたいと思って始めるからには、やはり目に見えてそれが出来る姿を早く見たいんですよね。
それを見ることでモチベーションも上がりますし、私にとっては酷いスタンスでも合っているような気がします。

このような事は外道だということが解った上で言いますが、
「モチベーションを完成まで維持する」ということは趣味のソフト作成には最重要なんじゃないかと思いますので、やり方は少し大袈裟ですが、
ある程度自分の気分のむくままにやるってのも大事なんじゃないかと思います。

(ちなみに私はバグさんのおっしゃった事にあてはまりまくりですf^_^;
 そして実際に仕事を始めてみて、自分のコーディングスタイルがいかに悪いかがわかりました(笑))

モチベーションさえ持ち続けたら、途中で少々軌道がずれたり沢山修正しないといけなくなっても、
ゴリゴリなんとかやりますし、
反対に、いくらスムーズに作れるレールが作れたとしても、モチベーションが下がってしまっては制作はとまってしまうと思います。
仕事なら嫌でもやるかもしれませんが、趣味だといやになるとやりませんからね・・。
無茶苦茶で気の向くままな計画でも、経験を積むうちに、やりたい事を先回しにしつつも
うまく進められる計画というのが立てられるようになっていくのだと思います。

そういう面でも仕事と趣味では作り方が違うのだと思います。

後、zwiさんが仰っていますが、アルファ版っていうのもいいモチベーションアップの材料になりますよね。
しかも意見を言ってもらえる分、リリースせずに完成させる時よりいいものが出来るように思います。
私も体験版なるものを出させて頂きましたが、あれが無かったら完成もしなかったと思うし、
出来も妥協の塊のようなものになっていたと思います(完成品もあの程度のクオリティではありますが^^;)

また、2chとか、自分のリリースしたものが批判されている書き込みがある所を見て回りました。
批判コメントっていうのは改善出来る資料の宝庫ですよね。
褒め言葉からはモチベーションを、批判コメントからは改善案を得ることが出来るので、
やはりアルファ版のリリースというのは良いことだと思います。

・・・という王道から外れた参考にならない書き込みでした^^;


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

Name: 山崎  ..プログラマー(25,083ポイント)   Date: 2009/08/28(金) 09:46   No:38529     
Title: Re:「雑談」プロジェクトを完成させるには?    
まだまだ未熟者ですが、未熟者の立場でちょっと雑談に参加させてくださいな。

私もよく、趣味のプログラムが途中から進まなくなって頓挫してしまった、
ということがよくありました。
やはり、モチベーションが薄れてしまうようなことが起こるとそうなってしまいますね。
私はプロではないので「仕事でプログラムする」という経験は無いですが・・・。
皆さんのお話を聞いていると、まぁ当然なのかもしれませんが趣味と仕事じゃ結構
モチベーションや姿勢が違ってくるんですね、参考になります。

私は、とにかく「モチベーションを維持する」という一点を常に心がけてます。
何をどうやってモチベーションを維持する、といったような技術的・論理的なやり方ではなく、
「また途中で頓挫してたまるかぁ!!」と自分に活を入れて維持していることが多いです。

理屈っぽいところでは、
・コードが何をしているか後から見てわかるようにする
・コーディングに着手する前に、使用するデータ構造やアルゴリズムを明確にしておく
というのを心がけています。
何をしているのかわからないコードを読み解くのは非常にモチベーションを削られますし、
時間もかかりますし、何より面白くないですからね。
例えば関数なら「何を引数にして、何が返されるか」をちゃんとコメントしておきたいと思ってます。
しかし、変数の役割や関数の説明を上手くコメントに表せなくて、
結局後から見たときに何をしているものなのかがわからなくなる、ということが多々あります。
変数などの抽象的な役割をわかりやすくコメントにまとめるコツなどがあれば是非勉強したいところです。

御津凪さんの挙げた十ヶ条は非常〜に参考になりました。
紙にメモして、パソコンの横の常に見えるところに貼り付けておきたいと考えています。
zwiさん、dicさん、そして管理人様のご意見も非常に参考になります。

私は、自分のソフトに対する批判コメントを読むのは非常〜〜〜に億劫です・・・。
モチベーションをガリガリ削られてしまいますね、ネットは辛らつなものの言い方をする人が多くて(汗)
確かに、ソフトの改善すべき点がわかるのはいい事なのは頭ではわかるのですが、
ぼろくそに言われるとやはり傷ついてしまいます・・・。
ここはプログラムじゃなくてかなり個人的な問題なのでしょうけれど・・・。


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

Name: zwi  ..ぴよぴよ(552ポイント)   Date: 2009/08/28(金) 11:32   No:38534     
Title: Re:「雑談」プロジェクトを完成させるには?    
それでは、私がプログラムを作っているときの過程を紹介します。
[Windowsアプリの場合]
1.アプリの機能を箇条書きにする。
2.アプリの画面デザインを紙の上に描く。
3.大雑把に必要なそうなモジュールやクラスとその機能を箇条書きする。
4.画面デザインを実際のVC++に設定する。
5.表示回りを最優先で作成する(やはり動いている事が分からないとプログラムを作るのが辛い)
6.機能を実装するのに必要なデータ構造を先に作成。
7.ソースコード上に実装する機能は先にコメントで出来るだけ細かく書いておく。同様に必要になりそうな関数も書いておく。
8.機能を実装、動かすを繰り返してバグを取りながら機能を盛り込んでいく。
9.1つのボタン、1つのコントールの機能を完成させてから次のボタン、コントールを完成させる。
って感じでしょうか。これから出かけるのでゲーム編も後でまた書きます。
まぁ、アプリとそう変わらないんですけどね。


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

Name: zwi  ..かけだし(1,007ポイント)   Date: 2009/08/29(土) 12:47   No:38560     
Title: Re:「雑談」プロジェクトを完成させるには?    
ゲーム編で私なりの作り方です。書いてみるとアプリとだいぶ違いますかね。
[2Dゲームの場合]
1.ゲーム自体の企画を決める。
2.必要なツール、必要なデータ、必要な機能をざっくりまとめる。
3.ゲームに必要なデータファイルの構造を決める。
4.データを作成するツール、コンバータを作成する。
5.ゲーム本体の表示系を先に作成する。とりあえずキャラ表示優先。
6.まず自キャラ表示。続いてキー入力と自キャラの最低限移動。
7.背景マップの表示部分を作成。当たり判定とか背景のアニメとかは後回し。
8.背景の当たり判定やらスクロールの処理。アニメも入れれたら。
9.シューティングなら弾処理の作成、アクションなら自キャラ処理を作成。
10.敵キャラの作成。敵キャラの行動パターンは後回しで簡単に動くもの。
11.敵キャラとの当たり/ダメージ判定。
12.敵キャラの攻撃処理。弾などの当たり判定を追加。
13.敵キャラの行動パターンを必要に応じて追加。
14.1ステージの完成を目標に雑魚ステージを完成させていく。
15.ボスステージの作成。演出やボスは専用ルーチンで作成。
1ステージしか完成していませんが、ここで公開してみるのも手ですね。
あとは13〜15を繰り返していくだけですが、作っていると基本機能の追加や手直しが途中で待っていたりします。そこをクリアするノウハウは数こなして覚えていくしかないのかなぁと思います。


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



Name: kai  ..初心者(5,061ポイント)   Date: 2009/08/26(水) 19:10   No:38468       
Title: フェードインとフェードアウトを繰り返す方法    
改造龍神録についてです。
よくタイトル画面とかの選択肢で見かける
フェードインとアウトを繰り返して、今これを選択してますよ〜的な
ものを作ってるのですが、インとアウトはそれぞれ一回ずつできたのですが
繰り返す方法が分からなくて困ってます。
龍神録本家でいうと、選択肢を選んだあと、0.5秒くらい
ピカピカ光るアレを作りたいのですがどうしたらいいでしょうか?
アドバイスお願いします。


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


Name: Dixq (管理人)  ..ウィザード(1,048,731ポイント)   Date: 2009/08/27(木) 18:01   No:38494     
Title: Re:フェードインとフェードアウトを繰り返す方法    
今携帯なので詳しく書けませんが‥。
フェードイン、アウトの繰り返しと、選択エフェクトとが関係します?
おっしゃってる選択エフェクトは選択画像の明るさを0.2秒とか定期的に変更すればいいと思います。
明るさは64と255の2つを繰り返す感じでいいのではないかと。その辺の数値は見ながら変更したらいいと思いますが。


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

Name: kai  ..初心者(5,070ポイント)   Date: 2009/08/28(金) 23:43   No:38554     
Title: Re:フェードインとフェードアウトを繰り返す方法    
この部分です

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

Name: kazuoni [URL]  ..ハッカー(101,789ポイント)   Date: 2009/08/29(土) 05:14   No:38557     
Title: Re:フェードインとフェードアウトを繰り返す方法    
なんとなく作っていたら、ちょっとカオスになったので、
とりあえず、流れを。。
簡単なのは、二つのフラグを用意し、
今押されたならば、ひとつフラグAを立てる。
そのフラグAが立っていたら、点滅処理開始。
点滅が規定秒or規定回数終わったならば、もう一つのフラグBを立てる。
フラグBが立っているならば、(両フラグをリセットし)
次の処理へみたいな感じでしょうか。
点滅し始めてから、、今から始まるゲームに必要なデータを読み込んだり
すれば、ユーザーは待たされる苦なくゲームが始めれそうですね。

#4,50分もかかってこのカオス。。

とりあえず、簡易ボタンをクラス化しました。
ボタンクラスのインスタンスを生成したら、
毎ループ
Button::Update(int *Key)
Draw()
を呼べば、とりあえずは動きます。
サンプルは・・・参考にならないです(キッパリ)


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



Name: ととろ  ..初心者(5,438ポイント)   Date: 2009/08/28(金) 01:08   No:38523 解決!       
Title: 変数の入れ物は必要なのか    
すみません。csvファイルの読み込みが3日たってもうまくいかず、とりあえずenemy_enter()の中に
データの値を打ち込んでそのまま読み込ませることにしました。
そうすると敵も表示され、しかもちゃんと動きます。
しかし敵の何匹かが途中でいきなり自機の画像に入れ替わりました
例えは悪いですがポケモンのメタモンの「変身」のように。
このプログラムでは、龍神録のようにenemy_order[n]を用意してですが、データを読み取る場合
変数の入れ物は必要でしょうか?
処理が追いつかず入れ替わりが起こるのでしょうか?



#include "dxlibp.h"
#include "GV.h"

#define ENEMY_PATTERN_MAX 11

extern void enemy_pattern0(int);extern void enemy_pattern1(int);extern void enemy_pattern2(int);
extern void enemy_pattern3(int);extern void enemy_pattern4(int);extern void enemy_pattern5(int);
extern void enemy_pattern6(int);extern void enemy_pattern7(int);extern void enemy_pattern8(int);
extern void enemy_pattern9(int);extern void enemy_pattern10(int);

void (*enemy_pattern[ENEMY_PATTERN_MAX])(int) = {
enemy_pattern0, enemy_pattern1, enemy_pattern2, enemy_pattern3, enemy_pattern4,
enemy_pattern5, enemy_pattern6, enemy_pattern7, enemy_pattern8, enemy_pattern9,
enemy_pattern10,
};




int enemy_num_search(){
int i;
for(i=0;i<ENEMY_MAX;i++){//フラグのたって無いenemyを探す
if(enemy[i].flag==0){
return i;//使用可能番号を返す
}
}
return -1;//全部埋まっていたらエラーを返す
}



//敵情報を登録
void enemy_enter(){//敵の行動を登録・制御する関
int n,i;
int cnt1[11] ={100,180,260,340,420,500,580,660,740,820,900};
int pattern1[11] ={0,1,2,3,4,5,6,7,8,9,10};
int knd1[11] ={0,0,0,0,0,0,0,0,0,0,0};
int bltime1[11] ={0,0,0,0,0,0,0,0,0,0,0};
int blknd1[11] ={0,0,0,0,0,0,0,0,0,0,0};
int blknd21[11] ={0,0,0,0,0,0,0,0,0,0,0};
int col1[11] ={0,0,0,0,0,0,0,0,0,0,0};
int wait1[11] ={120,120,120,120,120,120,120,120,120,120,350};
int hp1[11] ={100,100,100,100,100,100,100,100,100,100,100};
double x1[11] ={180,200,180,200,180,200,180,200,180,200,180};
double y1[11] ={-20,-20,-20,-20,-20,-20,-20,150,150,150,-20};
double sp1[11] ={0,0,0,0,0,0,0,0,0,0,0};



for(n=0;n<11;n++){
if(cnt1[n]==stage_count){//現在の瞬間がオーダーの瞬間なら
            if((i=enemy_num_search())!=-1){
           enemy[i].flag =1;
enemy[i].cnt =0;
enemy[i].pattern=pattern1[n];
enemy[i].muki =1;
enemy[i].knd =knd1[n];
enemy[i].x =x1[n];
enemy[i].y =y1[n];
enemy[i].sp =sp1[n];
enemy[i].bltime =bltime1[n];
enemy[i].blknd =blknd1[n];
enemy[i].blknd2 =blknd21[n];
enemy[i].col =col1[n];
enemy[i].wait =wait1[n];
enemy[i].hp =hp1[n];
enemy[i].hp_max =enemy[i].hp;
enemy[i].vx =0;
enemy[i].vy =0;
enemy[i].ang =0;
}
}
  }
}



//敵の行動制御
void enemy_act(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){//その敵のフラグがオンになってたら
enemy_pattern[enemy[i].pattern](i);
enemy[i].x+=cos(enemy[i].ang)*enemy[i].sp;
enemy[i].y+=sin(enemy[i].ang)*enemy[i].sp;
enemy[i].x+=enemy[i].vx;
enemy[i].y+=enemy[i].vy;
enemy[i].cnt++;
enemy[i].img=enemy[i].muki*3+(enemy[i].cnt%24)/6;
//敵が画面から外れたら消す
if(enemy[i].x<-20 || FIELD_MAX_X+20<enemy[i].x || enemy[i].y<-20 || FIELD_MAX_Y+20<enemy[i].y)
enemy[i].flag=0;
}
}
}


//敵処理メイン
void enemy_main(){
enemy_enter();
enemy_act();
}


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


Name: kazuoni [URL]  ..ハッカー(101,813ポイント)   Date: 2009/08/28(金) 09:31   No:38528     
Title: Re:変数の入れ物は必要なのか    
>しかし敵の何匹かが途中でいきなり自機の画像に入れ替わりました

大抵
・意図的にそのように表示している
・メモリアクセスしてはいけないところにアクセスしている
が原因かと思います。
配列で[11]と決めているのに、
-1
12
などと、配列範囲外にアクセスしていないか
今一度確認してみてください。

>データを読み取る場合変数の入れ物は必要でしょうか?

もちろん必要です。

>処理が追いつかず入れ替わりが起こるのでしょうか?

処理が追いつかないは「処理落ち」といって、
ゲームでは、画面がカクカクになることは頻繁に起こり得ますが、
それによって、変数の中身に影響することはないです。
プログラムは自分が書いたままの通り動きます。


恐らく、まだC言語の知識が固まってないのではないでしょうか?
正直なところ、龍神録はある程度のCの知識が必要かと思います。
入門書や入門ウェブページを一通り理解すると、
ものすごいはかどるかと思いますよ。


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

Name: zwi  ..ぴよぴよ(226ポイント)   Date: 2009/08/28(金) 11:07   No:38533     
Title: Re:変数の入れ物は必要なのか    
C言語の基本は、ちゃんと押さえておいた方が良いと思います。
それが出来ていないと余計な回り道をしてしまうことが多いです。
サイトを紹介しますので参考にしてください。

「C言語入門」
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
「苦しんで覚えるC言語」
http://homepage3.nifty.com/mmgames/c_guide/

上記サイトにある全ての練習問題が解いてみてください。
弱点が見えてくると思います。


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

Name: conio [URL]  ..プログラマー(39,681ポイント)   Date: 2009/08/28(金) 11:59   No:38535     
Title: Re:変数の入れ物は必要なのか    

あれ、csvファイルの読み込みは正常に終了したのではないのですか?

まぁそれはともかく、ずっとデータの形式が固定であればこんな感じにしてはどうでしょうか。
--------------------------------------------------------------------------------------
#include<stdio.h>

void LoadFile(char* file_name)
{
FILE* fp;
int result = 0;
char s[80];
char* DATA_SCAN = "%[^,],%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d";
char* DATA_PRINT = "%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %d\n";
int cnt,pattern,knd,bltime,blknd,blknd2,coll,wait,hp,x,y,sp;//データ12個

fp = fopen( file_name, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", file_name);
}else{
fscanf( fp,"%s",s);//最初の一行を飛ばす
while( ( result = fscanf( fp, DATA_SCAN, s, &cnt,&pattern,&knd,&bltime,&blknd,&blknd2,&coll,&wait,&hp,&x,&y,&sp ) ) != EOF )
{
printf( DATA_PRINT, cnt,pattern,knd,bltime,blknd,blknd2,coll,wait,hp,x,y,sp );
}
fclose( fp );
}
}

int main(void)
{
LoadFile("data.csv");
return(0);
}
--------------------------------------------------------------------------------------
データも添付しておきました。
保存して"data.csv"に名前を変更し、プロジェクトのある場所にcsvファイルを
移動させてやれば動くはずです。

あと、このプログラムは変数をそれぞれ一つだけ用意し、上書きしながらprintf関数で表示するだけなので
適宜 データを保存する配列を用意し、代入するように書き換えればよいと思います。


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

Name: ととろ  ..初心者(5,576ポイント)   Date: 2009/08/28(金) 21:06   No:38548     
Title: Re:変数の入れ物は必要なのか    
解決しました。原因は龍神録の敵の画像は3×3。
自分らが使ってたのは1×8だったからです。
敵の画像表示計算を弄くって直せました。

それでもやはり思ったことは自分は用語とかまったく分かってませんね。
一応昔ゲームプログラミングは一通りやったのですが、全く頭に入っていませんね。
これを機に一冊本でも買って勉強しようと思います


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



Name: under  ..ぴよぴよ(25ポイント)   Date: 2009/08/28(金) 05:18   No:38525       
Title: 無題    
pc初心者のものですが;;
入門編で
VisualC++2008を入れ
「DxLib_VC2008_and_2005用.sln」を開いたのですが反応しません
「マイコンピュータ>(メニューバー)ツール>フォルダオプション>「表示」タブ>「登録されている拡張子は表示しない」のチェックを外す」とやったのですが開かないのですがどうしたらよいのでしょうか;



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


Name: Dixq (管理人) [URL]  ..ウィザード(1,050,195ポイント)   Date: 2009/08/28(金) 06:14   No:38527     
Title: Re:無題    
一度「全てのプログラム」からVisualStudio2008を起動してから、メニューバーの開くを通して開いてみてはいかがでしょうか?

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

Name: under  ..ぴよぴよ(47ポイント)   Date: 2009/08/28(金) 13:21   No:38537     
Title: Re:無題    
ありがとうございます<(_ _)>
一回試してみます


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



Name: uwlover  ..かけだし(2,369ポイント)   Date: 2009/08/27(木) 23:06   No:38517       
Title: typedefについてちゃんとした理解を    
typedef文について勉強しているのですが、次のようなコードについて質問があります。(このコードが入っていたプログラムは長すぎるのでカットします)
typedef struct _WNDCLASSEX {
中略
} WNDCLASSEX, *PWNDCLASSEX;

これは次のように読めばいいのでしょうか?すなわち、
構造体_WNDCLASSEX型を宣言してその内容を定義し、同時にtypedefによって_WNDCLASSEX型を指すのにWNDCLASS
EXと*WNDCLASSEXを使うことができるようにする、という感じです。
typedefはtypedef int sample のような形でしか今まで見たことがなく、自分の書籍ではtypedefについて詳細
には触れていないので…ネット上でもこの話題に触れているものがまだ見つかってません。


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


Name: tkmakwins15  ..比類無きプログラマー(97,986ポイント)   Date: 2009/08/28(金) 01:08   No:38522     
Title: Re:typedefについてちゃんとした理解を    
typedef int sample;
で、intがstruct _WNDCLASSEXに、sampleがWNDCLASSEXと*PWNDCLASSEXになっているのですが、同時に構造体の定義をしているので分かりにくくなっています。
ちなみに、sampleに*をつけるとsample=int*になります、コンマで区切って複数の違う名前をつけることもできます。


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

Name: たかぎ [URL]  ..ハッカー(110,513ポイント)   Date: 2009/08/28(金) 01:12   No:38524     
Title: Re:typedefについてちゃんとした理解を    
typedefは、意外かもしれませんが、staticやexternと同じ記憶クラス指定子です。
ですので、

typedef struct tag_A { ... } A, *PA;

と書いた場合、(staticやexternなどでは)変数にあたるAとPAが定義された型名になります。

static struct tag_A { ... } a, *pa;

とした場合のaやpaがどんな型なのかが理解できるのであれば、typedefでもそれと同じように読み解けばよいのです。


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

Name: uwlover  ..かけだし(2,486ポイント)   Date: 2009/08/28(金) 10:55   No:38531     
Title: Re:typedefについてちゃんとした理解を    
ご回答ありがとうございます。やはり構造体定義とtypedefを同時にやっているということだったのですね。
何と言うか、int *p = &aのようなややこしさを感じますね(普通*pはアドレスの内容を指すので、こう初期化
しているとまるで値を格納すべきところにアドレスを入れているように見えますから)


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

Name: uwlover  ..かけだし(2,473ポイント)   Date: 2009/08/28(金) 10:56   No:38532 解決!     
Title: Re:typedefについてちゃんとした理解を    
解決マークを忘れてました…

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

Name: 初級者  ..初心者(6,605ポイント)   Date: 2009/08/28(金) 12:31   No:38536     
Title: Re:typedefについてちゃんとした理解を    
int *p = &a;

p に、a のアドレスという値を格納しているに過ぎません。


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



Name: situmon  ..熟練のプログラマー(40,415ポイント)   Date: 2009/08/26(水) 14:42   No:38458       
Title: 東方文花帖でよく使われるレーザーの作り方について    
東方文花帖のエイジャの宝石で使われる赤いレーザーや、
慧音がつかうようなレーザーはどのようにして作られるのでしょうか?
確か過去ログを見たら、Dixqさんが、弾を重ねてレーザーに見せる方法もあるといっていたのですが、
それを使うと慧音が使うレーザーが作れません。このレーザーはどう作るのでしょうか?
あと被弾したときにレーザーが二つに割れて分かれますが、(確か過去ログの弾の補完とかいうのだったような。。。)過去ログを見てもよくわからなかったので教えてください。
あ〜るさんのぐにゃぐにゃレーザーではねこさんが小さい画像をつなげるといっていましたが・・・


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


Name: チルチル  ..熟練のプログラマー(42,640ポイント)   Date: 2009/08/26(水) 15:24   No:38461     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    


ちょっと1度に複数の画像を添付する方法がわからないので分けますが慧音が使うレーザーってこれですよね?


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

Name: チルチル  ..熟練のプログラマー(42,665ポイント)   Date: 2009/08/26(水) 15:26   No:38462     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    


これは多分この弾を三角形に変形させて作るんだと思います
実際にやってみるので少々お待ちください・・


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

Name: チルチル  ..熟練のプログラマー(42,845ポイント)   Date: 2009/08/26(水) 15:50   No:38465     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    


よく考えたら私のコードでは三角形に変形させても2つに分かれた場合の処理が対応していないので
とりあえず四角形に変形させてみましたが、見た感じ問題は無さそうですね・・

2つに分かれる処理ですがその部分の弾が消えれば自然に分かれるんではないでしょうか?
しかしこのレーザーの場合は無理だと思うので2Dポリゴンで繋ぐと良いと思います、私の所ではそれでうまく行ったので・・


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

Name: situmon  ..熟練のプログラマー(40,467ポイント)   Date: 2009/08/26(水) 18:27   No:38467     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
難しかったので、(意味が)もう少し詳しく教えていただけるでしょうか?
また自分の悪い癖ですぐ人に答えを求めてしまうのですが、よければコードをおしえてください。
また当たり判定はどうするのでしょう?


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

Name: チルチル  ..熟練のプログラマー(43,597ポイント)   Date: 2009/08/26(水) 19:12   No:38469     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
何か私はほとんど質問するだけで熟練のプログラマーになってしまいましたからね・・
これは良くないと思ったので答えられそうな質問にはできるだけ答えるようにしています
すみません・・1人だけ出しゃばってしまって・・

意味ですが、これは難しいわけではなく私の説明が雑だっただけだと思います・・

曲げたりする必要もあると思うので沢山の弾を並べてレーザーを作ります
そのまま加算ブレンドで繋げて描画すれば簡単なんですが
弾の距離が大きくなった時や上のようなレーザーの時に不具合が出るので

私の場合は双方向循環リストの中に弾ノードを登録していき
弾ノードが連続している所では連続しているノードの座標を2Dポリゴンで繋いでいきます
被弾などで弾ノードのフラグが倒れている所があると、そこで繋ぐのをやめます

つまり内部的には繋がっているけど表示する時はフラグが倒れている所は避けます
イメージはぷよぷよで同じ色のぷよがくっ付いて表示される演出です

判定なんですが掲示板でわからない所を聞いたりしながら描画部分は大体完成させたんですが
最新の本家のレーザーを見たら何か閃くかもしれないので、判定部分はまだ作っていません
ですが方法は確定しています、過去ログにあるような方法で判定します

http://www.play21.jp/board/formz.cgi?action=res&resno=36937&page=30&lognum=113&id=dixq&rln=36998

でコードなんですが私の性格を色濃く反映しており、描画部分を作っただけで関係処理が1000行近くあります
判定その他を加えて最終的には2000行ぐらいになると予想しています
私のコードにしては独立性が高い方なのでコピーすれば動くとは思いますが
長いので解読するよりはアルゴリズムを理解して自分のコードと相性の良い処理を作った方が簡単そうです・・

何か「多機能なレーザー」を作ろうとしたら「多機能だけど見た目が汚いレーザー」ができてしまった気がするんですよね・・
しかも地霊殿までのレーザーは全て再現できる性能だと思った矢先に星蓮船で進化したと聞いて落ち込みました・・

あと添付したコードですがメモ帳とかで開かないと改行されて見にくいので気を付けてください・・


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

Name: チルチル  ..熟練のプログラマー(44,185ポイント)   Date: 2009/08/26(水) 20:00   No:38471     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    


しかし冷静に考えると私のコードは参考にならない気がしますね・・

この処理はゲームのクオリティを上げるためにレーザーで陰陽玉を描いたりできるように作ったのですが
普通のゲームにおいてレーザーで陰陽玉を描く機会なんて無いと思うし
慧音のレーザーの参考に陰陽玉が描けるレーザーをサンプルにするのは不適切でしたね・・

何か私が書き込んだ事で他の人が書き込みづらくなってる気がしますね・・すいません・・

でもsitumonさんが最終的に陰陽玉その他が描けるぐらい多機能なレーザーを作りたいと思ったら
やはりコードはこのぐらいの量になるかもしれませんね・・
共通部分が長いので陰陽玉を描くのに必要な処理は
if( P->Count==0 )for( int i=0;i<=100;i++ )SetNode(P);//ノードを登録

int i=0;
for( Node_t *p=P->Next;p->flag<=2;p=p->Next,i++ ){//管理ノード間ポインタfor文
float Angle=-(float)Count/180;
float R=180;
if( i<=50 ){
p->x=P->x+cos(Angle)*(cos(PI/25*i)*(-R/2+(i<25)*R)-R/2+(i<25)*R)+cos(Angle-PI/2)*(sin(PI/25*i)*R/2);//X方向の移動
p->y=P->y+sin(Angle)*(cos(PI/25*i)*(-R/2+(i<25)*R)-R/2+(i<25)*R)+sin(Angle-PI/2)*(sin(PI/25*i)*R/2);//Y方向の移動
}
else{
p->x=P->x+cos(Angle+PI+PI/25*i)*R;//X方向の移動
p->y=P->y+sin(Angle+PI+PI/25*i)*R;//Y方向の移動
}
}//管理ノード間ポインタfor文
このぐらいで済みます、しかしよく考えたら陰陽玉が描けるのは別に凄くないですね・・
そもそも陰陽玉を描く処理は10分ぐらいで作りましたから・・
時間をかければもう少し行けます・・


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

Name: situmon  ..熟練のプログラマー(40,935ポイント)   Date: 2009/08/26(水) 21:29   No:38474     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
チルチルさんは今高校生でしょうか?(過去ログにかいてあったのがふとみえて・・・)、、、(失礼だったらすいません)
とてもすごいプログラムをかかれていてびっくりなのですが、
基礎学力として(そのうちならいますが。。。)必要なものは何でしょう?
あと双方向循環リストとノードとは何でしょう?
>陰陽玉が描けるのは別に凄くないですね
いやいやすごいですよ!!
ですが、やはりとても難しいですね・・・
あと余談ですが、チルチルさんの作ったシューティングをやってみたいのですが・・・
これも余談ですがチルチルさんは東方のどれが好きですか?
自分は東方文花帖が好きです。
といってもついちょっと前にやっとEXが出せただけなのですがmmm
しかし百万鬼夜行はがんばってクリアしましたよ!!!(すいか大好きです。)




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

Name: チルチル  ..熟練のプログラマー(45,448ポイント)   Date: 2009/08/26(水) 22:41   No:38475     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
>チルチルさんは今高校生でしょうか
現在は高校2年生ですね、情報系の工業高校に通っています

>とてもすごいプログラムをかかれていてびっくりなのですが
私のコードの場合は簡単な処理を沢山並べる事で凄くなっているんだと思います
何が凄いかと言うと「量が凄い」んだと思います・・
逆に言えば一箇所が理解できれば他も同じような事をやってるので全体が理解できるかもしれません

>基礎学力として(そのうちならいますが。。。)必要なものは何でしょう?
私の成績は現在クラスで5位ですが、偏差値が低いので凄くは無いです、中学の頃はビリに近かったです
今でも英語と体育はギリギリで2です・・C言語初めて1年半ぐらいでCの知識は構造体を使えるぐらいです

私の経験で言えば学力よりも時間が大事ですね
最近は放課後の時間を全てプログラムに当てています(と言っても悩んでる時間の方が長いですが・・)
そのせいでクラスメイトと話す時に流行に全く付いて行けません(笑)

しかし何と言っても一番大事なのは「上司」だと思います
一年の頃は1人で中途半端なコードを作っては飽きて放り出していましたが
2年生になってしばらくしてパソコン部の先輩から

「俺は絵が描けるし曲も作れるしアイデアも出せる、しかしプログラムは組めない、だからお前がやれ」

って言われました(笑)
それからは先輩がコミケで売るゲームのプログラムを組んでいます
案外ゲームプログラミングは半ば強制された方が効率が良くなる気がしますね
相方がいれば気付かない所を指摘し合えるし、素材とプログラムを分担しているのでプログラムに集中できます
まあ最近は簡単にできる事を「こういうのできるか?」って聞かれて、う〜ん状態ですが・・

>あと双方向循環リストとノードとは何でしょう?
そうですね・・話すと長くなるのでとりあえず私が勉強したサイトを何個か貼っておきます

http://www.cc.kyoto-su.ac.jp/~yamada/ap/list.html

http://ja.wikipedia.org/wiki/線形リスト

http://www.geocities.jp/ky_webid/algorithm/010.html

http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/c/e_07-02-01.html

http://www.hrtdotnet.jp/pro/c/step4/step4_2.html

私は双方向循環リストを使うまでポインタを意識して使った事は無いですが、案外簡単に理解できました
ついでに線形リストの練習に組んだコードも添付しておきます

>いやいやすごいですよ!!
>ですが、やはりとても難しいですね・・・
陰陽玉を描く処理を見てみると何となくわかると思いますが、ほとんど陰陽玉の座標を計算する式だけです
座標さえ代入してしまえば共通部分が勝手に2Dポリゴンでトライアングルストリップを構築してくれます

>あと余談ですが、チルチルさんの作ったシューティングをやってみたいのですが・・・
内心では誰かに言って欲しかったセリフですね(笑)
今回は1人で作ってるわけではなく一応売り物らしいので、ここで公開するわけにも行かないんですよね・・
そうですね・・アップローダーを使った事は無いですがメールアドレスなどを教えてくれればパスを送りますよ

>これも余談ですがチルチルさんは東方のどれが好きですか?
東方は全部好きですが特に好きなのは永夜抄ですかね、私は多機能なのが好きなようです
最近はプログラムで忙しくて攻略している時間が無く、ノーマルだと4面で死ぬぐらいの実力です・・
Meを使っていた頃は処理落ちさせてEXをクリアしてたりしましたね・・
特に好きなキャラはいないんですが今は封獣ぬえが気になっていますね


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

Name: 御津凪 [URL]  ..ハッカー(110,228ポイント)   Date: 2009/08/26(水) 23:08   No:38476     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    


> チルチルさん
キャラのネタバレはまだ控えたほうがよろしいかと…。


とりあえず、参考程度に弾を重ねてレーザーに見せた例として、
曲がるレーザーの様子の画像を添付しておきますね。
(透明度が変化しているところがポイントです)

もし、いくつかのレーザーのタイプを用意するとしたら、
下記のようにそれぞれ別の処理として纏めておいた方が逆にまとまりが良くなる(処理の向上につながるかも)と思います。

・当たっても変化が無いただのレーザー
・当たるとその部分が消滅し、分裂するレーザー
・曲がるレーザー

(星蓮船の方に出るレーザーは、ただのレーザーにアニメーションエフェクトと当たり判定の追加で実現できると思いますよ)


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

Name: チルチル  ..熟練のプログラマー(45,847ポイント)   Date: 2009/08/27(木) 00:24   No:38478     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
>キャラのネタバレはまだ控えたほうがよろしいかと…。
そうですね、気を付けます・・

>曲がるレーザーの様子の画像を添付しておきますね。
透明度を変化させるのは思い付きませんでしたね・・

>もし、いくつかのレーザーのタイプを用意するとしたら、
消えるかどうかには考えが行き届かなかったですね・・
描画タイプではわけたんですがそうしないと作れなかったからですからね・・
複数のタイプが競合する事もありえるし・・
実際に作ってみたら曲がるレーザーと普通のレーザーをわけた意味があるのか怪しくなったしで・・

>(星蓮船の方に出るレーザーは、ただのレーザーにアニメーションエフェクトと当たり判定の追加で実現できると思いますよ)
星蓮船をまだプレイしていないのですが、先輩の話では弾がレーザーに変化する事があるそうです
小さいレーザーが合体して大きなレーザーになる事は想定していたんですが、そういうのは想定していなかったので対策を検討中です・・


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

Name: 御津凪 [URL]  ..ハッカー(110,325ポイント)   Date: 2009/08/27(木) 00:49   No:38481     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
> 星蓮船をまだプレイしていないのですが、先輩の話では弾がレーザーに変化する事があるそうです

余り詳しく構造を言ってしまうと弾幕のネタバレなのでその部位だけ解説すると、

弾が一直線に並ぶように動かし、その一直線になった弾とその長さと同じレーザーに置き換えているだけです。

なので、特に難しくはないはずですよ。


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

Name: チルチル  ..熟練のプログラマー(45,907ポイント)   Date: 2009/08/27(木) 13:55   No:38485     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
話ではって言いましたけど実際は思いっきりスナップショット見せられましたね(笑)
一列になった弾をレーザーに置き換えるだけなら簡単なんですが
私の場合は弾とレーザーが頻繁に入れ替わる弾幕を作る事が多そうなので
弾がボムなどで消された場合はレーザーに変化してもその部分は欠けたままでないといけなんですよ・・
レーザーだけなら対応しているのですが通常弾は対応させてなかったんですよね・・
まあそれをやると通常弾がレーザーに吸収されそうで怖いですが・・
やはりエフェクトが貧弱なので大変そうです・・


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

Name: situmon  ..熟練のプログラマー(41,015ポイント)   Date: 2009/08/27(木) 16:58   No:38489     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
質問なのですが、

lazer[k].startpt.x= boss.x+cos(lazer[k].angle)*DIST;//座標
lazer[k].startpt.y= boss.y+sin(lazer[k].angle)*DIST;
と lazer[i].disppt[0].x=lazer[i].startpt.x+cos(lazer[i].angle+PI/2)*lazer[i].haba;
lazer[i].disppt[0].y=lazer[i].startpt.y+sin(lazer[i].angle+PI/2)*lazer[i].haba;

lazer[i].disppt[2].x=lazer[i].startpt.x+cos(lazer[i].angle-PI/2)*lazer[i].haba+cos(lazer[i].angle)*lazer[i].length;
lazer[i].disppt[2].y=lazer[i].startpt.y+sin(lazer[i].angle-PI/2)*lazer[i].haba+sin(lazer[i].angle)*lazer[i].length;

でレーザー開始位置の座標が求まるのかを教えてください。とくにPI/2とかはなぜでてくるのでしょう。
ゲームプログラミングの館の、sin.cosの概念は読みました。
あと弾の場合ならわかるのですが、開始する位置は動かないのに(弾は指定方向に動くじゃないですか・・・)なんでもとまるのでしょう。
わかりにくくてすいません。ModiGraphが難しくてどうも。。。
あと何回も質問すいませんが、
玉がレティーの弾幕のように一回てん(ようは円をまわるようにするには)どのような文を書けばいいのでしょう、それと、地霊殿の一面の中雑魚がつかうsin波?ショットはどのように作られているのでしょう?一度考えてみたのですが、できませんでした。(シューティングゲームの館のsin波はそれ自体が動くというか、角度が変わらなかったのです。)
円を回るのはわかりません。。。


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

Name: situmon  ..熟練のプログラマー(41,187ポイント)   Date: 2009/08/27(木) 17:29   No:38490     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
あとチルチルさんのもやってみたいですが、
一応売り物ということなので、まずいかもですね・・・
また配布できるような(売り物とかではないような)のがあったらやらせてください
!!


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

Name: チルチル  ..熟練のプログラマー(46,044ポイント)   Date: 2009/08/27(木) 17:46   No:38492     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    


う〜ん他の人のプログラムを解読するのは苦手なので悩みますね・・

situmonさんの参考になるかもしれないと色々なレーザーを作っていたので
とりあえずレティーを再現してみました
簡単にするためにブレーキを掛けていないので画面外に飛んでいきますが・・
地霊殿は作成中です・・少々お待ちください
円移動はこんな感じでしょうかね・・
if( P->Count<60 )SetNode(P);//ノードを登録

for( Node_t *p=P->Next;p->flag<=2;p=p->Next,i++ ){//管理ノード間ポインタfor文
if( p->Next->flag<=2 ){
p->x=p->Next->x;//前のノードを追う
p->y=p->Next->y;//前のノードを追う
}
else{
p->x=P->x+cos(P->Angle+(float)P->Count/30)*P->Count;//円移動
p->y=P->y+sin(P->Angle+(float)P->Count/30)*P->Count;//円移動
}
}//管理ノード間ポインタfor文
if( P->Count==600 ){P->flag=-1;for( Node_t *p=P->Next;p->flag<=2;p=p->Next )p->flag=-1;}
それでゲームの方ですが、別に問題は無いですよ
と言うか部活の人とかにテストプレイとかしてもらってますし
コミケで売ると言っても20枚ぐらいですから、それほど影響力は無いので・・
他に配布できる物と言えば去年の文化祭で配布しようと製作して
先輩達にボツを食らった東方のパズルゲームぐらいしかないですね・・
今になってみるとアレはボツを食らって良かったです・・


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

Name: チルチル  ..熟練のプログラマー(46,780ポイント)   Date: 2009/08/27(木) 18:15   No:38496     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    


sin波ショットを再現してみました
レーザーなので先端の弾が波移動をして
後の弾は前の弾の座標をコピーしているだけですが
通常弾の場合も全ての弾が波移動をすればsin波ショットになると思います
if( P->Count<120 )SetNode(P);//ノードを登録

for( Node_t *p=P->Next;p->flag<=2;p=p->Next,i++ ){//管理ノード間ポインタfor文
if( p->Next->flag<=2 ){
p->x=p->Next->x;//前のノードを追う
p->y=p->Next->y;//前のノードを追う
}
else{
p->x=P->x+cos(P->Angle+PI/2*P->Exception[0])*(sin((float)P->Count/10)*40);//波移動
p->y=P->y+sin(P->Angle+PI/2*P->Exception[0])*(sin((float)P->Count/10)*40);//波移動
}
}//管理ノード間ポインタfor文
if( DeleteJudge(P->Next->x,P->Next->y) ){P->flag=-1;for( Node_t *p=P->Next;p->flag<=2;p=p->Next )p->flag=-1;}
PI/2が出てくる意味ですが進行方向に対して右とか左という意味かもしれません
実際に上のコードでもPI/2を使って進行方向に対して右と左に弾をずらす事で波移動しているので・・


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

Name: チルチル  ..熟練のプログラマー(47,223ポイント)   Date: 2009/08/27(木) 18:35   No:38497     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
しかしシーケンスレーザーは最初からこういう動きをするために作ってあるので簡単ですが
通常弾とかだと難しいかもしれないし、移動と関係ない部分もあるので一応文字式で説明します



円移動

弾のX座標 = 回転軸のX座標 + cos( 回転軸からの角度 ) * 回転軸からの距離
弾のY座標 = 回転軸のY座標 + sin( 回転軸からの角度 ) * 回転軸からの距離

回転軸からの角度を増やしていけば時計回り、減らしていけば反時計回りに回転すると思います

回転軸からの距離も同時に増やせば回りながら外に広がると思います

回転軸はボスの座標、角度や距離は弾のカウンタを使う事が多いと思います



sin波ショット

弾のX座標 = 中心軸のX座標 + cos( 中心軸の角度 + PI/2 * -1か1 ) * ( sin( 何らかのカウンタ ) * 波の幅の半分 )
弾のY座標 = 中心軸のY座標 + sin( 中心軸の角度 + PI/2 * -1か1 ) * ( sin( 何らかのカウンタ ) * 波の幅の半分 )

中心軸はアシストか何かを進行方向に向かって真っ直ぐ飛ばせば良いんですが、多分これが大変ですね
シーケンスレーザーでは管理ノードと言う弾幕とアシストの役目をするノードがあるので楽ですが・・

-1か1は2本あるのでどちらかを-1にしてもう1つを1にしてください、XとYでは同じ値が入ると言う事で・・

あとカウンタを使うと言っていますが角度を1づつ増やすと変化が大きすぎるので実際は(float)Count/60ぐらいで使います


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

Name: チルチル  ..熟練のプログラマー(47,417ポイント)   Date: 2009/08/27(木) 18:56   No:38498     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
龍神録レーザーですが見たところ表示位置の中心にレーザーの座標があるようなので
回転するレーザーの場合とかならレーザーの向いている方向と逆に長さだけ進めば
視覚的な発射点の座標になるのではないでしょうか・・?

ModiGraph関数については質問の意味が良くわからないのですが
4点を求めるなら、レーザーの座標を中心として
向いている方向に長さだけ進み、向いている方向+PI/2に幅だけ進めば
進行方向に対する右上の座標が求まるんじゃないでしょうか・・?

しかし長さとか幅は中心に対しての距離か視覚的な距離なのかを理解しなくてはいけないんでしょうかね
視覚的な距離なら頂点を求める時は半分にしないと表示した時に大きさが2倍になるかもしれませんから・・


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

Name: situmon  ..熟練のプログラマー(41,449ポイント)   Date: 2009/08/27(木) 18:59   No:38499     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
それでゲームの方ですが、別に問題は無いですよ
と言うか部活の人とかにテストプレイとかしてもらってますし
>では、やらせていただきたいです。
他に配布できる物と言えば去年の文化祭で配布しようと製作して
先輩達にボツを食らった東方のパズルゲームぐらいしかないですね・・
今になってみるとアレはボツを食らって良かったです・・
>今まで作ってきたのを見てくと前のはびっくりするほどwwwですよね。。
しかしやってみたいです。


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

Name: チルチル  ..熟練のプログラマー(47,453ポイント)   Date: 2009/08/27(木) 19:08   No:38500     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
え〜と、ではアップローダーの使い方などを覚えたりするので少々お待ちください
下手をすると明日とかになるかもしれないので気長にお待ちください・・


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

Name: チルチル  ..熟練のプログラマー(47,487ポイント)   Date: 2009/08/27(木) 19:33   No:38502     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
と思ったら意外に2つとも軽いのでメールに添付してみましたがどうでしょうか?

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

Name: situmon  ..熟練のプログラマー(41,462ポイント)   Date: 2009/08/27(木) 20:14   No:38503     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
1つしか送られてきませんでした。

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

Name: チルチル  ..熟練のプログラマー(47,517ポイント)   Date: 2009/08/27(木) 20:17   No:38504     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
もう1つは調整中なのでちょっと待って下さい・・

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

Name: チルチル  ..熟練のプログラマー(47,531ポイント)   Date: 2009/08/27(木) 20:56   No:38505     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
お待たせしました、もう1つを送りました

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

Name: situmon  ..熟練のプログラマー(41,492ポイント)   Date: 2009/08/27(木) 21:59   No:38511     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
ありがとうございました。
レーザーはそれなりにがんばって考えないとだめですね!!
しかし、やはり龍神録のレーザーについての座標の求め方がわかりません。


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

Name: チルチル  ..熟練のプログラマー(47,676ポイント)   Date: 2009/08/27(木) 22:37   No:38514     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
ちなみにシーケンスレーザーを作った時は構造の関係で
描画できる所まで作らないとテストプレイができませんでした
実行してみてうまく行かなかったので
少し直してちゃんと動いた時は安心しました・・

龍神録のレーザーはよくわからないですね・・
ちなみに座標と言うのは何の座標でしょうか?
これはメールとかで管理人さんに聞いた方が良いかもしれません・・


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

Name: チルチル  ..熟練のプログラマー(47,758ポイント)   Date: 2009/08/28(金) 00:15   No:38520     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
レーザーで陰陽玉などを描くのは難しいと思われがちですが
共通部分さえ作ってしまえば後は座標の代入だけすればOKです
逆に言えば通常弾を陰陽玉の形に並べる事ができれば
レーザーで陰陽玉を描く事もできると言う事です


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

Name: situmon  ..熟練のプログラマー(41,698ポイント)   Date: 2009/08/28(金) 10:03   No:38530 解決!     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
最終的にお二人のアドバイス、コードなどから、
レーザーでも分けて、
一つ一つ、作るのですね。
弾を拡大して作る、玉をつなげて作るなどいろいろありますが、
弾をつなげて、透明度を利用するのからはじめ、
チルチルさんのシーケンスレーザーと
龍神録のレーザーに挑戦してみます。
御津凪さん、チルチルさん、どうもありがとうございました。


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

Name: icon   Date: 2009/11/24(火) 21:56   No:384581259067360     
Title: Re:東方文花帖でよく使われるレーザーの作り方について    
私もチルチルさんに質問なんですが、上のレスで、No:38492、No:38496、の画像はどういったもの
を使っていますか?
どういう感じにああいった画像の演出をやっているのか気になります。
先端のほうは尖っていて透明度も変えてるみたいです。
僕も同じようなのを作りたいので教えてください。





 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +