ひまわりユーザー プログラム掲示板 バックアップ
注意
ひまわりのススメ  □ ひまわり本家Home  □ 新着記事  □ 新規投稿  □ SEARCH  □ 参考プログラム集
ツリー表示

MESSAGE ネト対戦、五目並べ風味(1) /とりあえず匿名 (02/06/22(Sat) 07:34) [997]
......MESSAGE ネト対戦、五目並べ風味(2) /とりあえず匿名 (02/06/22(Sat) 07:35) [998]


親記事 / ▼[ 998 ]
NO.997  ネト対戦、五目並べ風味(1)
□投稿者/ とりあえず匿名 -(2002/06/22(Sat) 07:34:30)
□U R L/
{---プログラム掲示板投稿フォーム---
!!!どうやら量が多すぎて一度に投稿できないようなので
   2回に分けて投稿します。!!!
【ソフト名】ネト対戦、五目並べ風味
【作 成 者】とりあえず匿名
【種  別】フリーソフトウェア
【ひまわりのバージョン】ver.1.50
【転  載】可(転載条件:ご自由に)
【改変運用】可
【ひまわり本体への梱包】可(でもやらない方がいいと思いますけど(笑))
【実行時に利用作成するファイル】無
【コメント】ネットで「占有されたMIDIデバイスを強制解放するソフト」を
探していて、ひまわりに出会ったのが3日前。僕もゆくゆくは日本語プログラムな
ソフトを作ろうと思っていたんですが既にあったんですね。と思って、とりあえず
ネトゲー作ってまみした。TCP/IPも、ゲーム自体も、プログラム組むのは初めて
だったんですが、それでも一応なんとか動くものが作れるのは、ひまわりのパワー
でしょうか。五目並べ風味です。ゲームのルールですが「3・3禁」とか一切判別
してません。1個づつ交互に石を置いていって、先に、縦・横・ナナメに連続5つ
"以上"並べた方が勝ちです。まぁソレだけです。それにしても、今見返しても、
なんてゴテゴテッとしたソースなんでしょう。もし次があれば、もう少しスマートな
ソースを書きたいものです。メモをスクロールさせる事ができなかったんで、
新規発言が最上部に来る、htmlチャットみたいな不格好なものになってしまった
のがチョイ心残りですね。ところで、この際だからちょっと言わせてもらいたい
んですがプログラム制作者はWindowsの設定の「小さいフォント」だけではなくて
「大きいフォント」でも表示を確認して頂きたい。「大きいフォント」愛用家と
しては寂しい限りです。と言いつつこのプログラムは800x600の画面には収まら
ないんですが・・・(800x600も愛用してる人)
---投稿フォームここまで---}





※※※※※※※※※※※※
※碁盤の総括、初期設定
※※※※※※※※※※※※

※碁盤の各設定
碁盤の色は、「#eecc44」。
碁盤の1マスは、20。
碁盤の大きさは、碁盤の1マス*19。

※碁盤の石の状態を記憶する変数
※※0が何も無い、1が黒石、2が白石。
置き碁石初期化を、呼ぶ。
置き碁石初期化の次へ、飛ぶ。

*置き碁石初期化
碁盤の石#0 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#1 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#2 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#3 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#4 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#5 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#6 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#7 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#8 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#9 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#10 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#11 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#12 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#13 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#14 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#15 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#16 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#17 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
碁盤の石#18 = 「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」
戻る。
*置き碁石初期化の次

『勝利確認』を、『?の』で、関数定義。
※引数、1か2。1で黒が5個並んでるか調べ、2は白を調べる。
※戻り値、「それ」に「はい」か「いいえ」。
※※※※※※※※※※※※※※※※※
※ルールを追加する時は、この関数の周辺を変更するといいかも。
※※※※※※※※※※※※※※※※※

※碁盤の表示に関する初期処理
碁盤を、イメージとして、作成。
その、拡大機能は、オフ。
その、Xは、0。
その、Yは、0。
その、幅は、碁盤の大きさ。
その、高さは、碁盤の大きさ。
その、クリックした時は、碁盤クリックイベント。
   『指定碁石描写』を、『?,?に,?で』で、関数定義。
   ※引数は、碁盤の位置 X, Y に、1(黒)/2(白)で、
その、マウス動かした時は、碁盤マウス移動イベント。
その、可視は、オン。

碁盤裏VRAMを、イメージとして、作成。
その、拡大機能は、オフ。
その、Xは、0。
その、Yは、0。
その、幅は、碁盤の大きさ。
その、高さは、碁盤の大きさ。
その、可視は、オフ。

碁盤描写クリアを、呼ぶ。
碁盤描写クリアの次へ、飛ぶ。

※碁盤の目、描写。
*碁盤描写クリア
塗り色は、碁盤の色。
ペン色は、碁盤の色。
ペン太さは、1。
碁盤裏VRAMの、(0,0)から(碁盤の大きさ,碁盤の大きさ)へ、四角形描画。
ペン色は、黒色。
一時変数xは、碁盤の1マス÷2。
一時変数yは、碁盤の1マス÷2。
19回(
 碁盤裏VRAMの、(一時変数x,一時変数y)から、
   (碁盤の大きさ - 一時変数x,一時変数y)へ、線描画。
 一時変数yは、一時変数y + 碁盤の1マス。

一時変数xは、碁盤の1マス÷2。
一時変数yは、碁盤の1マス÷2。
19回(
 碁盤裏VRAMの、(一時変数x,一時変数y)から、
   (一時変数x,碁盤の大きさ - 一時変数y)へ、線描画。
 一時変数xは、一時変数x + 碁盤の1マス。


碁盤裏VRAMを、碁盤の、(0,0)へ、イメージコピー。
戻る。
*碁盤描写クリアの次


※※※※※※※※※※※※
※碁盤以外のUIの宣言
※※※※※※※※※※※※

母艦の、タイトルは、「ネト対戦、五目並べ風味」。
母艦の、高さは、600。
(碁盤の、下側)に、ラベルAを、ラベルとして、作成。
 その、テキストは、「簡易チャット/通信メッセージ(あなたの名前:???)」
 その、Xは、10。
(その、下側)に、チャットメッセージを、メモとして、作成。
 その、幅は、500。
 その、高さは、140。
   『チャットメッセージへ発言』を、『?と』で、関数定義。
(その、下側)に、発言エディタを、エディタとして、作成。
 その、幅は、500。
(その、右側)に、発言ボタンを、ボタンとして、作成。
 その、タイトルは、「発言」
 その、イベントは、発言イベント。
(チャットメッセージの、右側)に、切断ボタンを、ボタンとして、作成。
 その、タイトルは、「切断」
 その、イベントは、切断ボタンイベント。
(碁盤の、右側)に、ラベルBを、ラベルとして、作成。
 その、テキストは、「手順の記録」。
(その、下側)に、手順の記録を、メモとして、作成。
 その、幅は、200。
 その、高さは、300。
   『手順を記録』を、『?,?,?で』で、関数定義。
   ※引数は、碁盤のX, Y ,色





※※※※※※※※※※※※
※初期設定ダイアログ
※※※※※※※※※※※※

ユーザー初期設定ダイアログを、フォームとして、作成。
 その、スタイルは、ダイアログスタイル。
 その、幅は、450。
 その、高さは、350。
ラベル1を、ラベルとして、作成。
 その、テキストは、「ゲーム中のあなたのニックネーム:」。
 その、Xは、10。
 その、Yは、10。
 そを、ユーザー初期設定ダイアログに、乗せる。
(その、下側)に、自分の名前を、エディタとして、作成。
 その、幅は、300。
 そを、ユーザー初期設定ダイアログに、乗せる。
(その、下側)に、ラベル2を、ラベルとして、作成。
 その、テキストは、「クライアントになる場合、\n接続するサーバーのIPアドレス:」。
 そを、ユーザー初期設定ダイアログに、乗せる。
(その、下側)に、エディタ2を、エディタとして、作成。
 その、幅は、200。
 そを、ユーザー初期設定ダイアログに、乗せる。
(その、下側)に、ラベル3を、ラベルとして、作成。
 その、テキストは、「使用ポート番号:」。
 そを、ユーザー初期設定ダイアログに、乗せる。
(その、下側)に、ポート番号を、エディタとして、作成。
 そを、ユーザー初期設定ダイアログに、乗せる。
(その、下側)に、ボタン1を、ボタンとして、作成。
 その、テキストは、「サーバーを起動し、相手を待ち受ける。」。
 その、高さは、35。
 そを、ユーザー初期設定ダイアログに、乗せる。
 その、イベントは、サーバー開始イベント。
(その、下側)に、ボタン2を、ボタンとして、作成。
 その、テキストは、「クライアントになり、サーバーに接続する。」。
 その、高さは、35。
 そを、ユーザー初期設定ダイアログに、乗せる。
 その、イベントは、クライアント開始イベント。



※※※※※※※※※※※※
※TCP/IP 状況把握変数
※※※※※※※※※※※※
通信の立場は、「」。※サーバーかクライアントか。
通信の相手は、「」。※主に複数との接続を避けるために使う。IPアドレスを記憶。
通信の相手の名前は、「」。
試合状況の、試合数は、1。
試合状況の、自分の勝ち数は、0。
試合状況の、相手の勝ち数は、0。
試合状況の、打つ番は、「」。
試合状況の、手順数は、1。


待機。



*碁盤クリックイベント


もし、碁盤の石#(整数(マウスX÷碁盤の1マス))#(整数(マウスY÷碁盤の1マス))が、0ならば、(
もし、(試合状況の、打つ番)が、通信の立場ならば、(
   もし、通信の立場が、「サーバー」ならば、石の番号は、1。{黒}
   もし、通信の立場が、「クライアント」ならば、石の番号は、2。{白}


(整数(マウスX÷碁盤の1マス)),(整数(マウスY÷碁盤の1マス))に、石の番号で、指定碁石描写。

一時変数xは、整数(マウスX÷碁盤の1マス)。
一時変数yは、整数(マウスY÷碁盤の1マス)。
もし、通信の立場が、「サーバー」ならば、
   通信の相手へ、「石置きました,{一時変数x},{一時変数y}」を、TCPサーバーから送信。
もし、通信の立場が、「クライアント」ならば、
   「石置きました,{一時変数x},{一時変数y}」を、TCP送信。

石の番号の、勝利確認。
もし、それが、「はい」ならば、(
   「System > あなたの勝ちです。」と、チャットメッセージへ発言。
   試合状況の、自分の勝ち数は、(試合状況の、自分の勝ち数) +1。
   「System > あなたの勝ち数は、{試合状況の、自分の勝ち数}になりました。」&
   「相手の勝ち数は、{試合状況の、相手の勝ち数}です。」と、チャットメッセージへ発言。
   もし、(試合状況の、自分の勝ち数)が、2以上ならば、(
      「System > おめでとう、あなたは{通信の相手の名前}との対戦に勝利しました。」と、
      チャットメッセージへ発言。
   )違えば、(
      試合状況の、試合数は、(試合状況の、試合数 +1)。
      「System > では、{試合状況の、試合数}戦目を開始します。」と、
      チャットメッセージへ発言。
      もし、通信の立場が、「サーバー」ならば、(
         「System > 先手は白の{通信の相手の名前}です。」と、
         チャットメッセージへ発言。
      手順の記録は、「後手:黒({自分の名前})\n先手:白({通信の相手の名前})」。
      )
      もし、通信の立場が、「クライアント」ならば、(
         「System > 先手は黒の{通信の相手の名前}です。」と、
         チャットメッセージへ発言。
      手順の記録は、「後手:白({自分の名前})\n先手:黒({通信の相手の名前})」。
      )
   )
試合状況の、手順数は、1。
置き碁石初期化を、呼ぶ。
碁盤描写クリアを、呼ぶ。

打ち手交代を、呼ぶ。

))
待機。


*碁盤マウス移動イベント
碁盤裏VRAMを、碁盤の、(0,0)へ、イメージコピー。
もし、(試合状況の、打つ番)が、通信の立場ならば、(
もし、碁盤の石#(整数(マウスX÷碁盤の1マス))#(整数(マウスY÷碁盤の1マス))が、0ならば、(
塗り色は、0。
ペン色は、赤色。
ペン太さは、2。
一時変数xは、整数(マウスX÷碁盤の1マス)*碁盤の1マス。
一時変数yは、整数(マウスY÷碁盤の1マス)*碁盤の1マス。
碁盤の、(一時変数x,一時変数y)から(一時変数x+碁盤の1マス,一時変数y)へ、線描画。
碁盤の、(一時変数x,一時変数y)から(一時変数x,一時変数y+碁盤の1マス)へ、線描画。
碁盤の、(一時変数x,一時変数y+碁盤の1マス)から、
   (一時変数x+碁盤の1マス,一時変数y+碁盤の1マス)へ、線描画。
碁盤の、(一時変数x+碁盤の1マス,一時変数y)から、
   (一時変数x+碁盤の1マス,一時変数y+碁盤の1マス)へ、線描画。
))
待機。



*サーバー開始イベント
もし、自分の名前が、「」ならば、
   「ニックネームを入力してください。」と、言う。
違えば、(
もし、ポート番号が、「」ならば、
   「ポートを指定してください。」と、言う。
違えば、(
ポート番号が、数字か。
もし、それが、いいえならば、
   「ポート番号を正しく指定してください。」と、言う。
違えば、(
ラベルAの、テキストは、「簡易チャット/通信メッセージ(あなたの名前:{自分の名前})」

TCPポートは、ポート番号。
TCPサーバー起動。
サーバー接続イベントに、TCPサーバー接続処理設定。
通信受信イベントに、TCPサーバー受信処理設定。
※サーバーを起動した後に受信イベントを設定しないと無視されてしまうので注意。
※接続イベントは問題ないのに、なぜ・・・。

通信の立場は、「サーバー」。
通信の相手は、「」。

「System > サーバーとして起動しました。相手の接続を待っています。」と、
   チャットメッセージへ発言。
ユーザー初期設定ダイアログの、可視は、オフ。


)))
待機。




▲[ 997 ] / 返信無し
NO.998  ネト対戦、五目並べ風味(2)
□投稿者/ とりあえず匿名 -(2002/06/22(Sat) 07:35:58)
□U R L/
{---------------
2回目。今度があれば、なるべく最適化してスリムアップして
こんな事の無いようにしよう・・・。反省。
----------------}


※TCP文字列の法則というか規約というか。
※なんか改行文字送信するのもアレかなーと思ったんで、
※二次元配列形式(CSV)の1行目だけ使う事にしよっと。
※1項目目は、どんな内容かを示す文字列。
※  「接続しました」「石置きました」「チャット発言」の3種類。
※2項目目は、内容の実データを示す文字列。
※  「接続しました」では、ニックネーム。
※  「石置きました」では、置いた石の場所。
※  「チャット発言」では、ニックネームも含めた発言の内容。
※こんなとこかな。

*サーバー接続イベント

もし、通信の相手が、「」ならば、
   通信の相手は、TCP送信元#0#0。
違えば、(
   「System > {TCP送信元}から接続を要求されましたが、」&
   「既に1人との接続を行っているので、これを拒否します。」と、
      チャットメッセージへ発言。
   TCP送信元を、TCPサーバー切断。

待機。


*通信受信イベント
もし、通信の相手が、TCP送信元#0#0ならば、(
もし、TCP文字列#0#0が、「接続しました」ならば、(
   もし、通信の立場が、「サーバー」ならば、(
      通信の相手の名前は、TCP文字列#1#0。
      「System > {TCP送信元}、¥「{TCP文字列#1#0}¥」さんが接続してきました。\n」と、
      チャットメッセージへ発言。
      通信の相手へ、「接続しました,{自分の名前}」を、TCPサーバーから送信。

   )
   もし、通信の立場が、「クライアント」ならば、(
      通信の相手の名前は、TCP文字列#1#0。
      「System > サーバー{TCP送信元}、¥「{TCP文字列#1#0}¥」さんと接続しました。\n」と、
      チャットメッセージへ発言。
   )
   「System > では、{自分の名前}と{TCP文字列#1#0}の五目並べ対戦を開始します。\n」と、
   チャットメッセージへ発言。
   「System > 先に2回、試合を制した方が勝利となります。\n」と、
   チャットメッセージへ発言。

   もし、通信の立場が、「サーバー」ならば、(
      「System > 先手は黒の{自分の名前}です。」と、
      チャットメッセージへ発言。
      手順の記録は、「後手:白({通信の相手の名前})\n先手:黒({自分の名前})」。
      試合状況の、打つ番は、サーバー。
   )
   もし、通信の立場が、「クライアント」ならば、(
      「System > 先手は黒の{通信の相手の名前}です。」と、
      チャットメッセージへ発言。
      手順の記録は、「後手:白({自分の名前})\n先手:黒({通信の相手の名前})」。
      試合状況の、打つ番は、サーバー。
   )
   試合状況の、手順数は、1。
   置き碁石初期化を、呼ぶ。
   碁盤描写クリアを、呼ぶ。


もし、TCP文字列#0#0が、「石置きました」ならば、(
   もし、通信の立場が、「サーバー」ならば、石の番号は、2。{白}
   もし、通信の立場が、「クライアント」ならば、石の番号は、1。{黒}
   (TCP文字列#1#0),(TCP文字列#2#0)に、石の番号で、指定碁石描写。

   石の番号の、勝利確認。
   もし、それが、「はい」ならば、(
   「System > あなたの負けです。」と、チャットメッセージへ発言。
   試合状況の、相手の勝ち数は、(試合状況の、相手の勝ち数) +1。
   「System > あなたの勝ち数は {試合状況の、自分の勝ち数}、」&
   「相手の勝ち数は {試合状況の、相手の勝ち数}になりました。」と、
   チャットメッセージへ発言。
   もし、(試合状況の、相手の勝ち数)が、2以上ならば、(
      「System > 残念、あなたは{通信相手の名前}との対戦に負けました。」と、
      チャットメッセージへ発言。
   )違えば、(
      試合状況の、試合数は、(試合状況の、試合数 +1)。
      「System > では、{試合状況の、試合数}戦目を開始します。」と、
      チャットメッセージへ発言。
      もし、通信の立場が、「サーバー」ならば、(
         「System > 先手は黒の{自分の名前}です。」と、
         チャットメッセージへ発言。
      手順の記録は、「後手:白({通信の相手の名前})\n先手:黒({自分の名前})」。
      )
      もし、通信の立場が、「クライアント」ならば、(
         「System > 先手は白の{自分の名前}です。」と、
         チャットメッセージへ発言。
      手順の記録は、「後手:黒({通信の相手の名前})\n先手:白({自分の名前})」。
      )
   )
   試合状況の、手順数は、1。
   置き碁石初期化を、呼ぶ。
   碁盤描写クリアを、呼ぶ。
   )※敗北のチェック

   打ち手交代を、呼ぶ。


もし、TCP文字列#0#0が、「チャット発言」ならば、(
   「{TCP文字列#1#0}」と、チャットメッセージへ発言。



)違えば、(
   「System > {TCP送信元}からメッセージを受信しましたが、」&
   「既に接続している人とは違う人なので、これを無視します。」と、
   チャットメッセージへ発言。

待機。


*切断ボタンイベント
もし、通信の立場が、「サーバー」ならば、(
   もし、通信の相手が、「」違えば、(
      通信の相手を、TCPサーバー切断。
      「System > {通信の相手の名前}を切断しました。」と、
      チャットメッセージへ発言。
      通信の相手は、「」。
      )
   TCPサーバー終了。
   「System > サーバーを終了しました。」と、
   チャットメッセージへ発言。
   通信の立場は、「」。

   


もし、通信の立場が、「クライアント」ならば、(
   TCP切断。
   「System > サーバー{TCP送信元}、¥「{通信の相手の名前}¥」と切断しました。\n」と、
   チャットメッセージへ発言。
   通信の立場は、「」。

ユーザー初期設定ダイアログの、可視は、オン。

待機。


*チャットメッセージへ発言
現在の時間は、今。
引数取得。
チャットメッセージは、「(」& 現在の時間 &「) 」& それ、& 「\n」& チャットメッセージ。
戻る。


*クライアント開始イベント
もし、自分の名前が、「」ならば、
   「ニックネームを入力してください。」と、言う。
違えば、(
もし、エディタ2が、「」ならば、
   「接続するサーバーを指定してください。」と、言う。
違えば、(
もし、ポート番号が、「」ならば、
   「ポートを指定してください。」と、言う。
違えば、(
ポート番号が、数字か。
もし、それが、いいえならば、
   「ポート番号を正しく指定してください。」と、言う。
違えば、(
ラベルAの、テキストは、「簡易チャット/通信メッセージ(あなたの名前:{自分の名前})」
TCPポートは、ポート番号。

通信の立場は、「クライアント」。
通信受信イベントに、TCP受信処理設定。
エディタ2へ、TCP接続。
通信の相手は、エディタ2。
ユーザー初期設定ダイアログの、可視は、オフ。

0.5秒、待つ。

TCPポートは、ポート番号。
「接続しました,{自分の名前}」を、TCP送信。

))))
待機。


*発言イベント
もし、通信の立場が、「サーバー」ならば、
   通信の相手へ、「チャット発言,{自分の名前} > {発言エディタ}」を、TCPサーバーから送信。
もし、通信の立場が、「クライアント」ならば、
   「チャット発言,{自分の名前} > {発言エディタ}」を、TCP送信。
もし、通信の立場が、「」ならば、
   「System > 接続していないので発言を送信できません。」と、チャットメッセージへ発言。

「{自分の名前} > {発言エディタ}」と、チャットメッセージへ発言。
発言エディタは、「」。

待機。


*手順を記録
引数取得。
一時変数xは、それ#0 +1。
一時変数yは、それ#1 +1。
もし、それ#2が、1ならば、石の色は、「黒」。
もし、それ#2が、2ならば、石の色は、「白」。

「{試合状況の、手順数}」を、「%3d」の、指定形式に変換。
一時変数手順数は、それ。
「{一時変数x}」を、「%2d」の、指定形式に変換。
一時変数xは、それ。
「{一時変数y}」を、「%2d」の、指定形式に変換。
一時変数yは、それ。

手順の記録は、「{一時変数手順数} / {一時変数x},{一時変数y}:{石の色}\n」& 手順の記録。

試合状況の、手順数は、((試合状況の、手順数)+1)

戻る。


*打ち手交代
   もし、(試合状況の、打つ番)が、「サーバー」ならば、(
      試合状況の、打つ番は、「クライアント」。
   )違えば、(
   もし、(試合状況の、打つ番)が、「クライアント」ならば、
      試合状況の、打つ番は、「サーバー」。
   )
戻る。


*指定碁石描写
ペン色は、黒色。
ペン太さは、1。
引数取得。
もし、それ#2が、1ならば、塗り色は、黒色。
もし、それ#2が、2ならば、塗り色は、白色。
一時変数xは、それ#0 *碁盤の1マス。
一時変数yは、それ#1 *碁盤の1マス。
碁盤裏VRAMの、(一時変数x,一時変数y)から、
   (一時変数x+碁盤の1マス,一時変数y+碁盤の1マス)へ、円形描画。
碁盤の石#(それ#0)#(それ#1)は、それ#2。

それ#0,それ#1,それ#2で、手順を記録。
※「それ」がどこまで有効で どこで書き換えられるかヒヤヒヤものですな。(笑)

碁盤裏VRAMを、碁盤の、(0,0)へ、イメージコピー。
※描画処理反映。
※「描画処理反映」命令を行うと、自動的に「待機」されてしまうらしくて、
※正常に処理が続かなくなってしまうので、使えない。
※0.1秒、待つ。
※なんと!「待つ」命令もダメなのか・・・。どうなってるんだ。
戻る。


*勝利確認
※※※※※※※※※※※※※※※※※
※ルールを追加する時は、この関数の周辺を変更するといいかも。
※※※※※※※※※※※※※※※※※
引数取得。
調べる値は、それ。
カウント変数xは、0。
カウント変数yは、0。
連続個数は、0。

カウント変数yを、0から、19まで、繰り返す(
カウント変数xを、0から、19まで、繰り返す(
   もし、「{碁盤の石#カウント変数x#カウント変数y}」が、調べる値ならば、(
      ※横(右)方向に、連続何個並んでいるか調べる
      連続個数は、1。
      5回(
      もし、「{碁盤の石#(カウント変数x + 回数)#カウント変数y}」が、調べる値ならば、
         連続個数は、連続個数 +1。
      違えば、抜ける。
      )
      もし、連続個数が、5ならば、(それは、「はい」。戻る。)
      ※斜め(右下)方向に、連続何個並んでいるか調べる
      連続個数は、1。
      5回(
      もし、碁盤の石#(カウント変数x + 回数)#(カウント変数y + 回数)が、調べる値ならば、
         連続個数は、連続個数 +1。
      違えば、抜ける。
      )
      もし、連続個数が、5ならば、(それは、「はい」。戻る。)
      ※縦(下)方向に、連続何個並んでいるか調べる
      連続個数は、1。
      5回(
      もし、碁盤の石#カウント変数x#(カウント変数y + 回数)が、調べる値ならば、
         連続個数は、連続個数 +1。
      違えば、抜ける。
      )
      もし、連続個数が、5ならば、(それは、「はい」。戻る。)
      ※斜め(左下)方向に、連続何個並んでいるか調べる
      連続個数は、1。
      5回(
      もし、碁盤の石#(カウント変数x - 回数)#(カウント変数y + 回数)が、調べる値ならば、
         連続個数は、連続個数 +1。
      違えば、抜ける。
      )
      もし、連続個数が、5ならば、(それは、「はい」。戻る。)
   )


それは、「いいえ」。
戻る。




- Child Tree -