C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   【報告】掲示板の不具 ....   
     ・[45849] Justy 
     ・[45861] たかぎ 
     ・[45868] Naohiro19 
     ・[45869] たかぎ 
     ・[45870] たかぎ 
     ・[45872] SooA 
     ・[45879] Dixq (管理人) 
     ・[45880] たかぎ 
     ・[45881] Dixq (管理人) 
     ・[45887] たいちう 
     ・[45895] Justy 
     ・[45912] Dixq (管理人) 
     ・[45928] array 
     ・[45931] Dixq (管理人) 
     ・[45932] 御津凪 
     ・[45936] 御津凪 
     ・[45938] Dixq (管理人) 
     ・[45939] array 
     ・[45942] 御津凪 
     ・[45952] たいちう 
     ・[45956] たかぎ 
     ・[45960] Dixq (管理人) 
     ・[45968] Justy 
     ・[45969] Dixq (管理人) 
     ・[45970] たかぎ 
     ・[45972] Dixq (管理人) 
     ・[45973] Justy 
     ・[45974] たかぎ 
     ・[45990] DVDM 
     ・[45996] 御津凪 
     ・[46013] Dixq (管理人) 
     ・[46020] Justy 
     ・[46022] DVDM 
     ・[46033] たかぎ 
     ・[46116] Dixq (管理人) 
     ・[46117] 御津凪 
     ・[46135] 御津凪 
     ・[46139] Justy 
   残機をへらすには?   
     ・[46100] softya 
     ・[46120] jay 
     ・[46121] えくしー 
   難易度を分けようとし ....   
     ・[46037] SooA 
     ・[46040] SooA 
     ・[46043] yrao 
     ・[46045] Tatu 
     ・[46046] Dixq (管理人) 
     ・[46048] SooA 
     ・[46049] SooA 
     ・[46070] yrao 
     ・[46074] SooA 
     ・[46076] Tatu 
     ・[46119] yrao 
   ポインタ項の演習問題 ....   
     ・[46064] non 
     ・[46118] uvale 
   乱数   
     ・[46082] Ma 
     ・[46084] xxx 
     ・[46085] Ma 
     ・[46086] ぽこ 
     ・[46087] ぽこ 
     ・[46089] Ma 
     ・[46091] xxx 
     ・[46092] Ma 
     ・[46094] light 
     ・[46101] たかぎ 
     ・[46108] xxx 
     ・[46109] Mist 
     ・[46114] Dixq (管理人) 
   ウインドウの伸縮方法   
     ・[46112] nayo 
     ・[46113] kai 
   簡易整数電卓   
     ・[46090] Ma 
     ・[46095] non 
     ・[46096] softya 
   重力多体問題   
     ・[45840] 組木紙織 
     ・[46067] hitori 
     ・[46088] 組木紙織 
   タイトルについて   
     ・[46079] softya 
     ・[460771264307237] サンタクロース 
   タイトル画面の作り方 ....   
     ・[45986] ひよこ 
     ・[45991] ペタ 
     ・[45995] softya 
     ・[46017] ペタ 
     ・[46025] softya 
     ・[46071] ペタ 
     ・[46072] ひよこ 
     ・[46073] softya 
     ・[46075] ペタ 
   3*3の魔法陣   
     ・[45807] gtdf 
     ・[45808] Libra 
     ・[45810] gtdf 
     ・[45811] Libra 
     ・[45813] たいちう 
     ・[45814] gtdf 
     ・[45815] gtdf 
     ・[45816] Libra 
     ・[45818] フリオ 
     ・[45821] gtdf 
     ・[45822] フリオ 
     ・[45824] フリオ 
     ・[45833] gtdf 
     ・[45837] dic 
     ・[45838] 組木紙織 
     ・[45839] gtdf 
     ・[45841] sizuma 
     ・[45843] たいちう 
     ・[45847] sizuma 
     ・[45848] gtdf 
     ・[45850] たいちう 
     ・[45851] sizuma 
     ・[45856] gtdf 
     ・[45859] non 
     ・[45874] gtdf 
     ・[45886] non 
     ・[45899] gtdf 
     ・[45955] たいちう 
     ・[45982] gtdf 
     ・[46009] たいちう 
     ・[46027] gtdf 
     ・[46034] たいちう 
     ・[46038] gtdf 
     ・[46044] たいちう 
     ・[46065] gtdf 
   ポインタの参照渡し   
     ・[45885] たかぎ 
     ・[45888] Libra 
     ・[45892] hennmi1 
     ・[45894] Libra 
     ・[45896] hennmi1 
     ・[45897] box 
     ・[45898] Libra 
     ・[45921] hennmi 
     ・[45924] box 
     ・[45925] hennmi1 
     ・[45926] hennmi1 
     ・[45929] qwerty 
     ・[45944] box 
     ・[46041] Ma 
     ・[46042] フリオ 
     ・[46047] たいちう 
   複数のウィンドウ表示 ....   
     ・[45918] softya 
     ・[46015] ti 
     ・[46035] たかぎ 
   自機にショットを撃た ....   
     ・[46030] ひよこ 
     ・[46032] あ〜る 
   ギザギザ   
     ・[45988] DVDM 
     ・[46007] 初心者 
     ・[46018] DVDM 
     ・[46023] 初心者 
     ・[46024] 初心者 
   ■新年の挨拶トピ■明 ....   
     ・[45260] situmon 
     ・[45261] C学習者 
     ・[45262] ようすけ 
     ・[45263] クロウ 
     ・[45264] situmon 
     ・[45265] wing 
     ・[45266] あ〜る 
     ・[45267] yu 
     ・[45268] たかぎ 
     ・[45269] kazuoni 
     ・[45270] pooka 
     ・[45271] Justy 
     ・[45274] チルチル 
     ・[45275] バグ 
     ・[45276] たかぎ 
     ・[45278] shilfia 
     ・[45281] yrao 
     ・[45282] 御津凪 
     ・[45283] YuO 
     ・[45285] tkmakwins15 
     ・[45286] たかぎ 
     ・[45287] ひよこ 
     ・[45288] デラ初心者 
     ・[45289] softya 
     ・[45290] kms 
     ・[45293] DVDM 
     ・[45308] 羽流布 
     ・[45315] array 
     ・[45316] kerotan0820 
     ・[45322] ti 
     ・[45333] dic 
     ・[45343] ALiCE TAiL 
     ・[45347] conio 
     ・[45353] sizuma 
     ・[45385] Tororo 
     ・[45431] tkmakwins15 
     ・[45519] 256bit 
     ・[45707] Dixq (管理人) 
     ・[45711] 山崎 
     ・[45714] Tatu 
     ・[45715] ムンバ 
     ・[46012] Dixq (管理人) 
     ・[46014] Tororo 
     ・[46019] DVDM 
   表示が思い通りにでき ....   
     ・[45941] トントン 
     ・[45943] Dixq (管理人) 
     ・[45945] box 
     ・[45949] さかまき 
     ・[45950] box 
     ・[45951] フリオ 
     ・[45957] たかぎ 
     ・[45958] あがぺん 
     ・[45959] Dixq (管理人) 
     ・[45962] non 
     ・[45964] あがぺん 
     ・[45966] Dixq (管理人) 
     ・[45967] Dixq (管理人) 
     ・[46016] あがぺん 
   無題   
     ・[46008] softya 
     ・[46011] Dixq (管理人) 
   MIDI再生に関して ....   
     ・[45913] SooA 
     ・[45997] すのう 
     ・[45999] SooA 
     ・[46004] すのう 
   構造体について   
     ・[46001] box 
     ・[46002] くりく 
   エラーメッセージの簡 ....   
     ・[45983] box 
     ・[45984] たかぎ 
     ・[459811265978035] ゲスト 
   FPSについて   
     ・[45911] Dixq (管理人) 
     ・[45979] Ω 
   IEに埋め込まれている ....   
     ・[45965] sand 
   敵のショットが表示さ ....   
     ・[45961] Dixq (管理人) 
   数値の利用とΣの計算   
     ・[45855] sizuma 
     ・[45857] cinema 
     ・[45860] non 
     ・[45908] cinema 
     ・[45915] non 
     ・[45934] cinema 
     ・[45935] cinema 
     ・[45948] non 
   敵にショットを撃たせ ....   
     ・[45923] yu 
     ・[45947] Th 
   画像を加工する?   
     ・[45883] チルチル 
     ・[45889] KA 
     ・[45890] kazuoni 
     ・[45891] チルチル 
     ・[45893] KA 
     ・[45907] yu 
     ・[45910] KA 
     ・[45917] 素人 
     ・[45919] yu 
     ・[45920] 素人 
   配列とポインタの使い ....   
     ・[45906] box 
   描画について   
     ・[45901] fatens 
     ・[45904] Ω 
   固定FPSについて   
     ・[45793] たこやき 
     ・[45817] とおり 
     ・[45820] kazuoni 
     ・[45877] たこやき 
   ポインタ、配列でのエ ....   
     ・[45875] box 
     ・[45876] たかぎ 
   タイトル画面の作り方   
     ・[45854] sizuma 
     ・[45865] タロウ 
   メモリに画像や音楽を ....   
     ・[45676] DVDM 
     ・[45703] dic 
     ・[45733] AS 
     ・[45735] Mist 
     ・[45748] Ma 
     ・[45749] Dixq (管理人) 
     ・[45825] AS 
     ・[45826] softya 
     ・[45828] Dixq (管理人) 
     ・[45862] AS 
     ・[45863] AS 
   マスタワーカ形式のプ ....   
     ・[45858] バグ 

Name: たいちう  ..熟練のプログラマー(45,319ポイント)   Date: 2010/01/09(土) 23:49   No:45846       
Title: 【報告】掲示板の不具合    
たいちうです。
管理人さんも既にお気付きかもしれませんが、一応報告します。
全く深刻なものではないので、時間とやの気のあるときに対処していただけたら、と思います。

1.掲示板タイトル
タイトルが "C言語何でも質問掲示板Total hit  今日  昨日  " になっています。

2.ページの横幅
「一覧表示」でページの横幅が広過ぎです。2000px位に設定されているみたいに見えます。

3.preタグで2行ずつ改行される(FireFoxのみ)
preタグ使用時に、1行毎に空行が表示されます。
折角整形されたソースコードが間延びしてしまいます。

4.規約の更新履歴
月日しか表示されていません。年も表示してください。


以上は、Fire Fox 3.5.6とInternet Explorer 7(7.0)で確認しました。
1と2は、FLASHが追加された頃から。
3は、多分私がこのサイトを見るようになった時(2008年秋頃?)には既に。

実は私にとって一番問題なのは3でして、長いソースコードを読むために、
IEを起動しています。FFのアドオンのIE Viewというのを使っているので、
大した手間でもないのですが。

# 報告はこの方法でも良かったですよね?
# 相応しくないならスレごとでも削除して下さい。
# 管理人さんが目にしてくれさえすればよいので、
# 削除によっても目的が達成されたことが分かります。


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


Name: Justy  ..伝説なるハッカー(493,280ポイント)   Date: 2010/01/10(日) 00:39   No:45849     
Title: Re:【報告】掲示板の不具合    
 3に関しては過去に
http://www.play21.jp/board/formz.cgi?action=res&resno=998&page=&lognum=4&id=dixq&rln=1097#1044
http://www.play21.jp/board/formz.cgi?action=res&resno=1045&page=&lognum=4&id=dixq&rln=1107
http://www.play21.jp/board/formz.cgi?action=res&resno=1075&page=&lognum=4&id=dixq&rln=1082
という経緯があって今のような状態になりました。

 html的には CSSに

pre br
{
  display: none;
}

をこの掲示板の cssに入れて貰えれば一応 IE以外でも普通に見えるはずです(FF3で確認)。


 あと個人的には
5.XP+IE6、IE以外でフォントが汚い

も追加で。


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

Name: たかぎ [URL]  ..ハッカー(148,712ポイント)   Date: 2010/01/10(日) 09:32   No:45861     
Title: Re:【報告】掲示板の不具合    
私も3が一番深刻です。
MacだとIEが使えないので、Firefoxはもちろん、SafariでもChromeでも同じ問題が起こります。


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

Name: Naohiro19  ..入門者(3,289ポイント)   Date: 2010/01/10(日) 13:16   No:45868     
Title: Re:【報告】掲示板の不具合    
#include <stdio.h>
int main(void)
{
    printf("Hello world\n");
    return 0;
}


ていうソースで確認できますね。


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

Name: たかぎ [URL]  ..ハッカー(148,776ポイント)   Date: 2010/01/10(日) 13:26   No:45869     
Title: Re:【報告】掲示板の不具合    
正しいHTMLとしてはどうかと思いますが、下記のように書くのが一番見やすくなります。

#include <stdio.h>

int main(void)
{
  puts("hello");
   return 0;
}



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

Name: たかぎ [URL]  ..ハッカー(148,826ポイント)   Date: 2010/01/10(日) 13:27   No:45870     
Title: Re:【報告】掲示板の不具合    
インデントの数が少しおかしかったようですが、これは入力ミスです。
<tt>で囲んで、&nbsp;でインデントします。


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

Name: SooA [URL]  ..上級者(23,252ポイント)   Date: 2010/01/10(日) 14:50   No:45872     
Title: Re:【報告】掲示板の不具合    
>Justyさん
>pre br 
>{ 
>  display: none; 
>} 

Windows版 Firefox 3.5.7 で確認
デフォルトスタイルシートに追加で
> mozilla firefox\res\html.css
表示できるようになりました。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,132,262ポイント)   Date: 2010/01/10(日) 16:16   No:45879     
Title: Re:【報告】掲示板の不具合    
ご報告ありがとうございます。一つずつお答えいします。

> 1. 掲示板タイトル 
> タイトルが "C言語何でも質問掲示板Total hit  今日  昨日  " になっています

そうですね。これは私も良くないなと思っていたので直します。

> 2.ページの横幅

これは多分、記事のどれかに<pre>タグで囲まれた幅の広いコードがあったのだと思います。
<pre>タグで囲むとどこまで行っても自動改行してくれません。
そういうわけで、適度に改行することなくタグを使うと横に長い記事になってしまいます。

> 3.preタグで2行ずつ改行される

これは私も気になっていました。
掲示板制作者に聞いてみます。

> 4. 規約の更新

そうですね。年も入れておきます。

> # 報告はこの方法でも良かったですよね? 

はい、大丈夫です。
メールで直接教えて頂くより、ご意見頂ける可能性のあるこのような方法の方が私としても有り難いです。


>> Justyさん

懐かしい記事・・(^^;
2006年からC言語の勉強を始めたので、これはプログラムを学び始めたころ・・何という歴史の浅さ。
(しかも掲示板ランクポイントが私で7000w

そういえばダッシュさん無事大学合格して元気でやってるというメールをこの前頂きました。
プログラムはもうやらないのかな〜・・。

> 5.XP+IE6、IE以外でフォントが汚い 

メイリオが入っていない環境やIE8ではない環境だと奇麗に見えないですよねぇ・・。
メイリオが入っていなければMSゴシックで表示するようになど、自作だと出来るんですが、
掲示板の仕様として一種類しか指定出来ないみたいなんですよね;
その辺も含めて聞いてみますね。

後、GoogleChromeで簡単タグ入力が正常動作しないのも気になりますので、
その辺も聞いてみます。
また、以前要望の出てた、簡単タグ入力にpreタグを入れることも可能か聞いてみます。


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

Name: たかぎ [URL]  ..ハッカー(148,798ポイント)   Date: 2010/01/10(日) 16:33   No:45880     
Title: Re:【報告】掲示板の不具合    
> また、以前要望の出てた、簡単タグ入力にpreタグを入れることも可能か聞いてみます。

それもいいですが、タブや半角スペースが&nbsp;に置換できれば、ほぼ問題は解消する気がします。
これは、(プログラミングに関係ない)他のユーザーにとっても有益かと思いますので、対応依頼をする価値はあると思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,132,278ポイント)   Date: 2010/01/10(日) 16:35   No:45881     
Title: Re:【報告】掲示板の不具合    
なるほど、それも含めて聞いてみますね。

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

Name: たいちう  ..熟練のプログラマー(45,291ポイント)   Date: 2010/01/10(日) 17:30   No:45887     
Title: Re:【報告】掲示板の不具合    
Justyさん

> をこの掲示板の cssに入れて貰えれば一応 IE以外でも普通に見えるはずです(FF3で確認)。

正しく表示されました。
スタイルシートの変更だけですから、エディタにコピペすると空行が入っちゃいますね。
でも非常に快適になりました。ありがとうございました。

一応手順をまとめておきます。
[環境] OS       : Windows Vista Home Premium Service Pack 1
       ブラウザ : Firefox バージョン 3.5.6

[ファイル]
C:\Program Files\Mozilla Firefox\res\html.css

[変更点]
html.cssの末尾に、以下を追記する。

@namespace url(http://www.play21.jp/board/formz.cgi);
pre br
{
  display: none;
}

管理人さん

ご回答ありがとうございます。

> これは多分、記事のどれかに<pre>タグで囲まれた幅の広いコードがあったのだと思います。

それでも、トピック表示やツリー表示では広がらないので、
一覧表示のみに何か不具合がある可能性は残ると思います。
私も時間が取れたら調べてみます。


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

Name: Justy  ..伝説なるハッカー(493,504ポイント)   Date: 2010/01/10(日) 18:17   No:45895     
Title: Re:【報告】掲示板の不具合    

> SooAさん
> たいちうさん

 確認ありがとうございます。
 まぁでも、たいちうさんの仰る通りこの方法でもコピペの方までは変わらないんですよね……。


> Dixqさん
> ダッシュさん無事大学合格〜

 へー。時が経つのは早いですね。


> 一種類しか指定出来ないみたいなんですよね

 1種類ですか。
 スタイルシートが管理人さんが側で自由にいじれるとベストなんですが。
 うーん。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,132,408ポイント)   Date: 2010/01/10(日) 21:21   No:45912     
Title: Re:【報告】掲示板の不具合    
> それでも、トピック表示やツリー表示では広がらないので、 
> 一覧表示のみに何か不具合がある可能性は残ると思います。

あぁそうでしたか、失礼しました。

> スタイルシートが管理人さんが側で自由にいじれるとベストなんですが。

そうですよね。
ここはarrayさんの掲示板がシェアウェア公開されるのを待つしかn(ry


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

Name: array [URL]  ..熟練のプログラマー(62,065ポイント)   Date: 2010/01/11(月) 00:42   No:45928     
Title: Re:【報告】掲示板の不具合    
うあ、名指しされててびっくりした。

phpBBを使ってみてはどうでしょう。
画像認証もありセキュリティは整っており、データベースを使っているので大量ログにも安定性を発揮すると思われます。
御津凪さんのホームページで使われている掲示板と同じです。

デザインをことごと弄れば、オリジナルなものが作れると思います・・・が海外製だしデータベースを使っているので設置する敷居は高いと思いかもしれません。

ただ、自分は設置した事ないので、どこまでできるのか・・・。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,133,066ポイント)   Date: 2010/01/11(月) 01:29   No:45931     
Title: Re:【報告】掲示板の不具合    
名指しすみません、しかも2か所で似たようなこと言ってしまいましたね^^;

> phpBB

おぉ!
少し見てみましたが、私が欲しいと思っていた機能が集結している・・・!
登録とか欲しかったんですよね。
なんかグループみたいなのもあるし!
プロフィール機能って地味に欲しいなと思ってました。

これは本気で使ってみたい・・。
この掲示板の短所というか、そういうのありますか?

現在 
C質問 龍神録 エアロビート 研究会(そんなのあったね的存在?)
の4種類の掲示板があるので一括管理できるのは嬉しい・・。

・・が、私の苦手な英語のオンパレードかorz
頑張って読んでみようと思いますが、コードが大規模そうで、改造するのも知識が無いと難しそうですね;

今現在の掲示板ランクポイントだけは引き継ぎたいのですが、
そういう機能付けるには改造するしかないだろうなぁ・・。


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

Name: 御津凪 [URL]  ..ハッカー(137,572ポイント)   Date: 2010/01/11(月) 01:53   No:45932     
Title: Re:【報告】掲示板の不具合    
どうも、 array さんに名指しされた御津凪です。

phpBB は海外で一番使われているフォーラム型の掲示板で、最新版ではセキュリティ性はフリー(GPL)もので
群を抜いて一番じゃないでしょうか。
日本語版もありますし、MOD というもので自由に拡張できますので、外見も機能も好きな掲示板にすることもできます。

デフォルトではフォーラムにユーザー登録することでさまざまな機能を扱えます。
ユーザー同士での秘密のやり取りも行えたり、フォーラムやトピックの監視もできます。

ただ、欠点として、ユーザー側からは表面上操作できる部分が沢山あったりよくわからない機能があったりで
ユーザーがとっつきにくいかもしれません。
管理者から見ても、最初は機能が豊富にありすぎて扱いきれないという部分があるとおもいます。

phpBB の導入は楽なので、試験運用してみるのも手かと思います。
phpBB 日本語サポートフォーラムもありますし。
http://bbmods.info/bbs/


因みに、私の運用している phpBB で使用している MOD は、

・ボットを弾くリストに 100 以上のボットを追加する MOD(100+ Bots Install Script)
・RSS 配信する MOD (simple RSS mod for phpBB3)
・ソースコードを色づけする MOD(phpBB Syntax Highlighting MOD だったと思う)
・投稿時の入力フィールドの表示行数を調整できる MOD(jQuery Textarea Resizer)
・記事をクイック編集出来る MOD(AJAX Quick Edit)
・空のページを用意するたたき台 MOD(Blank template MOD)

を入れていたと思います。

因みにタイトル通り phpBB は PHP で出来ています。


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

Name: 御津凪 [URL]  ..ハッカー(137,662ポイント)   Date: 2010/01/11(月) 02:39   No:45936     
Title: Re:【報告】掲示板の不具合    
追記:

> Dixq さん
> 今現在の掲示板ランクポイントだけは引き継ぎたいのですが、
> そういう機能付けるには改造するしかないだろうなぁ・・。

それっぽいものがありましたよ。
どんな動作をするのかは全くわかりませんが。

Ultimate Points
http://www.phpbb.com/community/viewtopic.php?f=70&t=1643875

海外製なので、日本語用に少し手を加えないといけません。

それと、今から再構築してきますので今から私のところの掲示板を見に行こうとしても見れませんので注意。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,133,312ポイント)   Date: 2010/01/11(月) 03:11   No:45938     
Title: Re:【報告】掲示板の不具合    
とりあえず設置してみました。

http://dixq.net/phpBB/

お〜色んな掲示板が一括管理できる。素晴らしい・・。
とっつきにくいかと思ったのですが、
インストール画面まで用意してくれているとは何という新設設計。

1時間もかかりませんでした。

>みつなぎさん

へ〜ソースコードの色分けとか便利そうですね。

>それっぽいものがありましたよ。

おぉ、本当ですか!
ただパッと見ただけではどこに手を加えていいのやら^^;
続きはまた明日やってみまする。

良い情報をありがとうございます!


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

Name: array [URL]  ..熟練のプログラマー(62,203ポイント)   Date: 2010/01/11(月) 03:16   No:45939     
Title: Re:【報告】掲示板の不具合    
そういえば、以前 御津凪さんの所の掲示板に投稿しようとした事があるのですがCAPTCHAの認証に引っかかって、どうしてもトピック作成ができなかったのですが・・・

メールで連絡しようかと思ってたのですがPC初期化して連絡先不明になってたので連絡していませんでした。

・・・ユーザー登録の権限者しか作成できない設定になってるのかとも思いましたが、それらしき記述も見つけられなかったので、この場を借りて連絡させてもらいます。


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

Name: 御津凪 [URL]  ..ハッカー(137,857ポイント)   Date: 2010/01/11(月) 03:30   No:45942     
Title: Re:【報告】掲示板の不具合    
> そういえば、以前 御津凪さんの所の掲示板に投稿しようとした事があるのですがCAPTCHAの認証に引っかかって、どうしてもトピック作成ができなかったのですが・・・

いつ頃なのかわかりませんが、書き込み許可の設定などが出来なかった状態にあったのかもしれませんね。
(パーミッションとかの設定がおかしかった時が一時期あったと思うので)
最近ぽつらと投稿する方がいたので、今までの状態では大丈夫みたいですが。


実はサーバーと微妙に相性が悪いのか phpBB が変なところで不親切なのか、アップグレードに失敗するということが先ほどありました。
まあ、フルパッケージインストールして再度 MOD 入れ直すことで現在対処していますが。
(AutoMOD という自動で MOD をインストールしてくれる MOD があるのですが、これはこちらのサーバーの相性で駄目でした)

しばらく後に掲示板のメンテナンスが完了するのでその時にでも書き込みを試してみてください。
駄目だったら(掲示板の)私の記事のところにあるメールアイコンから遅れますのでそちらから連絡をください。


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

Name: たいちう  ..熟練のプログラマー(45,131ポイント)   Date: 2010/01/11(月) 10:21   No:45952     
Title: Re:【報告】掲示板の不具合    
> > それでも、トピック表示やツリー表示では広がらないので、 
> > 一覧表示のみに何か不具合がある可能性は残ると思います。

> あぁそうでしたか、失礼しました。

私が勘違いをしていました。
一覧表示のみ本文を表示しているのでしたね。
本文中のpreタグが原因でトピック表示やツリー表示が広がらないのも当然でした。
こちらこそ失礼しました。


そろてお今気付きましたが、たかぎさんの提案「タブや半角スペースが に置換」が実行されていますね。
試験的にかな?(2010年1月11日(月)10:18:55 現在)

エディタにコピーしても一応大丈夫ですが、勿論タブは復元されません。
この位なら全然問題ないレベルです。


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

Name: たかぎ [URL]  ..ハッカー(148,874ポイント)   Date: 2010/01/11(月) 11:10   No:45956     
Title: Re:【報告】掲示板の不具合    
> たかぎさんの提案「タブや半角スペースが に置換」が実行されていますね。

さきほど確認しました。
こうなってくると、むしろpreタグで囲まないほうがありがたくなります。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,134,354ポイント)   Date: 2010/01/11(月) 13:20   No:45960     
Title: Re:【報告】掲示板の不具合    
色々対処してもらえました。

------------------------------------

1. 空白を空白文字に置換する

 → 実装してもらえました。

2. preタグ内の不要なbrタグを除去

 → 実装してもらえました。(但し除去出来るのは一つのpreタグのみ)

3. フォントの複数選択

 → カンマで区切れば複数選択できますとの回答ですが、出来ずに悩み中・・

4. 「簡単タグ入力」にpreタグをいれてくれないか

 → 今後検討

5. GoogleChromで「簡単タグ入力」が正常動作しない

 → 今後検討

6. 「掲示板トップへ」のリンクを作ってくれないか

 → 「ホーム」の隣へ設置

------------------------------------

1a. 掲示板タイトル修正

 → 修正済み

2a. 利用規約に年月日記載

 → 修正済み

------------------------------------

何か抜けとかあれば教えてくださいm(_ _)m


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

Name: Justy  ..伝説なるハッカー(493,633ポイント)   Date: 2010/01/11(月) 14:03   No:45968     
Title: Re:【報告】掲示板の不具合    
 おお、いろいろ修正されていますね。
 これで投稿時に基本スペース変換も preタグも要らなくなりますね(等幅指定は別途必要かもしれませんが)。
 ありがとうございます。

 ところでちょっと解らなかったのですが、フォントが複数指定できるようにして、
どうなることを想定されているのでしょうか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,135,382ポイント)   Date: 2010/01/11(月) 14:07   No:45969     
Title: Re:【報告】掲示板の不具合    
> ところでちょっと解らなかったのですが、フォントが複数指定できるようにしてどうなることを想定されているのでしょうか? 

優先順位を付けたかったのです。

「メイリオ,HG丸ゴシックM-PRO,MS ゴシック」

のように書けば、メイリオにセットし、メイリオが無ければHG丸ゴシックM-PROをセットし、なければMS ゴシック・・みたいになることを考えていました。
しかし実際にやってみるとどのフォントにもならず、デフォルトフォントになりました。

フォントを複数選択するって意味の解釈が違うんですかね^^;


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

Name: たかぎ [URL]  ..ハッカー(149,167ポイント)   Date: 2010/01/11(月) 14:17   No:45970     
Title: Re:【報告】掲示板の不具合    
> Jusyさん
> 等幅指定は別途必要かもしれませんが

等幅指定は必須ではないと思いますよ。
書籍でも、ソースコードは等幅でない場合が結構ありますが、そんなに読みにくくはなりません。

> Dixqさん
> フォントを複数選択するって意味の解釈が違うんですかね^^;

日本語のフォント名はダメとか...
フォント名は環境に強く依存するので、個人的には、デフォルトにするか、ArialやCourieのような汎用的なものにするほうがよいと思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,135,473ポイント)   Date: 2010/01/11(月) 14:30   No:45972     
Title: Re:【報告】掲示板の不具合    
Arialにしてみました。
当たり前ですが、半角はきれいに表示されるものの日本語がどうも・・。
それにpreタグで囲んだコードはArialにならないのですね。

う〜ん、どっちかっていうと日本語を綺麗に表示させたいですね・・。


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

Name: Justy  ..伝説なるハッカー(493,826ポイント)   Date: 2010/01/11(月) 14:47   No:45973     
Title: Re:【報告】掲示板の不具合    
>Dixqさん
>優先順位を付けたかったのです
 なるほど。
 メイリオが入っているけど綺麗に表示されない環境向けの対応というわけではなかったのですね。
 勘違いしていました。

 で、うまくいかない原因ですが、ひょっとして空白を含むフォントが入っていませんか?
 もし空白が入っているのならそのフォント名を " または ' の引用符で囲ってみるとうまくいくかもしれません。


> たかぎさん
> 等幅でない場合が結構ありますが、そんなに読みにくくはなりません
 ああ、たしかにそうですね。
 行先頭のインデントがそろっていれば十分読めますからね。


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

Name: たかぎ [URL]  ..ハッカー(149,092ポイント)   Date: 2010/01/11(月) 14:48   No:45974     
Title: Re:【報告】掲示板の不具合    
> 当たり前ですが、半角はきれいに表示されるものの日本語がどうも・・。 

私の環境ではそれなりに表示されているので、各自の表示状況を持ち寄って判断した方がよいでしょうね。
環境は、Mac OSX 10.5.8 + バージョン 4.0.4 (5531.21.10)です。


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

Name: DVDM [URL]  ..熟練のプログラマー(49,215ポイント)   Date: 2010/01/11(月) 18:01   No:45990     
Title: Re:【報告】掲示板の不具合    
>>管理人さん
情報提供が必要?なのかも知れないと思ったのでたかぎさんと同じく
どのように表示されているのか画像を添付しておきます。

OSはXP HomeEdition Version2002 SP3
ブラウザはFireFox3.5です。

fontタグで灰色に変えようと思ったのですが、プレビューをおして確認したところ
反映されていない感じでした。
なにか間違ったのでしょうか・・・。


↓変えようと思ったもの(灰色指定とサイズ指定してみましたが、どうなのでしょう・・・)
このトピとは関係ないですが、年賀絵を期待されていたみたいですね(笑)
先程レスの内容を確認しました。
せっかくですので、なにか書いてあけまして〜のトピックにでもアップしてみることにします;
咲夜さんになるかどうかは解りませんけど(笑)


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

Name: 御津凪 [URL]  ..ハッカー(138,042ポイント)   Date: 2010/01/11(月) 18:21   No:45996     
Title: Re:【報告】掲示板の不具合    
[phpBB のお話]
とりあえずこちらの掲示板が粗方再構築が終わったので、
せっかくだから Ultimate Points MOD でも入れて試してみようと思ったのですが、
導入に 40分 近くかかる大掛かりなものだそうで、止めておきました。

phpBB にランクポイント機能を入れるのはそれほど難しくないはずなので、
PHP と SQL の知識さえあればすぐにできると思いますよ。

(と言いつつ自分が作ってしまいそうな悪寒)


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,136,037ポイント)   Date: 2010/01/11(月) 20:24   No:46013     
Title: Re:【報告】掲示板の不具合    
>> Justyさん

> メイリオが入っているけど綺麗に表示されない環境向けの対応というわけではなかったのですね。勘違いしていました。 

あれ・・?私の認識が違っていた・・?^^;
今問題になってるのは

XP+IE8以外 = 汚い
XP+IE8     = 綺麗
Vista,7    = 綺麗

ということで、メイリオが入っていない、かつIE8以外の環境に対策が必要だと思っていたのですが、
メイリオが入っていても汚い場合があるんですか?;

>> たかぎさん

マックだと綺麗に見えますね。

>> DVDMさん

あれ・・?半角用フォントなのに、半角アルファベットのフォントも変わっていませんね。
何故でしょう・・。
私の環境(7+Chrome)では半角フォントのみ綺麗に見えます・・。
お使いのPCにArialが無いのでしょうか?

> fontタグで灰色に変えようと思ったのですが、プレビューをおして確認したところ 
> 反映されていない感じでした。

あれ、ホントですか?
ちょっと「ここで」テストしてみます。

> 年賀絵を期待されていたみたいですね

えぇ、wktkしながら過去ログに落ちないようにチェックしておきますw

> みつなぎさん
> PHP と SQL の知識さえあればすぐにできると思いますよ。 
> (と言いつつ自分が作ってしまいそうな悪寒)

おぉ、それは是非・・w


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

Name: Justy  ..伝説なるハッカー(494,240ポイント)   Date: 2010/01/11(月) 20:52   No:46020     
Title: Re:【報告】掲示板の不具合    
 えーと、私が把握している汚くなるケースというのは「メイリオがインストールされていて、
ClearTypeがオフ」のケースです。

 それに主に該当するのが「XP+IE6、或いは XP+IE以外のブラウザ」ということになります。

 Vistaなどは ClearTypeオンがデフォルトですし、IE7/8は OS側の ClearType設定がどうであろうと、
IE側の設定が別にあり、そちらの方でデフォルトオンになっていますので、
そのまま使用している場合は問題がありません。

 メイリオが入っていなければ、ブラウザのデフォルトフォントが
そのまま使用されます(設定次第で変わりますが、IEならMS Pゴシックとか)、ので
デフォルトフォントで普通に見えるのであれば、問題はありません。

 XPでも ClearTypeをオンにしている人は問題がありませんし、反対に Vistaでも
ClearTypeをオフにしていたらやはり汚くみえるでしょう。


 結局のところ、メイリオの表示に ClearTypeがないと潰れた文字が表示されるのが
問題なわけで、ClearTypeがなくても“綺麗”に見えるフォントを指定すればいいかと。

 あ、ちなみに FireFoxで確認したのですが、メイリオでも 14pt以上あると潰れずに見えますね。 編集済み


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

Name: DVDM [URL]  ..熟練のプログラマー(49,882ポイント)   Date: 2010/01/11(月) 21:00   No:46022     
Title: Re:【報告】掲示板の不具合    
>>管理人さん
>あれ、ホントですか?
>ちょっと「ここで」テストしてみます。 
 もしかして「ここで」が灰色になっているんでしょうか?
 私のPCでは白色に見えています。
 私がFireFoxで何か変な設定でもしたんでしょうか・・・。
 (IE6.0でも見てみましたがやはり白色に見えます。)

>お使いのPCにArialが無いのでしょうか?
 ArialフォントってXPをインストールしたら標準で入ってるものじゃないんですかね・・・。
 (心配でしたので検索したところ、私のPCにはArialフォント入ってましたよ〜
 PhotoShopで何回も使っているので入ってないことはないと思ってましたけど(笑))


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

Name: たかぎ [URL]  ..ハッカー(149,233ポイント)   Date: 2010/01/11(月) 22:55   No:46033     
Title: Re:【報告】掲示板の不具合    
もはやpreタグは必須ではなくなったので、利用規約を改定した方がよいかと思います。
FLASHも変更ですね。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,136,329ポイント)   Date: 2010/01/13(水) 18:38   No:46116     
Title: Re:【報告】掲示板の不具合    
>> Justyさん

あ〜そういう場合があるんですか・・。

> ClearTypeがなくても“綺麗”に見えるフォントを指定すればいいかと。

そういうことですか、なるほど、探してみます。

>> DVDMさん

7+Chromeですが
灰色になっていませんね・・。
色々修正したい事も出来ないし、FLASHまで見れないように対策されてしまったし自由が利かないので、
自作に移ろうと思います。

>> たかぎさん

そうですね〜新しい掲示板を作ったら色々一緒に変更しようと思います。


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

Name: 御津凪 [URL]  ..ハッカー(138,108ポイント)   Date: 2010/01/13(水) 19:19   No:46117     
Title: Re:【報告】掲示板の不具合    
>> 
> > みつなぎさん
> > PHP と SQL の知識さえあればすぐにできると思いますよ。 
> > (と言いつつ自分が作ってしまいそうな悪寒)

> おぉ、それは是非・・w

と、言われてしまったので MOD を作ってしまっています(作りかけの奴が自分の掲示板に入ってます)が、
phpBB を改造していくのと、 自作で掲示板を作ってしまうのとどちらの方向で考えてますか?
phpBB の知識は多少なりともあるので改造の手伝いは少しはできますよ。


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

Name: 御津凪 [URL]  ..ハッカー(138,180ポイント)   Date: 2010/01/14(木) 00:18   No:46135     
Title: Re:【報告】掲示板の不具合    
ひとまず掲示板ランクポイント機能が出来ましたので報告。

User Class Points
http://mitsunagistudio.aki.gs/bbs/viewtopic.php?f=10&t=15

ライセンスは GPL v2 ですので改造などはご自由に。


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

Name: Justy  ..伝説なるハッカー(494,056ポイント)   Date: 2010/01/14(木) 03:13   No:46139     
Title: Re:【報告】掲示板の不具合    
>ちょっと「ここで」テストしてみます
 バグってますね。
 <font color="#000000">の font と colorの間のスペースまで &nbsp;に変換してしまっているようです。
 編集済み


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



Name: えくしー  ..ぴよぴよ(27ポイント)   Date: 2010/01/13(水) 11:55   No:46098       
Title: 残機をへらすには?    
残機を減らそうと思うのですが、そのプログラムをどうしたらいいのか全然わかりません;
どのようなプログラムで減らすことができるのでしょうか?教えていただけたらと思います。


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


Name: softya  ..比類無きプログラマー(86,775ポイント)   Date: 2010/01/13(水) 12:14   No:46100     
Title: Re:残機をへらすには?    
龍神録の話だと仮定してお答えしますが、21章の自機に当たり判定と無敵処理を作ってみようでenemyshot_and_ch()関数の
if(ch.flag==0 && ch.mutekicnt==0){//ステータスが通常で、無敵じゃなかったら
ってif文の中の処理が自機が死んだ時の処理です。
この中で残機を減らして下さい。


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

Name: jay  ..上級者(15,149ポイント)   Date: 2010/01/13(水) 20:57   No:46120     
Title: Re:残機をへらすには?    
龍神録ではプレイヤーの残機数はch.numに格納されています。
つまり条件を満たした時に一度だけch.numの値を減らせばいいのです。

つまり
if(条件)
ch.num--;


まぁ、条件はミスしたときでしょうね。


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

Name: えくしー  ..ぴよぴよ(46ポイント)   Date: 2010/01/13(水) 21:39   No:46121     
Title: Re:残機をへらすには?    
教えていただいたので、解決することができました!
どうも、ありがとでしたw


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



Name: yrao  ..上級者(18,855ポイント)   Date: 2010/01/12(火) 00:43   No:46036       
Title: 難易度を分けようとしているのですが・・・    
どうも、ご無沙汰しています。
 
おかげさまで、ボス弾幕の作成のほうも大方終わってきました。

そこで、
HARDのほかにも難易度を設けたいと思い、自分なりに実装を試みたのですが、
エラーが発生してしまい解決方法が分からないので質問させてもらいました。
アドバイスいただければ幸いです。


まず、エラーの内容なのですが
 
func.h(1) : fatal error C1083: include ファイルを開けません。'../GV.h': No such file or directory

boss_shote.cpp(1) : fatal error C1083: include ファイルを開けません。'../include/GV.h': No such file or directory

boss_shotp.cpp(1) : fatal error C1083: include ファイルを開けません。'../include/GV.h': No such file or directory

というものです。
 

難易度を分岐させるために変更したところは、
 

@プロジェクトの boss_shotフォルダ(boss_shot.cpp、boss_shotH.cppが元からあるフォルダです)内に、
新たにboss_shotE.cppとboss_shotP.cppを追加。
boss_shotフォルダを右クリック→新しい項目の追加
で追加しました。
 
Aboss_shotE.cpp、boss_shotP.cppに、boss_shotH.cppの内容をコピー&ペースト。
 boss_shot_bulletH○○○(){}の部分は、それぞれ、
 boss_shot_bulletE○○○、
 boss_shot_bulletP○○○に変更

BGV.hで、 GLOBAL int stage_diff;
  
 難易度選択画面で、
  EASY   なら stage_diff=0
    HARD   なら stage_diff=1
    PHANTASM なら stage_diff=2
  としてから、ステージ開始処理に移行するようにしています。

Cfunc.hの赤文字部分を追加


#include "../GV.h"
extern void boss_shot_bulletH000();
extern void boss_shot_bulletH001();
extern void boss_shot_bulletH002();
extern void boss_shot_bulletH003();
extern void boss_shot_bulletH004();
extern void boss_shot_bulletH005();
extern void boss_shot_bulletH006();
extern void boss_shot_bulletH007();
extern void boss_shot_bulletH008();
extern void boss_shot_bulletH009();
extern void boss_shot_bulletH010();
extern void boss_shot_bulletH011();
extern void boss_shot_bulletH012();
extern void boss_shot_bulletH013();

extern void boss_shot_bulletE000();
extern void boss_shot_bulletE001();
extern void boss_shot_bulletE002();
extern void boss_shot_bulletE003();
extern void boss_shot_bulletE004();
extern void boss_shot_bulletE005();
extern void boss_shot_bulletE006();
extern void boss_shot_bulletE007();
extern void boss_shot_bulletE008();
extern void boss_shot_bulletE009();
extern void boss_shot_bulletE010();
extern void boss_shot_bulletE011();
extern void boss_shot_bulletE012();
extern void boss_shot_bulletE013();


extern void boss_shot_bulletP000();
extern void boss_shot_bulletP001();
extern void boss_shot_bulletP002();
extern void boss_shot_bulletP003();
extern void boss_shot_bulletP004();
extern void boss_shot_bulletP005();
extern void boss_shot_bulletP006();
extern void boss_shot_bulletP007();
extern void boss_shot_bulletP008();
extern void boss_shot_bulletP009();
extern void boss_shot_bulletP010();
extern void boss_shot_bulletP011();
extern void boss_shot_bulletP012();
extern void boss_shot_bulletP013();


if(stage_diff==0){
    void (*boss_shot_bullet[DANMAKU_MAX])()=
{
    
    
    boss_shot_bulletE001,
    boss_shot_bulletE002,
    boss_shot_bulletE003,

    boss_shot_bulletE004,
    boss_shot_bulletE005,
    boss_shot_bulletE006,
    boss_shot_bulletE007,
    boss_shot_bulletE008,
    boss_shot_bulletE009,
    boss_shot_bulletE010,
    boss_shot_bulletE011,
    boss_shot_bulletE012,
    boss_shot_bulletE013,

    boss_shot_bulletE001


    };
}

if(stage_diff==1){    

void (*boss_shot_bullet[DANMAKU_MAX])()=
{
    
    
    boss_shot_bulletH001,
    boss_shot_bulletH002,
    boss_shot_bulletH003,

    boss_shot_bulletH004,
    boss_shot_bulletH005,
    boss_shot_bulletH006,
    boss_shot_bulletH007,
    boss_shot_bulletH008,
    boss_shot_bulletH009,
    boss_shot_bulletH010,
    boss_shot_bulletH011,
    boss_shot_bulletH012,
    boss_shot_bulletH013,

    boss_shot_bulletH001


    };
}

if(stage_diff==2){    
void (*boss_shot_bullet[DANMAKU_MAX])()=
{
    
    
    boss_shot_bulletP001,
    boss_shot_bulletP002,
    boss_shot_bulletP003,
         boss_shot_bulletP004,
      boss_shot_bulletP005,
    boss_shot_bulletP006,
    boss_shot_bulletP007,
    boss_shot_bulletP008,
    boss_shot_bulletP009,
    boss_shot_bulletP010,
    boss_shot_bulletP011,
    boss_shot_bulletP012,
    boss_shot_bulletP013,

    boss_shot_bulletP001


};
}






以上の部分です
 
フォルダを追加する方法が違ったのでしょうか・・・

自分では原因が全く分からないです;
 
よろしくお願いします。
 
 編集済み


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


Name: SooA [URL]  ..上級者(23,466ポイント)   Date: 2010/01/12(火) 01:02   No:46037     
Title: Re:難易度を分けようとしているのですが・・・    
ざっとしか読んでいませんが、
新しく作成したファイルが他のソースファイルと
同じ場所にあるか確認してください。

別の場所に作成していた場合は移動させて、
プロジェクトへの登録もやり直しましょう。


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

Name: SooA [URL]  ..上級者(23,481ポイント)   Date: 2010/01/12(火) 01:15   No:46040     
Title: Re:難易度を分けようとしているのですが・・・    
読み飛ばしてた func.h が
とんでもないことになってますね。


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

Name: yrao  ..上級者(18,857ポイント)   Date: 2010/01/12(火) 08:06   No:46043     
Title: Re:難易度を分けようとしているのですが・・・    

おはようございます。
 
SooAさんどうもですm(__)m 
登校中なので、携帯からの書き込みですが、
 
 
>ファイルの場所を確認
 
SooAさんのおっしゃる通り、新たに追加したファイルの場所を確認したところ、違う場所に作成していたことが分かりました。
 
正しい場所にファイル作成をし直したことで、
boss_shotE
boss_shotP
のエラーは消すことができました。
後はfunc.hのエラーのみです。
 
 

>func.hがとんでもないことに
 
…何か大変な間違いをしているでしょうか…
 
それとも、単に行数が多いだけ……
……てそんなはずないですね、私の場合恐らく前者だと思います(-.-;
おかしい所を教えてもらえれば幸いですm(__)m


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

Name: Tatu  ..上級者(21,774ポイント)   Date: 2010/01/12(火) 09:42   No:46045     
Title: Re:難易度を分けようとしているのですが・・・    
func.hの
#include "../GV.h"は

#include "../include/GV.h"か
#include "GV.h"かのどちらかのつもりだと思いますが、

いずれにしても、龍神録プログラミングの館と同じようにつくっているのであれば、
この文はいらないはずです。

なぜなら、龍神録ではfunc.hはboss_shot.cppにインクルードされていますが、
その直前にGV.hがインクルードされているからです。

そのため、この文をつけた場合
struct.h(17) : error C2371: 'ch_t' : 再定義されています。異なる基本型です。
1>struct.h(17) : 'ch_t' の宣言を確認してください。
のようなエラーが大量に(60章のプロジェクトでこれを行った時、32個)出るはずです。


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

Name: Dixq (管理人)  ..ウィザード(1,136,057ポイント)   Date: 2010/01/12(火) 09:55   No:46046     
Title: Re:難易度を分けようとしているのですが・・・    
関数でもないとこにif文は書けないですよ^_^;

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

Name: SooA [URL]  ..上級者(24,112ポイント)   Date: 2010/01/12(火) 11:51   No:46048     
Title: Re:難易度を分けようとしているのですが・・・    
>func.h

プリプロセス
http://www.geocities.jp/ky_webid/c/020.html
http://www.geocities.jp/ky_webid/c/052.html

この方法で指定範囲をコンパイルする・しないといった制御はできますが、
yraoさんのやろうとしている事はメニューから
Easy,Normal,Hard を選択して対応させるというものなので
この方法は使えません。


実のところ私は、龍神禄プログラムについては深く知りません><
質問があったときに、龍神禄プログラムのソースを眺めている程度
ですので、間違っている部分があるかもしれません。
それを踏まえて以降をお試し下さい。

完全に弾幕を切り替えるタイプなら func.h の boss_shot_bullet を以下のようにして

//------------------------------------------
void (*boss_shot_bullet[3][DANMAKU_MAX])() =
{
    {    // EASY
        boss_shot_bulletH000,//ノーマル
        boss_shot_bulletH002,//スペル〜パーフェクトフリーズ〜
        boss_shot_bulletH001,//ノーマル〜サイレントセレナ〜
        boss_shot_bulletH004,//スペル〜ケロちゃん〜
        boss_shot_bulletH009,//スペル〜反魂蝶〜
        boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)
    },{    // NORMAL
        boss_shot_bulletH000,//ノーマル
        boss_shot_bulletH002,//スペル〜パーフェクトフリーズ〜
        boss_shot_bulletH001,//ノーマル〜サイレントセレナ〜
        boss_shot_bulletH004,//スペル〜ケロちゃん〜
        boss_shot_bulletH009,//スペル〜反魂蝶〜
        boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)
    },{    // HARD
        boss_shot_bulletH000,//ノーマル
        boss_shot_bulletH002,//スペル〜パーフェクトフリーズ〜
        boss_shot_bulletH001,//ノーマル〜サイレントセレナ〜
        boss_shot_bulletH004,//スペル〜ケロちゃん〜
        boss_shot_bulletH009,//スペル〜反魂蝶〜
        boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)
    }
};
//------------------------------------------
boss_shot.cpp 内の
boss_shot_bullet[boss.knd]();//弾幕関数へ

boss_shot_bullet[難易度][boss.knd]();//弾幕関数へ
と変更する。


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

Name: SooA [URL]  ..上級者(24,132ポイント)   Date: 2010/01/12(火) 11:58   No:46049     
Title: Re:難易度を分けようとしているのですが・・・    
追記
コピペなので入っている弾幕が全部同じですが難易度別に変更します。


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

Name: yrao  ..上級者(18,995ポイント)   Date: 2010/01/12(火) 22:33   No:46070     
Title: Re:難易度を分けようとしているのですが・・・    


皆さんありがとうございますm(__)m
 
 

>Tatuさん
>Dixqさん
 
if文使えないんですね(+_+)
 
当初、"../GV.h" を書かずにこのプログラムを実行したときに、if文のエラーがでたのですが、その時に気が付ければよかったです… 
試しに、".//GV.h" を書いてみたところ、if文のエラーは消えたので、未熟なゆえこれでいいものかと思っていました……
……余計に悪化していたとは…(-.-;
 
 
 
 
>SooAさん
 

おかげさまで、func.hのエラーを消すことができました。
 
ですがfunc.hのものの他に、新たにエラーがでてしまいました…

『一つ以上の複数回定義されているシンボルが見つかりました』

というものです。
 
弾幕簡略化関数(龍神録プログラミングの支館のものです)を、
boss_shotH
boss_shotE
boss_shotP
でそれぞれ宣言しているので、それが問題なのだと思うのですが、どうすればエラーを消すことができるのでしょうか…


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

Name: SooA [URL]  ..上級者(24,265ポイント)   Date: 2010/01/12(火) 23:10   No:46074     
Title: Re:難易度を分けようとしているのですが・・・    
追加したファイル boss_shotE.cpp と boss_shotP.cpp を
プロジェクトから除外して、元?に戻して下さい。

弾幕関数は boss_shotH.cpp に追記した方が良いかと思います。
追加方法が龍神禄プログラムのページに書かれていると
思うのでその方が間違いがないでしょう。

以上を行った上でエラーが無いことを確認し、
No:46048 の方法を導入してみてください。


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

Name: Tatu  ..上級者(22,471ポイント)   Date: 2010/01/12(火) 23:37   No:46076     
Title: Re:難易度を分けようとしているのですが・・・    
龍神録プログラミングの館からすこし変更したプロジェクトをコピーして試してみました。
試した内容は
boss_shotH.cppをコピーして、boss_shotE.cppに名前変更し、プロジェクトに追加。
boss_shotE.cpp内の弾幕関数の名前をクイック置換で変更。
func.hでも弾幕関数宣言のコピーと変更を行う。
関数ポインタを
void (*boss_shot_bullet[DANMAKU_MAX])() =
...
から
void (*boss_shot_bullet[2][DANMAKU_MAX])() =
...
へと変更し、初期化の中身をそれに合わせて変更。
boss_shot.cppのboss_shot_bullet[boss.knd]();//弾幕関数へ
と書かれていたところを
boss_shot_bullet[0][boss.knd]();//弾幕関数へ
に変更。

ここまでの変更を行った結果、

1>boss_shotE.obj : error LNK2005:
 "void __cdecl boss_bullet_on(引数略)" (?boss_bullet_on@@YAXHHHHNNNNNNHHHH@Z) 
は既に boss_shotH.obj で定義されています。

というエラーが自分で用意した関数(弾発射、レーザー発射などの簡略化)の数だけ出て、さらに、

1>Debug\RyuJin.exe : fatal error LNK1169:
 1 つ以上の複数回定義されているシンボルが見つかりました。
というエラーが表示されました。

そこで、boss_shotE.cpp内にあるそれらの関数の定義を消去し、
extern宣言にしました。つまり、
void boss_bullet_on(引数略){
...
}
と書いていたところを
extern void boss_bullet_on(引数略);
と変えたということです。
その結果、エラーは現れず、弾幕も特に問題ありませんでした。

しかし、難易度を増やすたびにこの作業を行うのが面倒ならば、
boss_shotH.cppに関数の定義を書き、
function.hに
//boss_shotH.cpp
    GLOBAL void boss_bullet_on(引数略);
などと書いて、boss_shotE.cppのextern宣言を消すというようにすればよいと思います。


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

Name: yrao  ..上級者(19,263ポイント)   Date: 2010/01/13(水) 19:54   No:46119     
Title: Re:難易度を分けようとしているのですが・・・    

>SooAさん
>Tatuさん


ありがとうございます
 
extern宣言をすれば良かったのですねf^_^;
 
boss_shotE、boss_shotP
にそれぞれ弾幕関数などをextern宣言したところ、複数定義のエラーを消すことがができました
 
 
どうもありがとうございました<(__)>


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



Name: uvale  ..ぴよぴよ(93ポイント)   Date: 2010/01/12(火) 20:23   No:46061       
Title: ポインタ項の演習問題の質問です。    
はじめまして、「uvale」と申します。以前からこの掲示板はたびたび拝見さしていただいていました。
現在は「新版明解c++」にてc++の勉強をしているのですが、どうしてもできない問題がでてきたので、
質問さしていただきたいと思います。

問題
 n行5列のint型2次元配列aの各行の最大値を、要素数nの1次元配列mに格納する関数maxlineを作成せよ。
void maxline(int a[][5],int m[],int n);
たとえば、aに受け取った3行5列の構成要素が{{1,2,5,3,8},{6,7,4,2,3},{3,0,5,9,1}}であれば、mに{8,7,9}を格納せよ。

という問題です。以下開発環境と自分の作ったプログラムです。

OS:Windows XP
コンパイラ:Borand C++

#include<iostream>

using namespace std;

void maxline(int a[][5],int m[],int n);

int main(void)
{
    int n;
    int a[][5]={0};
    int m[]={0};
    
    cout << "行数:";    cin >> n;
    
    for(int i=0;i<n;i++){
        for(int j=0;j<5;j++){
            cout << "a[" << i << "][" << j << "] = ";
            cin >> a[i][j];
        }
    }
    
    maxline(a,m,n);
    
    for(int i=0;i<n;i++){
        cout << "m[" << i << "] = " << m[i] << '\n';
    }
}

void maxline(int a[][5],int m[],int n)
{
    int max;
    for(int i=0;i<n;i++){
        max=a[i][0];
        for(int j=1;j<5;j++){
            if(max<a[i][j]){
                max=a[i][j];
            }
        }
        m[i]=max;
    }
}


プログラムは実行できるのですが、思ったとおりに動きません。
最初nに3を代入してもなぜか、ループが5回になってしまいます。
何度か見直したのですが、どうしても分かりません。
どうかご協力お願いします。


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


Name: non  ..比類無きプログラマー(87,007ポイント)   Date: 2010/01/12(火) 21:01   No:46064     
Title: Re:ポインタ項の演習問題の質問です。    
> int a[][5]={0};
> int m[]={0};
これは、まずいですね。
行数が後で、入力されるのなら、メモリを動的に確保しなくてはいけません。



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

Name: uvale  ..ぴよぴよ(130ポイント)   Date: 2010/01/13(水) 19:46   No:46118 解決!     
Title: Re:ポインタ項の演習問題の質問です。    
>>nonさん
動的にという意味がよく分からず、索引で見てみたのですが、どうやらこれより後のページにでているよう見たいです。ということでとりあえず今回は、

const int n=3;
int a[n][5];
int m[n];

という風にしました。回答ありがとうございました。
また、分からないところがあったら質問させていただきたいと思います。


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



Name: xxx  ..ぴよぴよ(138ポイント)   Date: 2010/01/13(水) 01:30   No:46081       
Title: 乱数    
是非作っていただきたいプログラムがあります。

@乱数発生プログラム
0から100までの整数乱数を1000個以上発生させ、それを標準出力またはファイルに書き出すプログラム

Aデータ解析プログラム
@の乱数発生プログラムで作成した整数乱数データファイル(データ数1000個以上)を読み込んで、次の愛田を出力する。
・最大値と最小値
・平均値(小数点以下一位まで)
・度数分布表(0〜9、10〜19、…、90〜100の区間に分けて、吐く区間にいくつデータがあるかを表示)


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


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


Name: Ma  ..プログラマー(28,426ポイント)   Date: 2010/01/13(水) 01:35   No:46082     
Title: Re:乱数    
まる投げ禁止です。
環境をかいてください。
規約を読んでください。 編集済み


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

Name: xxx  ..ぴよぴよ(334ポイント)   Date: 2010/01/13(水) 01:45   No:46084     
Title: Re:乱数    
すみません。

ただ、Cプロが全く分からないので、自分ではどうすることもできません。
皆さんに教えてもらって、そのことを理解し勉強していこうと考えています。
よろしくお願い致します。

特に平均値・分布が分かりません。


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

Name: Ma  ..プログラマー(28,840ポイント)   Date: 2010/01/13(水) 02:00   No:46085     
Title: Re:乱数    
略語、誤字はできるだけさけてください・・・。
>愛田 ⇒ 間
>吐く区間 ⇒ 各区間
>Cプロ ⇒ Cでプログラミング ?


それはいいとして。

少しでもグーグルで検索してみようとしてください。
「C 乱数」と検索してちょっと読むだけで、いろんなサンプルが見つかるものです。

http://www005.upp.so-net.ne.jp/h-masuda/grwin/rand01.html
以下のコードはこちらのサイト様からコードを利用させていただき、ちょこっと編集したものです。

@については、

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int     n, rnd;

    srand(time(NULL));       /* 乱数の初期化 */
    for(n = 0; n < 1000; ++n){
        rnd = rand()%101;           /* 乱数の取得 */
        printf("%d\n", rnd);    /* 乱数の表示 */
    }
    return 0;
}



平均値については、すべてのデータを配列に保存しておき、すべてを足し、足した数で割ったものを double 等に足せばOKです。

たとえば、

int data[100];

に乱数が保存されているなら

int sum = 0;
for(n = 0; n < 100; ++n){
     sum += data[n]
}
double ave = (double)sum/100;

みたいな形になります。


(一部コーディングミスで修正しました。) 編集済み


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

Name: ぽこ  ..入門者(3,616ポイント)   Date: 2010/01/13(水) 02:12   No:46086     
Title: Re:乱数    
C言語については、どこまで教わったのでしょうか?
教わった範囲を列挙してください。
列挙した項目ごとに、何が分からないかを明記してください。

これは回答者全員がxxxさんに教えるために必要な情報です。
これがないと、回答者が的はずれな回答をしてしまい、無駄なやり取りが
発生します。
よろしくお願いします。


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

Name: ぽこ  ..入門者(3,629ポイント)   Date: 2010/01/13(水) 02:13   No:46087     
Title: Re:乱数    
> 略語、誤字はできるだけさけてください・・・。
> >愛田 ⇒ 間

×愛田
○値

ではないかと。


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

Name: Ma  ..プログラマー(29,014ポイント)   Date: 2010/01/13(水) 02:16   No:46089     
Title: Re:乱数    
>ぽこさん
あー、なるほど。訂正ありがとうございます。
間ってちょっと変だなぁと思ってたので、ようやく正しく理解できました。


度数分布表に関しては、
データの値を10で割り、その商がいくつであるかによってどの区間にあるかを求めます。

つまり

    int range[10] = {0,};
    for(int i = 0;i < 1000; i++){
        range[data[i]/10]++;
    }
    for(int i = 0; i < 10; i ++){
        printf("%d番目の区間には、%d だけデータが当てはまりました。\n",i,range[i]);
    }

こんなかんじに。 編集済み


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

Name: xxx  ..ぴよぴよ(419ポイント)   Date: 2010/01/13(水) 02:31   No:46091     
Title: Re:乱数    
皆様ありがとうございます。
誤字は申し訳ありません。

愛田→値
吐く区間→各区間
Cプロ→Cプログラミング


学習は、乱数を作るプログラムを触る感じでしかやっておりません。
なので、読み込みなどもいまいちわかりません。
scanfなどは使わないのでしょうか?


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

Name: Ma  ..プログラマー(29,391ポイント)   Date: 2010/01/13(水) 02:38   No:46092     
Title: Re:乱数    
>学習は、乱数を作るプログラムを触る感じでしかやっておりません。 
>なので、読み込みなどもいまいちわかりません。 
>scanfなどは使わないのでしょうか?

scanf は、コマンドからの入力です。

ファイルからの入力の場合、いくつかの方法があります。
(ファイルへの出力も同様)
詳しくは、グーグルで「ファイル入出力 C」などで調べてください。

聞いたところ、まだ初めて間もないようなので、先ほどのコードが理解できないようならば
先にC言語入門サイトをこなすことをおすすめします。

入門サイトの中には、ファイル入出力も教えてくれるものがあるとおもいますよ。
なにより、こういうサイトは順番に説明してくれているでしょうから。


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

Name: light  ..ぴよぴよ(3ポイント)   Date: 2010/01/13(水) 08:02   No:46094     
Title: Re:乱数    
是非作ってほしいプログラムがあるって、これ宿題じゃないんでしょうか?

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

Name: たかぎ [URL]  ..ハッカー(149,765ポイント)   Date: 2010/01/13(水) 12:25   No:46101     
Title: Re:乱数    
とりあえず一つ目
#include <algorithm>
#include <ctime>
#include <fstream>
#include <iostream>
#include <iterator>
#include <boost/random.hpp>

void generate(std::ostream& ostr)
{
    boost::mt19937 gen(static_cast<unsigned long>(time(0)));
    boost::uniform_smallint<> dst(0, 100);
    boost::variate_generator<
        boost::mt19937&, boost::uniform_smallint<>
    > rand(gen, dst);

    std::generate_n(std::ostream_iterator<int>(ostr, "\n"), 1000, rand);
}

int main(int argc, char* argv[])
{
    std::ostream* ostr;
    if (argc < 2)
    {
        ostr = &std::cout;
    }
    else
    {
        static std::ofstream ofs(argv[1]);
        ostr = &ofs;
    }
    generate(*ostr);
}

いつものようにコメントなしですので、自分で解析してください。


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

Name: xxx  ..ぴよぴよ(682ポイント)   Date: 2010/01/13(水) 15:44   No:46108     
Title: Re:乱数    
ありがとうございます。
最大値、最小値までできました。

ここに平均値と分布を加えたらよいと思うのですが、どこにどのような文字を入れればいいのでしょうか?
よろしくお願いいたします

#include <stdio.h>
#include <stdlib.h>
#define N 2000
int main(void)
{
  FILE *fp;
  int data[N], i, min, max;

  fp=fopen("random.txt", "r");

  min=max=data[0];
  for (i=0; i<N; i++) {
    if (min > data[i]) min=data[i];
    if (max < data[i]) max=data[i];
    printf("%d ", data[i]);
    if (i % 10 == 9) printf("\n");
    fprintf(fp, "%d\n", data[i]);

  }
  printf("Min value is %d.\n", min);
  printf("Max value is %d.\n", max);
  fclose(fp);
  return 0;
}


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

Name: Mist  ..比類無きプログラマー(80,490ポイント)   Date: 2010/01/13(水) 16:02   No:46109     
Title: Re:乱数    
> 最大値、最小値までできました。 

ぜんぜん出来てませんけど。
@乱数発生プログラム 
Aデータ解析プログラム 
は別のプログラムであることを理解していますか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,136,260ポイント)   Date: 2010/01/13(水) 18:13   No:46114     
Title: Re:乱数    
これは友達に見せてもらったプログラムですか?
自分ではどこまで理解出来ていますか?

一つ一つ意味を理解していきましょう。
上のプログラムに一行ずつ詳しく注釈を書いていってみてください。
その注釈を見ればどこで勘違いしているか解ると思います。

また、全ての行を理解すれば今の疑問も晴れるはずです。
まずはなるべく詳しくプログラムコードに注釈を書いていってみてください。

例えば・・

// Nを2000と定義する ← ×
#define N 2000 

// ○○の△△としてNを2000と定義する ← ○
#define N 2000

// fpを用意する ← ×
  FILE *fp; 

// ファイルからデータを読み込むため、ファイルポインタfpをFILE*型で用意する ← ○
  FILE *fp; 

こんな感じです


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



Name: kai  ..中級者(11,963ポイント)   Date: 2010/01/13(水) 16:53   No:46110       
Title: ウインドウの伸縮方法    
Aerobeat Plusをやってみて気付いたのですが、
ゲームをやってみると、
画面の端にマウスポインタを合わせると、
画像の解像度が縦横比が固定のまま、伸縮出来ますよね?
これはDXライブラリでどういったプログラムを追加したらこのように出来るのでしょうか?
是非、教えていただけたらうれしいです。


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


Name: nayo  ..中級者(14,395ポイント)   Date: 2010/01/13(水) 17:46   No:46112     
Title: Re:ウインドウの伸縮方法    
SetWindowSizeChangeEnableFlagという関数があります。
使い方は本家のリファレンスをどうぞ。


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

Name: kai  ..中級者(11,964ポイント)   Date: 2010/01/13(水) 18:04   No:46113 解決!     
Title: Re:ウインドウの伸縮方法    
>nayoさん
ありがとうございます。助かりました。


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



Name: イールス  ..ぴよぴよ(225ポイント)   Date: 2010/01/13(水) 01:41   No:46083       
Title: 簡易整数電卓    
はじめまして。
簡易整数電卓の課題が出て、どうにも分からないのでどうか教えて下さい。
ソースファイルと解説文書が必要です…。

仕様は次の通りです
・数式を入力すると、計算結果を表示する。
・扱えるのは整数(signed intの範囲)でよい。
・四則演算、括弧が使える。
・演算子の優先順位は正しく解釈する。

次の機能も盛り込む
・べき乗(^)、階上(!)が使える。
・+と-の単項演算子が使える。(exp:“-3+4”の一番先頭の“-”を正しく理解する。)

処理方法について詳しくドキュメントに記述すること

以上です。
期限が近いのでなるべく早く教えていただけるとありがたいです。


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


Name: Ma  ..プログラマー(29,222ポイント)   Date: 2010/01/13(水) 02:24   No:46090     
Title: Re:簡易整数電卓    
結構長いプログラムになるとおもうので、今完成しているだけ載せることをおすすめします。
そこから、次は何をすればいいか というアドバイスを受けながらやってはいかがでしょうか?

親切な方は全部やってくれるかもしれませんが、答えと仕様書まるなげでは課題なだけにあなたのためになりません。
余計なお節介でしたらすいません。

ちなみに私だったら、std::string (find などの関数が便利なので。)を利用して計算していきます。 編集済み


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

Name: non  ..比類無きプログラマー(87,099ポイント)   Date: 2010/01/13(水) 08:45   No:46095     
Title: Re:簡易整数電卓    
まず、規約を読んで、必要なことを記してください。
次に、逆ポーランド記法をググって、調べてください。
すると、最低でも括弧がついた四則演算をするプログラムが見つかるはずですから、
それを元にプログラムを作り、その上でわからないことを尋ねてください。


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

Name: softya  ..比類無きプログラマー(86,370ポイント)   Date: 2010/01/13(水) 10:56   No:46096     
Title: Re:簡易整数電卓    
質問に答えるために幾つかお願いがあります。スムーズに回答するために必要な事柄ですのでぜひお願いします。
 ・ 使用している環境やコンパイラ(VisualC++2008ExpressEdition等)、自分が習っている言語の規格(CにもC89やC99など幾つか規格があります)を教えて下さい。
 ・ 自分はどこまで理解しているのか、学校ではどこまで習ったのか明確にして下さい。特に使って良い関数の制限などが分かると答えやすいです。無制限なら無制限と書いて下さいね。
 ・ 自分で書いたソースプログラムがあるなら提示をお願いします。
 ・ ソースが有る場合は、自分が書いたソースプログラムはどこからどこまでなのか教えて下さい。
 ・ 期限が近いとのことですが、正確な日を教えてください。
詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html



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



Name: hitori  ..ぴよぴよ(22ポイント)   Date: 2010/01/09(土) 15:31   No:45831       
Title: 重力多体問題    
今、重力多体問題のシミュレーションプログラムをC言語で作成しようと考えています。

まだソースコード作っていませんが、

どなたか参考になるようなソースコードが載っている本やサイトなど知っている方教えて頂けませんか?





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


Name: 組木紙織  ..比類無きプログラマー(76,558ポイント)   Date: 2010/01/09(土) 21:13   No:45840     
Title: Re:重力多体問題    
グーグル先生に聞いてみました。(所要時間数分)
計算天文学 II 第10回 データ構造とアルゴリズム(1)
http://www.artcompsci.org/~makino/kougi/keisan_tenmongakuII/note10/note10-e.html



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

Name: hitori  ..ぴよぴよ(86ポイント)   Date: 2010/01/12(火) 22:10   No:46067 解決!     
Title: Re:重力多体問題    
ありがとうございます。

そのサイトを参考に組んで行こうと思います。

組んでる途中わからないことが出てきたらまた質問させて
もらうかもしれませんがその時はまたお願いします。


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

Name: 組木紙織  ..比類無きプログラマー(76,597ポイント)   Date: 2010/01/13(水) 02:16   No:46088     
Title: Re:重力多体問題    
いや、質問するのは構わないのですが、質問するまえに自分で調べましょうよ。

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



Name: サンタクロース  ..かけだし(2,014ポイント)   Date: 2010/01/12(火) 23:48   No:46077       
Title: タイトルについて    
龍神録さんの「ゲームプログラミングの館」を参考に作ってみました。
しかし下に押しても選択している段が一瞬下に行くだけですぐまた上に戻ってきてしまいます
タイトル0は一番初めで、タイトル1以降は未実装です。
今どの段をセレクトしているかはi(0<=i<=7)の値を加減して決めているつもりです。


<pre>
#include "GV.h"

void title0(){//一番初めのやつ
    int i=0,select_count=0;
  
       DrawGraph(0,0,img_title_back[0],TRUE);//タイトルの背景
            
      DrawGraph(140,100,img_title[0],TRUE);//START
            DrawGraph(140,120,img_title[2],TRUE);//EXTRA
            DrawGraph(140,140,img_title[4],TRUE);//PRACTICE
            DrawGraph(140,160,img_title[6],TRUE);//REPLAY
            DrawGraph(140,180,img_title[8],TRUE);//RESULT    
            DrawGraph(140,200,img_title[10],TRUE);//RESULT
            DrawGraph(140,220,img_title[12],TRUE);//OPTION
            DrawGraph(140,240,img_title[14],TRUE);//QUIT


      if(CheckStatePad(configpad.down)==1){//下に移動
             i+=1; 
            if(i==8)
            i-=8;
            se_flag[11]=1;
                
            }


        if(CheckStatePad(configpad.up)==1){//上に移動
               i-=1;
               if(i==-1) 
               i+=8;
               se_flag[11]=1;
              
          }
    
  switch(i){
      case 0: 
          DrawGraph(140,100,img_title[1],TRUE);
          if(CheckStatePad(configpad.shot)==1)
          game_start.flag=1;
          break;
      case 1:
          DrawGraph(140,120,img_title[3],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title1();
          break; 
     
      case 2:
          DrawGraph(140,140,img_title[5],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title2();
          break; 

      case 3:
          DrawGraph(140,160,img_title[7],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title3();
          break; 

      case 4:
          DrawGraph(140,180,img_title[9],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title4();
          break; 

      case 5:
          DrawGraph(140,200,img_title[11],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title5();
          break; 
      
      case 6:
          DrawGraph(140,220,img_title[13],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title6();
          break; 

      case 7:
          DrawGraph(140,240,img_title[15],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title7();
          break; 
      
  }

}




void title1(){}//EXTRA
void title2(){}//PRACTICE
void title3(){}//REPLAY
void title4(){}//RESURT
void title5(){}//MUSIC
void title6(){}//OPTION
void title7(){}//QUIT

 
void title_main(){
    title0();
    title1();
    title2();
    title3();
    title4();
    title5();
    title6();
    title7();
}
<pre/>

   編集済み


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


Name: softya  ..比類無きプログラマー(86,592ポイント)   Date: 2010/01/13(水) 00:10   No:46079     
Title: Re:タイトルについて    
これは変数のスコープの問題ですね。
int i=0
と宣言されているローカル変数iは、title0()関数に入ると0に毎回初期化されますので、必ず0から始まります。
更にtitle0()関数を抜けるときに消滅してしまします。
この関数がメインループから呼び出されるなら、毎回消えないようにグローバル変数で保持する必要があります。

それと関数の関係で気になることが、
 title_main()と各 title0()、title1()、title2()の関数たちとの関係は?
今のままだとtitle_main()→ title0()→title1()で、一旦title_main()に戻ってまたtitle1()が呼び出されますが?
このままだと異常な動作をする可能性が高いですよ。


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

Name: サンタクロース   Date: 2010/01/24(日) 13:27   No:460771264307237 解決!     
Title: Re:タイトルについて    
遅くなってしまってすみませんでした。
int iをtitle0()の外に出すことで解決することができました。
ありがとうございました




Name: ペタ  ..ぴよぴよ(22ポイント)   Date: 2010/01/11(月) 16:53   No:45985       
Title: タイトル画面の作り方を教えてほしい    
龍神録を拝見させてもらいました。
個人的にタイトル画面から「Game Start」でゲームを始めれるようして、「Option」から
ゲームのレベルや音量を変更できるようにしたいんですけど、
どうやればできるのか仕組みだけでもご教授ください。


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


Name: ひよこ  ..比類無きプログラマー(77,644ポイント)   Date: 2010/01/11(月) 17:03   No:45986     
Title: Re:タイトル画面の作り方を教えてほしい    
スイッチ文を使います。
switch(ゲームの制御する変数){
タイトル:
ゲームを制御する変数にゲームメインを表す値を入れる。
ゲームメイン:

ゲームのレベルや音量を変更できるようにしたいんですけど
>>ファイルに保存し、ファイルの中身で変更すればいいのです。


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

Name: ペタ  ..ぴよぴよ(0ポイント)   Date: 2010/01/11(月) 18:08   No:45991     
Title: Re:タイトル画面の作り方を教えてほしい    
ひよこさん返信ありがとうございます。今タイトル画面を作ろうとしているんですけど
プログラムだけ見もらえませんか?


#define GLOBAL_INSTANCE 
#include "../include/Global.h"

//メイン

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

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    
    
    while(ProcessLoop()==0){//メインループ
        music_ini();
        switch(func_state){
            case 0://初回のみ入る処理
                load();        //データロード
                first_ini();//初回の初期化
                func_state=1;
                break;
            case 1://STGを始める前に行う初期化
                ini();
                load_story();
                func_state=100;
                break;
            case 100://通常処理
                         enter_func_tm("最初");
                calc_ch();       enter_func_tm("キャラ計算");
                ch_move();       enter_func_tm("キャラ移動");
                cshot_main();    enter_func_tm("自機ショットメイン");
                enemy_main();     enter_func_tm("敵処理メイン");
                boss_shot_main();enter_func_tm("ボスショットメイン");
                shot_main();     enter_func_tm("ショットメイン");
                out_main();       enter_func_tm("当たり判定");
                effect_main();   enter_func_tm("エフェクトメイン");
                calc_main();     enter_func_tm("計算メイン");
                graph_main();    enter_func_tm("描画メイン");
                bgm_main();         enter_func_tm("BGMメイン");
                if(boss.flag==0)
                    stage_count++;
                break;
            default:
                printfDx("不明なfunc_state\n");
                break;
        }
        music_play();             enter_func_tm("音楽再生");
        fps_wait();                 enter_func_tm("待機した時間",1);
        if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
        ScreenFlip();//裏画面反映
        count++;

    }
    DxLib_End();//DXライブラリ終了処理
    return 0;
}


アドバイスをくれたら嬉しいです。


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

Name: softya  ..比類無きプログラマー(86,334ポイント)   Date: 2010/01/11(月) 18:21   No:45995     
Title: Re:タイトル画面の作り方を教えてほしい    
ひよこさんじゃありませんが、既にあるswitch(func_state)
case 0://初回のみ入る処理
case 1://STGを始める前に行う初期化
case 100://通常処理 
にcaseを増やしてタイトル画面処理を加えるだけですよ。

その前にシューティング本体のないタイトル画面とオプションだけのプログラムを作れますか?
それが出来ないと付け加える事も難しいんで、まず作ってみませんか。ZEROからプログラムを作る練習にもなりますしね。


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

Name: ペタ  ..ぴよぴよ(93ポイント)   Date: 2010/01/11(月) 20:39   No:46017     
Title: Re:タイトル画面の作り方を教えてほしい    
softyaさんも返事ありがとうございます。

一応龍神録の50章までプログラムを作っているので、

タイトル画面とオプション画面を作ってみたいなと思ったからです。

今悩んでいるのは新しくtitle.cppを追加してその中にどういうソースを書けば

タイトル画面みたくなるのかで悩んでいます。


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

Name: softya  ..比類無きプログラマー(86,265ポイント)   Date: 2010/01/11(月) 21:20   No:46025     
Title: Re:タイトル画面の作り方を教えてほしい    
「ゲームプログラミングの館」は読まれましたか?
選択画面の作り方などは、あちらにあります。

33.     選択画面の作り方。
34.     main関数の書き方。

を上手組み合わせればタイトル画面やオプション画面が作れます。
まず、シューティングの無い別のプロジェクトを作って、それだけを作りましょう。
これを作れない人に、いきなりシューティングのタイトル追加は難しすぎます。

>一応龍神録の50章までプログラムを作っているので、 

50章までのプログラムの一行一行の命令の意味・意義を理解しているなら、それだけで作れるハズなのです。
なのでまだ理解度は浅いと思います。メインループにあるswitch(func_state)の機能を説明できますか?
 編集済み


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

Name: ペタ  ..ぴよぴよ(305ポイント)   Date: 2010/01/12(火) 22:36   No:46071     
Title: Re:タイトル画面の作り方を教えてほしい    
すいません、説明しろって言われると説明できません。

今週末までに何とかしないといけなかったのであまり考えずにしていました。

分かるところは理解しながら書いていたんですけど分からないところはコピペしただけです。

はっきり言って「メインループにあるswitch(func_state)」の機能はよくわかりません。


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

Name: ひよこ  ..比類無きプログラマー(77,725ポイント)   Date: 2010/01/12(火) 22:50   No:46072     
Title: Re:タイトル画面の作り方を教えてほしい    
上に私が書いたようになっています。
詳しく言うと。スイッチ文は条件分岐に使う変数の値によって処理を分けるということです。
switch(func_state)
これの場合は0のときに、データをロードし、
1のときに変数の初期化などで100のときにゲームメインとなる処理をしています。


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

Name: softya  ..比類無きプログラマー(86,428ポイント)   Date: 2010/01/12(火) 23:01   No:46073     
Title: Re:タイトル画面の作り方を教えてほしい    
>今週末までに何とかしないといけなかったのであまり考えずにしていました。

何らかの卒業制作でしょうか?

龍神録の規約の
http://dixq.net/rp/kiyaku.html

ここのプログラムコードを利用して制作したゲームを卒業制作、または教育機関等の課題として提出する場合
→利用できますが、使用される際は※2を参考にしてご連絡下さい。

※2
専門学校の卒業制作や何かの制作物として教育機関などに提出される際は一度ご連絡ください。
その際は提出先とお名前をご連絡内容に添えて下さい。

は大丈夫ですか?

ペタさんの今週末までに何とかしなければいけない理由を明確にして下さい。
基本的にこの掲示板は、プログラミング考え方を身につけるお手伝いがスタンスですので、そのものズバリなコードを書くことはマレです。
今のところ、仕様も明確ではないのでコードを書くことも出来ませんが。 編集済み


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

Name: ペタ  ..ぴよぴよ(393ポイント)   Date: 2010/01/12(火) 23:24   No:46075     
Title: Re:タイトル画面の作り方を教えてほしい    
ひよこさん丁寧な説明ありがとうございました。

softyaさん専門学校の卒業制作や何かの制作物として使用するわけではありません。

あくまで個人的に使用するので関係はありません。



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



Name: gtdf  ..ぴよぴよ(285ポイント)   Date: 2010/01/08(金) 19:51   No:45806       
Title: 3*3の魔法陣    
3*3の魔法陣の解を求めるプログラムです。
一応これで求まるのですが、for文を使いまくっていて、非常に汚いプログラムになってしまいました。
そして、実行にかなり時間がかかってしまいます。
再帰を使えばもっとすっきりすると思うんですが、どうやればいいか分かりません。
どうすればいいでしょうか。
以下にソースを載せます。

<pre>
#include <stdio.h>

int main(void) {

 int i, j, k, l, m, n, o, p, q;
 int x;
 int a, b, c;
 int data[9];

 for (i=1; i<=9; i++) {
  data[0] = i;
  for (j=1; j<=9; j++) {
   data[1] = j;
   for (k=1; k<=9; k++) {
    data[2] = k;
    for (l=1; l<=9; l++) {
     data[3] = l;
     for (m=1; m<=9; m++) {
      data[4] = m;
      for (n=1; n<=9; n++) {
       data[5] = n;
       for (o=1; o<=9; o++) {
        data[6] = o;
        for (p=1; p<=9; p++) {
         data[7] = p;
         for (q=1; q<=9; q++) {
          data[8] = q;

          c = 0;
          for (a=0; a<9; a++) {
           for (b=a+1; b<9; b++) {
            if (data[a] == data[b])
             c++;
           }
          }
          if (c == 0) {
           if ((data[0] + data[1] + data[2]) ==
               (data[3] + data[4] + data[5]) &&
               (data[0] + data[1] + data[2]) ==
               (data[6] + data[7] + data[8]) &&
               (data[0] + data[1] + data[2]) ==
               (data[0] + data[3] + data[6]) &&
               (data[0] + data[1] + data[2]) ==
               (data[1] + data[4] + data[7]) &&
               (data[0] + data[1] + data[2]) ==
               (data[2] + data[5] + data[8]) &&
               (data[0] + data[1] + data[2]) ==
               (data[0] + data[4] + data[8]) &&
               (data[0] + data[1] + data[2]) ==
               (data[2] + data[4] + data[6]))
     {

               for (x=0; x<9; x++) {
                printf("%2d", data[x]);
                if (x == 2 || x == 5 || x == 8)
                 puts("");    
               }
               puts("");
           }
          }
         }
        }
       }
      }
     }
    }
   }
  }
 }
 printf("以上\n");
 return 0;
}

よろしくお願いします。


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


Name: gtdf  ..ぴよぴよ(964ポイント)   Date: 2010/01/08(金) 19:54   No:45807     
Title: Re:3*3の魔法陣    
すみません。</pre>が抜けていました。

もう一度載せます。

#include <stdio.h>

int main(void) {

 int i, j, k, l, m, n, o, p, q;
 int x;
 int a, b, c;
 int data[9];

 for (i=1; i<=9; i++) {
  data[0] = i;
  for (j=1; j<=9; j++) {
   data[1] = j;
   for (k=1; k<=9; k++) {
    data[2] = k;
    for (l=1; l<=9; l++) {
     data[3] = l;
     for (m=1; m<=9; m++) {
      data[4] = m;
      for (n=1; n<=9; n++) {
       data[5] = n;
       for (o=1; o<=9; o++) {
        data[6] = o;
        for (p=1; p<=9; p++) {
         data[7] = p;
         for (q=1; q<=9; q++) {
          data[8] = q;

          c = 0;
          for (a=0; a<9; a++) {
           for (b=a+1; b<9; b++) {
            if (data[a] == data[b])
             c++;
           }
          }
          if (c == 0) {
           if ((data[0] + data[1] + data[2]) ==
               (data[3] + data[4] + data[5]) &&
               (data[0] + data[1] + data[2]) ==
               (data[6] + data[7] + data[8]) &&
               (data[0] + data[1] + data[2]) ==
               (data[0] + data[3] + data[6]) &&
               (data[0] + data[1] + data[2]) ==
               (data[1] + data[4] + data[7]) &&
               (data[0] + data[1] + data[2]) ==
               (data[2] + data[5] + data[8]) &&
               (data[0] + data[1] + data[2]) ==
               (data[0] + data[4] + data[8]) &&
               (data[0] + data[1] + data[2]) ==
               (data[2] + data[4] + data[6])
               )
                     {

               for (x=0; x<9; x++) {
                printf("%2d", data[x]);
                if (x == 2 || x == 5 || x == 8)
                 puts("");    
               }
               puts("");
           }
          }
         }
        }
       }
      }
     }
    }
   }
  }
 }
 printf("以上\n");
 return 0;
}


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

Name: Libra  ..上級者(18,212ポイント)   Date: 2010/01/08(金) 20:18   No:45808     
Title: Re:3*3の魔法陣    
ぱっと見た感じですが、上のソースですと魔法陣の中の数字が
1、1、1、1、1、1、1、1、1→1、1、1、1、1、1、1、1、2・・・・

のように、1つずつ判定していってると思われます。
これだと、9の9乗回ループして計算している事になります。

しかし、魔法陣の中の数字は重複しないので、
最初から配列に1〜9の数字を代入し
配列の中の数字を入れ替えて魔法陣の条件を満たすか判定した方が
重複判定をしなくてよい分、演算回数が少なくなるのではないでしょうか?
バブルソートに似た形をとると良いかも。
 編集済み


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

Name: gtdf  ..かけだし(1,080ポイント)   Date: 2010/01/08(金) 22:10   No:45810     
Title: Re:3*3の魔法陣    
早速の回答ありがとうございます。

無駄な処理をかなりしていることはわかっていて、ソートするという方法も思いついたのですが、
1〜9の順列を生成する方法が思いつかず、断念しました。

1〜9の順列を生成するにはどうすればよいのでしょうか。

よろしくお願いします。


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

Name: Libra  ..上級者(18,313ポイント)   Date: 2010/01/08(金) 22:16   No:45811     
Title: Re:3*3の魔法陣    
順列を求めるプログラムに魔法陣の判定を入れるだけなので、
すぐ出来ると思います。

順列を求めるプログラムは「順列 C言語」「順列 プログラム」
などで検索すれば出てくると思いますよ。

順列のプログラムを自分で作ってみようと思いましたが、無理でした(汗)


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

Name: たいちう  ..熟練のプログラマー(44,773ポイント)   Date: 2010/01/08(金) 23:01   No:45813     
Title: Re:3*3の魔法陣    
簡単な方法を紹介。

#include <stdio.h>

int a, b, c,
    d, f, g,
    e, h, i; // e, f, gの順番に注意

int main() {
    int sum;
    for (a = 1; a <= 9; a++) {
        for (b = 1; b <= 9; b++) {
            if (a == b) continue;
            for (c = 1; c <= 9; c++) {
                if (a == c || b == c) continue;
                sum = a + b + c;
                for (d = 1; d <= 9; d++) {
                    if (a == d || b == d || c == d) continue;
                    e = sum - a - d;
                    if (e < 1 || 9 < e) continue;
                    if (a == e || b == e || c == e || d == e) continue;
                    f = sum - c - e;
                    if (f < 1 || 9 < f) continue;
                    if (a == f || b == f || c == f || d == f || e == f) continue;
                    g = sum - d - f;
                    if (g < 1 || 9 < g) continue;
                    if (a == g || b == g || c == g || d == g || e == g || f == g) continue;
                    h = sum - b - f;
                    if (h < 1 || 9 < h) continue;
                    if (a == h || b == h || c == h || d == h || e == h || f == h || g == h) continue;
                    i = sum - a - f;
                    if (i < 1 || 9 < i) continue;
                    if (a == i || b == i || c == i || d == i || e == i || f == i || g == i || h == i) continue;
                    if (c + g + i != sum) continue;
                    if (e + h + i != sum) continue;

                    if (a > c || a > e || c > e) continue; // これはなくてもよい 

                    printf("    %d %d %d\n", a, b, c);
                    printf("    %d %d %d\n", d, f, g);
                    printf("    %d %d %d\n", e, h, i);
                    printf("\n");
                }
            }
        }
    }

    // quit
    printf("End.\n");
    getchar();
    return 0;
}


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

Name: gtdf  ..かけだし(1,153ポイント)   Date: 2010/01/08(金) 23:27   No:45814     
Title: Re:3*3の魔法陣    
順列のプログラムを見てみたのですが・・・

よくわかりませんでした・・・
(もう少し考えてみます)

上述したソースを再帰を使って書いたらどうなるのでしょうか。


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

Name: gtdf  ..かけだし(1,294ポイント)   Date: 2010/01/08(金) 23:43   No:45815     
Title: Re:3*3の魔法陣    
たいちうさん、回答ありがとうございます。

なんか、すごいプログラムですね。
自分では、まず思いつけません。

なぜ、e,f,gの並びがあのようになるのでしょうか。
そして、なぜ、sumでa,b,cの和をとっているのでしょうか。

3*3の魔法陣にはそういった性質があり、それをもとにプログラムを作ったのでしょうか。


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

Name: Libra  ..上級者(18,737ポイント)   Date: 2010/01/09(土) 00:21   No:45816     
Title: Re:3*3の魔法陣    
>たいちうさん

総当たりではなく、人間が解く時に近い方法ですね。流石です!

>gtdfさん
上述したソースを仮に再帰に書き換えても、
元となるアルゴリズム自体に変更がなければ
変わらないと思います。


計算量だと

重複を許した総当たり>重複無しの順列総当たり>たいちうさんの方法になりますね。



3×3の魔方陣の和は15で、入る数字は1〜9というルールで、
例えばaとbに1と2が入った時、この時点で魔方陣不成立ですよね。
sumにaとbとcの和、dに何か値を入れた時、eの値が決定します。
sumの値が正しくないと、eの値が負の数や10以上になったりします。


この時、総当たりだと、
「この時点で不成立だけど、残りも一応やらないとなぁ・・・」

という感じで、不成立でも全部のパターンが当てはまるかの判定を行います。

たいちうさんの方法だと、
「あ〜、もう最初っから魔方陣不成立だ、次いこ次!」

と言って、以下のパターンの判定処理を飛ばすことが出来るのです。


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

Name: フリオ  ..プログラマー(31,248ポイント)   Date: 2010/01/09(土) 01:56   No:45818     
Title: Re:3*3の魔法陣    
 
 1~9の魔方陣の場合、

列の合計は、15になります。

5と同じ列の2つの数字の合計は10です。
合計が10になる組み合わせは、(1,9)(2,8)(3,7)(4,6)の4つなので、
5は必ず中央になります。

1と同じ列の2つの数字の合計は14です。
合計が14になる組み合わせは、(5,9)(6,8)の2つなので、
1は各辺の真中のどこかになります。

3と同じ列の2つの数字の合計は12です。
合計が12になる組み合わせは、(4,8)(5,7)の2つなので、
3は1と同列でない各辺の真中のどこかになります。

足して10になるのは、1は9、3は7なので、各辺の真中は奇数になります。

残りの2、4、6、8は4隅に入ります。

2と1、2と3、4と1、が同列になることは有りません。

一方の縦横の辺が決定すれば、もう一方の縦横も決定します。

これらの条件を適当に組み合わせて、こんな感じでどうでしょう。
 
 
#include <stdio.h>

#define Swap(a, b) {int c = a; a = b; b = c;}

int Is_Magic_Sqr(int a[])
{
    int i;
    
    if(a[4] != 5) return 0;
    for(i = 0; i < 4; ++ i){
        if(i & 1 && !(a[i] & 1) || !(i & 1) && a[i] & 1) return 0;
        if(a[i] + a[8 - i] != 10) return 0;
    }
    if(a[0] + a[1] + a[2] != 15 || a[0] + a[3] + a[6] != 15) return 0;
    return 1;
}

void Print(int a[])
{
    int i;
    
    for(i = 0; i < 9; ++ i){
        printf("%d ", a[i]);
        if(i % 3 == 2) putchar('\n');
    }
    putchar('\n');
}

void Magic_Sqr(int a[], int n, int m)
{
    int i;
    
    if(m + 1 == n){
        if(Is_Magic_Sqr(a)) Print(a);
        return;
    }
    for(i = m; i < n; ++ i){
        Swap(a[m], a[i]);
        Magic_Sqr(a, n, m + 1);
        Swap(a[m], a[i]);
    }
}

int main(void)
{
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    
    Magic_Sqr(a, 9, 0);
    return 0;
}

  編集済み


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

Name: gtdf  ..かけだし(1,321ポイント)   Date: 2010/01/09(土) 02:50   No:45821     
Title: Re:3*3の魔法陣    
>Libraさん
ありがとうございます。おかげで、たいちうさんのプログラムが理解できました。
確かに、いわれてみればそうですね。a,b,c,dの値が決まったら、eがわかり、
それがわかれば、fがわかる・・・という感じで決まりますね。

>フリオさん
回答ありがとうございます。
プログラムで分からないことがあります・・・

if(i & 1 && !(a[i] & 1) || !(i & 1) && a[i] & 1) return 0;

の、i & 1 や !(a[i] & 1) といったものは一体何を表しているのでしょうか。

また、Magic_Sqr関数が分かりません・・・
再帰が入ると途端にわからなくなってしまいます・・・
結局、Magic_Sqe関数は何をしているのでしょうか。





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

Name: フリオ  ..プログラマー(31,358ポイント)   Date: 2010/01/09(土) 07:54   No:45822     
Title: Re:3*3の魔法陣    
 
if(i & 1 && !(a[i] & 1) || !(i & 1) && a[i] & 1) return 0; 
は、 
if((i & 1) != (a[i] & 1)) return 0;

if(a[0] + a[1] + a[2] != 15 || a[0] + a[3] + a[6] != 15) return 0;
return 1;
は、
return a[0] + a[1] + a[2] == 15 && a[0] + a[3] + a[6] == 15;

に変更します。 


>i & 1 や !(a[i] & 1) といったものは一体何を表しているのでしょうか。 

 & は、各ビットの論理積、 
! は、論理否定で、!a は、a == 0 と同じです。 
演算子を調べてみてください。 


Magic_Sqr関数は、1~9の順列を生成し、Is_Magic_Sqr関数で判定、Print関数で表示してます。
 
 編集済み


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

Name: フリオ  ..プログラマー(31,773ポイント)   Date: 2010/01/09(土) 11:32   No:45824     
Title: Re:3*3の魔法陣    
 
 5は固定なので、順列からはずしました。
後、細かい部分も変更してますが、考え方は同じです。
 
#include <stdio.h>

#define Swap(a, b) {int c = a; a = b; b = c;}

int Is_Magic_Sqr(int a[])
{
    int i;
    
    for(i = 0; i < 4; ++ i){
        if((i & 1) != (a[i] & 1) || a[i] + a[7 - i] != 10) return 0;
    }
    return a[0] + a[1] + a[2] == 15 && a[0] + a[3] + a[5] == 15;
}

void Magic_Sqr(int a[], int m)
{
    int i;
    
    if(m == 7){
        if(Is_Magic_Sqr(a)){
            printf("%d %d %d\n%d 5 %d\n%d %d %d\n\n",
                a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
        }
        return;
    }
    for(i = m; i <= 7; ++ i){
        Swap(a[m], a[i]);
        Magic_Sqr(a, m + 1);
        Swap(a[m], a[i]);
    }
}

int main(void)
{
    int a[] = {1, 2, 3, 4, 6, 7, 8, 9};
    
    Magic_Sqr(a, 0);
    return 0;
}

 
 編集済み


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

Name: gtdf  ..かけだし(1,386ポイント)   Date: 2010/01/09(土) 15:54   No:45833     
Title: Re:3*3の魔法陣    
>フリオさん
すみません。やはり、
for(i = m; i <= 7; ++ i){
    Swap(a[m], a[i]);
    Magic_Sqr(a, m + 1);
    Swap(a[m], a[i]);
}

の部分が理解できません・・・

なぜ、これで、順列が生成できるのでしょうか。
再帰があると頭が混乱してしまいます。



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

Name: dic  ..熟練のプログラマー(49,110ポイント)   Date: 2010/01/09(土) 19:00   No:45837     
Title: Re:3*3の魔法陣    
横からすいません
5は必ず中央にくるというのが気になって
組んでみました

#include <stdio.h>
#include    <stdlib.h>
#include    <windows.h>

int    gi[256];
int    gj[256];
int    gk[256];
int    gp;

//    合計で15になる組み合わせを求める
void    get15( int *out, int *use )
{
    int    i,j,k;
    int    temp;
    for( i=0; i<9; i++ )
    {
        for( j=i+1; j<9; j++ )
        {
            for( k=j+1; k<9; k++ )
            {
                temp = use[i] + use[j] + use[k];
                if( temp == 15 ){
                    printf( "%d %d %d\n", use[i], use[j], use[k] );
                    gi[gp] = i;
                    gj[gp] = j;
                    gk[gp] = k;
                    gp++;
                }
            }
        }
    }
}

int main(void)
{
    int    magic[9];
    int    number[9] = { 1,2,3,4,5,6,7,8,9 };

    memset( gi, 0, sizeof(gi) );
    memset( gj, 0, sizeof(gj) );
    memset( gk, 0, sizeof(gk) );
    gp = 0;

    get15( magic, number );

    printf( "15になる組み合わせの数:%d\n", gp );

    return 0;
}




で、実行結果が
1 5 9
1 6 8
2 4 9
2 5 8
2 6 7
3 4 8
3 5 7
4 5 6
15になる組み合わせの数:8
となり8パターンみたいですが、どこか間違ってますかね?
再帰使ってないです・・・すいません

この組み合わせで、空白を埋めていくという方法を取りたかったのでが
わからないです・・・


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

Name: 組木紙織  ..比類無きプログラマー(76,507ポイント)   Date: 2010/01/09(土) 20:56   No:45838     
Title: Re:3*3の魔法陣    
8パターンは多分間違ってないと思います。

5が必ず中央にくるというのは、(代数的に計算してもいいんですが)
その8パターンのうち5を含んだパターンはいくつありますか?
ほかの数を含んだパターンより多いはずです。

3×3の正方形の魔法陣の真ん中の数は少なくとも4つのパターンに含まれてないといけないです。
(縦、横、斜め*2パターン)
これを満たす数が5なので、真ん中にくる数は5のみになります。


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

Name: gtdf  ..かけだし(1,558ポイント)   Date: 2010/01/09(土) 21:00   No:45839     
Title: Re:3*3の魔法陣    
質問者ですが・・・

8パターンは、間違っていません。
(縦3つ、横3つ、斜め2つ)
一応、正しい魔方陣を載せておきます。

834
159
672




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

Name: sizuma [URL]  ..プログラマー(27,280ポイント)   Date: 2010/01/09(土) 21:56   No:45841     
Title: Re:3*3の魔法陣    
たいちうさんのプログラムまでしか読んでませんが、アルゴリズムとしては十分見やすいんでこれで十分だと思いますよ?

わざわざ自分が見て理解し難い再帰を使う必要はないと思います。
別に効率がよくなるわけではないし。
もちろんわかりやすくなる場面で使えるようになることは大切だと思います。
と考えると、再帰で書いたコードとそうでないコードを見比べてみるのも大事でしょうけどね。

gtgfさんのコードだと、3*3の魔方陣の解は1パターンでよいのではしょうか。
見つけたらgotoで抜け出して、あとは表示のパターンを変えて表示すればいいと。
数字は見つけたパターンの添え字です。

123
456
789
上と下の行を交換
789
456
123
一番上の行列の転置行列(つまりxとyの添え字を交換したもの)
147
258
369
同じく上と下を交換
369
258
147
残りは上下を交換したものについての転置行列と、それぞれ上と下の行を交換したものを表示させれば全パターンいけそうです。
たいちうさんのコードで残り全部の配置パターンを見つけるよりも早く終わるでしょう。
4*4じゃぁ完璧に書き換えなきゃいけなくなるけど・・・


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

Name: たいちう  ..熟練のプログラマー(44,929ポイント)   Date: 2010/01/09(土) 23:15   No:45843     
Title: Re:3*3の魔法陣    
sizuma さん

> gtgfさんのコードだと、3*3の魔方陣の解は1パターンでよいのではしょうか。 
> 見つけたらgotoで抜け出して、あとは表示のパターンを変えて表示すればいいと。 

予め正解の数が分からない場合、全ての解を見つける方が好ましいと思います。
問題の性質にもよりますが。

例えば「3*3の魔方陣の解を全て求めよ。対称解も別解とする。」という問題の場合、
「1つ見つけて8通りの表示をして終了するプログラム」でも8つの解を表示できます。
しかしそれ以上存在しないことを、何らかの方法で示す必要が生じます。


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

Name: sizuma [URL]  ..プログラマー(27,618ポイント)   Date: 2010/01/10(日) 00:17   No:45847     
Title: Re:3*3の魔法陣    
>予め正解の数が分からない場合、全ての解を見つける方が好ましいと思います
確かにそうですね。

>3*3の魔方陣の解を全て求めよ。対称解も別解とする
こう問題を提示されれば考え易いんですけどね。
僕は「魔方陣の解を求めよ。」
と、問題を出されれば、

1、すべてのパターンを求める
2、対称なパターンがないかチェックする
3、対称性のあったパターンは余分なものなので解ではない(ここでは、3×3のものなら解は一つ)

とするんですが、「魔方陣のすべてのパターンを表示する」だと

1、解を初期値として与える。
2、全パターン表示する

とすると思います。
解を求めるなんて無駄な資源を使いますし。


>それ以上存在しないことを、何らかの方法で示す必要が生じます。
これは間違いないですね。
考えてみれば明らかに8通りある、ということは必要なようです。
最初のプログラムで8つのパターンが見つかったのが正解である、というものが読み取れますね。

僕の8パターンの表示の仕方は
「3×3行列として表せる魔法陣の一つの解において、対称性があるパターンを表示する」
っていう、ちょっと外れた感じの回答だったみたいです。

ちなみに僕は対称性があるパターンを抜かしたものが魔方陣の解だと思ってるので、そういう風なニュアンスで書いているので悪しからず。


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

Name: gtdf  ..かけだし(1,695ポイント)   Date: 2010/01/10(日) 00:18   No:45848     
Title: Re:3*3の魔法陣    
sizumaさん

>わざわざ自分が見て理解し難い再帰を使う必要はないと思います。 
別に効率がよくなるわけではないし。 

はい、自分もそう思いましたが、苦手な再帰も自分の作ったプログラムを改造したものなら
まだ理解できるかもしれないし、どれぐらいすっきりできるのかを知りたかったので・・・

図々しいのですが、自分のプログラムを再帰を使った場合のプログラムを載せてほしいです。



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

Name: たいちう  ..熟練のプログラマー(45,627ポイント)   Date: 2010/01/10(日) 00:56   No:45850     
Title: Re:3*3の魔法陣    
sizuma さん

> >それ以上存在しないことを、何らかの方法で示す必要が生じます。
> これは間違いないですね。

これに同意していただけるならば、違う意見を持っているわけではないと思います。


それとプログラムの訂正。
iとの比較を忘れていました。cよりもeよりも小さいaが、
iより大きいはずはないので、影響は無かったのですが。

if (a > c || a > e || a > i || c > e) continue;


この部分はもちろん、対称パターンの除去を意図しています。
今回の3*3や4*4では手を抜いて最終段階でしていますが、
5*5の計算をする場合はこれを最初にする必要があるでしょう。

a...b
.....
.....
.....
c...d

という配置とした場合、次のような書き方なら
資源の節約という意味において、納得していただけるのではないでしょうか。

for (a = 1; a <= 25; a++)
    for (b = 1; b <= 25; b++) {
        if (a == b || a > b) continue;
        for (c = 1; c <= 25; c++) {
            if (a == c || b == c || a > c || b > c) continue;
            for (d = 1; d <= 25; d++) {
                if (a == d || b == d || c == d || a > d) continue;
                ...

                
gtdf さん

> 自分のプログラムを再帰を使った場合のプログラムを載せてほしいです。

何を載せてほしいのか分かりかねますが、
再帰を使って順列を作成した上で魔方陣を求めるプログラムならば作れます。
但し、今日はもう寝るので、日曜か月曜に。それまでに誰かが作っていなかったら。


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

Name: sizuma [URL]  ..プログラマー(28,112ポイント)   Date: 2010/01/10(日) 01:15   No:45851     
Title: Re:3*3の魔法陣    
再帰を使うなら、使うなりのアルゴリズムで書かなくてはダメです。
再帰で見やすくなるのは、基本的にはデータ構造が再帰的にアクセスするのに適してるものですので。


例えばリスト構造でデータを管理していて、見つかるまでその関数を呼び続ける、とか。
リスト構造とは
A→B→C→D・・・のようなデータ同士がつながっている構造です。


他にも、ソートでも使われるバイナリツリーなどは、再帰を使わないと非常に面倒な処理になります。


無理やり再帰を使うことは出来ますが、演習以外では無駄な処理になります。
よく例で出される階乗を求めるプログラムなんて非常に無駄なものですしね。



ですから、再帰で書く必要はないかな、と思ったわけです。


フリオさんの書かれたプログラムみたいに、再帰を使うためにそれに見合ったアルゴリズムを考える必要があります。

void Magic_Sqr(int a[], int n, int m)
{
    int i;
    if(m + 1 == n){
        if(Is_Magic_Sqr(a)) Print(a);
        return;
    }
    for(i = m; i < n; ++ i){
        Swap(a[m], a[i]);
        Magic_Sqr(a, n, m + 1);
        Swap(a[m], a[i]);
    }
}


でも、直感的に分かりやすい表現をする必要があります。
(ブラックボックス的に効率だけを求める、ってのが必要な場合もあるとは思います)
ムリに使うと明らかに不自然に感じますね。
(別にフリオさんのプログラムを見て行ってるわけではありません。・・・ここしか見てないし^^;)
こういう再帰の表現も慣れがあるので、しっかりトレース出来るような人ならば、見やすいという人もいるかもしれませんしね。


たいちうさんも書かれてますが、再帰を使うなら最初の
ループで配列を作って、同じ数字があったら違う配列をつくる
という処理を
再帰的に順列を作る
ということなら見やすく出来そうです。(作ったことないですが無駄なループは省くことが出来ると思うので) 編集済み


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

Name: gtdf  ..かけだし(2,015ポイント)   Date: 2010/01/10(日) 02:09   No:45856     
Title: Re:3*3の魔法陣    
たいちうさん
>> 自分のプログラムを再帰を使った場合のプログラムを載せてほしいです。 

>何を載せてほしいのか分かりかねますが、 
>再帰を使って順列を作成した上で魔方陣を求めるプログラムならば作れます。

すみません。質問のプログラムの下の部分で、同じような処理を繰り返しているので、
再帰を使えばすっきりとできるのかなと思ったんですが、再帰を使って書くには、やはりフリオさんの
プログラムのMagic_Sqr関数みたいなものを作らないといけないのでしょうか。

自分のプログラムは総当たりですが、この総当たりを再帰を使ってやるにはどうすればよいのかを
知りたいです。(各辺の和が15といった性質を知らないものとして)



for (i=1; i<=9; i++) {
  data[0] = i;
  for (j=1; j<=9; j++) {
   data[1] = j;
   for (k=1; k<=9; k++) {
    data[2] = k;
    for (l=1; l<=9; l++) {
     data[3] = l;
     for (m=1; m<=9; m++) {
      data[4] = m;
      for (n=1; n<=9; n++) {
       data[5] = n;
       for (o=1; o<=9; o++) {
        data[6] = o;
        for (p=1; p<=9; p++) {
         data[7] = p;
         for (q=1; q<=9; q++) {
          data[8] = q;


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

Name: non  ..比類無きプログラマー(86,592ポイント)   Date: 2010/01/10(日) 09:03   No:45859     
Title: Re:3*3の魔法陣    
総当たりの再帰
#include <stdio.h>
#define N 4   //9に変更してね
int data[N];
void disp(void)
{
    int i;
    for(i=0;i<N;i++)
        printf("%d ",data[i]);
    printf("\n");
}
void func(int n)
{
    int i;
    if(n==N){
        disp();
        return;
    }
    for(i=1;i<=N;i++){
        data[n]=i;
        func(n+1);
    }
}
int main(void)
{
    func(0);
    return 0;
}



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

Name: gtdf  ..入門者(2,512ポイント)   Date: 2010/01/10(日) 15:30   No:45874     
Title: Re:3*3の魔法陣    
nonさん

ありがとうございます。おかげで、自分のプログラムをすっきりとすることができました。
(goto文を使ったので、多少見づらくなっていますが)
以下のように改良したのですが、変なところがあれば指摘してください。
総当たりで魔方陣の解を見つけるプログラムです。

#include <stdio.h>

#define N 9   

int data[N];

void disp(void)
{
    int x;
    
    if ((data[0] + data[1] + data[2]) ==
            (data[3] + data[4] + data[5]) &&
            (data[0] + data[1] + data[2]) ==
            (data[6] + data[7] + data[8]) &&
            (data[0] + data[1] + data[2]) ==
            (data[0] + data[3] + data[6]) &&
            (data[0] + data[1] + data[2]) ==
            (data[1] + data[4] + data[7]) &&
            (data[0] + data[1] + data[2]) ==
            (data[2] + data[5] + data[8]) &&
            (data[0] + data[1] + data[2]) ==
            (data[0] + data[4] + data[8]) &&
            (data[0] + data[1] + data[2]) ==
            (data[2] + data[4] + data[6])) 
    {
            for (x=0; x<9; x++) {
                printf("%2d", data[x]);
                if (x % 3 == 2)
                    puts("");    
            }
            puts("");
    }
}
void func(int n)
{
    int c = 0;
    int i, j;
    if(n==N){
        disp();
        return;
    }
    for(i=1;i<=N;i++){
        Label:  if (c > 0) {
            c = 0;
            continue;
                }
                data[n]=i;
                for (j=0; j<n; j++) {
                 if (data[j] == data[n]) {
                c++;
                goto Label;
            }    
                }
                func(n+1);
    }
}
int main(void)
{
    func(0);
    return 0;
}


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

Name: non  ..比類無きプログラマー(86,518ポイント)   Date: 2010/01/10(日) 17:25   No:45886     
Title: Re:3*3の魔法陣    
悪くはないけど、gotoを使うのはわかりにくいですね。関数にしましょう。
int check(int n)
{
    int j;
    for (j=0; j<n; j++) 
        if (data[j] == data[n]) 
            return 1;
    return 0;
}
                
void func(int n)
{
    int i, j;
    if(n==N){
        disp();
        return;
    }
    for(i=1;i<=N;i++){
        data[n]=i;
        if(!check(n))
            func(n+1);
    }
}



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

Name: gtdf  ..入門者(2,572ポイント)   Date: 2010/01/10(日) 19:12   No:45899     
Title: Re:3*3の魔法陣    
なるほど。確かに、関数を使えばわかりやすいですね。
やはり、goto文は使うものではありませんね。

ありがとうございます。



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

Name: たいちう  ..熟練のプログラマー(45,504ポイント)   Date: 2010/01/11(月) 10:49   No:45955     
Title: Re:3*3の魔法陣    
> やはり、goto文は使うものではありませんね。

使い方によります。
濫用するとプログラムが読みにくくなるのは、goto文に限った話ではないですが、
goto文の場合は上手に使うことが難しいので嫌われています。
周囲がgoto文を毛嫌いしている中では、うまい使い方を目にする機会が少ないことと、
下手に使って叩かれることを恐れ萎縮したりするので、上手に使うことが更に難しくなるわけです。

No:45874は、gotoを使うべき状況ではないですね。


それと細かいことですが、次のように書いた方が可読性が増します。
ミスが減ることも期待できます。

int sum = data[0] + data[1] + data[2];
if (data[3] + data[4] + data[5] == sum &&
    data[6] + data[7] + data[8] == sum &&
    data[0] + data[3] + data[6] == sum &&
    data[1] + data[4] + data[7] == sum &&
    data[2] + data[5] + data[8] == sum &&
    data[0] + data[4] + data[8] == sum &&
    data[2] + data[4] + data[6] == sum) 
{


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

Name: gtdf  ..入門者(2,720ポイント)   Date: 2010/01/11(月) 16:46   No:45982     
Title: Re:3*3の魔法陣    
実は、初めてgoto文を使ったんです。
Wikipediaによると、プログラムの構造を熟知したプログラマが状況に応じて使い分けるものとされている。
だそうですね。

>それと細かいことですが、次のように書いた方が可読性が増します。 
ミスが減ることも期待できます。

確かにそうですね。もっと見やすいプログラムがかけるよう練習します。


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

Name: たいちう  ..熟練のプログラマー(46,098ポイント)   Date: 2010/01/11(月) 19:58   No:46009     
Title: Re:3*3の魔法陣    
いらないかもしれないけど再帰で順列の魔方陣を作りました。
フリオさんのものと似ていますが、もっと素朴で判りやすいと思います。
順列の生成方法を理解するためには、(A)のコメントアウトを復活させて、
(B)をコメントアウトしてデバッガで追ってみると良いと思います。
その際、Nは3か4程度が良いでしょう。

#include <stdio.h>

#define N 9

int num[N];

void check() {
    static int c;
    int i, j, sum = 0, temp;

    // 横
    for (j = 0; j < 3; j++) {
        temp = 0;
        for (i = 0; i < 3; i++)
            temp += num[i + j * 3];
        if (sum == 0)
            sum = temp;
        else if (temp != sum) return;
    }

    // 縦
    for (i = 0; i < 3; i++) {
        temp = 0;
        for (j = 0; j < 3; j++)
            temp += num[i + j * 3];
        if (temp != sum) return;
    }

    // 斜め
    if (num[0] + num[4] + num[8] != sum) return;
    if (num[2] + num[4] + num[6] != sum) return;

    // 対称解の除去
    if (num[0] > num[2] || num[0] > num[6] || num[0] > num[8] || num[2] > num[6]) return;

    // 解の表示
    printf("%d:\n", ++c);
    for (i = 0; i < N; i++)
        printf("%s%d%c", i % 3 == 0 ? "    " : "", num[i], i % 3 == 2 ? '\n' : ' ');
    printf("\n");
}

void swap(int i, int j) {
    int temp;
    if (i == j) return;

    temp = num[i];
    num[i] = num[j];
    num[j] = temp;
}

void permutation(int n) {
    int i;
    if (n == N) {
/* (A)
        for (i = 0; i < N; i++)
            printf("%d ", num[i]);
        printf("\n");
*/

        check(); // (B)

        return;
    }
    for (i = n; i < N; i++) {
        swap(i, n);
        permutation(n + 1);
        swap(i, n);
    }
}

int main() {
    int i;
    for (i = 0; i < N; i++)
        num[i] = i + 1;

    permutation(0);

    // quit
    printf("End.\n");
    getchar();
    return 0;
}


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

Name: gtdf  ..入門者(2,842ポイント)   Date: 2010/01/11(月) 21:49   No:46027     
Title: Re:3*3の魔法陣    
たいちうさん

ありがとうございます。再帰の部分も、紙に書き出していったらなんとか理解できました。
確かに順列が生成されていました。

一つ質問があるのですが、対称解の除去が

if (num[0] > num[2] || num[0] > num[6] || num[0] > num[8] || num[2] > num[6])
 return;

と表せるのはなぜでしょうか。


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

Name: たいちう  ..熟練のプログラマー(45,999ポイント)   Date: 2010/01/11(月) 23:19   No:46034     
Title: Re:3*3の魔法陣    
まず対称解除去の部分をコメントアウトして、全ての解を表示してください。
次に条件を次のように変えて実行して下さい。

if (num[0] > num[2] || num[0] > num[6] || num[0] > num[8])
 return;

解はそれぞれ8つと2つ表示されるはずです。
後者は左上を4隅の最小にすることで、回転対称を除去しています。

もう一つの条件については、もう一度考えてみてください。


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

Name: gtdf  ..入門者(2,868ポイント)   Date: 2010/01/12(火) 01:07   No:46038     
Title: Re:3*3の魔法陣    
わかりました。

最後の条件は、転置行列の除去ですよね?


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

Name: たいちう  ..熟練のプログラマー(46,006ポイント)   Date: 2010/01/12(火) 09:15   No:46044     
Title: Re:3*3の魔法陣    
正解です。

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

Name: gtdf  ..入門者(2,932ポイント)   Date: 2010/01/12(火) 21:30   No:46065 解決!     
Title: Re:3*3の魔法陣    
みなさん、こんなにも回答していただきありがとうございました。
色々なやり方があることを知れて、非常に勉強になりました。

また、質問したときもよろしくお願いします。




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



Name: hennmi  ..ぴよぴよ(470ポイント)   Date: 2010/01/10(日) 17:09   No:45884       
Title: ポインタの参照渡し    
質問です。

ポインタの参照渡しを行いたいのですが、中身がどうなっているのかわからず
混乱中です。どうかご指導宜しくお願いします。。。

以下にソースコードを記載します。

=======================================
int main(void) {
    int len;
    char str;

    len = get(&str);
    out(&str, len);
}

int get(char *str) {
    int i;

  str = (char *)malloc(3 * sizeof(char));
    for (i = 0; i < 2; i++) {
        *(str + i) = 'a';
    }
    return 2;
}

void out(char *str, int len) {
    int i;

    for (i = 0; i < len; i++) {
        printf("%c\n", *(str + i));
    }
}

=======================================


get関数で、参照渡しした変数に値を代入し
main関数に戻す という処理を行いたいのですが。。。

get関数で行っていること(私の頭の中での考え)が
1. malloc で参照渡しされたアドレスの領域を 3つ確保する。
-----    -------------
| ? | -> | ? | ? | ? |
-----    -------------

2. 確保した領域の "1", "2" に "a"を入れる。
-------------    -------------
| ? | ? | ? | -> | a | a | ? |
-------------    -------------

質問は3つあります。
1. 上記の考え方のどこが間違えているのか。
2. main関数からget関数に "str" を渡すとき
   &str としているのですが、これは "str" の先頭アドレスを渡しているのか。

3. get関数内で "*str", "str" はそれぞれ、何を意味しているのか(アドレス, 値)
   ("*" が付くものはアドレス だと思っているのですが、 "str" これもアドレスじゃないのかと
    思ってしまいます。)

2日かけても中身が良くみえてきません。こんなに難しいとは。。。
どうしても、どうしても理解したいので、どなたかご教授お願いします!



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


Name: たかぎ [URL]  ..ハッカー(148,833ポイント)   Date: 2010/01/10(日) 17:19   No:45885     
Title: Re:ポインタの参照渡し    
言語不明ですが、C++であれば...

int get(char*& str)

とすればOKです。


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

Name: Libra  ..上級者(18,994ポイント)   Date: 2010/01/10(日) 17:35   No:45888     
Title: Re:ポインタの参照渡し    
main関数の中のchar str;をchar *str;に変更して動かしてみました。

#include <stdio.h>
#include <stdlib.h>

//プロトタイプ宣言====================================
int get( char **str ) ;
void out(char *str, int len) ;


//main関数============================================
int main(void)
{
    int len;
    char *str;    //char型のポインタに変更

    len = get( &str ) ;

    out( str , len ) ;
    
    //free( str ) ;    //動的確保したメモリを解放
    
    return 0 ;
}



int get( char **str )//引数をchar型のポインタのポインタに変更
{
    int i;
    
    *str = (char *)malloc( 3 * sizeof(char) ) ;
    
    for( i = 0 ; i < 2 ; i++ )
    {
        *(*str + i) = 'a';
    }
    //*(*str + i) = NULL ;    //終端文字
    return 2;
}



void out(char *str, int len)
{
    int i;
    for(i = 0; i < len; i++)
    {
        printf("%c\n", *(str + i));
    }
}


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

Name: hennmi1  ..ぴよぴよ(72ポイント)   Date: 2010/01/10(日) 17:57   No:45892     
Title: Re:ポインタの参照渡し    
>たかぎさん
言語は cです、すみません。。

>Libraさん
ポインタのポインタを使用しなくてもできる ときいて
今回の問題が起きたのですが
もしやポインタのポインタを使用しなきゃ参照渡しはできない。。。?


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

Name: Libra  ..上級者(19,416ポイント)   Date: 2010/01/10(日) 18:03   No:45894     
Title: Re:ポインタの参照渡し    
プログラムの復習中なので以下書いた内容等間違ってたらどなたか訂正お願いします。m(_ _)m

char型の変数を参照渡しした時、
参照渡しした関数で変更できるのは、char型の変数です。


今回、main関数で宣言した変数に、
mallocで確保したアドレスを代入するので、
変更したいものはchar型のアドレスです。
よって、main関数で宣言するのは、char型のポインタ変数、
そして、関数は参照渡しを行うので、引数はchar型のポインタのポインタとなります。




以下、char型の変数を参照渡しで渡し、関数内でアドレス変更しても、
main関数の変数のアドレスは変化しないよーというサンプル。(作ってみました。)
hennmi1さんが最初に書いたプログラムの流れと一応同じ。(mallocは使ってませんが、アドレス変更の流れ等)

#include <stdio.h>


int get(char *str) {

    char *test = "aa";                //適当なアドレス
    
    printf("関数の時点\t%p\n",str);    //アドレス表示

    str = test ;                    //アドレス変更
    
    printf("変更後\t\t%p\n",str) ;    //アドレス表示
    
    return 0 ;
}

int main(void)
{
    int len;
    char str = 'A' ;
    
    printf("最初\t\t%p\n",&str);        //現在のアドレス表示
    
    len = get( &str ) ;
    
    printf("最後\t\t%p\n",&str);//変更されないよー
    return 0;
}



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

Name: hennmi1  ..ぴよぴよ(554ポイント)   Date: 2010/01/10(日) 18:19   No:45896     
Title: Re:ポインタの参照渡し    
>Libra さん
回答ありがとうございます。

>> char型の変数を参照渡しした時、
>> 参照渡しした関数で変更できるのは、char型の変数です。
ということは、参照渡しされた関数での
"get(char *str)" の "*str" はアドレスではなく値ということですか?

ポインタのポインタではなくても、参照渡し?ができているソースを以下に記載します。
=============================================================
int main(void) {
    int len;
    char str;

    len = get(&str);
    out(&str, len);
}

int get(char *str) {
    int i;
    for (i = 0; i < 2; i++) {
        *(str + i) = 'a';
    }
    return 2;
}

void out(char *str, int len) {
    int i;

    for (i = 0; i < len; i++) {
        printf("%c\n", *(str + i));
    }
}
=============================================================


これで、ちゃんと表示はされるのですが
Run-Time Check Failure #2 - Stack around the variable 'str' was corrupted
というエラーがでます。

そこで、malloc を追加し(最初の投稿ソースコード) 動かしてみたところ
表示が正しくないという問題が。。。

ポインタのポインタを使用するべきなんでしょうか。。


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

Name: box  ..ハッカー(148,520ポイント)   Date: 2010/01/10(日) 18:23   No:45897     
Title: Re:ポインタの参照渡し    
>     char str;

1バイトしか確保していない領域に対して、

>     for (i = 0; i < 2; i++) {
>         *(str + i) = 'a';
>     }

こんなことをしてはいけません。



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

Name: Libra  ..上級者(19,576ポイント)   Date: 2010/01/10(日) 18:37   No:45898     
Title: Re:ポインタの参照渡し    
>>これで、ちゃんと表示はされるのですが

hennmi1さんの↑のコードだと、(mallocで領域を確保していないのもありますが)

*(str + i) = 'a'; この部分で確保した領域外を参照している事になります。
結果が正しく表示されているように見えるのは、たまたま値が残っていただけです。


添付したソースを実行して、mallocで確保した領域が反映されていない事を確認してください。
※添付したソースはNo:45894のソースのアドレス変更部をmallocで確保したアドレスに変更したものです 編集済み


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

Name: hennmi  ..ぴよぴよ(596ポイント)   Date: 2010/01/10(日) 22:44   No:45921     
Title: Re:ポインタの参照渡し    
>Libraさん
回答ありがとうございます。
確認させていただきました。

その後何時間かソースコードを色々いじってみたのですが
自分の思った通りにいきません。。。

「main関数で宣言した変数を関数に参照渡しし、その関数内で文字列を設定した後
  main関数で設定した文字列が見れる」という関数が作成したいのです。
(文字ではなく文字列です)

贅沢な注文なのですが
お手本でいいので、そのような関数を一つ見せていただけないでしょうか。。。
どうか。。お願いします。


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

Name: box  ..ハッカー(149,067ポイント)   Date: 2010/01/10(日) 23:28   No:45924     
Title: Re:ポインタの参照渡し    
「main関数で宣言した変数を関数に参照渡しし、その関数内で文字列を設定した後 
main関数で設定した文字列が見れる」という関数が作成したい

という題意を満たすためにポインタの参照渡しっていうのが必要なのかどうか
よくわかりません。
こんなのでいいんじゃないでしょうか。


#include <stdio.h>

void f(char *s, int sz)
{
    int i;

    for (i = 0; i < sz - 1; ++i) {
        s[i] = 'a' + i;
    }
    s[sz-1] = '\0';
}

int main(void)
{
    char str[10];

    f(str, 10);
    printf("%s\n", str);
    return 0;
}


【実行結果】
abcdefghi
 編集済み


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

Name: hennmi1  ..ぴよぴよ(873ポイント)   Date: 2010/01/10(日) 23:44   No:45925     
Title: Re:ポインタの参照渡し    
>boxさん
回答ありがとうございます。
が、ごめんなさい。提示した説明が悪かったです。

たとえば、こんな機能がほしいとします。
「ユーザーが文字列を入力し、"end" という文字列がでるまで入力を続ける。
  "end" という文字列が入力されたら、今まで入力された文字列を全て表示する」

そこに、先ほどの提示した説明の
「main関数で宣言した変数を関数に参照渡しし、その関数内で文字列を設定した後
  main関数で設定した文字列が見れる」

を加える感じです。。。
(ちなみに、"end"が 〜 というのは悪魔で例です)

たびたびすみません。
自分も色々探してみているのですが、もう頭がパンクしてなにがなんやら。。。
お手数ですがどうか。。。


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

Name: hennmi1  ..ぴよぴよ(992ポイント)   Date: 2010/01/10(日) 23:47   No:45926     
Title: Re:ポインタの参照渡し    
連続投稿すみません。

>>s[i] = 'a' + i;

上記では文字を設定していますが、文字列を設定したいのです。
s[i] = "aaaa" のような (ていうかこれできるのか・・・?)

ごめんなさい
提示した説明が悪かったので、指摘をしているわけではないです。。。


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

Name: qwerty  ..かけだし(1,219ポイント)   Date: 2010/01/11(月) 00:45   No:45929     
Title: Re:ポインタの参照渡し    
言語はCって書いてあるけど、Cに参照なんていう概念はあるんですかね?

それとboxさんもおっしゃっていますが、hennmi1さんが満足するような結果を得るのに、
わざわざ参照を利用する必要はないと思います。

文字列を複数扱いたいのなら、2次元配列か、構造体を用意するかでしょうね。


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

Name: box  ..ハッカー(149,395ポイント)   Date: 2010/01/11(月) 07:37   No:45944     
Title: Re:ポインタの参照渡し    
参考になるかどうかは、全くわかりません。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int f(char ***p)
{
    char s[1000];
    int n;

    *p = (char **) malloc(sizeof(char *));
    if (*p == NULL) {
        fprintf(stderr, "memory allocation error 1");
        exit(1);
    }

    for (n = 0; ; ++n) {
        printf("文字列を入力(endで終了)> ");
        fgets(s, sizeof(s), stdin);
        if (s[strlen(s)-1] == '\n') {
            s[strlen(s)-1] = '\0';
        }
        if (strcmp(s, "end") == 0) {
            break;
        }
        (*p)[n] = (char *) malloc(sizeof(char) * (strlen(s) + 1));
        if ((*p)[n] == NULL) {
            fprintf(stderr, "memory allocation error 2");
            exit(1);
        }
        strcpy((*p)[n], s);
    }
    return n;
}

int main(void)
{
    char **p;
    int n, i;

    n = f(&p);
    for (i = 0; i < n; ++i) {
        printf("%s\n", p[i]);
        free(p[i]);
    }
    free(p);
    return 0;
}
 編集済み


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

Name: Ma  ..プログラマー(28,261ポイント)   Date: 2010/01/12(火) 03:34   No:46041     
Title: Re:ポインタの参照渡し    
>boxさん

>ポインタのポインタではなくても、参照渡し?ができている
ということから、ポインタのポインタを使用しないで、またはポインタのポインタのポインタも使用しない。
というのが前提になっているので、求められる回答になっていないかもしれません。

なら、おまえがやれよ と言われちゃいますがw

さきほど自分でできるかぎりやってみようとしたんですが、一重?のポインタだけではどうもエラーがでてきて
どうも私の力ではできませんでしたorz

というか、ポインタのポインタじゃないとできない、というのが答えなのでは・・・?

#include <stdio.h>
#include <stdlib.h>

void set(char* heap){
    heap = (char *)malloc(sizeof(char) * 10);
    if (heap == NULL) exit(0);


    for (int i = 0;i < 10;i++) {
        heap[i] = 'a' + i;
    }
}

int main()
{
    char *heap = NULL;

    set(heap);

    printf("%c\n",heap[5]);

    free(heap);

    return 0;
}

当然ながら?、こんな方法ではアクセス違反になりました。
 編集済み


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

Name: フリオ  ..プログラマー(31,944ポイント)   Date: 2010/01/12(火) 08:00   No:46042     
Title: Re:ポインタの参照渡し    
 
>ポインタのポインタではなくても、参照渡し?ができているソースを以下に記載します。

 ひょっとして、質問者は、

 Cで一般にいう"参照渡し"とは、ポインタを渡すことで、
ポインタのポインタを渡すのは"参照渡し"ではない。

もしくは、

とにかく、ポインタさえ渡せば"参照渡し"である。

と思っているのでは?
 
 編集済み


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

Name: たいちう  ..熟練のプログラマー(46,395ポイント)   Date: 2010/01/12(火) 10:28   No:46047     
Title: Re:ポインタの参照渡し    
引数についての例え話をします。
例え話なので当然現実とは違いますが、
今回の現象の理解には十分ではないかと。


AさんがBさんに仕事を頼むときにFAXでデータを渡します。
Bさんは受け取ったFAX用紙のデータを書き換えても良いですが、
Aさんの持つオリジナルのデータは影響を受けません。

これは関数が引数の値を変更しても呼び出し元では変わってないことを表しています。
C++の「参照」やVBのByValの付いた引数の場合は、
FAXではなく物質転送装置として動作しますので、
Bさんがデータを書き換えると、Aさんのオリジナルも変更されます。

C言語には物質転送装置に該当する機能がありません。
FAXなので必ずコピーがBさんに届きます。
オリジナルのデータを書き換えたい場合、
データの保管してある棚の番号をFAXします。
Bさんは受け取ったFAXに書かれた棚から書類を取り出し、
データを書き換えます。Bさんから完了報告を受けたAさんは、
その棚から書き換えられたデータを手にすることができます。

これがC言語の参照渡しですので、実際はあくまでもコピーを渡しているだけです。
書き換えたいデータがchar型ならば、char型へのポインタをコピーして渡します。
書き換えたいデータがchar型へのポインタならば、char型へのポインタのポインタを
コピーして渡します。

例えに戻ると、char型のデータのある棚の番号がどこかの棚に保管されていて、
それをFAXすることになります。


「ポインタで渡すのが参照渡し」や「ポインタを渡したら書き換えられる」等と
思っていたならば、理解を深めて下さい。


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



Name: ti  ..入門者(3,240ポイント)   Date: 2010/01/10(日) 21:52   No:45914       
Title: 複数のウィンドウ表示の方法    
どうもいつもお世話になります
ゲーム作りには直接関係ないのですが
ゲームの画面とは別に自分で任意の文字を表示する方法はありませんか?

開発環境はVS2005でOSはXPです

1.ゲーム画面とは別にDOS窓のような感じで座標ややっていることなどを随時表示する方法が知りたいです

2.VS2005などでデバック中の情報などが出力ウィンドウに表示されますがプログラム中に任意の文字列などを出力ウィンドウもしくはそれに似たところに表示されることはできますか?

よろしくお願いします


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


Name: softya  ..比類無きプログラマー(86,150ポイント)   Date: 2010/01/10(日) 22:14   No:45918     
Title: Re:複数のウィンドウ表示の方法    
1.ゲーム画面とは別にDOS窓のような感じで座標ややっていることなどを随時表示する方法が知りたいです
ゲーム画面と別にDOS窓を作ることが出来ます。
この場合は普通にprintfが使えます。

下記の方法を試してみて下さい。
http://homepage3.nifty.com/ysflight/mfcconsole/mfcconsolej.html
MFCと書いてありますがDXライブラリでも大丈夫のはずです。


2.VS2005などでデバック中の情報などが出力ウィンドウに表示されますがプログラム中に任意の文字列などを出力ウィンドウもしくはそれに似たところに表示されることはできますか? 

OutputDebugString()関数で出力ウィンドウに文字列を送れます。
文字列は、UNICODEです。
OutputDebugStringA()でシフトJISの文字列も使えます。


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

Name: ti  ..入門者(3,315ポイント)   Date: 2010/01/11(月) 20:35   No:46015 解決!     
Title: Re:複数のウィンドウ表示の方法    
softyaさんありがとうございました
おかげでコンソールウィンドウの作成と出力ウィンドウへの出力両方できました
なにかありましたらまたよろしくお願いします


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

Name: たかぎ [URL]  ..ハッカー(149,282ポイント)   Date: 2010/01/12(火) 00:27   No:46035     
Title: Re:複数のウィンドウ表示の方法    
別の方法としては、

AllocConsole();
freopen("CON", "w", stdout);

のようにしてもよいと思います。


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



Name: take  ..ぴよぴよ(379ポイント)   Date: 2010/01/11(月) 22:25   No:46029       
Title: 自機にショットを撃たせられません。    
【自機にショットを撃たせてみよう】についてです。

cshot.cppでエラーが発生してしまいます;


error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
・・・と表示されます。

これは何が原因なのでしょうか?



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


Name: ひよこ  ..比類無きプログラマー(77,617ポイント)   Date: 2010/01/11(月) 22:42   No:46030     
Title: Re:自機にショットを撃たせられません。    
おそらくtypedef struct{・・・}ch_t;のなかにint shot_cnt;が入ってないからだと思います。 

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

Name: あ〜る  ..上級者(16,197ポイント)   Date: 2010/01/11(月) 22:44   No:46032     
Title: Re:自機にショットを撃たせられません。    
恐らくch構造体の中にshot_cnt変数がないんだと思います、追加してみてください

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



Name: 初心者  ..熟練のプログラマー(46,216ポイント)   Date: 2010/01/11(月) 17:19   No:45987       
Title: ギザギザ    
DirectXを使って文字画像を表示させたのですが、
斜めにすると文字画像がギザギザになりました。
表示には、頂点を計算して
DrawPrimitiveUp(D3DPT_TRIANGLESTRIP, ... );
を使っています。 そこで、
SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR );
を指定したらぼけるようになりました。(画像左) DXライブラリの
SetDrawMode(DX_DRAWMODE_BILINEAR);

のように表示(画像右)させたいのですが、
どうしたらいいのでしょうか?

足りない情報があったら、言ってください。

環境
C++,DirectX


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


Name: DVDM [URL]  ..熟練のプログラマー(48,878ポイント)   Date: 2010/01/11(月) 17:46   No:45988     
Title: Re:ギザギザ    
>>初心者さん
ちょっと前に同じ内容だと思われるトピックがありましたのでURLを貼っておきます。
ご参考になれば幸いです。
http://www.play21.jp/board/formz.cgi?action=res&resno=45390&page=&lognum=139&id=dixq&rln=45425


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

Name: 初心者  ..熟練のプログラマー(46,282ポイント)   Date: 2010/01/11(月) 19:44   No:46007     
Title: Re:ギザギザ    
>>DVDMさん
参考にさせていただきました。
ありがとうございます。

ぼやけは多少直りましたが、暗くなってしまうのはどうすればいいのでしょうか??


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

Name: DVDM [URL]  ..熟練のプログラマー(49,423ポイント)   Date: 2010/01/11(月) 20:46   No:46018     
Title: Re:ギザギザ    
>>初心者さん
>ぼやけは多少直りましたが、暗くなってしまうのはどうすればいいのでしょうか??
 暗くなってしまうことについては、今挙げて頂いている情報からでは何とも言えません。
 プロジェクト一式上げれるのであればそれが一番早いかと思います。
 ただ、私自信の力量も大したことないので、
 上げたところで私が解決できるかどうかは解りませんので予めご了承ください。


>斜めにすると文字画像がギザギザになりました。
 これについてちょっと気になったのですが、今現在、斜めにしないとどうなりますか?
 「多少直りました」と書いてあるので完全には治っていないと思いますけども・・・。


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

Name: 初心者  ..熟練のプログラマー(46,360ポイント)   Date: 2010/01/11(月) 21:11   No:46023     
Title: Re:ギザギザ    
ぼやけについては、もう少しがんばってみます。


>>斜めにすると文字画像がギザギザになりました。
>>これについてちょっと気になったのですが、今現在、斜めにしないとどうなりますか?

斜めに表示しても、まっすぐ表示してもあまり変わりはなく、
まだ少しぼやけています。


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

Name: 初心者  ..熟練のプログラマー(46,387ポイント)   Date: 2010/01/11(月) 21:12   No:46024     
Title: Re:ギザギザ    
「暗くなってしまう」については、もう少しがんばってみます。

訂正します


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



Name: Dixq (管理人) [URL]  ..ウィザード(1,129,052ポイント)   Date: 2010/01/01(金) 00:00   No:45259       
Title: ■新年の挨拶トピ■明けましておめでとうございます(^^■    
2010年、明けましておめでとうございます!



HPを開設して早いものでもう4年。
色々ありましたが、皆様のお力添えあって、ここまでこれました^^

これからも気軽に話せるアットホームな掲示板、そして皆様に見て頂けるHPを目指して頑張りますので、
何卒よろしくお願いします☆

※このトピをご覧くださった方※
初めてお越し下さった方も、常連の方も、気軽にコメントお残し下さいませ〜♪


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


Name: situmon  ..熟練のプログラマー(47,681ポイント)   Date: 2010/01/01(金) 00:08   No:45260     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます。
これからもよろしくお願いします!!
よいゲームを作るぞ♪


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

Name: C学習者  ..ぴよぴよ(21ポイント)   Date: 2010/01/01(金) 00:10   No:45261     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
管理人さん狙いすぎですw
この掲示板に書きこんだ回数は少ないですが、今年もよろしくお願いします。


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

Name: ようすけ  ..中級者(9,501ポイント)   Date: 2010/01/01(金) 00:10   No:45262     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    

管理人さん、あけおめ、ことよろです(*^_^*)(←馴れ馴れしい)

去年はいろいろとお世話になりました。
(とは言っても、ゲームを公開する時だけでしたが・・(汗)

今年もシューティングゲームが出来たらぜひこちらのサイトを利用させてもらいたいので、
その時はよろしくお願いします。

お仕事も大変だとは思いますが、体調を壊さない程度にゲーム作りもがんばってください☆







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

Name: クロウ  ..中級者(12,966ポイント)   Date: 2010/01/01(金) 00:13   No:45263     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
ご無沙汰しております。

あけましておめでとうございます。

これからもよろしくお願いします。

よ〜し、そろそろゲームを挙げ挙げするお(^○^)/


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

Name: situmon  ..熟練のプログラマー(47,751ポイント)   Date: 2010/01/01(金) 00:14   No:45264     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
管理人さんに助けられたり掲示板の方々に助けられてどんどんゲーム作りが楽しくなりました。
みなさん今年もどうぞよろしくおねがいします♪
しかし新年同時に記事を・・・
すごいですね。00:00ってみたときびっくりしました!!


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

Name: wing  ..入門者(3,385ポイント)   Date: 2010/01/01(金) 00:19   No:45265     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます。
ことしもよろしくお願いします。


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

Name: あ〜る  ..上級者(15,572ポイント)   Date: 2010/01/01(金) 00:29   No:45266     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます!!!!11!!
お正月と言えばお年玉!
これで環境も揃うってぇもんです!
作りますよぉ!来年はゲーム作りまくりますよぉ!!(テンション高)

あけましておめでとうございますぅ!!!


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

Name: yu  ..熟練のプログラマー(41,598ポイント)   Date: 2010/01/01(金) 00:31   No:45267     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けましておめでとうございます。

去年はこのサイトと出会い、プログラミングを本格的に開始した年でした。
あの時の出会いはとても大きいものだったなあと思います。
管理者様、掲示板の皆様には大変お世話になりました。
そして、今年もどうぞ宜しくお願いします!

今年は、自分が分かる範囲ならできるだけ多く回答したいなあ


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

Name: たかぎ [URL]  ..ハッカー(146,488ポイント)   Date: 2010/01/01(金) 00:53   No:45268     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます。
今、初詣から帰ってきたばかりで、まだ顔面が寒さでひきつっています。
今年もどうぞお願いします。


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

Name: kazuoni [URL]  ..ハッカー(122,795ポイント)   Date: 2010/01/01(金) 01:01   No:45269     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます。

去年は一年丸々この掲示板のお世話になりました。
本格的にプログラミングを趣味としてやり始めて一年ですか。
あっという間です。
プログラミング能力ははっきりいってまったく成長していない気がしますが。。

相変わらず、自分は質問が多いかと思いますが・・・
今年もよろしくお願いします。


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

Name: pooka [URL]  ..上級者(20,930ポイント)   Date: 2010/01/01(金) 01:05   No:45270     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けましておめでとうございます。
1年ってあっという間ですね〜
皆様、今年もよろしくお願いします><



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

Name: Justy  ..伝説なるハッカー(487,621ポイント)   Date: 2010/01/01(金) 01:13   No:45271     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
 管理人様、皆様、あけましておめでとうございます。

 去年は仕事的に C/C++からちょっと遠ざかっていたこともあって、若干忘れ気味(!)だったりするのですが
今年はそのあたりの補完をしつつ、もう1つ2つ使える言語を増やしてみようかな、と思っております。

 そんなわけで今年もよろしくお願いします。


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

Name: チルチル  ..比類無きプログラマー(87,385ポイント)   Date: 2010/01/01(金) 01:39   No:45274     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
謹賀新年です〜
みなさん今年もプログラミング頑張りましょうね♪


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

Name: バグ  ..ハッカー(182,774ポイント)   Date: 2010/01/01(金) 01:48   No:45275     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けましておめでとうございます。

仕事ではC#ばかりで、すっかりC++を忘れつつありますが、今年は更に新しい事をやってみようかな?

F#とかちょっと興味あったりしてます(笑)


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

Name: たかぎ [URL]  ..ハッカー(146,521ポイント)   Date: 2010/01/01(金) 01:53   No:45276     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
C++ネタでいえば、今年はみなさんC++0xを習得しましょう。
VC++2010やらGCC4.5やらで、C++0xが部分的でも使えるようになりますから。


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

Name: shilfia  ..かけだし(1,968ポイント)   Date: 2010/01/01(金) 02:08   No:45278     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けましておめでとうございます。
今年は回答者側に回れたらいいなぁという夢を見つつ(笑)
新しい一年を健康に過ごしたいものです。


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

Name: yrao  ..中級者(12,671ポイント)   Date: 2010/01/01(金) 02:30   No:45281     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけまして、おめでとうございます!
 
昨年は大変お世話になりました。

今年も、健康に気を付けつつ、制作中のゲームを完成に近づけていきたいと思っています。

質問での書き込みがほとんどになると思いますが、
一年間よろしくお願いしますm(__)m
 


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

Name: 御津凪 [URL]  ..ハッカー(134,931ポイント)   Date: 2010/01/01(金) 05:07   No:45282     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
(実家近くのネカフェから)明けましておめでとうございます。

プログラマーは何時でも何かしら勉強する部分が出てくるので
今年も怠らないようにがんばっていきます(いきましょう)。

ちなみに、 VisualStudio 2010 の発売が遅れるというニュースを聞き、
待てずに VisualStudio 2008 を購入してしまいました。

まあそれはさておき、今年もよろしくお願いします。

私の目標は形あるものを完成するというところですかね。


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

Name: YuO  ..熟練のプログラマー(42,310ポイント)   Date: 2010/01/01(金) 05:34   No:45283     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます。
今年もよろしくお願いいたします。

コミケ3日目から帰ってきました。
1日ずれているような感があるのは,年越しを某コミュニティの方々と過ごしたためです。
# ひとり渋谷で東横始発待ち……

今年はXNA関連のフォーラム周りでも動きがあるみたいですし,
XNA系もちゃんと追いたいなぁ,と思っています。

 
> C++ネタでいえば、今年はみなさんC++0xを習得しましょう。 

最近.NETのマネージコードばっかりで……。
昔C++0xのセッションを受けたりしましたが,結局どこまで入っているのか,全然掴めていないです。
# Conceptが削除されたんでしたっけ……。 
まずはDeveloper Summit 2010の高橋さんのセッションで確認しようかと思っています。


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

Name: tkmakwins15  ..比類無きプログラマー(99,090ポイント)   Date: 2010/01/01(金) 10:35   No:45285     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます。

>たかぎさん
>C++ネタでいえば、今年はみなさんC++0xを習得しましょう。
>GCC4.5やらで、C++0xが部分的でも使えるようになりますから。

そういえば今年制定されれば名称はC++0AとかC++10とかいろいろといわれてますね。
ちょっと前にmingwにgcc4.4のバイナリを入れてみたのですが、ソースファイルの文字コードがうまくうまくいかなかったのですが、4.5では改善されているのでしょうか。


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

Name: たかぎ [URL]  ..ハッカー(146,639ポイント)   Date: 2010/01/01(金) 10:48   No:45286     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
> ちょっと前にmingwにgcc4.4のバイナリを入れてみたのですが、ソースファイルの文字コードがうまくうまくいかなかったのですが、4.5で> は改善されているのでしょうか。 

4.5はまだ正式版ではないので、現状では4.4.xですね。
最新ではありませんが、↓を使ってみてください。Boost C++ Librarisも入っているので結構便利です。
http://files.7d9.org/mingw32-gcc-4_4_1-dw2-20090922-1.zip


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

Name: ひよこ  ..比類無きプログラマー(77,446ポイント)   Date: 2010/01/01(金) 11:16   No:45287     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます。
今年もよろしくお願いします。
自分のゲーム作りを頑張りたいです。


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

Name: デラ初心者  ..入門者(3,297ポイント)   Date: 2010/01/01(金) 11:27   No:45288     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けましておめでとうございます。
去年は大変お世話になりました。
今年もよろしくお願いします。

今年こそゲームを作れる様になりたいですわ〜


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

Name: softya  ..比類無きプログラマー(78,900ポイント)   Date: 2010/01/01(金) 11:28   No:45289     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けましておめでとうございます。
本年もよろしくお願いします。

年末に風邪をひいてしまって現在ボロボロです。


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

Name: kms  ..初心者(7,861ポイント)   Date: 2010/01/01(金) 11:41   No:45290     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます!

今年も宜しくお願い致します!


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

Name: DVDM [URL]  ..熟練のプログラマー(47,033ポイント)   Date: 2010/01/01(金) 12:45   No:45293     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
管理人さん、掲示板の皆様あけましておめでとうございます!
超絶寒い中、初詣に行って参りました。
雪こそ降ってはいなかったものの本当に・・・寒かったです。


今年の目標はとりあえず、去年と変わらずプログラムについての知識を少しずつ増やしていくことと、
ゲームに使う絵をだるがらずに描く、体験版みたいなものでもいいので何か公開できるゲームを作りたいです。


それでは皆様、今年もよろしくお願いいたします!


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

Name: 羽流布  ..中級者(12,679ポイント)   Date: 2010/01/01(金) 15:44   No:45308     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けましておめでとうございます。
ご無沙汰ぎみですが……今年も宜しくお願いします。

p.s.趣味ではD言語、仕事ではRubyを使うことになったりと、ますますC言語から遠ざかっています。。。


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

Name: array [URL]  ..熟練のプログラマー(61,843ポイント)   Date: 2010/01/01(金) 17:01   No:45315     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けましておめでとうございます。

今年もよろしくお願いいたします。


去年の4月に就職して実家に帰り正月恒例の親戚の集まりに行ってきました。
今年からは お年玉を貰えず、あげる立場になっており、しぶしぶ親戚の子供
にお年玉を上げてきました。


今年は、昨年得た知識を元に新しいことにも挑戦していきつつ
お世話になっているC掲示板にも貢献していけたらと思っています。


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

Name: kerotan0820  ..上級者(20,962ポイント)   Date: 2010/01/01(金) 17:04   No:45316     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
皆様、あけましておめでとうございます

昨年は皆様の御蔭で、快適なC言語ライフを過ごすことが出来ました^^

今年も何卒よろしくお願いします



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

Name: ti  ..かけだし(1,349ポイント)   Date: 2010/01/01(金) 19:43   No:45322     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます

趣味とPG復帰のための勉強でRPG製作始めて早数ヶ月

今後もいろいろなことで壁にぶつかり皆様に質問することが多々あると思いますが

今年もよろしくお願いします


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

Name: dic  ..熟練のプログラマー(45,696ポイント)   Date: 2010/01/01(金) 21:53   No:45333     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
新年明けましておめでとうございます

技術の向上を目指し
グチもこぼします
変な奴ですが、今年もよろしくお願いします


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

Name: ALiCE TAiL  ..ぴよぴよ(45ポイント)   Date: 2010/01/02(土) 00:20   No:45343     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
初書きですが、あけましておめでとうございます。
今年もまたAerobeat Plus等で素材提供できれば、と思いますっ!

どうぞ宜しくお願い致しますー!!


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

Name: conio [URL]  ..比類無きプログラマー(76,856ポイント)   Date: 2010/01/02(土) 01:07   No:45347     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます!
ローグライクゲーム制作でバグが発生して、この掲示板で質問したのが初訪問でした。

あれから色々と進歩して、
今度は質問に答える側、ゲームを提供する側になれたらいいなーとか思ってます。

今年もよろしくお願いします(^^)


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

Name: sizuma [URL]  ..上級者(23,175ポイント)   Date: 2010/01/02(土) 02:38   No:45353     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうございます!
いつも勉強させていただいています。
研究会参加したいです。

ひらく場所
九州にして
研究会

ではでは〜


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

Name: Tororo  ..かけだし(1,110ポイント)   Date: 2010/01/02(土) 15:23   No:45385     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
あけましておめでとうです><
研究会行きたいですけど、まだ年が年なのでいけませんw(秘密ですw)
もうちょっと大人になったら行くかもですw
では〜


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

Name: tkmakwins15  ..比類無きプログラマー(99,117ポイント)   Date: 2010/01/03(日) 10:37   No:45431     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
>たかぎさん

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


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

Name: 256bit  ..入門者(2,702ポイント)   Date: 2010/01/04(月) 20:50   No:45519     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
 少し遅くなりましたが、新年あけましておめでとうございます。
 今年もよろしくお願いします。
 今作っているゲームも皆さんのおかげで、ここまで出来ました。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,131,176ポイント)   Date: 2010/01/06(水) 22:21   No:45707     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
皆様ご挨拶コメントありがとうございます^^
こんなにも多くの方々に来て頂けて大変光栄に思います。

大変失礼ですが、量的にちょっと全員にコメさせて頂くのは難しいので、私に対してのコメントのみレスさせて頂きます^^;

>> C学習者さん
> 管理人さん狙いすぎですw 

えぇ狙いましたともw
0:00は家族で乾杯するのが生まれて25年間恒例行事なのですが(0才はやってないと思うけどw)
今年は乾杯してソッコーで投稿ボタン押しに行きましたよ(笑

>> ようすけさん
> お仕事も大変だとは思いますが、体調を壊さない程度にゲーム作りもがんばってください☆ 

ありがとうございます^^
仕事しながら以前のペースでHP更新は思ったより難しかったです・・。
掲示板もご無沙汰な事が多く申し訳ないです;

>> yuさん

そう言っていただけるとありがたいです^^
yuさんの初めて見せて頂いた作品にはビックリしました。また素晴らしいゲームをリリースして下さい♪

>> Justyさん

そういえば去年もこんなトピたてたなと思って過去ログあさってみたのですが、
http://www.play21.jp/board/formz.cgi?action=res&resno=26301&page=30&lognum=84&id=dixq&rln=26673
去年は忙しかったですか?☆

>> チルチルさん 
> みなさん今年もプログラミング頑張りましょうね♪

頑張りましょう!
私は今年からプログラミングをする機会は仕事中心なので、また違った頑張りが必要になりそうです。

>> shilfiaさん 
> 今年は回答者側に回れたらいいなぁという夢を見つつ

コメありがとうございます^^
是非気軽に書き込んでくださいね♪

>>  yraoさん

よろしくお願いしますね!

>> softyaさん

インフルエンザですか?!
流行ってますよね;
お大事に^^;

>> DVDMさん

DVDMさんなら今からでも年賀イラスト投稿してくれると信じていますw
サクヤさん的年賀j(ry

>> arrayさん

何その私と同じ状況w
私も親戚一同の中では末っ子でお年玉はもらった回数が絶対一番少ないのに
もう上げる立場になっちゃいましたわぁ・・。

>> kerotanさん

それはよかったです^^
今年もよろしくです☆

>> ALiCE TAiLさん

おぉ、先生!
去年は色々お世話になりました!!
あ、そういえばclauvi君がAerobeatのテーマ曲作ってくれたようですが、お聴きになりました?
次回バージョンアップでは同梱しようと思っています!

>> sizumaさん

九州・・。
札幌から一番遠いですね(涙
前回開催は大阪だったからやはり次回は東京ですかね〜;

>> Tororoさん

そう言われると余計聞きたくなるというものw
ここには小学生も結構来ているようですし、見ている人の年齢層はかなり幅広そうですね。
そう言う意味では色々と考えて回答書かなければと思います^^;
前回は未成年の方も結構いらっしゃいましたし、私としては、最低限のマナーさえ守って頂ける方でしたら、
どのような方でも歓迎なので、気軽にご参加下さいませ♪
まだ時期は未定ですが;

>> 256bitさん

お〜ゲームっぽくなっていますね^^
探索ゲーか迷路系でしょうか?
私もゲーム制作したいのに、なかなか時間が取れず・・。
しかし今年も何かリリース出来たらいいなと思っています。

>> 山崎さん

あけましておめでとうございます^^
遠慮なさっていたようですが、気軽に書き込んでくださいね〜♪

-----------------------------------------------------------

皆様、改めまして、今年もよろしくお願いいたします^^


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

Name: 山崎  ..プログラマー(33,669ポイント)   Date: 2010/01/06(水) 23:06   No:45711     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
管理人様
昨年度は本当にお世話になりました、
私がこうしてゲーム作りやプログラミングを好きでいられるのも、
この場所を提供してくれている管理人様のおかげです、いや本当に。
誰に対しても心配りをお忘れにならない、ホント頭が下がります・・・。
今年も、どうか宜しくお願いしますっ!

なお、東京での研究会、ひじょ〜〜に楽しみにしておりますっ!
あ、でも本を執筆されるのでしたね、あまりいろいろプレッシャーをかけられませんね^^;


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

Name: Tatu  ..上級者(21,665ポイント)   Date: 2010/01/06(水) 23:55   No:45714     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
遅れましたが、あけましておめでとうございます。

今年もよろしくお願いします。


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

Name: ムンバ  ..プログラマー(25,692ポイント)   Date: 2010/01/07(木) 00:01   No:45715     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
明けまして、おめでとうございます!
本年も、どうぞ宜しくお願い致します。

ご無沙汰しております。<(_ _)>
(私も山崎さんがおっしゃる様な感じで)入るタイミングを失ってしまっていました。(汗
昨年(一昨年も含め)は、こちらで色々な方々に、プログラミングや画像やDXライブラリ等々
たくさんのご指導を頂き、本当にありがとうございました。

((超簡単な「じゃんけんゲーム」「鉄道パズルゲームの元の様なもの?」
「RPGの作成超初級編?」←TOP画面のみ添付させて頂きます。(画像は、お借りしてる物もあります。)
(↑MAP内の移動や隣のMAPに移動、自キャラにステータスを持たせ敵キャラにぶつかると一定単位でHPが減り
 ある位置に行くと、HPを回復する程度。
 HPが無くなると、スタート画面に戻れる様に選択画面が出て、もう一回やりたければTOP画面に戻れるキーを表示する程度です。)くらいの・・・。)
ご報告までに。(感謝

自作したゲームは、自分でダサいゲームと思いながらも(^_^;…
中途半端に感じつつも、楽しめると思いました。今の所、単調ですが。w

今年もDXライブラリを使用させて頂き、「通信」に挑戦しようかと思ってます。
また何かありましたら、ご迷惑をお掛けすると思いますが
ご指導の程、宜しくお願い致します。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,135,845ポイント)   Date: 2010/01/11(月) 20:22   No:46012     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
危ない、過去ログに落ちる一つ前まで落ちてた^^;

>> 山崎さん

ありがとうございます、そう言っていただけると光栄です^^
でも最近自分のHPを放置気味の管理人には大した事が言えません;

> なお、東京での研究会、ひじょ〜〜に楽しみにしておりますっ! 

おぉ、ご参加いただけるのでしょうか^^
主催するからには私も何か発表すべきなんでしょうけど、
なかなか普段研究する時間が無く、また、多くの人に興味を持ってもらえそうな題材が思いつかず・・。
悩んでいるところです;

>> Tatuさん

おぉ、美しい^^
tatuさんはSTG作っていらっしゃるのですか?

>> ムンバさん

ゲーム制作お疲れ様です^^
面白そうな探索ゲーですね。
私は頭を使うゲームがあまり得意じゃないですが^^;
そういえばFF13やりましたが、エフェクト作成が好きな私には刺激が多すぎました・・w

>> DVDMさん

過去ログには落とさせませんw


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

Name: Tororo  ..かけだし(1,157ポイント)   Date: 2010/01/11(月) 20:31   No:46014     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
>>Dixqさんへ
2014ぐらいまで顔があまり出せないかもですw
そこを越えたら研究会とかも行けるかも・・
それまで覚えてもらえていたらいいんですけど・・


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

Name: DVDM [URL]  ..熟練のプログラマー(49,603ポイント)   Date: 2010/01/11(月) 20:51   No:46019     
Title: Re:■新年の挨拶トピ■明けましておめでとうございます(^^■    
>>咲夜好きな管理人さん
「過去ログには落とさせませんw」に笑ってしまいました(笑)
落ちたら落ちたで、管理人さん宛てにダイレクトメールしますので大丈夫ですよ♪

ここの掲示板には凄くお世話になっていることですし、キャラのリクエストがあればそれで描きますよ^^
上にも書いてますけど、やっぱり咲夜さんなんですか?(笑)
最初に断っておきますけど、期待はしないでくださいね;


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



Name: あがぺん  ..ぴよぴよ(477ポイント)   Date: 2010/01/11(月) 01:55   No:45933       
Title: 表示が思い通りにできません    
規約に目を通しましたが初投稿なのでいたらない点があったら申しわけありません。
タイトルは『表示が思い通りにできません』となっておりますが、実際はなんと文字におこせばよいのかわからなかったので適切な表現ではなかったかもしれませんが、本文でしっかり質問内容を説明したいと思いますのでよろしくおねがいします。
今回質問したいのは構造体に対する文字入力を、何度も繰り返し行うというプログラムです。
自分のつくったプログラムは以下のものです。
#include <stdio.h>

typedef struct {
    char moji1[20];
    char moji2[20];
} list;

int main(void)
{
    list std[10];
    int i;
    int k = 0;
         
    for( i = 0; k == 0; i++) {
    printf( "文字列1:" ); gets(std[i].moji1);
    printf( "文字列2:" ); gets(std[i].moji2);
    printf( "続けて入力するなら0,しないならその他:" );
  
    scanf( "%d", &k);
    putchar( '\n' );        
    }
    return(0);
}
しかし上記のプログラムの表示結果は

文字列1:入力された文字列
文字列2:入力された文字列
続けて入力するなら0,しないならその他:0

文字列1:文字列2:入力された文字列
続けて入力するなら0,しないならその他:0

文字列1:文字列2:入力された文字列
続けて入力するなら0,しないならその他:1


というものになります。
そして私が皆様に質問したい部分は、表示結果の2度目以降の入力時で文字列1:文字列2:と並んで表示されてしまう箇所になります。
私が求めている表示結果は1度目の入力時の画面が何度も続く(文字列1:と文字列2:の間にしっかりと改行が入る)というものなのですが、どのようにプログラムを変更すればよいのでしょうか。
1度目の入力は問題がないところをみると、やはりfor文の判定部もしくはscanf()による入力が問題なのかと考えましたが自分では解決まで至ることができませんでした。
Cの知識は学校でまだ1年も勉強していないのでそんなに多くあるとはいえません。
今回の問題を理解し、解決できるようにお力添えお願いいたします。







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


Name: トントン  ..かけだし(1,315ポイント)   Date: 2010/01/11(月) 03:21   No:45941     
Title: Re:表示が思い通りにできません    
キーボードからの入力というのは、一度入力バッファという場所に格納され
格納されたものを読み込んでいきます。

バッファの中というのは空っぽなのが理想なのですが、空っぽだという確証がありません。
また、入力バッファの中身を読み込んでいくとバッファの中身がクリアされるのですが
処理によってはクリアされない場合があります。(詳しくはググってください)
ですので、今回は2回目の処理時に、バッファの中身に何かが残っていてそれを読み込んでしまい
2回目の処理のgets(std[i].moji1)が勝手に処理されてしまっていると考えられます。

入力処理をする前に
rewind(stdin)
または
fflush(stdin)
を入れることでバッファの中身をクリアすることができます。

C99の規格ではどうなっていたか忘れましたが、
visual studioを使っているのであれば上記の処理を入れることで解決できるはず!です。


まぁ、多分嘘が混じっていると思いますので、調べてみるのが一番かと。
または他の方が補足してくれると思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,134,014ポイント)   Date: 2010/01/11(月) 03:41   No:45943     
Title: Re:表示が思い通りにできません    
トントンさんがお答えになっているので、補足というか参考サイトなどよければどうぞ

scanfとバッファに残るものとか
http://www.google.co.jp/search?hl=ja&source=hp&q=scanf+%E6%AE%8B%E3%82%8B&lr=&aq=f&oq=

fflushでバッファクリアとか
http://www9.plala.or.jp/sgwr-t/lib/fflush.html

未定義にならずにバッファクリアをする方法があるのかどうか知りませんが、
必ず改行コードが最後に来るのなら、getcharで改行コードが来るまで読み飛ばしてもいいですね。


後、トピックのタイトルについては原因が解らない場合は何と書けばいいのか解らないですよね。
今回の場合は
「scanfによる入力トラブル」とか「scanfによる不具合の解消方法について」みたいな感じでどうでしょう。

しかしscanfが原因かどうか最初は解らないでしょうから、特に神経質に題名にこだわらなくても大丈夫ですよb

後質問とは関係ないですが、

for( i = 0; k == 0; i++) 

これは

for( i = 0; k == 0 && i < 10; i++ ) {

の方が安全じゃないですかね?
後、文字列は20文字以上入るとアウトなので、その辺も注意かも


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

Name: box  ..ハッカー(149,413ポイント)   Date: 2010/01/11(月) 08:10   No:45945     
Title: Re:表示が思い通りにできません    
fflushは標準出力に対して使う関数です。

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

Name: さかまき  ..ぴよぴよ(393ポイント)   Date: 2010/01/11(月) 09:57   No:45949     
Title: Re:表示が思い通りにできません    
>fflushは標準出力に対して使う関数です。
少なくとも私は、stderrやFILEに対しても行っています。またVC6のMSDNを見ると
fflush 関数はストリームをフラッシュします。stream に結合されているファイルが出力用に開いている場合は、
fflush はストリームに結合されているバッファの内容をそのファイルに書き込みます。
ストリームが入力用に開いている場合は、バッファの内容をクリアします。
となっており標準出力以外でも使えるみたいです。


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

Name: box  ..ハッカー(149,458ポイント)   Date: 2010/01/11(月) 10:07   No:45950     
Title: Re:表示が思い通りにできません    
>fflushは標準出力に対して使う関数です。

これは誤りでした。

fflushは出力ストリームに対して使う関数です。
が正しいです。


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

Name: フリオ  ..プログラマー(31,861ポイント)   Date: 2010/01/11(月) 10:18   No:45951     
Title: Re:表示が思い通りにできません    
 
 MSDNは、あくまでマイクロソフトが提供する開発環境を使用するためのリファレンスであって、 
Cの標準のリファレンスでは有りません。 

Cの標準規格では、fflush(stdin)の動作は、未定義です。 


 また、rewind(stdin)も、テキストファイルなどをリダイレクトすると、期待しない動作をします。 
  


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

Name: たかぎ [URL]  ..ハッカー(148,983ポイント)   Date: 2010/01/11(月) 11:15   No:45957     
Title: Re:表示が思い通りにできません    
私も自サイトでこの件については記述しています。
http://www.kijineko.co.jp/tech/superstitions/fflush-with-input-stream.html

処理系不明ですので、一般論としては、出力ストリーム以外をfflushに指定した場合の動作は未定義としかいえません。


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

Name: あがぺん  ..ぴよぴよ(763ポイント)   Date: 2010/01/11(月) 12:33   No:45958     
Title: Re:表示が思い通りにできません    
多くの回答ありがとうございました。
しかし私はまだ学生であり、fflushなるものを習っていないので今回使うことを見送りたいと思います。
今回私がとりくんでいる問題は、構造体に任意の回数入力するというものなので構造体に入力ということ以外はとくに制約はないのですが何か良い方法はありませんか。
せっかく皆様が回答してくれたのですが再び質問することになって、申し訳ありませんがお願いします。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,134,105ポイント)   Date: 2010/01/11(月) 12:37   No:45959     
Title: Re:表示が思い通りにできません    
習って無くてもガシガシ知らないことにチャレンジしていく方が良いと思いますよ。

といっても今回の場合は適切な方法ではない可能性もあるので、
別な対策を取った方がいいかもしれませんが。

全て文字列でscanfしてやり、atoiでint型に変換してやればどうですか?

int a;
char str[10];
scanf("%9s",str);
a = atoi(str);

こんな感じでaに数値が入ります。
後、私が上で言ったgetcharを使う方法はどうですか?


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

Name: non  ..比類無きプログラマー(86,983ポイント)   Date: 2010/01/11(月) 13:23   No:45962     
Title: Re:表示が思い通りにできません    
必ず文字を入力するのなら・・・
    printf( "文字列1:" ); 
    do{
        gets(std[i].moji1);
    }while(std[i].moji1[0]=='\0');



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

Name: あがぺん  ..ぴよぴよ(847ポイント)   Date: 2010/01/11(月) 13:27   No:45964     
Title: Re:表示が思い通りにできません    
管理人さんのいうgetcharをやってみようと思ったのですがうまく構成できませんでした。
自分の力不足でできないようです。
そして自分で調べてみたのですが、scanfの後にgetchar()をつけると上手くいくというのを見つけたのですがこれは管理人さんのとは少し違いますよね?
実際つけてみたらちゃんと表示されたのですが、この方法でなにかまずい点はありますか。
何度も質問になってしまいますが、もう少しで解決できそうなのでよろしくお願いします。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,135,168ポイント)   Date: 2010/01/11(月) 13:43   No:45966     
Title: Re:表示が思い通りにできません    
私が言いたかったgetcharの使い方はこのような感じです。

#include <stdio.h>

int GetInputString( char str[ ], int n ){
    int c,Cnt=0;
    while( 1 ){
        c=getchar();                //キーボード入力から一文字取ってくる
        if( c==EOF || c=='\n' ){    //終端か改行なら
            str[Cnt] = '\0';        //終端記号を入れ
            return 0;                //正常終了
        }
        if( Cnt>=n-1 ){                //もうこれ以上入れられなかったら
            break;                    //抜ける
        }
        else{                        //まだ入れられるなら
            str[Cnt] = (char)c;        //入れて
            Cnt++;                    //カウントアップ
        }
    }
    str[Cnt]='\0';                    //抜けたらそこに終端記号を入れ
    while( (c=getchar())!=EOF && c!='\n' );    //終端か改行が来るまで読み飛ばす
    return -1;
}

int main(){
    
    char Str[8];

    if( GetInputString(Str, 8) == 0 ){
        printf("入りました\n");
    } else {
        printf("全部入りませんでした\n");
    }
    printf("[%s]\n",Str);

    return 0;
}
 
GetInputStringを使えば指定したバイト数以上データが配列に入る危険性もありませんしエンターを押すごとに区切って
バッファから読み込めると思います。
この関数の返り値を見れば指定サイズ内に収まったかどうかもわかります。
もっと簡単な方法があるかもしれませんが・・。

後scanfと正規表現を使って適切に読み飛ばすことも出来ると思いますが、正規表現を知らないとちょっと意味不明かもしれない・・


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,135,228ポイント)   Date: 2010/01/11(月) 13:52   No:45967     
Title: Re:表示が思い通りにできません    
たかぎさんとこのHPにこんな記事があるので参考にどうぞ

http://www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html

scanfの中で使っているアスタリスクについてはこの辺どうぞ

http://www.google.co.jp/search?hl=ja&q=scanf+%E3%82%A2%E3%82%B9%E3%82%BF%E3%83%AA%E3%82%B9%E3%82%AF&lr=lang_ja


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

Name: あがぺん  ..ぴよぴよ(883ポイント)   Date: 2010/01/11(月) 20:38   No:46016 解決!     
Title: Re:表示が思い通りにできません    
管理人さん本当にありがとうございました。
なんとか自分なりに整理もつき、解決に至れたと思います。
ありがとうございました。


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



Name: takesi  ..ぴよぴよ(23ポイント)   Date: 2010/01/11(月) 19:22   No:46006       
Title: 無題    
ゲームプログラマーになるには、DXライブラリー関数を覚えたほうがいいですか?

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


Name: softya  ..比類無きプログラマー(86,436ポイント)   Date: 2010/01/11(月) 19:45   No:46008     
Title: Re:無題    
前の質問の続きですね。
http://www.play21.jp/board/formz.cgi?action=res&resno=45619&page=&lognum=140&id=dixq&rln=45704
名前を無闇に変えるのは止めてくださいね。規約違反となります(たとえそれが、ひらがなとローマ字だとしても)

>ゲームプログラマーになるには、DXライブラリー関数を覚えたほうがいいですか?
覚えてもプロでは使いません。
なので、覚えるのがゲームプログラマーの必須条件ではありません。
最低限、DXライブラリを使いこなせて当たり前ぐらいに考えてください。

プロでは社内スタッフが作ったライブラリや、ゲーム機メーカーのライブラリ(PS3などはソニーが配布)、ゲーム会社向けに販売されているゲームエンジン(UnRealエンジンなどが有名)のライブラリを使います。
場合によってはライブラリそのものを作る担当になるかもしれませんので、ライブラリ自体を構築している技術を知っておく事はゲームプログラマーとして必要な教養だと思います。
激しい競争率のプログラマー採用試験に勝ち残るには、生のDirectXを使いこなせるってあたりを目指すのが正しい道だと思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,135,537ポイント)   Date: 2010/01/11(月) 20:09   No:46011     
Title: Re:無題    
プログラムは暗記によって上達するものではありません。
いかに応用できるか、アルゴリズムを適切に順序立てて考えられるかが大事でしょう。

DXライブラリが使えても業界に入って仕事で使う事はまずないでしょう。
しかしDXライブラリを使ってゲームを作る際に培ったプログラムの組み方であったり
ゲームプログラムの考え方であったり各種アルゴリズムであったり、
そのようなものは将来役に立つことでしょう。
また、特定のライブラリしか使えない人間というアピールは印象を逆に悪くする可能性もあるかもしれません。

ゲームプログラマーと一口に言っても様々でしょうから、一概には言えませんが、
大手メーカーは即戦力を求めない、人柄であったりコミュニケーション能力であったり、センス、伸びる力を求めると思います。
一方小さい企業ほど即戦力を期待する傾向にあると思います。

また、年齢的でも今やることは変わってくると思います。
すぐにでも面接があるのなら、今から勉強し始めるより就活対策すべきでしょうし、
まだ2〜3年あるなら、ゲームを何でもいいから一本作ってみてもいいでしょうし、
中高生なら今やってる勉強をしっかりやることが大事でしょう。
takesiさんは今おいくつですか?


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



Name: すのう  ..ぴよぴよ(94ポイント)   Date: 2010/01/10(日) 19:38   No:45902       
Title: MIDI再生に関して。    
はじめまして、質問させていただきます。
DXライブラリを利用して、MIDIプレイヤー的なものを作りたいと思っているのですが、MIDIを再生するときに、ファイルを開くで曲を選択、再生したいのですが、どうしたらいいのでしょうか?
初心者なので、なにをどうしたらいいのか・・・。
とりあえずプログラミングの館を参考にさせていただいて、MIDIを鳴らすところまではできたのですが、c++だと、openfiledialogというのがあるみたいですが、どう組み合わせたらいいのかさっぱりです・・・。
どなたか御教授お願いします。


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


Name: SooA [URL]  ..上級者(23,304ポイント)   Date: 2010/01/10(日) 21:39   No:45913     
Title: Re:MIDI再生に関して。    
←とりあえずAPIサンプルを。

詳しくは
http://wisdom.sakura.ne.jp/system/winapi/common/common6.html


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

Name: すのう  ..ぴよぴよ(295ポイント)   Date: 2010/01/11(月) 18:23   No:45997     
Title: Re:MIDI再生に関して。    
SooAさん、ありがとうございますっ!!!
参考にさせて頂いて、ファイルを開く、までは行うことができました!
ですが、肝心の音楽の再生がされません。
ビルドは問題なくされたのですが、ファイルを選択して終わり、になってしまいました。
それまでは問題なく音楽が再生されていた部分を、

void midi_load(){
          Music= LoadMusicMem( "FilePath"); 
          PlayMusicMem( Music , DX_PLAYTYPE_BACK );
}

と書いたのですが、()の中がFilePathでは再生されないのだろうな、と思うのですが、実際にはそこになんと書けばいいのかわかりません。。。
初歩的で申し訳ありませんが、また教えていただけましたら幸いです。


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

Name: SooA [URL]  ..上級者(23,342ポイント)   Date: 2010/01/11(月) 18:38   No:45999     
Title: Re:MIDI再生に関して。    
>Music= LoadMusicMem( "FilePath" ) ;  
ダブルクォーテーション「"」で囲んであるので
FilePathという名前のファイルを開こうとしています。


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

Name: すのう  ..ぴよぴよ(313ポイント)   Date: 2010/01/11(月) 18:57   No:46004 解決!     
Title: Re:MIDI再生に関して。    
鳴りました〜><

早い返信、本当にありがとうございました。


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



Name: くりく  ..ぴよぴよ(293ポイント)   Date: 2010/01/11(月) 18:36   No:45998       
Title: 構造体について    
いまC言語の基本を勉強しているのですが、
構造体でよくわからないところが出たので質問させてもらいます;;
次のプログラムがあったのですが、6行目のところで

struct Goods *foo(struct Goods gs[]){

とありますが、この「*」はなぜつけるのでしょうか?




struct Goods{
    char name[30];
    int price;
};

struct Goods *foo(struct Goods gs[]){
    int max = 0;
    int idx = 0;
    int i;
    for(i=0;i<5;i++){
        if(max < gs[i].price){
            max = gs[i].price;
            idx = i;
        }
    }
    return &gs[idx];
}

int main(void){
    struct Goods *pg;
    struct Goods gs[5] = {
        {"鉛筆",30},
        {"消しゴム",50},
        {"ノート",100},
        {"ボールペン",80},
        {"クリップ",20}
    };
    pg = foo(gs);
    printf("もっとも値段の高い商品は\n");
    printf("%s(%d円)\n",pg->name,pg->price);
    printf("です\n");

    return 0;
}


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


Name: box  ..ハッカー(149,748ポイント)   Date: 2010/01/11(月) 18:43   No:46001     
Title: Re:構造体について    
> struct Goods *foo(struct Goods gs[]){

foo関数の戻り値の型が、
struct Goods型「へのポインタ」であることを示します。

何も構造体に限った話ではありません。

int *bar(〜)

というのは、bar関数の戻り値の型が
int型「へのポインタ」であることを示します。


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

Name: くりく  ..ぴよぴよ(314ポイント)   Date: 2010/01/11(月) 18:47   No:46002 解決!     
Title: Re:構造体について    
ありがとうございます。
理解できました。


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



Name: HIRO  ..ぴよぴよ(13ポイント)   Date: 2010/01/11(月) 16:34   No:45981       
Title: エラーメッセージの簡単な意味    
expected declaration or statement at end of input
というエラーが出てしまったのですが意味がまったくわかりません。
簡単な意味でもいいので教えていただけないでしょうか?


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


Name: box  ..ハッカー(149,560ポイント)   Date: 2010/01/11(月) 16:47   No:45983     
Title: Re:エラーメッセージの簡単な意味    
ソースの中身と、どこでそのエラーが出たかを
教えてくださると、的確な回答ができるかもしれません。


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

Name: たかぎ [URL]  ..ハッカー(149,182ポイント)   Date: 2010/01/11(月) 16:51   No:45984     
Title: Re:エラーメッセージの簡単な意味    
> 簡単な意味でもいいので教えていただけないでしょうか?

間違った文法でソースコードを書いているということです。


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

Name: ゲスト   Date: 2010/02/12(金) 21:33   No:459811265978035     
Title: Re:エラーメッセージの簡単な意味    
> expected declaration or statement at end of input
> というエラーが出てしまったのですが意味がまったくわかりません。
> 簡単な意味でもいいので教えていただけないでしょうか?

自分もついさっきまで同じエラーがでていました.

おそらく、{←これの数があっていないのでは?





Name: Ω  ..初心者(6,430ポイント)   Date: 2010/01/10(日) 20:32   No:45909       
Title: FPSについて    
ゲームプログラミングの館のs6節「FPSを表示しよう」のコードをコピペして実行すると、
約30FPSぐらいしか出なかったので、「30FPSでいいか」と、変更しようとした訳ですが、

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
void fps(){
   int i;
   static int t=0,ave=0,f[60];
 
   f[count%60]=GetNowCount()-t;
   t=GetNowCount();
   if(count%60==59){
      ave=0;
      for(i=0;i<60;i++)
         ave+=f[i];
      ave/=55←―――――――○(最初は60だった)
}
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
              ←○の数値をいじったら、60FPSとか500FPSとか表示されたのですが、 コレは表示だけでFPSは変わってないのでしょうか? 並行して、
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
void wait_fanc(){
   int term;
   static int t=0;
   term = GetNowCount()-t;
   if(32-term>0) ←―――――――――○(16を32に)
      Sleep(32-term);←―――――――○(同上   )
   t=GetNowCount();
   return;
}
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

と変更しています。 編集済み


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,132,347ポイント)   Date: 2010/01/10(日) 21:19   No:45911     
Title: Re:FPSについて    
Ωさん、こんにちは。

平均を55で割っている理由は何でしょう?

wait_func関数の修正はそれでいいと思いますが、厳密なFPS制御はそれではできません。

http://dixq.net/rp/43.html

この辺お読みいただけると解ると思います。



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

Name: Ω  ..初心者(6,442ポイント)   Date: 2010/01/11(月) 15:51   No:45979 解決!     
Title: Re:FPSについて    
返答ありがとうございます。解決しました。

平均を55で割ったのは、表示されるfpsが約30になったからです。60だとfps32前後になってしまったので・・・


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



Name: sand  ..ぴよぴよ(173ポイント)   Date: 2010/01/07(木) 21:15   No:45770       
Title: IEに埋め込まれているFlashPlayerのActiveXの再生制御    
IEに埋め込まれているFlash Player(spy++から見た場合、Internet_Explorer_Server内のMacromediaFlashPlayerActiveX)をプログラム(言語は任意)から操作ができず困っています。
どなたかご存じの方はいらっしゃいますでしょうか。

【参考】
このオブジェクトにはplayメソッドが備わっていますが、反応しない場合があります。
<playメソッドが動作するサイト>
http://www.adobe.com/jp/support/flash/ts/documents/fl0017.html
※javascript:document.getElementsByTagName("object")(0).object.play();
にて動作することを確認しました。(flashplayerではなくflashそのものだから動くのか???)

<playメソッドが動作しないサイト>
http://www.asahi.com/video/news/TKY200912270104.html

<window messageを使った方法>
wm_lbuttonclick等のwindows messageも画面を最前面にしておかないと反応しないようです。 


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


Name: sand  ..ぴよぴよ(200ポイント)   Date: 2010/01/11(月) 13:29   No:45965     
Title: Re:IEに埋め込まれているFlashPlayerのActiveXの再生制御    
回答が付かないようなのでいったんクローズします。
別の掲示板をあたってみます。


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



Name: take  ..ぴよぴよ(322ポイント)   Date: 2010/01/11(月) 10:39   No:45953       
Title: 敵のショットが表示されない。    
13項目の【敵にショットを撃たせてみよう】についてです。

ビルドが何のエラーも無く終了したのですが、実行してみると
敵が下りてきて、そのままなにもせずに上っていってしまいます。

最初から作り直してみたのですが、まったく一緒の結果でした;;

なにか入力し忘れているのでしょうか?


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,134,357ポイント)   Date: 2010/01/11(月) 13:22   No:45961     
Title: Re:敵のショットが表示されない。    
プロジェクトがダウンロード出来ますよね。
こちらで用意したプロジェクトのソースと何が違うか見比べてみてはいかがでしょうか?

特に敵のショットを登録するとか弾幕を計算する関連の部分を重点的にみてみてください。


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



Name: cinema  ..ぴよぴよ(409ポイント)   Date: 2010/01/10(日) 01:33   No:45852       
Title: 数値の利用とΣの計算    
はじめまして。いきなりですが質問です。

今、1つのファイルにデータが入力してあり、それを計算プログラムを利用して答えを求めるという課題に取り組んでいます。


自分で理解しているのは計算プログラムの中に、与えられたデータ(初期値のようなもの)を入力するところまでです。下のコードは計算部分を省略しています。


#include <stdio.h>

int main(void)
{
    int i;
    FILE *file;
    file = fopen("test.txt","r");
    fscanf(file,"%d",&i);
    fclose(file);
    printf("%d\n",i);
    return 0;
}



そこで今分からないのが計算式で出てきた答えを受け継ぐというところです。具体的に言うと

たとえば『○』に『×』を加えたら『△』という答えが出てきた。そしてその『△』を次の式の『□』に加えると『☆』という答えが出てきた、というものだとします。

△=○+×…@

☆=△+□…A

この時、プログラムでは上から下に進んでいくので普通に計算できていくと思うんですが、今自分がやっている課題は@、Aという風に式の数が決まっておらず、式が2つのときもあれば5つになる場合もあります。それぞれの式は同じものです。ただ入力していく数値が違います。つまり前の式の答えを次の式に入力していかないと計算ができないということです。

教科書をみると式はΣでまとめられていました。しかしそのΣをプログラムで表わす方法が分かりません。

分からないことをまとめます。



・前の式の答えを次の式に受け継ぐにはどうすればいいのか?

・式の数(式自体は同じ内容で入力する数値が違う)が定まっていない場合はどういう風に次の式に受け継ぐのか?

・その式の数だけいちいちプログラムに書き込んでいかないといけないのか?

・Σのような役割を持つコードみたいなものがあるのか?



といった感じです。かなり分かりづらい文章になって申し訳ありません。文の内容で理解できない部分があると思いますので遠慮なく言ってください。



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


Name: sizuma [URL]  ..プログラマー(28,287ポイント)   Date: 2010/01/10(日) 01:51   No:45855     
Title: Re:数値の利用とΣの計算    
具体的にどういう形式のデータが与えられているのか教えていただけますか?
計算式は

a = b + c

という計算式、ということでしょうかね。
と考えると

1 12
3
3
6

みたいな形式のデータが入ってる、と僕は読み取ったんですが、どうでしょうか?
あと、プログラミングの能力はどれくらいでしょうか? 編集済み


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

Name: cinema  ..かけだし(1,151ポイント)   Date: 2010/01/10(日) 02:27   No:45857     
Title: Re:数値の利用とΣの計算    
データの形式は自分で決めていいみたいでした。なので


 y=3
 z=3
 x=5
  w=5

といった形で改行して与えてくようにしました。計算式がいくつかあって、そのうちの一つが前の式の答えを利用するパターンです。そしてその部分ができないと最終的な答えは出せません。


プログラミングはまだそんなにやったことがなく、簡単な四則演算のプログラミングは作れました。下のようなやつです。


#include "stdafx.h"
#include "math.h"

int _tmain(int argc, _TCHAR* argv[])

{
    FILE *pf=fopen("test4.txt","w");
    for(int  n=1;n<=365;n++)
    {
    double w,a,T,b,t,L,c,S,I,d,P,h,cosech;
    
    T=12.0;
    L=131.62;
    c=33.23;
    d=1353;
    P=0.7;
    /*
    T:日本標準時
    L:東経
    c:北緯
    d:太陽定数
    P:大気透過率
    */
    w=(360.0*n)/366.0;
    //printf("%f\n",w);
    a=0.362-23.3*cos((3.141592/180.0)*(w+8.8))-0.337*cos((3.141592/180.0)*(2.0*w-11.9))-0.185*cos((3.141592/180.0)*(3.0*w+35.5));
    //printf("%f\n",a);
    /*aは日赤緯*/
    b=-0.0167+7.37*cos((3.141592/180.0)*(w+85.8))-9.93*cos((3.141592/180.0)*(2.0*w-72.3))-0.321*cos((3.141592/180.0)*(3.0*w-66.3));
    //printf("%f\n",b);
    /*bは均時差*/
    t=15.0*(T-12.0)+L-135.0+b/4;
    //printf("%f\n",t);
    /*tは時角*/
    S=sin((3.141592/180.0)*c)*sin((3.141592/180.0)*a)+cos((3.141592/180.0)*c)*cos((3.141592/180.0)*a)*cos((3.141592/180.0)*t);
    //printf("%f\n",S);
    /*Sはsin(h)*/
    h=asin(S)/(3.141592/180.0);
    if(h<0)
    {
        h=0.0;
    }
    /*hは太陽高度で、hがマイナスならh=0として考える*/
    cosech=1.0/sin(h*(3.141592/180.0));
    I=d*pow(P,cosech);
    /*Iは日射量*/

    I=d*(pow(P,(1/S)));
    fprintf(pf,"%f\n",I);




}
    fclose(pf);

    return 0;


}





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

Name: non  ..比類無きプログラマー(86,653ポイント)   Date: 2010/01/10(日) 09:20   No:45860     
Title: Re:数値の利用とΣの計算    
過去に「9mm」さんが質問されていたプログラムと同じですね。

>Σをプログラムで表わす方法が分かりません。 
for文で繰り返せば良いのではないかと思います。


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

Name: cinema  ..かけだし(1,251ポイント)   Date: 2010/01/10(日) 20:30   No:45908     
Title: Re:数値の利用とΣの計算    

>for文で繰り返せば良いのではないかと思います。

 繰り返す数とかもテキストファイルで与えるようにしたほうがいいんでしょうか?

課題は壁の中の温度を求めていくようなもので断熱材が複数あり、それぞれに厚さなど条件が違います。


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

Name: non  ..比類無きプログラマー(86,646ポイント)   Date: 2010/01/10(日) 21:52   No:45915     
Title: Re:数値の利用とΣの計算    
>繰り返す数とかもテキストファイルで与えるようにしたほうがいいんでしょうか?

与えるデータが多く、固定値ではなければそうした方がいいでしょうが、
具体的に示していただかないと、わかりません。
課題であるのなら、課題の全文を載せて下さい。


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

Name: cinema  ..かけだし(1,323ポイント)   Date: 2010/01/11(月) 01:58   No:45934     
Title: Re:数値の利用とΣの計算    
課題を書いておきます。


<壁体内の熱移動>
熱流
q=K(θi−θo)
熱貫流率
K=1/R
熱貫流抵抗
R=(1/αo)+(1/αi)+Σl/x

<璧体内の湿気の移動>
湿流
w=K'(fi-fo)
湿貫流率
K'=1/R'
湿貫流抵抗
R'=(1/αo')+(1/αi')+Σl/x'

θi:室内の温度
θo:外の温度
αo,αi:熱伝達率
fi,fo:水蒸気圧
αo',αi':湿気伝達率
l:璧体の厚さ
x:熱伝導率
x':湿気伝導率

@θi、θo、αo、αi、l、xをデータで与えて璧体内の温度分布を求める。
A@から飽和水蒸気圧を求める。
Bθi、θo、室内外の湿度からfi、foを求める。
Cfi、fo、αo'、αi'、l、x'をデータで与えて水蒸気圧分布を求める。
DAとCの比較

出力するのは@ACD


という風に与えられています。


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

Name: cinema  ..かけだし(1,191ポイント)   Date: 2010/01/11(月) 02:14   No:45935     
Title: Re:数値の利用とΣの計算    
すいません、追加で式がありました。

@の温度分布を求めるときその材料の表面温度を求めていきます。それが前の結果を利用していくという形何ですが、その時に使う式が

θn-1=θso+(Q/Cn)

Q=Cn(θn-1−θso)

Cn=l/x

θso:室外表面温度


理解できないことがあれば教えてください。


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

Name: non  ..比類無きプログラマー(86,895ポイント)   Date: 2010/01/11(月) 09:51   No:45948     
Title: Re:数値の利用とΣの計算    
システム化とは人間が行っていることを、コンピュータの作業に置き換えることであり、
人間がたとえ時間がかかっても手作業でやれなければ、プログラムすることができませんよ。
専門的な内容は私にはさっぱりわかりません。したがって、何のデータを入力して、どの式を
使って、何を求めるかが、はっきりしないとわかりません。

@θi、θo、αo、αi、l、xをデータで与えて璧体内の温度分布を求める。 
とあります。おそらく最初に
熱貫流抵抗 
R=(1/αo)+(1/αi)+Σl/x 
で、Rを求めるのでしょうけど、Σl/xの部分は、どのような形でデータが与えられるのか?
データの個数は?
ここで、Rが求まれば、
熱貫流率 K=1/R 
q=K(θi−θo) を求めるのでしょうけどθi、θoがθn-1やθsoとどれがからんでいるか
わからない。

自分で、具体的なデータで、電卓またはEXCELを使って計算したことはあるのですか?



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



Name: Th  ..ぴよぴよ(103ポイント)   Date: 2010/01/10(日) 16:15   No:45878       
Title: 敵にショットを撃たせられません。。    
13項目の【敵にショットを撃たせてみよう】でエラーが出てしまいます。

1章\mydat\source\graph.cpp(26) : error C3861: 'graph_bullet': 識別子が見つかりませんでした

・・・と表示されるのですが、これはなにかを入力し忘れているのでしょうか?


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


Name: yu  ..熟練のプログラマー(41,789ポイント)   Date: 2010/01/10(日) 23:26   No:45923     
Title: Re:敵にショットを撃たせられません。。    
>>これはなにかを入力し忘れているのでしょうか?
//弾丸の描画
void graph_bullet(){
    ...
}

http://dixq.net/rp/13.html
のgraph_bullet関数を入力し忘れていると思います
また、graph_main関数より先(上)に上記のgraph_bullet関数の定義を書いてください


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

Name: Th  ..ぴよぴよ(110ポイント)   Date: 2010/01/11(月) 09:15   No:45947 解決!     
Title: Re:敵にショットを撃たせられません。。    
できましたmm
ありがとうございます。


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



Name: KA  ..ぴよぴよ(12ポイント)   Date: 2010/01/10(日) 16:57   No:45882       
Title: 画像を加工する?    
Dxライブラリを使ってゲームを作っているのですが、どうしてもわからないことがあったので質問します。

画像を曲げて画面に表示させたいのですが、それをどうやってやれば良いのかわかりません。
自分がやりたいのは、棒の画像を曲げて円弧のようにし、それを複数表示して円のようにすることです。

どうかよろしくお願いします。


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


Name: チルチル  ..比類無きプログラマー(87,422ポイント)   Date: 2010/01/10(日) 17:08   No:45883     
Title: Re:画像を加工する?    
画像を変形させて描画したいって事ですよね?

DrawModiGraph関数とか

http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N11

非公開関数ですがDrawPolygonBase関数とかでどうですか?


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

Name: KA  ..ぴよぴよ(65ポイント)   Date: 2010/01/10(日) 17:40   No:45889     
Title: Re:画像を加工する?    
四角形の変形なら簡単なのですが、四角形画像を曲線にしたいのでDrawModiGraph関数だと頂点数が少ないかと…

DrawPolygonBase関数は自分の力が足りないためよくわかりません
どこか解説しているサイト等ありませんか?


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

Name: kazuoni [URL]  ..ハッカー(125,045ポイント)   Date: 2010/01/10(日) 17:47   No:45890     
Title: Re:画像を加工する?    
以前、ここの回答者であるyuさんがサンプルを作っていらっしゃったので貼っておきます。
まだサンプルは健在の様子です。

http://www.play21.jp/board/formz.cgi?action=res&resno=37354&id=dixq&lognum=114&from=tree


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

Name: チルチル  ..比類無きプログラマー(87,576ポイント)   Date: 2010/01/10(日) 17:55   No:45891     
Title: Re:画像を加工する?    
まあ本家で解説されていない関数を解説している所はそうそう無いでしょうね

DrawModiGraph関数で曲線が表現できない事は無いですよ
頂点の話で言うとDrawPolygonBase関数も同じと言えば同じですし

DrawModiGraph関数では4個の頂点を使って変形が可能ですが
隣り合った頂点に同じ座標を渡せば三角形になります

これを細かく敷き詰めれば円になります
まあ表示が汚くなると思うのでDrawPolygonBase関数とかの方が良いとは思いますが
仕様が複雑なのでDrawModiGraph関数から始めた方が取っ付きやすい感じです

>kazuoniさん

そういえば前にありましたね
サンプルを見れば一目瞭然だと思います


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

Name: KA  ..ぴよぴよ(104ポイント)   Date: 2010/01/10(日) 18:03   No:45893 解決!     
Title: Re:画像を加工する?    
すごいですね。
これを応用すれば自分の思っているものも作れそうです。

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


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

Name: yu  ..熟練のプログラマー(41,692ポイント)   Date: 2010/01/10(日) 20:07   No:45907     
Title: Re:画像を加工する?    
解決されたようで何よりですが、
サンプルを実行して、魔方陣が大きいときにプログラムを止めて貰うと分かるのですが
画像が縮小されすぎて潰れている箇所があります;

原因はテクスチャアドレスタイプがクランプだけれど
無理やり画像をリピートさせようとしていたからです orz
SetTextureAddressMode関数でラップに変えるとうまくいきました。
(後、何で描画モードをネアレストネイバー法でやっているんだろう...)

一応直したサンプルを置いておきますね
http://www1.axfc.net/uploader/He/so/260179
 編集済み


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

Name: KA  ..ぴよぴよ(154ポイント)   Date: 2010/01/10(日) 20:43   No:45910     
Title: Re:画像を加工する?    
わざわざありがとうございます。
とても参考になります。本当にありがとうございました。


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

Name: 素人  ..上級者(18,947ポイント)   Date: 2010/01/10(日) 22:02   No:45917     
Title: Re:画像を加工する?    
もうあれから5カ月も経ったのか・・
あの、yuさん
// アドレスモード変更
SetTextureAddressMode(DX_TEXADDRESS_WRAP);
を使ったあと、
このモードをもとに戻す時は、なんという関数を使えばいいのでしょうか?


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

Name: yu  ..熟練のプログラマー(41,736ポイント)   Date: 2010/01/10(日) 22:27   No:45919     
Title: Re:画像を加工する?    
DXライブラリはデフォルト状態で DX_TEXADDRESS_CLAMP だと思うので

SetTextureAddressMode(DX_TEXADDRESS_CLAMP);

これでデフォルト状態に戻すことができますよ。


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

Name: 素人  ..上級者(18,972ポイント)   Date: 2010/01/10(日) 22:36   No:45920     
Title: Re:画像を加工する?    
>yuさん
ありがとうございます。助かりました。


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



Name: YUI  ..ぴよぴよ(601ポイント)   Date: 2010/01/10(日) 19:51   No:45905       
Title: 配列とポインタの使い方    
すいません、色々と問題があったようなので建て直します。

error: request for member ‘seq’ in something not a structure or union 
というエラーが出てしまいます。
query_set.seqには文字列が入れられるようにしています。

typedef struct _sequence { 
  int len;
  char *name; 
  char *array; 
  int score;
} sequence;

typedef struct _sequence_set { 
  int num; 
  sequence *seq; 
} sequence_set;

void set_seq_array( char *array, int len, sequence *seq )
{
    size_t  size;

    seq->len = len;
    size = sizeof(char) * (len+1);
    seq->array = (char*) malloc_e( size, "seq->array" );
    memcpy( seq->array, array, len );
    seq->array[len] = 0; 
}

void load_sequence_set( char *file, sequence_set *set ) 
{ 
  set_seq_array( temp_array, len, &(set->seq[id]) ); 
} 

float calc(seqence_set *query_set) 
{ 
  for (i = 0; i < 5; i++) { 
    integral_params[i].query = query_set.seq[i]; /*エラーはここだと表示されます。*/
} 

int main( int argc, char **argv ) 
{ 
  char  *file_query;
  sequence_set  query_set;
  file_query    = argv[2];

  load_sequence_set( file_query, &query_set ); 
  calc(&query_set); 
} 


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


Name: box  ..ハッカー(148,916ポイント)   Date: 2010/01/10(日) 20:00   No:45906     
Title: Re:配列とポインタの使い方    
そのソースは、本当にお手元のものと同じですか?

試しに、そのソースに何も手を加えずにgccでコンパイルしたら
下記のエラーが出ました。

ソース全体を、そっくりそのままコピー&ペーストできますか?


newfile.c: In function `set_seq_array':
newfile.c:15: error: `size_t' undeclared (first use in this function)
newfile.c:15: error: (Each undeclared identifier is reported only once
newfile.c:15: error: for each function it appears in.)
newfile.c:15: error: syntax error before "size"
newfile.c:18: error: `size' undeclared (first use in this function)
newfile.c: In function `load_sequence_set':
newfile.c:26: error: `temp_array' undeclared (first use in this function)
newfile.c:26: error: `len' undeclared (first use in this function)
newfile.c:26: error: `id' undeclared (first use in this function)
newfile.c: At top level:
newfile.c:29: error: syntax error before '*' token
newfile.c: In function `calc':
newfile.c:31: error: `i' undeclared (first use in this function)
newfile.c:32: error: `integral_params' undeclared (first use in this function)
newfile.c:32: error: `query_set' undeclared (first use in this function)
newfile.c:43: error: syntax error at end of input


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



Name: Ω  ..初心者(5,975ポイント)   Date: 2010/01/10(日) 19:24   No:45900       
Title: 描画について    
初めまして Ω(オメガ)といいます。
覚えてる人は御久し振りです。
以前STGをプログラミングしてたんですが、ちょっとした悲劇があって、
もう一度組み直すことにしました。 が、エラーは出ないのに思い通りに動きません。
アローキーの入力に合わせて自機(Ziki)を動かしたいのですが、自機が表示されるだけで動きません。
なんか面倒な組み方してるのは気にしないでください。
環境はBCC Developerです。  返答お願いします。

以下コード↓
#include "DxLib.h"

#define Zimage 2   //Zikiの画像数
#define Zspeed 5   //Zikiのスピード

#define Timage 2
#define Tspeed 5

#define tamax 50  //弾数

typedef struct   {
   int x,y,Tx,Ty; }Zikidate;

typedef struct{
   int x,y;       }Tekidate;
   
Zikidate Ziki;
Tekidate Teki;


char Key[256];
int ZikiM[Zimage],TekiM[Timage];


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
////////////////////////////////////////////////////////////////////////////////////////////////

SetDrawScreen(DX_SCREEN_BACK);

Ziki.x=0,Ziki.y=0;

LoadDivGraph("Ziki.png",2,2,1,20,28,ZikiM);

////////////////////////////////////////////////////////////////////////////////////////////////
while(1){    

ClearDrawScreen();

if(Key[KEY_INPUT_LEFT]==1 )Ziki.x-=Zspeed;
if(Key[KEY_INPUT_RIGHT]==1)Ziki.x+=Zspeed;
if(Key[KEY_INPUT_UP]==1   )Ziki.y-=Zspeed;
if(Key[KEY_INPUT_DOWN]==1 )Ziki.y+=Zspeed;

DrawGraph(Ziki.x,Ziki.y,ZikiM[0],TRUE);

ScreenFlip();


if(ProcessMessage()==-1)break;
if(CheckHitKey(KEY_INPUT_Z)==1)break;

}   
////////////////////////////////////////////////////////////////////////////////////////////////
DxLib_End();
return 0;
}


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


Name: fatens  ..入門者(4,408ポイント)   Date: 2010/01/10(日) 19:32   No:45901     
Title: Re:描画について    
キー入力を調べてないからかと。
GetHitKeyStateAll(Key);


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

Name: Ω  ..初心者(5,999ポイント)   Date: 2010/01/10(日) 19:40   No:45904 解決!     
Title: Re:描画について    
なんという盲点
素早い返答ありがとうございます
解決しました 編集済み


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



Name: たこやき  ..初心者(6,946ポイント)   Date: 2010/01/08(金) 13:16   No:45792       
Title: 固定FPSについて    
一つ質問なのデですが、FPSを固定することはできたのですが(timeBeginPeriod,timeEndPeriodを使用する)
これってパソコンによっては変化することはあるのでしょうか?


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


Name: たこやき  ..初心者(6,965ポイント)   Date: 2010/01/08(金) 13:31   No:45793     
Title: Re:固定FPSについて    
環境書くの忘れてました。win2000〜winXPです。

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

Name: とおり  ..ぴよぴよ(603ポイント)   Date: 2010/01/09(土) 01:34   No:45817     
Title: Re:固定FPSについて    
このサイト内を検索した限りでは、timeBeginPeriodという変数名で記事は見つかりませんでした。
ただし、以下2つの記事のどちらかを参考にしてFPSの処理を実装しているのであれば、60フレームで
表示させるように重みの処理を行っているので、パソコンによって変化しますよ。

・「ゲームプログラミングの館」s6. FPSを表示する。
・「旧シューティングゲームの館」3. 静的変数を使用してFPSを表示する。

また、パソコンを変えなくても、以下のようなプログラムでFPSの低下を検証できます。

FPSを固定して表示するプログラムが書けたのであれば、画像から読み込んだキャラクタなどを表示
するプログラムも作れると思います。まずは100000キャラクタを毎回描写します。
それができたら、キャラクタのx座標、y座標を計算して動かすプログラムにします。

すると1フレームである1/60秒(16ミリ秒〜17ミリ秒)で、100000個の画像を表示しなければなりません。
かなりスペックが高いパソコン出ないと、1/60秒では、100000キャラクタを表示できないので、
30FPSとかになってしまいます。

フレームの増加と共に、表示する画像を増減させたりしてもFPSの変化が分かりやすいと思います。


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

Name: kazuoni [URL]  ..ハッカー(124,963ポイント)   Date: 2010/01/09(土) 02:36   No:45820     
Title: Re:固定FPSについて    
関数timeBeginPeriodはSDK依存なので、windows(95以降)でしか動作しません。
また、もちろん、FPSはユーザーの環境によるので、
自分のPCスペックが並だとしても、
一概に「FPS=60がどのパソコンでも保てる」とはいかないですね。


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

Name: たこやき  ..初心者(6,808ポイント)   Date: 2010/01/10(日) 16:08   No:45877     
Title: Re:固定FPSについて    
回答ありがとうございます。

1、・「ゲームプログラミングの館」s6. FPSを表示する。を
xpで自分で簡単なゲームプログラムを作ってvistaで使ってみたのですが、処理落ち(一瞬止まる(?))
して見栄えが悪くて、自分で考えたのでやったら処理を落ちは最小限に(1より一瞬止まることを
少し抑えることが出来ました)、できたのですがただFPSが56〜59になるのですが、こういう場合自分で作った
プログラムの方を作った方がよいのでしょうか?


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



Name: YUI  ..ぴよぴよ(193ポイント)   Date: 2010/01/10(日) 15:24   No:45873       
Title: ポインタ、配列でのエラー    
error: request for member ‘seq’ in something not a structure or union
というエラーが出てしまいます。


typedef struct _sequence {
int len;
char *name;
char *array;
int score;
} sequence;

typedef struct _sequence_set {
int num;
sequence *seq;
} sequence_set;

ここでseqに文字列を入力しています。
void load_sequence_set( char *file, sequence_set *set )
{
set_seq_array( temp_array, len, &(set->seq[id]) );
}


float calc(query_set)
{
  for (i = 0; i < 5; i++) {
integral_params[i].query = query_set.seq[i];
}

int main( int argc, char **argv )
{
  load_sequence_set( file_query, &query_set );
  calc(&query_set);
}

やはりcalc()で文字列の配列を送ることが不可能なのでしょうか?


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


Name: box  ..ハッカー(148,485ポイント)   Date: 2010/01/10(日) 15:57   No:45875     
Title: Re:ポインタ、配列でのエラー    
> error: request for member ‘seq’ in something not a structure or union
> というエラーが出てしまいます。

ソースの何行目でエラーが出ているかがわかるように、
ソース全体と、エラーメッセージ全体を見せてください。

ソースを見せるときは、<pre>と</pre>タグで正しく囲んでください。
全角空白による疑似インデントはお控えください。
 編集済み


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

Name: たかぎ [URL]  ..ハッカー(148,794ポイント)   Date: 2010/01/10(日) 16:08   No:45876     
Title: Re:ポインタ、配列でのエラー    
> error: request for member ‘seq’ in something not a structure or union 
> というエラーが出てしまいます。

それ以外にも大量のエラーが出るはずです。
状況を再現できるだけの情報を提供してください。


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



Name: タロウ  ..ぴよぴよ(9ポイント)   Date: 2010/01/09(土) 23:13   No:45842       
Title: タイトル画面の作り方    
龍神録のサンプルプログラムにタイトル画面を追加させたいのですが、どうすれば良いのでしょうか?
龍神録をデバッグするといきなりシューティング画面に移行してしまいますが、デバッグ直後はタイトル画面を表示させたいのです。
ここ3週間くらいいろんなサイト見て回ったり色々試行錯誤したりしてみたのですが、ちっとも作れそうにありません…
新たにtitleという関数を作り、ボード描写と同じ感覚でやってみると良いのではないかと思い適当にいじくってみたのですが、ビルドするとタイトル画面は表示されず、そのままゲーム画面に移行してしまいます…
お手数おかけしますが教えてくだされば感謝感激雨あられです!


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


Name: sizuma [URL]  ..プログラマー(28,139ポイント)   Date: 2010/01/10(日) 01:41   No:45854     
Title: Re:タイトル画面の作り方    
感謝感激される回答ではありませんが、ここに基本的な考えは。
http://dixq.net/g/37.html
この前の36とあわせて読むと、タイトル画面の骨格は出来ると思いますよ^^


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

Name: タロウ  ..ぴよぴよ(50ポイント)   Date: 2010/01/10(日) 10:54   No:45865 解決!     
Title: Re:タイトル画面の作り方    
>sizumaさん
わわわ!
こんなページがあっただなんて盲点でした!
もうちょっと注意深く目を通しておくべきでした…
ありがとうございます!


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



Name: AS  ..初心者(8,268ポイント)   Date: 2010/01/06(水) 12:11   No:45668       
Title: メモリに画像や音楽を読み込むときの扱い    
現在はexeを実行したときにまとめて、ゲーム中に使用する全ての画像や音楽を読み込んでいますが、
ファイルによっては、絶対このシーンじゃ使わないよな…と思う音楽や画像もあります。

そこで気になるのですが、画像や音楽は使用するシーンでのみメモリに読み込むようにし、使用しないシーンになったら、そのつどメモリから削除するほうがいいのでしょうか?
恐らく読み込む合計量によるのではないだろうかと考えていますが、
だとしたら何メガバイト以上になるようなら、気をつけたほうがいい。などおおまかな基準があればと思います。

わかるかたがいましたらよろしくお願いします。


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


Name: DVDM [URL]  ..熟練のプログラマー(48,280ポイント)   Date: 2010/01/06(水) 15:33   No:45676     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
>>ASさん
ケースバイケースな感じがします。
最初に読み込む場合や、その都度読み込む場合、両方にメリット・デメリットがあります。
なので、最初に全部読みこむのが駄目ということでもないので、
今のままで大丈夫なら最初に読み込む形でもいいと思います。


読み込みに時間が掛かるから少しでも抑えたい。
メモリの容量を使いすぎてるから削りたいなど、
気になった時にすぐ仕様変更できるようなプログラムにしておくものいいかもしれません。


申し訳ないですが、私は何メガバイト以上とかまでは解らないです。
ただ、PC環境ならそこまで気にする必要もないように感じます(読み込みまくるなら別ですが・・・)


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

Name: dic  ..熟練のプログラマー(48,272ポイント)   Date: 2010/01/06(水) 21:36   No:45703     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
たいてい市販されているゲームでは
普及してそうなスペックを参考にして
作られてますね

個人での開発だったら自分の開発マシンよりちょっと低めの
スペックを想定してみるのが無難だと思います


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

Name: AS  ..初心者(8,743ポイント)   Date: 2010/01/07(木) 09:44   No:45733     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
お二方ありがとうございます。

今のところ、言うほど膨大な量のファイルを使用する予定もなく、一般的なゲーム程度かと思いますが、一応把握はしておくべきだろうと思いまして…

例えば私のパソコンですとメモリは512MBです。
といっても、この容量を全てゲームに回せるわけでもないと思います。(パソコンさんは他にももっと沢山やることあるでしょうから…)
パソコン自体の知識はあまりないのですが、私の昔使っていたパソコンですと、メモリは64MBと少な目です。

となると容量の重いMP3などを起動時に全て読み込んで、64MBのほとんどを占領しては大丈夫なのか不安にもなります。

>個人での開発だったら自分の開発マシンよりちょっと低めの 
>スペックを想定してみるのが無難だと思います

ということですが、ちょっと低めとは具体的にはどのぐらい(全メモリの何%とか何MBとか)なのでしょうか?

それと改めてDXライブラリのホームページにいってLoadGraphやLoadSoundMemのメモリに読み込む系を見ると、
エラー発生時は-1を返すと書いてありますが、これはまさにメモリが足りなくなったときと考えて大丈夫でしょうか?


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

Name: Mist  ..比類無きプログラマー(79,996ポイント)   Date: 2010/01/07(木) 10:04   No:45735     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
> となると容量の重いMP3などを起動時に全て読み込んで、64MBのほとんどを占領しては大丈夫なのか不安にもなります。

メモリ管理はOSのお仕事です。
メモリへの読み込みを行ったときに、メモリが不足していればハードディスク等にスワップされ、必要な時点でメモリに戻してくれます。
あまり神経質にならないほうがいいと思います。
不要であるとわかりきっているデータは削除しておくほうが望ましいとは思いますが。


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

Name: Ma  ..プログラマー(27,823ポイント)   Date: 2010/01/07(木) 11:41   No:45748     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
>ということですが、ちょっと低めとは具体的にはどのぐらい(全メモリの何%とか何MBとか)なのでしょうか? 

正直、あなたのターゲット次第だと思います。
どのような目的でどのような環境で利用されるかを考えれば自ずとも分かるお思います。

たとえば、一般的家庭のPCを対象にした2Dシューティングゲームならターゲットのかたがたの大半は250MB以上はあるでしょうから、ゲームには150MBぐらいを上限にするとか。

あまり古い環境で起動されることがないと予想できるなら、たくさん使っちゃえばいいとおもいます。

ただ、スペックがたくても数GBとか数百MBを一括ロードしようとするのは時間がかかるのでよくないです。
当然ですがユーザーが待ちくたびれない程度にメモリへのロードを分散するのがいいとおもいます。

そういえば、某3Dゲームがシーン変わるごとに数分間ぐらいロードしないといけないのは正直まちくたびれますね。


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

Name: Dixq (管理人)  ..ウィザード(1,131,605ポイント)   Date: 2010/01/07(木) 12:16   No:45749     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
普段これでもかとメモリ使いまくっている管理人ですこんにちは。

私は100メガ位ならおかまいなしにメモリ使うスタイルなのでいつも重いと言われます;
例えば、起動前の使用メモリが180Mで、PCに乗ってるメモリが256M、その状態で100M使う私のゲームを起動すると格段に遅くなります。
メモリがあふれ、HDDに仮想メモリを作ると話にならなくなってしまう場合が多いです。

私が公開している龍神録というゲームは60〜70M前後、エアロビートというゲームは90M前後使います。
私が作るゲームはいつもある程度のスペックを要求するので、メモリはあまり気にしてません。
イイCPUが乗ってるならメモリも沢山あるだろうという安直な考えです。

エアロビートでは全てシーンごとに画像のロード、破棄を行っています。
少々ロードに時間はかかってしまいますが、そうしないといかに言っても無駄なメモリが増えるので。

ただ最初は特に神経質にメモリのことを考えなくても大丈夫だと思います。
目安にするなら作っているゲームがCPUパワーを必要としないなら20M位までに、ハイスペック対象なら100M位大丈夫だと思います。
ただし効率的で無駄が無いプログラムを書くことは常に頭に入れるべき事ではありますね。


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

Name: AS  ..中級者(9,113ポイント)   Date: 2010/01/09(土) 12:04   No:45825     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
皆様ありがとうございます。

メモリが不足するとハードディスクにスワップ…そんなことがあるのですか!知らなかった…
ただそうすると遅くなってしまうようですが…

しかし、許されるであろう容量が思いのほか多くなんとかなりそうだと思いました。

あと、いくらかおおまかな容量を提示していただきましたが、これらの容量は画像や音楽だけに限らず、
プログラム内で使用する変数や構造体の容量も含んだものと考えていいでしょうか?
(変数だけで100MBとかは少なくとも私はありえませんが、確認をしたいので…)


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

Name: softya  ..比類無きプログラマー(85,399ポイント)   Date: 2010/01/09(土) 12:16   No:45826     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
>メモリが不足するとハードディスクにスワップ…そんなことがあるのですか!知らなかった…
>ただそうすると遅くなってしまうようですが… 

必要とするメモリ量が物理メモリ量を超えるとHDDの仮想メモリファイルにスワップされます。
これは、仮想記憶と言う機能の働きです。
http://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6
何処のメモリがスワップされるかは使用頻度で決まりますので、自分のプログラムがスワップされるとは限りませんが、確実にシステム全体の動きは重くなります。

>あと、いくらかおおまかな容量を提示していただきましたが、これらの容量は画像や音楽だけに限らず、
>プログラム内で使用する変数や構造体の容量も含んだものと考えていいでしょうか?
>(変数だけで100MBとかは少なくとも私はありえませんが、確認をしたいので…)

プログラム(プログラムコード、グローバル変数領域、定数など)と動的割り当てをしたメモリの合計の話ですね。画像や音楽も動的割り当てしたメモリに読み込まれます。


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

Name: Dixq (管理人)  ..ウィザード(1,131,937ポイント)   Date: 2010/01/09(土) 12:29   No:45828     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
全て込みです。
タスクマネージャーのプロセスで確認出来ます。

目安は私の勝手な基準なのであてにしないで下さい。
100Mなら大丈夫ではと書きましたが、単純な2Dゲーとかで100Mは食いすぎだと思いますし、何を作るかによりますよね。

例えば100万円は大金ですかと聞かれたらイエスですが、「家の価格として」と言われたら少な過ぎるでしょう。逆に「食費です」と言われたら多すぎます。つまり何をするかによります。

使うお金は少ないに越したことはないわけで、いかに少ないお金で豊かな暮らしが出来るようにするかが頭の使い所って感じでしょうか。

後DXライブラリなら何も読み込まなくても初期化関数呼ぶだけで、ある程度メモリを食いますので、その辺も頭に入れておくとよいかと。

※そういえば、フリーゲームで、簡単な2Dゲームで600Mも食うのがありましたがあれはいかに言っても‥。


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

Name: AS  ..中級者(9,369ポイント)   Date: 2010/01/10(日) 09:49   No:45862     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
softyaさん、管理人さんありがとうございます。

読み込みでどの程度気にするべきなのかが、かなり把握できました。
一発でそこそこ容量を食われるMP3は、最初から使用する音楽のみ読み込むつもりでしたし、
他にかなり容量を食うであろう動作は気をつける気ではいたので、
なんとか大丈夫そうだなと

実際のところ恐らく100MBなんて程遠い使用量になるのではと予想していますw
しかしながら、教えていただいたおかげで、安心してメモリ管理ができそうです。

2Dゲームで600MB…何にそんな使ったんでしょうか…(汗)

なにはともあれ、皆様ありがとうございました。


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

Name: AS  ..中級者(9,364ポイント)   Date: 2010/01/10(日) 09:50   No:45863 解決!     
Title: Re:メモリに画像や音楽を読み込むときの扱い    
すみません。解決マーク付け忘れました。

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



Name: aa  ..かけだし(1,638ポイント)   Date: 2010/01/10(日) 01:38   No:45853       
Title: マスタワーカ形式のプログラムをVC++で…    
これは、マスタワーカ形式で記述したCのマンデルブロ集合描画プログラムなのですが、このプログラムをVC++で動かすにはどうすればいいでしょうか。わかる方いらっしゃいましたら、教えていただけないでしょうか。

#include "common.h"
#include "common.c"
#include "container.h"
#include "container.c"

#define STR_MAX 256
#define REAL_MIN -2
#define REAL_MAX 0.5
#define IMAG_MIN -1.25
#define IMAG_MAX 1.25
#define CAMBUS_WIDTH 320
#define CAMBUS_HEIGHT 320
#define REAL_SCALE ((REAL_MAX - REAL_MIN) / CAMBUS_WIDTH)
#define IMAG_SCALE ((IMAG_MAX - IMAG_MIN) / CAMBUS_HEIGHT)

typedef struct thread_arg_t
{
  int32_t thread_id;
  struct cambus_t *cambus;
  struct jobque_t *jobque;
  pthread_t pthread;
}thread_arg_t;

typedef struct cambus_t
{
  int32_t width;
  int32_t height;
  int32_t iter_max;
  int32_t *buf;
}cambus_t;

typedef struct jobque_t
{
  int32_t index;
  int32_t job_num;
  struct job_t *jobs;
  pthread_mutex_t mutex;
}jobque_t;

typedef struct job_t
{
  int32_t id;
  int32_t x;
  int32_t y;
  int32_t width;
  int32_t height;
}job_t;

void* agent(void *arg);
int32_t calc_point(double cx, double cy, int32_t iter_max);
job_t* jobque_pop(jobque_t *jobque);
void print_cambus(cambus_t *cambus);

int main(int argc, char **argv)
{
  cambus_t *cambus;
  jobque_t *jobque;
  thread_arg_t *thread_args;
  int32_t thread_id, thread_num, job_num, iter_max, print_flag, i;
  double t1, t2;
  
  if(argc < 5)
    {
      errn("usage : %s thread_num job_num iter_max print_flag", argv[0]);
      error();
    }
  
  thread_num = atoi(argv[1]);
  job_num = atoi(argv[2]);
  iter_max = atoi(argv[3]);
  print_flag = atoi(argv[4]);
  
  if(CAMBUS_HEIGHT % job_num != 0)
    {
      errn("CAMBUS_HEIGHT % job_num != 0");
      error();
    }
  
  cambus = (cambus_t*)my_malloc(sizeof(cambus_t));
  cambus->width = CAMBUS_WIDTH;
  cambus->height = CAMBUS_HEIGHT;
  cambus->iter_max = iter_max;
  cambus->buf = (int32_t*)my_malloc(cambus->width * cambus->height * sizeof(int32_t));
  
  jobque = (jobque_t*)my_malloc(sizeof(jobque_t));
  jobque->index = 0;
  jobque->job_num = job_num;
  jobque->jobs = (job_t*)my_malloc(job_num * sizeof(job_t));
  for(i = 0; i < job_num; i++)
    {
      jobque->jobs[i].id = i;
      jobque->jobs[i].x = 0;
      jobque->jobs[i].y = cambus->height / job_num * i;
      jobque->jobs[i].width = cambus->width;
      jobque->jobs[i].height = cambus->height / job_num;
    }
  pthread_mutex_init(&jobque->mutex, NULL);
  
  t1 = get_time();
  
  thread_args = (thread_arg_t*)my_malloc(thread_num * sizeof(thread_arg_t));
  for(thread_id = 0; thread_id < thread_num; thread_id++)
    {
      thread_args[thread_id].thread_id = thread_id;
      thread_args[thread_id].cambus = cambus;
      thread_args[thread_id].jobque = jobque;
      
      pthread_create(&thread_args[thread_id].pthread, NULL, agent, &thread_args[thread_id]);
    }
  
  for(thread_id = 0; thread_id < thread_num; thread_id++)
    {
      pthread_join(thread_args[thread_id].pthread, NULL);
    }
  
  t2 = get_time();
  
  errn("%lf", t2 - t1);
  
  my_free(thread_args);
  
  if(print_flag)
    {
      print_cambus(cambus);
    }
  
  my_free(jobque->jobs);
  my_free(jobque);
  
  my_free(cambus->buf);
  my_free(cambus);
  
  return 0;
}

etc…



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


Name: バグ  ..ハッカー(183,324ポイント)   Date: 2010/01/10(日) 08:22   No:45858     
Title: Re:マスタワーカ形式のプログラムをVC++で…    
試しにVC++で新しいプロジェクトを作成して、必要なファイルを全てプロジェクトに追加してからビルドしてみてはいかがでしょうか?
コンパイラがエラーメッセージという形で修正箇所を示してくれるはずです。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +