2012年2月25日土曜日

c言語で将棋を作りたいのですがcのどんなことを勉強すればよいですか? たとえばf...

c言語で将棋を作りたいのですがcのどんなことを勉強すればよいですか?

たとえばfor文であるとかポインタであるとか。

また、将棋の駒や盤をつくり、それとプログラムを連動させるのはどうしたらよいのですか?


|||



一応確認しておきますが、プログラムで動かせる将棋盤を作るのではなく、将棋をコンピュータで考えさせるものですよね。



将棋はルールが複雑なので、ルールの簡単なオセロプログラムをまず作られてはどうでしょうか。これならプログラム初心者でも作ることが出来ます。

まずはMin-Max法、アルファベータ法などが載っている本を読んでから取り組んだほうが良いと思います。

こういう思考型ゲームのプログラミングは、言語の問題ではなく、アルゴリズムの問題です。言語には通じている必要がありますが、作りながら学んでいけばよいとおもいます。

完成品のソースの解読は、膨大で複雑すぎてうんざりしますから、やめておいた方がいいと思います。



ほとんどの思考型ゲームは、評価関数の作り方がいちばん難しく、その調整に多大な時間がかかります。ちょっとの調整で強さが極端に変わってくるからです。最適にするのがむずかしいのですね。



ですからそういうことに時間をとられないために、評価関数が簡単な将棋でもオセロでも最後の読み切り(詰め)のところを先に作ると良いかと思いますよ。



盤とか、駒とかの表示は本質的なことではありませんので、わからなければ、とりあえずは、窓に文字で表示するキャラクターベースでかまわないのではないでしょうか。あとで、充実させていけばいいかとおもいます。



|||



C言語については一通り、大抵の機能が自由自在に使えるように。

言語の一層上の、アルゴリズムだとか、こういうことをやりたいときはこういうコードを書くといった「定石」、構造化/オブジェクト指向設計なんかの知識もないと困りそう。それからやっと本番の「将棋」プログラミングかな。



プログラミング言語というのはやりたいことをコンピュータに指示する手段に過ぎません。「将棋」という大仕事をやらせるにあたっては言語要素ごときに引っかかっているようでは先に進めません。なにをどのようにやらせるかに集中しましょう。



「コンピュータで将棋」がどんなに大変かは

http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E...

でも読んで想像して下さい。



将棋の駒や盤の作り方は職人にでも習って下さい。山形あたりが名産地でしたっけ。プログラムに連動させるのは結構大変ですね。メカトロニクスの知識が必要でしょう。

というのはわざと曲解ですが、まずはカッコイイグラフィック表示なんかはおいといて、先手7六歩 後手3四歩、とかを地道に表示/入力するところから始めたほうがいいと思います。将棋の思考プログラムが出来るようになるころにはちょっとしたグラフィックなんかお茶の子でできるようになっているでしょうから。



一度始めたら10年以上楽しめそうですね。


|||



GNU chess のソースコード(無料で入手可能)を参考にすると良いと思います。


|||



いきなり将棋は難しいと思います。まず、オセロやチェスなどからはじめた方が良いと思いますが・・・。これらだと、Linuxなんかでソースコードが公開されていますので、これをキチンと解読してみたらよいかも知れません。そこから、将棋のルールがあると思うのですが、これをどうやって入れ込んでいくのか?などを勉強してみたほうが早いような気もします。

0 件のコメント:

コメントを投稿