[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 07/02 11:43 / Filesize : 233 KB / Number-of Response : 945
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっとC#,C♯,C#(初心者用) Part47



1 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:23:31 ]
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ
ふらっとC#,C♯,C#(初心者用) Part45 (実質46)
pc12.2ch.net/test/read.cgi/tech/1255658236/

464 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:26:49 ]
プラグインって何だ?
普通にカスタムコントロールじゃね。

>選択肢
タップ&ホールドさせてメニュー出すのがWMの流儀。

465 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:27:42 ]
>>463
描画方法はカスタムドローのノリでいいんじゃね
アイコンの管理はContextMenuのように親子を階層管理して、
クリックイベントは親で評価して該当する子に伝えて
子は自分の管理する孫にヒットテストしていく感じで


466 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:49:03 ]
>>464
ありがとうございます
プラグインは普通にプラグインです
DLLであとから供給される機能なので後からメニューに割り込ませないといけないです
タップ&ホールドさせてメニュー出す→一つ選ぶ→そこから更に選ぶ 例えば描画なら エフェクト→モザイク→小・中・大
みたいにモザイクプラグインが自分で持ってる選択肢がどのように展開するかを先に決めることができないので・・・

>>465
ありがとうございます
ノリ的にはカスタムドローなんですよね
管理のイメージもContextMenuのListを持たせる方式がなんとなくイメージしやすいです
イベントの処理をどうしようか悩んでたら
>クリックイベントは親で評価して該当する子に伝えて
>子は自分の管理する孫にヒットテストしていく感じで
あーなんか光明が見えてきた感じです
仮想関数のデリゲートのインスタンスで解決するですかね?
スマートな方法というか、常道ではどうするのでしょうか?

467 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:49:14 ]
C#でゲーム作りたいけどC#でゲーム作るサイトがあまりない・・・
C言語とかC++で作るページならいくらでもみつかるのに。

使いやすさ、簡単さはC#のほうがいいけど
やっぱサンプルコードが充実してるっていう点ではC++とかのがいいなぁ

468 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 11:02:41 ]
アプリケーションの設定で、独自の型を設定するにはどうしたら良いのでしょうか?
「参照」ボタンを教えても、自分の作ったネームスペースは出てこないんです。



469 名前:465 mailto:sage [2009/11/14(土) 11:07:33 ]
>>466
メニューが整列したデスクトップアイコンみたいなの想像してるんで
Zオーダーは考慮してないから注意してね
子から親ならデリゲート(イベント)かなと思ったけど
親から子ならインターフェース使うかなぁ
すべてのメニューに共通のインターフェース持たせとけば楽かと
void NotifyMouseClick(〜Args e) みたいな感じにするかな
継承まで考えるならこのメソッドの実装で virtual void OnMouseClick(〜) を呼ぶ

470 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 11:15:19 ]
>>469
>メニューが整列したデスクトップアイコンみたいなの想像してるんで
>Zオーダーは考慮してないから注意してね

OKですWMでアイコン並べるって話ですからiPhoneのアイコンと同じイメージです

>親から子ならインターフェース使うかなぁ
>すべてのメニューに共通のインターフェース持たせとけば楽かと
>void NotifyMouseClick(〜Args e) みたいな感じにするかな
>継承まで考えるならこのメソッドの実装で virtual void OnMouseClick(〜) を呼ぶ

なるほどなるほど
メッセージの流れを先に決めてしまえばイメージしやすいですね
親から子 子から親 要素からコンテナ みたいにいろんな方法がとめどなくあるので
身動き取れませんでした

なるべくいろいろなプラグインに対応できるようにここは慎重に考慮すべきですね
でも、頭の中がだいぶすっきりしてきました
ありがとうございます

471 名前:デフォルトの名無しさん [2009/11/14(土) 11:50:06 ]
MyClass<T>というのがあり、

Dictionary<string,MyClass<T>>のようなことをしたいのですが、
ここでDictonaryが保持するMyClassはMyClass<int>やMyClass<string>
のように複数の場合、どうしたらいいですか?

最悪Refrection使っても問題ないので、よろしくお願いします。

472 名前:デフォルトの名無しさん [2009/11/14(土) 11:58:25 ]
デバッグした時にエラーがあると、前回成功した結果で勝手に実行されるのをやめさせるには
どの設定を変えれば良いですか?

例えば、

private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "こんにちは";
}

で実行したあとに

private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "こんばんわ" エラー;
}

を実行すると、エラー一覧画面で怒られているのに
最初に実行した"こんにちは" が表示されるという具合です。


C# 2008のお試し版を使っています。



473 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 12:10:08 ]
>>471
Dictionary<string, object> かねえ・・・
せめてMyClassに共通の具体的な継承元があればそれにしておくくらいか

>>472
そんな現象は起こらないので、何か勘違いしてる

474 名前:471 mailto:sage [2009/11/14(土) 12:17:56 ]
>>473
レスありがとうございます・。

objectにしちゃうと、受け側で int hoge = (int)myDictionary[keyString].GetValue()
みたく、キャストしないと受けれないですよね? それを避けたいというのが動機です。

継承元を作るもやってみたのですが、
外部からmyDictionary[keyString].GetValue()のような形で呼ぶためには、
共通の基底クラスにも
MyBaseClass
{
public abstract "Type" getValue();
}
が必要になり、何一つ解決しませんでした。




475 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 12:29:02 ]
>>474
そもそも、異なる型を一つのコレクションに突っ込もうとしてる時点でキャスト避けるのは無理に近い
他のデメリットをすべてかなぐり捨ててキャストだけ排除したいなら、
想定する全部の型をメンバーに持ったクラスにするしかない
バリアント型みたいに型を表すenumでも持っておいて、それを見て取り出すべきフィールドを決める
まあ、やんない方が良いね。そもそも設計の方に問題があると思うから
あと気になったんだが、GetValue()の結果をキャストするのっておかしくないか?
object item = myDictionary[keyString] as MyClass<int>;
int hoge = item.getValue();
こうあるべきだと思うけどね。

476 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 12:30:20 ]
書き損じた
objectで受けるんじゃなくて MyClass<int> だね

477 名前:471 mailto:sage [2009/11/14(土) 12:32:21 ]
訂正
objectにすると、
(MyClass<int>)myDictionary[keyString].GetValue()
とするのにキャストが必要。
objectのままだと当然GetValue()にはアクセスできない。
の間違いでした。


478 名前:471 mailto:sage [2009/11/14(土) 12:39:26 ]
連続で失礼。
>>475さん
やっぱりある種、動的型付け的なことなので無理なんですかね。

typeof(int) "12" や、 typeof(String) "もじ”
などの型情報とそこで指定された方にParse可能な文字列を保持しているペアがあって
その型情報をもとにParseして指定された型で返すというものを作りたかったので
扱いたい型の数だけフィールドorメソッドを用意する or objectで受けてキャストするのが解っぽいですね。

getIntValue() { return (int)value;} みたいなのを色々用意するくらいなら
受け側でキャストした方が楽か…

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

479 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 12:51:53 ]
>>478
そういうことならMyClass内ではstringのまま持って以下のような方法も・・・
enum ElementType { None, Number, Text ..}
class MyClass
{
 ElementType ElementType { get; }
 T getValue<T>() { ... }
}
MyClass item = myDictionary[keyString];
switch (item.ElementType)
{
case ElementType.Number:
 int hoge = item.getValue<int>();
 break;
...
enumじゃなくてTypeを公開してもいいかもだけど

480 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 13:11:53 ]
これじゃだめ?
public class MyClassDictionary<T>
{
  public Dictionary<string,MyClass<T>> dic { get; private set; }

  public MyClassDictionary()
  {
    this.dic = new Dictionary<string,MyClass<T>>();
  }
}


481 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 13:27:34 ]
>>467
XNAを使うんだ!

482 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:06:54 ]
オブジェクト指向ってすごいな。
オブジェクト指向がない言語ってどうやってプログラム組んでるんだろうな。
if文とかすごく多くなって見づらそうだね。



483 名前:480 mailto:sage [2009/11/14(土) 14:10:38 ]
って、ちゃんと読んでなかったスマソ。

484 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:17:53 ]
>>467 作りたいけどサイトが無いって
ずいぶん妙な事言ってるな
作るのは自分じゃないのか。他人ありきなのか

自分でアルゴリズムやロジック考える事こそがプログラミングだぜ


485 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:18:57 ]
>>482
どんな言語でもオブジェクト指向プログラミングは出来る
しやすいかどうか(文法としてサポートしてるかどうか)の違い

486 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:23:27 ]
>>485 同意
そういや「オブジェクト指向」ていつのまにかただの単語になっちまってるな
オブジェクトとして捉え観察してコーディングする指向の呼称だったはずなのにな


487 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:31:20 ]
オブジェクト指向言語使ってるのに
switchでの処理分けばっかりしてるようなやつもまだ沢山いるけどね。


488 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:32:14 ]
プログラミング関連に限らずこの世に「ただの単語」じゃない単語があるならkwsk
どんな複雑で難解な数学用語だろうが「ただの単語」だろ?理解できる人が多いか少ないかの違いがあるだけで。

489 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:32:24 ]
>>484
んなこたない
できるだけ横着するために苦労するのがプログラミングだと思うぞ
車輪の再発明して威張っていいのは学生まで

490 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:35:00 ]
>>488
バズワードになったっていいたいんじゃね?
ja.wikipedia.org/wiki/%E3%83%90%E3%82%BA%E3%83%AF%E3%83%BC%E3%83%89

491 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:36:20 ]
>>487
俺のことか・・・

492 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:37:25 ]
真面目な話、他人の作ったライブラリやコード片やサービスとか上手に組み合わせて
面白い何かをいかに素早く作れるかが重要だよな。ここ最近は。

なに、レビューワーがしっかりしてりゃいいんですよ。



493 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:38:54 ]
>>488 いや言いたいのははそういう事じゃない

元の意味を忘れてしまってるって話だ。前レスからの文脈を理解してくれ

494 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:39:25 ]
>>491
switch とオブジェクト志向、全然関係ないから気にするな

495 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:41:59 ]
switch使うならStateパターン使えよターコ
ボケ
カス

496 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:45:27 ]
>>492 >>489
ここが「初心者向け」と看板がついたスレなのを忘れたか

いくつの車輪を再発明できるかがその人の理解の幅や知識、地力を上げると気付けよ
効率の話はまたその先の話だ

基礎的な発想や当たり前レベルだと、慣れた人がパッと見てわかるような事さえ初学では判断もできない訳だから
なんでもショートカットしてコピペで済ませてはいけない

お前さんも経験あるなら理解してもらえると期待する


497 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:46:04 ]
パソコンが普及した

マイクロソフトがVSをただで配ったりBorlandがDelphiをただで配ったりした

一般大衆も高性能なプログラミング言語を手に入れられるようになった

いままで一部の専門家しかプログラムなんてやらなかったのが普通の小中学生でも手を出すようになった

オブジェクト指向などの概念などをわかりやすく解説するサイトが増えた

浅い知識だけのオブジェクト指向が広まった

こういうことか

498 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:49:40 ]
>>496
だから「"学生"まで」なんじゃね?

>>484>>489>>492>>496
つか不毛な精神論語って悦に入ってるぐらいならさっさと参考になるサイトでも教えてやれよって思うんだがな。

499 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:50:59 ]
switch(currentState)みたいなのは多態使うべきだけど
メソッドの引数なんかはよっぽどのことがないかぎり
普通にswitch使った方が適切

500 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:51:03 ]
>>495
コードの見通しが悪くなる弊害を無視して
常にそれなら、それはそれでアホだな

501 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:52:56 ]
>>499
パターン覚え立てだと凝ったことやりたがるのはよくあること
シングルトンの乱用なんかが典型的だな

502 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:55:58 ]
>>498 不毛な精神論なんてどこを読んだらそうなるんだよww
考え方やスタンスが無くてどんなコードが書けるんだ
攻略サイトが無いとパズルゲー解けないみたいな主張はゆとりと言うより、ちょっとひどい勘違い



503 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:58:24 ]
>>502
自分で考えろだの拾ってくるのが正しいだの、こんなの何の役に立つアドバイスなの?
発言してて気持ちいいだけっしょ?

504 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:59:22 ]
>>501
逆に初学の間は(どんなにコーディングに慣れた人でも新しい何かを始めた時も含めて、初学の間は)
色々無茶するのはむしろアリだよな

仕事に適用しなきゃならん場合は確実に除いて

505 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:01:00 ]
デザパタはあくまでよくあるパターンでしかないからな。
それにGoFで挙がってるのが唯一無二ってわけでもないし。
何でもかんでもアレに当てはめようっての自体がアンチパターン。

506 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:03:13 ]
>>503 どうしてそんなスタンスで話を見てるのか、俺にはそれこそお前の気持ちがわからない
俺はどんな話でもそこにヒントを探す。何故ならその方が自分の時間に無駄が無いから

てか、気持ちいいだけでしょ?とか、その発想の方が不毛で無駄
コーディングの役にあんまり立たない

507 名前:新人 mailto:sage [2009/11/14(土) 15:03:41 ]
クイックソート実装しました!
エラー処理とかきっちりやったんで100行ぐらいになりましたよー!いやー苦労しました!
標準ライブラリのとかってなんか遅そうじゃないですか?

508 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:05:05 ]
IPアドレスにマッチする正規表現ってこれでいいですか?
private static Regex regexIP = new Regex(@"(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])");


509 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:06:07 ]
>>506
そりゃお前の話だろ
何故ならその方が自分の時間に無駄が無いから(キリッ
気持ちいいですか?

510 名前:471 mailto:sage [2009/11/14(土) 15:08:01 ]
なんかすごい勢いで流れてますが、
>>479さん、追加例ありがとうございます。
MyClass自体は非ジェネリッククラスにして、
objectに外部で指定された型にParseしたvalueを入れておき、
myclass.getValue<int>();
みたいにとるのも可能性としてはありますね。
結局、
(int)myclass.getValue() と myclass.getValue<int>();
なら前者がシンプルでわかりやすいかなという気がします。
長々とお付き合いいただきありがとうございました。

511 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:08:27 ]
>>508
IPアドレス 正規表現でググってでてくるのが軒並それと一緒だから多分大丈夫じゃね?


512 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:09:08 ]
>>505 同意。その良くあるパターンを良くある理由も含めて追いかけると、先に進むにつれて楽になる
自分の技や発想のバリエーションがマジで広がる
何がアンチパターンなのかもきっとわかるよな




513 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:10:31 ]
>>509 お前多分向いてないよ。もう消えとけ


514 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:10:48 ]
>>510
どういたしまして。

つーか、おまえらこんなにいるくせに
黙ってスレ眺めてたのかよ、きめえww

515 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:13:18 ]
ある引数の値の範囲を実行時じゃなくコンパイル時に制限することって出来ますでしょうか
値の範囲自体は1-9とかの狭い範囲です。(マージャンゲームの実装をしています)

enumを使ったり値自体をクラスにすれば出来そうな気もしますが、そういうやり方が正しいのかどうか
よくわかりません。


516 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:13:22 ]
>>508
(25[0-5]|2[0-4]\d|[01]?\d\d|\d)
こうしないと数字の途中で切れるんじゃ

517 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:14:22 ]
多分3人ぐらいで回してると見たね。

518 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:16:27 ]
俺もそう思う

519 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:17:07 ]
そんな感じ

520 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:17:56 ]
>>512
ただ、それはアンチパターンだよ、ってのを教えてもらわないと
一生パラダイムシフトしないまま終る人も居る気がするよ。

仕事でやってりゃ怒られたりほされたりして気付くだろうけど
シコシコフリーソフトをソース公開しないで発表してたりする場合は
誰にも何にも言われんからなぁ。


521 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:18:43 ]
>>517-519
お前らかww

522 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:22:34 ]
>>520 あぁ確かに。
指摘してもらえるのって大事だもんな
誰も一人では成長できないって奴だ

自分で広げるスタンスをデフォにした上で、他の人の意見を理解する、みたいな
やはり同意



523 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:25:28 ]
ボタンを押した瞬間にコンテキストメニューを表示する動作を実装してるんですけど
ContextMenuStripを使うとメッセージをブロックしてくれないから?ポップアップすると
ボタンがアップしてしまいます
これをContextMenuで実装するとボタンが凹んだ状態を維持出来るんですけど
機能がContextMenuStripに比べて少ないのでそれはそれで困ります
そこで、ContextMenuStripでShowしたときにメッセージをブロックする良い方法があれば教えてください
APIのTrackPopupMenuを試してみましたが表示されませんでした
なおボタンをトグル式にしたりして見た目上回避する方法はとれません

524 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:30:31 ]
>ボタンをトグル式にしたりして見た目上回避する方法はとれません
なぜ?
単にそれだけで解決する「問題」に思えるんだけど。
ちなみに、個人的にはそんなメニューが表示されている間だけ「ボタンがフリーズする」
UIは生理的に気持ちが悪い気がする。

525 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:31:42 ]
>>523>>463を頑張ってるんじゃないんだろか

526 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:37:24 ]
>>524
エクスプローラの「アイコン/一覧/詳細」の切り替えボタンの動作といったら分かりますかね
凹んだ状態でもう一度押したらポップアップが解除されるだけですけど
メッセージがブロックされてないと、一瞬閉じてまた開きます
これ以外にも細々とした挙動で多くの不都合がありますので採用できません

>>525
別人です

527 名前:デフォルトの名無しさん [2009/11/14(土) 15:41:20 ]
「秀丸エディタ」でC#用のソースを生成しようとしたのですが、
「秀丸エディタ」の正規表現の置換がうまくいきません。

作業内容は、
(1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、
(2)「秀丸エディタ」でそのテキストデータを開き、
^(先頭文字)⇒¥t¥t¥t
に全置換しようとしました。

もともとテキストデータであったファイルを置換するときはうまくいきますが、
Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。
どうすれば、先頭行を置換できるでしょうか。

スレちがいかもしれませんが…よろしくお願いします。

528 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:48:12 ]
趣味でプログラミングやってる人に仕事でやってるようなノウハウを押し付ける人たちってきめぇわ
死ねよ

529 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:48:19 ]
>>527
マルチポストです

530 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:50:11 ]
>>527
スレ違い帰れ

531 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:50:48 ]
class このスレ{
public int バカ;
public string アホ;
public static void 無駄レス();
}

532 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:53:08 ]
>>528
な。連中がしてることってオナニーだよな。



533 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 15:53:37 ]
>>526
なるほどお節介をいって申し訳ない。

ちなみに、今ちょっと実験してみたらButtonのOnMouseUpをオーバライドして
ベースクラスのOnMouseUpを呼ばないようにすると「押されたまま」の状態になるようだ。

ボタンを通常の状態に戻したいときには、OnMouseUpが呼ばれた時のMouseEventArgsを
保存しておいてベースクラスのOnMouseUpを呼べばいいみたい。

これがWindowsプログラミング的に正しいかどうかは分からないけど。

534 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:03:22 ]
>>533
ありがとうございます
確かにその方法でボタンの押しっぱなしには対応できますね
ただボタンを左クリックして解除された時の動作や、
ポップアップしているメニューと関係のないコントロールの
キーボードショートカットなどが効いてしまいます
これらの多くの問題に対処するには、どうしても
ContextMenuのようなメッセージをブロックする形で
ポップアップしないとキリがない感じです・・・
なので、なんとか辻褄を合わせるような対処法は避けたいのです

535 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:04:44 ]
麻雀牌のクラスを作る場合、
abstract class 牌 {}
abstract class 数牌 : 牌 {}
abstract class 萬子牌 : 数牌 {}
class 一萬 : 萬子牌 {}
...
abstract class 字牌 : 牌 {}
abstract class 三元牌 : 字牌 {}
class 中 : 三元牌 {}
...
ってやって全部クラスにしちゃうのと

abstract class 牌 {}
enum 数牌タイプ { 萬子,. 筒子,... };
class 数牌 { 数牌タイプ Type, int Number}
enum 字牌タイプ { 東, 南,.... };
class 字牌 { 字牌タイプ Type, }

みたいに途中でenumで振り分けちゃうのはどっちが実装として正しいんでしょうか?

536 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:24:12 ]
いろんな言語を勉強すると
今まで使ってた言語の良い部分と悪い部分が浮き出てきて良いなぁ

537 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:32:50 ]
>>536
スレ違い


538 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:34:38 ]
decimalってなんで最後にmつけるの?
decimalなんだからdでいいだろ!doubleと間違うならdeでいいだろ!
なんだよmって!

539 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:38:33 ]
プロが作ってるソフトつっても公開してるフリーソフトみてもらえればわかるけどレベル低いよ
プロのうんちくは読んだ本の受け流し
趣味グラマでも萎縮する必要はないよ

540 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:39:48 ]
>>538
moneyのmだろksg

541 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:40:26 ]
>>535
まず、牌の種類ごとにクラス分けする必要があるかどうか疑問だなぁ。
牌を使って何をするかにもよるが。

542 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:40:26 ]
>>539
具体例プリーズ



543 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:48:05 ]
>>541
回答が貰えた!ありがとうございます。

最初は牌クラス一つにしようと思ったんですが、
数牌は種類と数字が必要なのに字牌は種類だけ必要 => 字牌の場合数字が死にプロパティになる?ってのと、
ドラの牌を調べるのにこの牌の次の牌(九萬の次は一萬、南の次は西とか)はそれぞれの種類毎に
あったほうがいいかなぁと思って、それならどんどん派生させた方がいいのかなぁって思えてきまして・・・

実際に処理する場合は
牌インスタンス is 萬子 で判定するか、
牌インスタンス.Type == 数牌タイプ.萬子 で判定するかの違いぐらいかなぁって漠然と考えています。

544 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:58:30 ]
二次元配列で
0-1 東 0-2 南 0-3 西 0-4 北
1-1 白 1-2 葵 1-3 中
2-1 2-2 ... 2-9 萬
3-1 3-2 ... 3-9 筒
4-1 4-2 ... 4-3 索

545 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:07:41 ]
>>544
??インデックスを牌クラスに持たせるということでしょうか??


546 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:42:41 ]
条件分岐は逐次処理になってしまうんでしょうか?
全スレッドに対して一様に条件分岐を行うと処理が遅くなったので…

547 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:51:26 ]
条件判断に使ってるインスタンスがロックされてて
逐次処理になってるんじゃね?

548 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 18:12:15 ]
ふふふ・・・面白い漫才スレw。

はじめから完璧なものを作れた人なんていないしプロは過去の遺産を使いまわしているから
穴が少ない傾向にあるだけでしょ。どんな使われ方をしても大丈夫なプログラムなんて
そうそう作れるものではない。それは色々なOSが証明している。

と、初心者なおらは思う。

549 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 18:13:42 ]
>>548
ん?何に対する話だ?完璧なプログラムの話なんか誰かしてたっけ?

550 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 18:25:59 ]
完璧なものを作る・・・?どんな使われ方をしても大丈夫なプログラム・・・?
printf("Hello World!!\n");
残りmain部分だけしか書いてないならどんな使い方をしてもバグは起こらないだろうな

551 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 18:41:02 ]
しかし、ランタイムが入っていなかった!

552 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 18:49:50 ]
>>551
どこまでをプログラムとするかでそこらへん変るから。



553 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 19:11:47 ]
ランタイムがバグっていた!

554 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 19:44:58 ]
>>543
>>541 の言う通りなにをするかによるんだけど。

自分だったら牌クラスをひとつ用意した上で、enum で牌の種類を全部定義して、それをプロパティで
設定/参照できるように作る。テキストベースなプログラムを作るなら、牌をユーザに示すための文字を
設定/参照するプロパティを、GUI? なプログラムなら、牌のイメージを格納したビットマップかなにかの以下略。

‥‥と脱線気味な雰囲気に抵抗してみた。w

555 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 20:00:26 ]
>>554
役を判定するときにクラスに別れてたほうが判定しやすいかなーと思ったけど
よく考えてみると緑一色判定とかしたくなったら牌を特定するしかないわけだから
渡された牌があるグループに属してるか判定する静的メソッドでも作った方が
シンプルになりそうですね。

牌はenumで全定義、グループ判定は静的メソッドの方向でがんばってみようと思います。ありがとうございました。

556 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 20:09:05 ]
>>555
静的メソッドより、Is萬プロパティとかの方がC#っぽい
ような気がする。

557 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 20:48:39 ]
>>556
牌のインスタンスにIs萬とかIs数牌とか付けるってことですよね。
そこらへんどう解決するのがスマートなのかなんですよね、結局。

Is萬とかにする場合・・・
◯{get; private set;} なプロパティにしてコンストラクタ内で設定
--> コンストラクタでenum牌タイプを見てswitchして判断する? → コンストラクタがごつくなる・・・
◯コンストラクタに引数で渡す
--> Is萬がtrue, Is字牌がtrue、typeが一索なんてのをはじけない

って書いてて思ったけど、HashSet<牌タイプ> 萬子Set, 索子Set..... とか作って
それで判断すればそんなにごつくならないかな・・・

558 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:02:27 ]
VBとVC#ならどちらがプログラム初心者にとっては組みやすいですか?


559 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:03:58 ]
試しに書いてみれば?
書くと何がスマートじゃないか何となくわかるからそれで書き直せばOK

560 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:05:30 ]
>>558
c#

561 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:12:23 ]
>>560
どうしてでしょう?
VBは入門言語だと聞きますが、VC#も似たようなものでしょうか?
また、趣味で本格的なプログラムをするとなればどちらが有利ですか?

562 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:14:42 ]
どちらも難易度は変わらない
趣味なら断然C#。VBを選ぶ積極的な理由はない。使ってる人はみんな仕方なく使ってるだけ。



563 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:18:44 ]
昔はVBとVC++が比較されてて、
VC++はポトペタ(フォームに貼り付けてイベント直接書いて終わりの書き方)が今一な上、
C++の概念もMFCも難しかった。よってVBの方が楽っていわれてた。

その流れでVBの方が楽っていまだに言う人がいるんじゃないのかなぁ。

VBもVC#も.NETを使いこなすのが一番のポイントになってるから
文法が違うぐらいでやるこた一緒だよ。

んで文法の自由度はC#の方が強力。


564 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:25:40 ]
趣味なら情報は主にwebに頼ることになるだろうけど,それについてはC#の方がずっと充実してるんだよね
オープンソースプロジェクトもほとんどC#
C系言語に慣れてればjavaやC++の情報も理解しやすい






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<233KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef