トップページ⇒tech
161コメント44KB

畠山くんのdelphi教室

■ このスレッドは過去ログ倉庫に格納されています
0001畠山 幸助NGNG
僕、畠山幸助にdelphiの簡単なプログラミングを教えるスレです。
まずはテキストエディターなどからよろしくお願いします。

あ、ほんとに初心者なのでやさしくしてくださいね♪
ゆくゆくはファイル操作などまでできるようになりたいです。
0002デフォルトの名無しさんNGNG
Abort;
0003デフォルト名無しさんNGNG
2
0004重複スレですよ。。。&rlo;複重&lro;NGNG


モナーの *やさしい* Delphi質問スレ Ver.8
http://pc3.2ch.net/test/read.cgi/tech/1027873869/l50

真・スレッドナビゲーター。。。( ̄ー ̄)ニヤリッ

0005デフォルトの名無しさんNGNG
バグ技?
0006デフォルトの名無しさんNGNG
モナーの *やさしい* Delphi質問スレ Ver.8
http://pc3.2ch.net/test/read.cgi/tech/1027873869/l50
0007重複スレですよ。。。lo;複重&lro;NGNG
珍・スレッドナビゲーター。。。( ̄ー ̄)ニヤリッ
0008畑山浩介NGNG
いやいやいや、違うんですよ。
今週は●●をやってみよう。まずは〜
とかいって僕に教えていくんですよ。
質問スレとかじゃだめなんですって。
やだなぁ。勘違いしちゃ。
0009デフォルトの名無しさんNGNG
いくら出すの?
0010デフォルトの名無しさんNGNG
スレッド

 固定ハンドルが題名に入っている・固定ハンドルが占用している・閉鎖的な使用法を目的としている・等は、自己紹介板・最悪板・夢・独り言板・おいらロビー・なんでもあり板以外では、原則として全て削除または移動対象にします。

0011畑山浩介 NGNG
損なことは聞いてません。
0012畠山 幸助NGNG
まんこ!まんこ!!まんこ!!!
0013デフォルトの名無しさんNGNG
>まずはテキストエディターなどからよろしくお願いします。
マイクソからメモ帳ソースダウソロードできるよ
0014デフォルトの名無しさんNGNG
削除依頼完了
0015デフォルトの名無しさんNGNG
12 :畠山 幸助 :02/10/03 23:24
まんこ!まんこ!!まんこ!!!
0016畠山 幸助NGNG
テキストエディターなどから。

0017デフォルトの名無しさんNGNG
し ね し ね し ね し ね し ね し ねし ね し ね し ね しね 
し ね し ね し ね し ね し ね し ねし ね し ね し ね しね し ね し ね し ね し ね し ね し ねし ね し ね し ね しね し ね し ね し ね し ね し ね し ねし ね し ね し ね しね 
し ね し ね し ね し ね し ね し ねし ね し ね し ね しね 
し ね し ね し ね し ね し ね し ねし ね し ね し ね しね 
し ね し ね し ね し ね し ね し ねし ね し ね し ね しね 
し ね し ね し ね し ね し ね し ねし ね し ね し ね しね し ね し ね し ね し ね し ね し ねし ね し ね し ね しね 
g
0018デフォルトの名無しさんNGNG
マジで氏んで欲しいと思った。
0019畠山 幸助NGNG
僕のスレで好きにして何が悪いんですか。
まともなアドバイスもできないくせに。
0020デフォルトの名無しさんNGNG
スレは誰のものでもありません。
0021デフォルトの名無しさんNGNG
2ちゃんねるは何でもありです。スレを個人のものにするのも自由です。
0022デフォルトの名無しさんNGNG
>>1
自分で自分のことを君付けで呼ぶんですか?
キモイ
0023デフォルトの名無しさんNGNG
荒らすのも自由です。匿名ですのでばれません。ストレス解消に利用しましょう。
0024デフォルトの名無しさんNGNG
荒らすのもストレス解消に利用するのも自由ですが、匿名といってもインターネットの匿名性は完全ではありません。
それは自己責任でどうぞ。

自分もストレス発散して、相手も多少は楽しめるように振舞うと、楽しいかもしれませんし、
逆にクサクなって楽しめないかもしれませんので、それも自己責任でどうぞ。
0025デフォルトの名無しさんNGNG
インターネットの匿名性は完全じゃありませんが、
2ちゃんねるにカキコしているだけではばれることはありません。
2ちゃんねるはいわばインターネットの無法地帯のようなものです。

自分が楽しいことが相手が楽しいとは限りません。
自分が楽しくないことが相手が楽しいこともあります。
相手のことは何もわかりません。
現実世界では相手のことを思いやるべきですが、ここは2ちゃんねるです。
相手のことを考えるより素直に自分の思うがままやるのが一番2ちゃんねるらしいのです。
0026デフォルトの名無しさんNGNG
delphi 最強!
0027デフォルトの名無しさんNGNG
どうよ?
0028畑山 浩介NGNG
まだか・
0029デフォルトの名無しさんNGNG
>>25が(・∀・)イイ!事言った!
ここは2ch。ネット上のダウンタウン。
やなやつはもっと上品なサイトにいけばいい。
0030デフォルトの名無しさんNGNG
delphi 以外は糞!!
0031デフォルトの名無しさんNGNG
>>30
お前が糞
0032デフォルトの名無しさんNGNG
0033デフォルトの名無しさんNGNG
0034デフォルトの名無しさんNGNG
0035デフォルトの名無しさんNGNG
はい、バカが来た
  ↓
0036馬鹿NGNG
 な、何で馬鹿だと分かったんだ。

 どうでも良いけど、畑山君よ。ちっとは本かなんかで調べてたらどうな
んだい。秋葉原の「ラオックス書籍館」とかでプログラミング・コーナー
に行けばいくらでもあるだろう。「良い書籍はないですか?」とかなら、
まだ話が分かるけどよ。
0037馬鹿NGNG
 上の >36 は「畑山」じゃなくて「畠山」だな。
 俺、本当の馬鹿だ。うーむ、もう今日は夜遅いから、寝るとする
か。おやすみ。
0038デフォルトの名無しさんNGNG
>>36
ageんな!
0039IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0040デフォルトの名無しさんNGNG
記念カキコ
0041デフォルトの名無しさんNGNG
職場、学校、座敷牢から気兼ねなく書き込みでける
ってゆってたのにー
プンスカ!!
0042デフォルトの名無しさんNGNG
>>363,>>367
サンクスコ
0043デフォルトの名無しさんNGNG
22 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:19 ID:rLfxQ17l
   家族構成と小学校時代の恥ずかしかった思い出も記録されます。

0044デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0045デフォルトの名無しさんNGNG
>>284
そうだよね。
勘違いしてる奴おおいし、

現実世界と同程度の責任を求められる事が当たり前になるように
なるといいね。

0046デフォルトの名無しさんNGNG
567が良い事言った          
0047デフォルトの名無しさんNGNG

>1 :ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ :03/01/08 17:13 ID:???
>そんなわけで、qbサーバでIPの記録実験をはじめましたー。

IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/l20

IP記録実験PART2
http://qb.2ch.net/test/read.cgi/accuse/1042020193/l20

これまでのあらすじは >>2-20 あたりに誰かお願い。
0048デフォルトの名無しさんNGNG
一年ぐらい前にニュー速でチョロっと騒いでた「TSB」の人?
あのスレ結局どうなったんだっけ?
0049デフォルトの名無しさんNGNG
保守
0050デフォルトの名無しさんNGNG
ところで今日も今日とて某ヲチ板の或厨がせっせと2chの中傷を自サイトで行ってるわけだが
(今日はグーグルまでもが中傷対象になってた)
ひろゆきは2chとして或厨を訴える気はないの?
0051デフォルトの名無しさんNGNG
オペラ
0052デフォルトの名無しさんNGNG
>>700
壁貼るな、ド阿呆
0053デフォルトの名無しさんNGNG
ワンクリックで確認できるだろ。
0054デフォルトの名無しさんNGNG
お馬鹿さんは来ないで欲しいってことですな
逆に質の低い書きこみが減ってさらに人が増えたりして
0055デフォルトの名無しさんNGNG
初めは気にするが、すぐに忘れるバカな日本人。
0056デフォルトの名無しさんNGNG
あげてみたり。
0057デフォルトの名無しさんNGNG
そういうのは厳しくなりそう
P2Pとかに潜るんでしょう
0058デフォルトの名無しさんNGNG
さよなら2ちゃんねる
0059デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0060デフォルトの名無しさんNGNG
全
部
た
て
読
み
に
し
よ
う
。
0061デフォルトの名無しさんNGNG
111 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:33 ID:rLfxQ17l
   >datの書いた内容とIPが対になってることを証明すんのもめんどくさいもんな。
   そゆことです。

114 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:34 ID:ZxrhkN5z
   幼女をレイプします

119 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:35 ID:rLfxQ17l
      携帯電話からご苦労様です。

139 名前: ◆FruitsMIpE [sage] 投稿日:03/01/08 17:38 ID:s/ESWpsO
   「携帯から」とか公開しないでほすぃ。。

150 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:40 ID:rLfxQ17l
   みたいなことを書いたらそうなりますです。さん

170 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:42 ID:rLfxQ17l
   負荷が高そうなサーバにも入れて見ます。

217 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:49 ID:rLfxQ17l
   一定期間でログは消しますです。
0062デフォルトの名無しさんNGNG
以外や以外なんだか、かの国の方々は個人を対象にした訴訟を過去行ってないんだよ
国または政府とかの公共団体には裁判しかけてるけどね。
著作物や発言に関してはもっぱら発言撤回または削除の方針でがんばってる。

だから「チョン死ね」とかかいても個人が訴訟されるってのはまず考えなくていいんじゃないかな?

削除要請はともかく
0063デフォルトの名無しさんNGNG
前スレは、強い電波が検出されちゃったからじゃないかな。。。
0064デフォルトの名無しさんNGNG
大阪JCネタ
0065デフォルトの名無しさんNGNG
それもどうかと思うけどな(^_^;)
やはり「書き込むことに責任あることを認識しろ」かと。

つーか、まもなく6億〜
0066デフォルトの名無しさんNGNG
メロパンナというのは気合いはいってるな!!IPとることにしたのにソンゴクウと同じことしてやがる。俺なんかマンコとかくだけで全エネルギー使い果たすほど緊張してるつてのによ
0067デフォルトの名無しさんNGNG
中年オヤジはこれだから困る
自分で書き込んで1人で笑ってるんだろうな
0068デフォルトの名無しさんNGNG
 スレッガーさんかい?
0069デフォルトの名無しさんNGNG
完全終了
0070デフォルトの名無しさんNGNG
delphi 以外は糞!!
0071デフォルトの名無しさんNGNG
神戸
0072デフォルトの名無しさんNGNG
日本の法>>>>>>>>>>(超えられない壁)>>>>>>>>>>>>>>>>2ちゃんのルール

今更の話題によく盛り上がってるな。年明け初2ちゃん組か?
0073デフォルトの名無しさんNGNG
自作PC板やハード板やDTM板がIEからのアクセスで見れません。
専用ブラウザでは見れます。対処お願いします。
0074山崎渉NGNG
(^^)
0075デフォルトの名無しさんNGNG
ガックシ・・(鬱
0076デフォルトの名無しさんNGNG
私は韓国人は優秀です。
しかし日本人は少し優秀でないと思います。
歴史の違いだと思います。
しかし日本には伸び行く歴史があると思います。
0077デフォルトの名無しさんNGNG
なんでこの版だけ、最近わけ分からんスレや書き込み多いんだ?
0078山崎渉NGNG
(^^)
0079デフォルトの名無しさんNGNG
山崎が2回も来ている時点でこのスレは不吉なり
0080山崎渉NGNG
(^^)
0081デフォルトの名無しさんNGNG
な
0082デフォルトの名無しさんNGNG
うぉーえっへっへほっへうぉーへっへっへほっへ
うぉーえっへっへほっへうぉーへっへっへほっへ
うぉーえっへっへほっへうぉーへっへっへほっへ
げださばっ!うっ!
びんびんまっちょで〜(おーえおーえ〜
がんがんいっとけぇ(おえおえお
0083デフォルトの名無しさんNGNG
ほしゅ
0084デフォルトの名無しさんNGNG
Label1.Caption := ExtractFilePath(Application.ExeName);
で、実行ファイルのある場所、「C:\FolderName\」が取得できましたが、
この文字列の最後の「\」を取り除いた実行ファイルのパスを取得するには、どのようにすれば良いのでしょうか?
0085デフォルトの名無しさんNGNG
ExtractFileDir
または
ExcludeTrailingPathDelimiter
を Help で調べて。
0086人いないスレNGNG
(´-`)。o ○ (マルチポストだわ、放置だわ、ひどいな…)
0087山崎渉NGNG
(^^)
0088デフォルトの名無しさんNGNG
0089デフォルトの名無しさんNGNG
ハタケヤマクンとほぼ同時期に Delphi を始めました。
Delphi の仕組みはだいぶ理解出来るようになりましたが、
今でもアルゴリズム(や、論理的思考法)はよくわかりませんよ。
先週まで、LZSS 符号化について実験していましたが、移動窓の実装で投げ出したくらいです。
今週は、 MD5 とかいう暗号化機構を、自作テキストエディタに乗せようと四苦八苦している最中です。
これもなかなか理解し辛く、投げ出しそうですが、まだなんとかがんばってます。
ハタケヤマクソはどうですか?
0090畠山 幸助NGNG
開発環境をHSPに移しました。
これは戦略的撤退です。
0091当人NGNG
マルチポストではないが、勝手に貼られていたらしい
0092畠山 幸助NGNG
先月から意識改革の集まりに参加しているのですが、
今日は「町に出よう」をテーマに皆で白装束姿になってポルモレキア(母の家)の周りを巡回しました。
すると困ったことに電磁波をガンガン飛ばしながら走る車がたくさん通っていたんです。驚きました。
「このままだとイーガルウッダ(気による交流)に支障が出るね。鏡で反射させよう。」ということになり
大きな反射板を持って道路を封鎖してみました。この後すごく嫌なことが起こったんだけど、
ここに書くのは止めておきます。マスコミって最悪ですね。ホント。
あとデルファイはしばらく中止します。適当にレスしてスレ残しといて下さい。
0093デフォルトの名無しさんNGNG
ここも重複スレだな
0094山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0095デフォルトの名無しさんNGNG
まだか・
0096山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0097デフォルトの名無しさんNGNG
勉強のために見てたサイトが消えた・・・・。
まだ途中だったのにィ(´_`)
0098山崎 渉NGNG
(^^)
0099謎の紳士NGNG
畑山君 テキストエディタを作る方法は以下のサイトで勉強しなさい。
http://www.w-frontier.com/delphi/3_menu.html
0100謎の紳士NGNG
100get
0101山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0102デフォルトの名無しさんNGNG
マジメな話、Delphiで絶対に作れないアプリにはどのようなものがあるのですか?
0103あぼーんNGNG
あぼーん
0104デフォルトの名無しさんNGNG
ないよ
0105デフォルトの名無しさんNGNG
>>102
なんでも作れます。 アプリなんてしょせん、バイトの集まりですから。
0106デフォルトの名無しさんNGNG
>>89
テキストエディタにハッシュが必要なのか?
どんな機能だい?
0107デフォルトの名無しさんNGNG
でるぷひ
0108デフォルトの名無しさんNGNG
>>102
Macアプリ
0109デフォルトの名無しさんNGNG
バッファオーバーフロー教室
0110デフォルトの名無しさんNGNG
ずいぶんとうれしそうにageてるね。
0111デフォルトの名無しさんNGNG
畠山くんのバッファオーバーフロー教室
0112デフォルトの名無しさんNGNG
釣れた(藁
0113デフォルトの名無しさんNGNG
まだあったのかYO!このスレ
0114デフォルトの名無しさんNGNG
と、>>1さんが保全に参りました。
0115鼻山NGNG
よし、今から オセロもどきを作ろうと思う。

まずは、型の宣言だな。やっぱりな。抽象化が必要だよな?

じゃ、駒からだ。
type TKOMA=(koNone,koWhite,koBlack);

どうだこの素晴らしい抽象化。 何も置いてないときは koNone、白黒は、koWhiteに koBllackだよ。
これはもう完璧な型宣言だろう。だからinterface部、 uses のすぐ後に書いてやろう。


0116鼻山NGNG
次には、当然盤の型宣言だな。
これはもう、配列しかないだろ? な? じゃあこうだろ?

type TBAN =array [0..7,0..7]of TKOMA;

盤は駒が8x8に置けるんだからこれしかないよな?
0117デフォルトの名無しさんNGNG
なんでこんなのがagaって来るんだよ
沈め!沈め!
0118鼻山NGNG
じゃあ下げで。

次は、表示だ。 Delphiには DrawGridって便利なコンポーネントがある。
これを貼り付けて、 そうだな。サイズが変更されても追従するように、
初期化はフォームのOnResizeでやろう。

procedure TForm1.FormResize(Sender: TObject);
begin
 with DrawGrid1 do begin
  ScrollBars:=ssNone;
  ColCount:=8;
  RowCount:=8;
  DefaultColWidth:=Width div ColCount;
  DefaultRowHeight:=Height div RowCount;
  FixedCols:=0;
  FixedRows:=0;
 end;
end;


よし、実行っと・・・・ありゃ? ssNoneが無いって? 
ヘルプ出すと StdCtrls にあるのか 何で StdCtrlsが自動的にusesされないんだ?

まあいいや、 uses に StdCtrlsを追加すりゃいいだけだろ。よしよし、とりあえず枠は表示されたと。
0119鼻山NGNG
最初にやる事は、当然、盤を綺麗にすることだ。 だとしたら、手続きを作ろう。

まあ、メソッドの方が格好いいかもしれないけど、とりあえず手続きでやって必要になってから変えりゃいいや。

procedure InitBAN(var BAN:TBAN);
var x,y:Integer;
begin
  for x:=Low(BAN) to High(BAN) do
   for y:=Low(BAN[x]) to High(BAN[x]) do
    BAN[x,y]:=koNone;

BAN[3,3]:=koWhite;
BAN[4,4]:=koWhite;
BAN[3,4]:=koBlack;
BAN[4,3]:=koBlack;
end;

こんなもんだな。
これをフォームのOnCreateで呼び出せばいいだろ。
procedure TForm1.FormCreate(Sender: TObject);
begin
InitBAN(BAN);
end;
0120鼻山NGNG
おっと、var BAN:TBAN をどこに置こう。
一つあればいいんだから、グローバル変数でもいいけど、
とりあえず、これもフォームの public部でいいか。

ここに置く時はvar は不要だから、

TForm1 = class(TForm)
  DrawGrid1: TDrawGrid;
  procedure FormResize(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  public
   BAN:TBAN;
  end;
0121鼻山NGNG
さあ、次は、この初期状態を表示させるぞ。
これはDrawGridのOnDrawCell に書けばいい筈。

えい、まずは力技で、
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  DrawGrid1 .Canvas.Pen.Color:=clBlack;
  case BAN[ACol,ARow] of
   koWhite:DrawGrid1. Canvas.Brush.Color:=clWhite;
   koBlack:DrawGrid1 .Canvas.Brush.Color:=clBlack;
  end;

  case BAN[ACol,ARow] of
   koWhite,koBlack: DrawGrid1.Canvas.Ellipse(Rect);
  end;
end;

これでどうだ。とりあえず表示されたぞ。
0122鼻山NGNG
へへ、DrawCell1のAnchorsを全部Trueにしたら期待通り、フォームのサイズ変更したら
自動的に駒も描画されやがる。

ちくしょう、可愛いやつめ。
0123鼻山NGNG
さあて、次に駒を置く操作と、置けたらひっくり換える操作が必要だな。

その為には、置けるかどうか検査する処理が必要だぞ。
それは関数だな。 引数は盤と駒と、その位置だから
function okeruka(const BAN:TBAN;K:TKOMA;x,y:Integer)

で、帰り値は 論理型でいいだろ。
0124鼻山NGNG

どういう場合に駒が置けるか? どういう場合に駒が置けないのか?

まずは、既にに駒があったら置けないな
盤のx,y位置が空である事が条件だ。
Result:=BAN[x,y]=koNone; if not Result then exit;

って事だな。

それから、相手の駒を挟めないと置けない。
これはチョット考えないといけないぞ。

0125鼻山NGNG
まあ考えるより手を動かそう。

まず相手の駒を返す関数を作ろうか。


function AiteNoKoma(K:TKOMA):TKOMA;
begin
  result:=koNone;
  case K of
  koWhite: Result:=koBlack;
  koBlack: Result:=koWhite;
  end;
end;
0126鼻山NGNG
で8方向に
 1、最初の隣が相手の駒でないとダメ

 2、次の駒が相手の駒ならさらに検索、空白か盤を超えたらダメ

 3、自分の駒が見つかれば置ける

って感じで調べたらいい。
8方向は ステップ dx,dyで表現、位置はx,yで表現しよう。
0127鼻山NGNG
とりあえず、文章をそのままコードにしてみよう。
関数 okerukaはこうだ。

置ける場所があって、置ける駒であって、8方向どこかで相手を挟める事


begin
Result:=BAN[x,y]=koNone; if not Result then exit;
Result:=K<>koNone; if not Result then exit;
Result:=Check( 0, 1,x,y); if Result then exit;
Result:=Check( 1, 0,x,y); if Result then exit;
Result:=Check( 0,-1,x,y); if Result then exit;
Result:=Check(-1, 0,x,y); if Result then exit;

Result:=Check( 1, 1,x,y); if Result then exit;
Result:=Check( 1,-1,x,y); if Result then exit;
Result:=Check(-1,-1,x,y); if Result then exit;
Result:=Check(-1, 1,x,y);
end;

2つの条件は満たさなければならないからif NOT 、8つの条件はどれか一つだだから if だ。
0128鼻山NGNG
で、Checkという関数は関数内関数で書いてみる。
駒の隣と、その後では別けなきゃいけないから、さらに関数内関数を呼ぼう。

function okeruka(const BAN:TBAN;K:TKOMA;x,y:Integer):boolean;
function Check(dx,dy,x,y:Integer):boolean;
function Check1:boolean;
begin
x:=x+dx;
y:=y+dy;
Result:= x >=LOW(BAN); if not Result then exit;
Result:= x <=HIGH(BAN); if not Result then exit;
Result:= y >=LOW(BAN[x]); if not Result then exit;
Result:= y <=HIGH(BAN[x]); if not Result then exit;
Result:= BAN[x,y]=AiteNoKoma(K) ;
end;
function Check2:boolean;
begin
x:=x+dx;
y:=y+dy;
Result:= x >=LOW(BAN); if not Result then exit;
Result:= x <=HIGH(BAN); if not Result then exit;
Result:= y >=LOW(BAN[x]); if not Result then exit;
Result:= y <=HIGH(BAN[x]); if not Result then exit;
if BAN[x,y]=AiteNoKoma(K) then Result:= Check2;
result:= BAN[x,y]=K;
end;
begin
Result:=Check1; if not Result then exit;
Result:=Check2;
end;

0129鼻山NGNG
ふぁああ。なんか眠くなった。 そんなに面白くなかったしな。 じゃバイ
0130デフォルトの名無しさんNGNG
「koBllackだよ。 」
面白かったよ。いい意味で
0131デフォルトの名無しさんNGNG
>>130
レスつけんなよ
0132鼻山NGNG
>>130ありがとうよ。
とりあえず、もう少しオセロらしく動くようにしてから止める事にする。
まずは、>>128は同じ事をCheclk1 Check2でやってるんでそれをマトメテおこう。
0133鼻山NGNG
function okeruka(const BAN:TBAN;K:TKOMA;x,y:Integer):boolean;
 function Check(dx,dy,x,y:Integer):boolean;
  function Check0:boolean;
   begin x:=x+dx;  y:=y+dy;
       Result:= x >=LOW(BAN);  if not Result then exit;
       Result:= x <=HIGH(BAN); if not Result then exit;
       Result:= y >=LOW(BAN[x]);  if not Result then exit;
       Result:= y <=HIGH(BAN[x]); if not Result then exit;
   end;
  function Check1:boolean;
  begin  Result:= Check0; if not Result then exit;
        Result:=  BAN[x,y]=AiteNoKoma(K) ;
  end;
  function Check2:boolean;
  begin Result:= Check0; if not Result then exit;
   if  BAN[x,y]=AiteNoKoma(K)
     then Result:= Check2
     else result:= BAN[x,y]=K;
  end;
 begin   Result:=Check1; if not Result then exit;  Result:=Check2;
 end;
0134鼻山NGNG
続きは前のまま

begin
 Result:=BAN[x,y]=koNone;  if not Result then exit;
 Result:=K<>koNone;        if not Result then exit;
 Result:=Check( 0, 1,x,y);   if  Result then exit;
 Result:=Check( 1, 0,x,y);   if  Result then exit;
 Result:=Check( 0,-1,x,y);   if  Result then exit;
 Result:=Check(-1, 0,x,y);   if  Result then exit;
 Result:=Check( 1, 1,x,y);   if  Result then exit;
 Result:=Check( 1,-1,x,y);   if  Result then exit;
 Result:=Check(-1,-1,x,y);   if  Result then exit;
 Result:=Check(-1, 1,x,y);
end;
0135鼻山NGNG
置けるかどうかの判定が出来たので、次は実際に駒を置く事を考える。
function KomaWoOku(var BAN:TBAN;var K:TKOMA;x,y:Integer):boolean;

今度はBAN K は参照型って奴にした。 これで、呼び出した方の変数が変更される筈だ。
置けたら置いて、相手の手番にして終わるという処理をする為には K も参照型にしなくちゃな。

begin
 Result:=False;
 if okeruka(BAN,K,x,y) then begin
  Result:=Flip( 0, 1,x,y);
  Result:=Flip( 1, 0,x,y);
  Result:=Flip( 0,-1,x,y);
  Result:=Flip(-1, 0,x,y);

  Result:=Flip( 1, 1,x,y);
  Result:=Flip( 1,-1,x,y);
  Result:=Flip(-1,-1,x,y);
  Result:=Flip(-1, 1,x,y);
  BAN[x,y]:=K;
  K:=AiteNoKoma(K);
  Result:=True;
 end;
end;

Flipは駒をヒックリ返す処理のつもりだ。
0136鼻山NGNG
前の処理からそのままコピペしたから Result:=Flipなんてしてるが、Flipは関数にする必要はないな。

この駒をヒックリ返す処理が問題か。

前の置けるかどうかの判定で、再帰を使ったけど、判定に成功したら再帰で
帰ってくる時のループを使えば簡単じゃないかな?

判定に成功したらisOKって変数をTrueにしてやればいい。
って事で、判定ルーチンからコピペしてくる。

0137鼻山NGNG
procedure Flip(dx,dy,x,y:Integer);
  var isOK:boolean;
 function Check0:boolean;
  begin
    x:=x+dx; y:=y+dy;
    Result:= x >=LOW(BAN); if not Result then exit;
    Result:= x <=HIGH(BAN); if not Result then exit;
    Result:= y >=LOW(BAN[x]); if not Result then exit;
    Result:= y <=HIGH(BAN[x]); if not Result then exit;
  end;
 function Check1:boolean;
begin  Check0; if not Result then exit;
      Result:= BAN[x,y]=AiteNoKoma(K) ;
 end;
 procedure Flip2;
 begin
  if not Check0 then exit;
  if BAN[x,y]=AiteNoKoma(K)
  then Flip2
  else isOK:= BAN[x,y]=K;
  if isOK then begin
    x:=x-dx;
    y:=y-dy;
    BAN[x,y]:=K;
  end;
 end;
begin
  isOK:=false;
  Result:=Check1; if not Result then exit;
  Flip2;
end;
0138鼻山NGNG
これで、相手の駒があって、その先に自分の駒を見つけた時に isOKがTrueになる。

で、それから帰る時に isOKがTrueだったら 座標を戻して、その駒を自分の駒にしながら帰れば、
おお、ちゃんと勘定が合う。

・・・・当然か。
0139鼻山NGNG
このルーチンをテストするにはと、

まあとりあえず、OnSelectCellに入れちゃえ。

procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
 KomaWoOku(BAN,TEBAN, ACol, ARow);
  DrawGrid1.Invalidate;
end;



ヘヘ、とりあえず動いてるな。 満足だ。


次はパスだな。 置けない場合にパスが出来なくちゃな。

それには、どこにも置けないって判定が必要だな。
0140鼻山NGNG
ムム
 簡単にやっつけるには、盤を全部 okeruka でチェックすりゃいいんだろうが、
 それって格好悪くないか?

・・・

っと思ったが、実行しても大した時間かからんな。 これでいいのか?

いいんだよな?
0141鼻山NGNG
おっと、これが正しいかテストするのに時間くっちまった

function isPass(const BAN:TBAN;K:TKOMA):boolean;
var x,y:Integer;
begin
  Result:=false;
  for x:=Low(BAN) to High(BAN) do
  for y:=Low(BAN[x]) to High(BAN[x]) do
  if okeruka(BAN,K,x,y) then
  exit;
  Result:=True;
end;


こりゃ、なんかテストする方法考えないとダメだな。 
0142デフォルトの名無しさんNGNG
期待してます
0143デフォルトの名無しさんNGNG
ハッ!
よくみたら「鼻」山だ!
0144デフォルトの名無しさんNGNG
おそっ!
0145デフォルトの名無しさんNGNG
誰か続ききぼんぬ
期待あげ
0146鼻山NGNG
いや、スマン。
オセロプログラムのテストを、そのプログラム自身にやらせるにはどうやったらいいか

考えてたらそっちが面白くなったというか、行き詰まったというか・・・
0147デフォルトの名無しさん NGNG
>>146
>考えてたらそっちが面白くなったというか、行き詰まったというか・・・

・・・ん??
白黒ハッキリしてくださいよ!
ガンガレ期待してます
0148デフォルトの名無しさんNGNG
>>147
うまい
0149デフォルトの名無しさんNGNG
>>147
うまい
0150デフォルトの名無しさんNGNG
>>147
うまい
0151でぶやNGNG
>>147
まいう〜
0152ほんじゃまか石塚NGNG
>>147
おいしいを通り越して、おいD
0153デフォルトの名無しさんNGNG
誰か続ききぼんぬ
期待あげ
0154デフォルトの名無しさんNGNG
>>鼻山

個人的にはCPUのロジックの手順が早く知りたいな
0155Socket775NGNG
Delphi 6無料版を落としてこい。
付録のチュートリアルの内容が、そのものズバリ
「テキストエディタの作り方」だ。
説明の通りやってけば誰でもできる。
0156デフォルトの名無しさんNGNG
>>155
そのチュートリアルはPersonal版では進められないわけだが。
0157デフォルトの名無しさんNGNG
>>154
先に日本語勉強しような
0158デフォルトの名無しさんNGNG
期待+ヽ(`Д´)ノ ボボボボボボッキアゲ
0159デフォルトの名無しさんNGNG
期待+ヽ(`Д´)ノ ボボボボボボッキアゲ
0160デフォルトの名無しさんNGNG
期待+ヽ(`Д´)ノ ボボボボボボッキアゲ
0161デフォルトの名無しさんNGNG
>>畠山→鼻山
ワロタ
■ このスレッドは過去ログ倉庫に格納されています