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

MESSAGE オセロ /クジラ飛行机 (02/01/15(Tue) 09:39) [210]
......MESSAGE 勝ってしまいました。中級、上級があると.. /tosimiti (02/01/15(Tue) 17:26) [217]
............MESSAGE 上級とか・・・ /初心者 (02/01/15(Tue) 20:44) [220]
..................MESSAGE 病弱オセロ・新作アップ /クジラ飛行机 (02/01/16(Wed) 14:53) [226]
........................MESSAGE 病弱オセロ・バグです /初心者 (02/01/16(Wed) 18:52) [229]
........................MESSAGE Re[4]: 病弱オセロ・新作アップ /くある (02/02/04(Mon) 18:30) [396]
......MESSAGE 裏技? /アース (02/01/22(Tue) 00:01) [273]
......MESSAGE 感想 私でも勝てました。 /浩子 (02/04/18(Thu) 16:02) [764]
......MESSAGE 勝ちました。 /高松祐史 (02/07/11(Thu) 07:51) [1031]
............MESSAGE Re[2]: 勝ちました。 /ほえほえ (02/07/12(Fri) 22:23) [1033]


親記事 / ▼[ 217 ] ▼[ 273 ] ▼[ 764 ] ▼[ 1031 ]
NO.210  オセロ
□投稿者/ クジラ飛行机 -(2002/01/15(Tue) 09:39:23)
□U R L/ http://www.text2music.com/
{
オセロです。
コンピューターの手は、完全にランダムなんですが、
何も考えずに打つと、負けることもあるかも。
掲示板に載せるにあたって短く分かりやすくしようとおもったのですが、
これがなかなか。
ひまわりで試行錯誤
}

'オセロ
'クジラ飛行机(c)2002/1/15
'===========================================================
*変数初期化
白色で、画面クリア。
ペン太さ=2
W = 32
コマの初期化
コマ色#1="#990000"
コマ色#2="#FFFFFF"

機能メニューを、メニュー作成。
機能メニューに、はじめからメニューを、メニュー追加。
その、イベントは、(
   白色で、画面クリア。コマの初期化。ゲーム開始。
)
機能メニューに、パスメニューを、メニュー追加。
その、イベントは、コンピューター手決定。
機能メニューに、コマ数チェックメニューを、メニュー追加。
その、イベントは、コマ数数え上げ


*母艦の設定
母艦の、高さは、(W*8)
母艦の、幅は、(W*8)

*ゲーム開始
マス描画
コマ描画
母艦の、クリックした時は、プレイヤー手決定。
母艦の、タイトルは、「オセロ:プレイヤー黒の番」
待機。

*プレイヤー手決定
XX=INT(マウスX÷W)
YY=INT(マウスY÷W)
C=コマ#XX#YY
もし、C<>0ならば(
   「({XX},{YY})には、既にコマがあります。」と、言う。待機。
)。
P=1。
コマ反転モードは、オフ。
反転するコマ数チェック。
もし、それが、0ならば(
   「({XX},{YY})には、置けません。」と、言う。待機。
)。
コマ反転モードは、オン。
反転するコマ数チェック。
コマ描画。
石の数追加。

LOOP_CNT=0
*コンピューター手決定
母艦の、タイトルは、「オセロ:コンピューター白の番:{LOOP_CNT}」
描画処理反映。
母艦の、クリックした時は、「」。
P=2
XX=乱数(8)
YY=乱数(8)
もし、コマ#XX#YY<>0ならば、コンピューター手決定へ、飛ぶ。
コマ反転モード=オフ。
反転するコマ数チェック。
もし、それが、0ならば(
   LOOP_CNTに、1を、足す。
   もし、LOOP_CNTが、64以上なら(
      「コンピューターは、パスします」と、言う。
   )違えば、コンピューター手決定へ、飛ぶ。
)
コマ反転モード=オン。
反転するコマ数チェック。
コマ描画。
石の数追加。
母艦の、クリックした時は、プレイヤー手決定。
母艦の、タイトルは、「オセロ:プレイヤー黒の番」
待機。

'======================
*マス描画
YY=8*W
Xを、0から、8まで、繰り返す(
   XX = X * W
   (XX,0)へ、移動。
   (XX,YY)へ、線。
)。
XX=8*W
Yを、0から、8まで、繰り返す(
   YY = Y * W
   (0,YY)へ、移動。
   (XX,YY)へ、線。
)。
戻る。

*コマ描画
ペン色=黒色
Xを、0から、7まで、繰り返す(
   Yを、0から、7まで、繰り返す(
      もし、コマ#X#Y<>0ならば(
         X1 = X * W
         Y1 = Y * W
         X2 = X1 + W
         Y2 = Y1 + W
         塗り色=コマ色#(コマ#X#Y)
         母艦の、(X1,Y1)から、(X2,Y2)へ、円形描画。
      )
   )
)
戻る。

*反転するコマ数チェック
'引数の説明:(XX,YY)に、Pがコマを置く。
'返却値:置けるコマの数

CNT=0 '置けるコマの数
もし、P=1ならば、PP=2。違えば、PP=1。
方向文=「X=XX; Y=YY-I」。コマ数方向チェック。'上側をチェック
方向文=「X=XX; Y=YY+I」。コマ数方向チェック。'下側をチェック
方向文=「X=XX+I; Y=YY」。コマ数方向チェック。'右側をチェック
方向文=「X=XX-I; Y=YY」。コマ数方向チェック。'左側をチェック
方向文=「X=XX+I; Y=YY-I」。コマ数方向チェック。'右上側をチェック
方向文=「X=XX-I; Y=YY-I」。コマ数方向チェック。'左上側をチェック
方向文=「X=XX+I; Y=YY+I」。コマ数方向チェック。'右下側をチェック
方向文=「X=XX-I; Y=YY+I」。コマ数方向チェック。'左下側をチェック
それは、CNT
戻る。

*コマ数方向チェック
PRE_CNT=0
挟んでいる=いいえ
Iを、1から、7まで、繰り返し(
   方向文を、ひまわりする。
   もし、(Y<0)または(X<0)ならば、抜ける。
   C=コマ#X#Y
   もし、C=0ならば、抜ける。
   もし、C=Pならば(
      挟んでいる=はい
      抜ける。
   )。
   PRE_CNT=PRE_CNT+1'
)。
もし、PRE_CNT=0ならば、挟んでいる=いいえ
もし、挟んでいる=はいならば、CNT=CNT+PRE_CNT
もし、(挟んでいる=はい)かつ(コマ反転モード=オン)ならば(
   コマ#XX#YY=P
   Iを、1から、7まで、繰り返し(
      方向文を、ひまわりする。
      もし、(Y<0)または(X<0)ならば、抜ける。
      C=コマ#X#Y
      もし、C=0ならば、抜ける。
      もし、C=Pならば、抜ける。
      コマ#X#Y=P
   )。
)。
戻る。

*コマ数数える
'PLY,COM
PLY=0; COM=0
Xを、0から、7まで、繰り返し(
   Yを、0から、7まで、繰り返し(
      C=コマ#X#Y
      もし、C=1ならば、PLY=PLY+1
      もし、C=2ならば、COM=COM+1
   )
)
それは、CNT
戻る。

*石の数追加
コマ数数える
もし、((PLY+COM)=>64)または(PLY=0)または(COM=0)ならば(
   母艦の、タイトルは、「オセロ:結果発表」
   もし、PLY>COMならば、勝敗は、「プレイヤーの勝ち」
   もし、PLY=COMならば、勝敗は、「引き分け」
   もし、PLY<COMならば、勝敗は、「コンピューターの勝ち」
   「プレイヤー = {PLY}\nコンピューター = {COM}\n{勝敗}」と、言う。
   待機。
)。
戻る。

*コマの初期化
Xを、0から、7まで、繰り返す(
   Yを、0から、7まで、繰り返す(
      コマ#X#Y=0
   )
)
コマ#3#3=1
コマ#4#3=2
コマ#3#4=2
コマ#4#4=1
戻る。

*コマ数数え上げ
コマ数数える
「プレイヤー = {PLY}\nコンピューター = {COM}」と、言う。
待機。



▲[ 210 ] / ▼[ 220 ]
NO.217  勝ってしまいました。中級、上級があるといいですね。
□投稿者/ tosimiti -(2002/01/15(Tue) 17:26:02)
□U R L/
すごいですね。いずれ五目並べ、囲碁も出てきそうですね。
ゲームなんですが、勝ってしまいました。中級、上級があるといいですね。



▲[ 217 ] / ▼[ 226 ]
NO.220  上級とか・・・
□投稿者/ 初心者 -(2002/01/15(Tue) 20:44:45)
□U R L/
オセロならそんじょそこらのやつには負けないぼくです。
やっぱランダムにコンピュータがうってくるとこっちは楽勝っす。
上級とかあればいいと思いますがデータをいれるのがスゴイ大変だと思いますね。
まぁオセロは将棋と違ってパターンの数はかなり少ないので将棋よりは簡単
かもしれませんが・・・
将棋をつくるにはかなりの時間がかかるんではないでしょうか?
そう考えると将棋ゲームをつくっている人たちはスゴイですね。。。。



▲[ 220 ] / ▼[ 229 ] ▼[ 396 ]
NO.226  病弱オセロ・新作アップ
□投稿者/ クジラ飛行机 -(2002/01/16(Wed) 14:53:04)
□U R L/ http://www.text2music.com
{*
  オセロをちょっと改良してみました。
  見た目をちょっと良くして、
  コンピューターの思考をほんの少し改良してみました。
*}
{---プログラム掲示板投稿フォーム---
【ソフト名】病弱オセロ (バージョン 1.10)
【作 成 者】クジラ飛行机 (連絡先:himawari@text2music.com)
【種  別】フリーソフトウェア
【ひまわりのバージョン】ver.1.17
【転  件】可(転載条件:ご自由に)
【ひまわり本体への梱包】可
【実行時に利用作成するファイル】無
【コメント】コンピューターの弱いオセロです。自分は強いという錯覚に陥りたい人へ。
---投稿フォームここまで---}
'===========================================================
*変数初期化
母艦の、リサイズは、オフ。
白色で、画面クリア。
ペン太さ=2
W = 32
コマの初期化

機能メニューを、メニュー作成。
機能メニューに、はじめからメニューを、メニュー追加。
その、イベントは、(
   白色で、画面クリア。コマの初期化。ゲーム開始。
)
機能メニューに、パスメニューを、メニュー追加。
その、イベントは、コンピューター手決定。
機能メニューに、コマ数チェックメニューを、メニュー追加。
その、イベントは、コマ数数え上げ


*母艦の設定
母艦の、高さは、(W*8)
母艦の、幅は、(W*8)

*ゲーム開始
マス描画
コマ描画
母艦の、クリックした時は、プレイヤー手決定。
母艦の、タイトルは、「オセロ:プレイヤー黒の番」
待機。

*プレイヤー手決定
XX=INT(マウスX÷W)
YY=INT(マウスY÷W)
C=コマ#XX#YY
もし、C<>0ならば(
   母艦の、タイトルは、「({XX},{YY})には、既にコマがあります。」。待機。
)。
P=1。
コマ反転モードは、オフ。
反転するコマ数チェック。
もし、それが、0ならば(
   母艦の、タイトルは、「({XX},{YY})には、置けません。」。待機。
)。
コマ反転モードは、オン。
反転するコマ数チェック。
コマ描画。
石の数追加。

*コンピューターの手番
LOOP_CNT=0
母艦の、クリックした時は、「」。
コマ反転モード=オフ。
P=2
'四隅のチェック
XX=0;YY=0;反転するコマ数チェック。もし、それ>=1ならば、コンピューター手決定へ、飛ぶ。
XX=7;YY=0;反転するコマ数チェック。もし、それ>=1ならば、コンピューター手決定へ、飛ぶ。
XX=0;YY=7;反転するコマ数チェック。もし、それ>=1ならば、コンピューター手決定へ、飛ぶ。
XX=7;YY=7;反転するコマ数チェック。もし、それ>=1ならば、コンピューター手決定へ、飛ぶ。
*コンピューターランダム
母艦の、タイトルは、「オセロ:コンピューター白の番:{LOOP_CNT}」。描画処理反映。
XX=乱数(8)
YY=乱数(8)
'星には置かない
もし、(XX=2)かつ(YY=1)ならば、コンピューターランダムへ、飛ぶ。
もし、(XX=6)かつ(YY=1)ならば、コンピューターランダムへ、飛ぶ。
もし、(XX=2)かつ(YY=6)ならば、コンピューターランダムへ、飛ぶ。
もし、(XX=6)かつ(YY=6)ならば、コンピューターランダムへ、飛ぶ。

もし、コマ#XX#YY<>0ならば、コンピューターランダムへ、飛ぶ。
反転するコマ数チェック。
もし、それが、0ならば(
   LOOP_CNTに、1を、足す。
   もし、LOOP_CNTが、64以上なら(
      「コンピューターは、パスします」と、言う。
      プレイヤーの手に戻すへ、飛ぶ。
   )違えば、コンピューターランダムへ、飛ぶ。
)
*コンピューター手決定
コマ反転モード=オン。
反転するコマ数チェック。
コマ描画。
石の数追加。
*プレイヤーの手に戻す
母艦の、クリックした時は、プレイヤー手決定。
母艦の、タイトルは、「オセロ:プレイヤー黒の番」
待機。

'======================
*マス描画
COL#0="#00FF33"
COL#1="#00CC00"
ペン色は、"#000033"
ペン太さは、0
Xを、0から、7まで、繰り返す(
   Yを、0から、7まで、繰り返す(
      X1 = X * W
      Y1 = Y * W
      X2 = X1 + W
      Y2 = Y1 + W
      塗り色は、COL#((Y*8+X+(Y%2))%2)
      (X1,Y1,X2,Y2)へ、四角形。
   )
)

戻る。

*コマ描画
ペン太さは、2
Xを、0から、7まで、繰り返す(
   Yを、0から、7まで、繰り返す(
      C = コマ#X#Y
      もし、C<>0ならば(
         X1 = X * W; Y1 = Y * W
         X2 = X1 + W; Y2 = Y1 + W
         もし、C=1ならば(
            8回(
               CC=回数*20
               塗り色= RGB(0,0,CC)
               ペン色=塗り色
               B=回数*2
               母艦の、(X1+B,Y1+B)から、(X2-B,Y2-B)へ、円形描画。
            )
         )違えば(
            8回(
               CC=255-回数*30
               塗り色= RGB(CC,CC,255)
               ペン色=塗り色
               B=回数*2
               母艦の、(X1+B,Y1+B)から、(X2-B,Y2-B)へ、円形描画。
            )
         )
      )
   )
)
母艦を、ネガポジ反転。
ランタイムのパス&『tools\n.wav』を、演奏。
0.1秒、待つ。
母艦を、ネガポジ反転。
戻る。

*反転するコマ数チェック
'引数の説明:(XX,YY)に、Pがコマを置く。
'返却値:置けるコマの数
もし、コマ#XX#YY<>0ならば(それは、0。戻る。)
CNT=0 '置けるコマの数
もし、P=1ならば、PP=2。違えば、PP=1。
方向文=「X=XX; Y=YY-I」。コマ数方向チェック。'上側をチェック
方向文=「X=XX; Y=YY+I」。コマ数方向チェック。'下側をチェック
方向文=「X=XX+I; Y=YY」。コマ数方向チェック。'右側をチェック
方向文=「X=XX-I; Y=YY」。コマ数方向チェック。'左側をチェック
方向文=「X=XX+I; Y=YY-I」。コマ数方向チェック。'右上側をチェック
方向文=「X=XX-I; Y=YY-I」。コマ数方向チェック。'左上側をチェック
方向文=「X=XX+I; Y=YY+I」。コマ数方向チェック。'右下側をチェック
方向文=「X=XX-I; Y=YY+I」。コマ数方向チェック。'左下側をチェック
それは、CNT
戻る。

*コマ数方向チェック
PRE_CNT=0
挟んでいる=いいえ
Iを、1から、7まで、繰り返し(
   方向文を、ひまわりする。
   もし、(Y<0)または(X<0)ならば、抜ける。
   C=コマ#X#Y
   もし、C=0ならば、抜ける。
   もし、C=Pならば(
      挟んでいる=はい
      抜ける。
   )。
   PRE_CNT=PRE_CNT+1'
)。
もし、PRE_CNT=0ならば、挟んでいる=いいえ
もし、挟んでいる=はいならば、CNT=CNT+PRE_CNT
もし、(挟んでいる=はい)かつ(コマ反転モード=オン)ならば(
   コマ#XX#YY=P
   Iを、1から、7まで、繰り返し(
      方向文を、ひまわりする。
      もし、(Y<0)または(X<0)ならば、抜ける。
      C=コマ#X#Y
      もし、C=0ならば、抜ける。
      もし、C=Pならば、抜ける。
      コマ#X#Y=P
   )。
)。
戻る。

*コマ数数える
'PLY,COM
PLY=0; COM=0
Xを、0から、7まで、繰り返し(
   Yを、0から、7まで、繰り返し(
      C=コマ#X#Y
      もし、C=1ならば、PLY=PLY+1
      もし、C=2ならば、COM=COM+1
   )
)
それは、CNT
戻る。

*石の数追加
コマ数数える
もし、((PLY+COM)=>64)または(PLY=0)または(COM=0)ならば(
   母艦の、タイトルは、「オセロ:結果発表」
   もし、PLY>COMならば、勝敗は、「プレイヤーの勝ち」
   もし、PLY=COMならば、勝敗は、「引き分け」
   もし、PLY<COMならば、勝敗は、「コンピューターの勝ち」
   「プレイヤー = {PLY}\nコンピューター = {COM}\n\n{勝敗}」と、言う。
   待機。
)。
戻る。

*コマの初期化
Xを、0から、7まで、繰り返す(
   Yを、0から、7まで、繰り返す(
      コマ#X#Y=0
   )
)
コマ#3#3=1
コマ#4#3=2
コマ#3#4=2
コマ#4#4=1
戻る。

*コマ数数え上げ
コマ数数える
「プレイヤー = {PLY}\nコンピューター = {COM}」と、言う。
待機。



▲[ 226 ] / 返信無し
NO.229  病弱オセロ・バグです
□投稿者/ 初心者 -(2002/01/16(Wed) 18:52:41)
□U R L/
つかってみましたがバグ発見です。
こっちがもう置くところが無くてパスしてもコンピューターはどこにもおかないままぼくに順番がまわってきてしまいました。



▲[ 226 ] / 返信無し
NO.396  Re[4]: 病弱オセロ・新作アップ
□投稿者/ くある -(2002/02/04(Mon) 18:30:47)
□U R L/
打ったあとの画面がちょっと目にキツイかなと思いました。
それと、どうでも良いのですが、
コンピューターに負けてしまいました;(←弱すぎ)



▲[ 210 ] / 返信無し
NO.273  裏技?
□投稿者/ アース -(2002/01/22(Tue) 00:01:15)
□U R L/
はじめまして
裏技?を発見しました(たぶん)
処理速度が遅いPCでコンピューターの番のときにパスを選択するとなるはず。
処理が早いとショートカットキーを決めておかないとできないかも(^^;)



▲[ 210 ] / 返信無し
NO.764  感想 私でも勝てました。
□投稿者/ 浩子 -(2002/04/18(Thu) 16:02:34)
□U R L/ http://www11.tok2.com/home/tanhiroko/
クジラ飛行机さんのオセロゲーム楽しいですね。
私でも勝てました。
でも、時々どこにも打てない膠着状態になることがあります。
こういう時は終わりにしてほしいです。
初級・中級レベルもあるといいな。
今後に期待しています。



▲[ 210 ] / ▼[ 1033 ]
NO.1031  勝ちました。
□投稿者/ 高松祐史 -(2002/07/11(Thu) 07:51:35)
□U R L/
勝ちました。



▲[ 1031 ] / 返信無し
NO.1033  Re[2]: 勝ちました。
□投稿者/ ほえほえ -(2002/07/12(Fri) 22:23:03)
□U R L/
ぎりぎり勝ちました
最初は負けたけど

仕組みがよくわかんないけど

角のところを積極的にとるプログラムだと強そう



- Child Tree -