オセロ対局プログラムの作成方法

このQ&Aのポイント
  • マイコンの2色ドットマトリクスLEDを使ってオセロゲームの対局プログラムを作成する方法を探しています。
  • プログラムメモリのサイズは64Kバイト(32Kワード)で、変数に使えるRAMは3936バイトです。
  • C言語やVB、昔のBasicなどを使用して、サイズを収めることのできるプログラムソースの情報を求めています。初心者でも勝てる弱いプログラムでも構いません。
回答を見る
  • ベストアンサー

オセロ(リバーシ)の対局プログラム

マイコンの2色ドットマトリクスLEDを使ってオセロゲームを作りたいのですが、 参考になる思考プログラムのソースが見つかりません。 プログラムメモリのサイズは64Kバイト(32Kワード)ありますので、仮にC言語で組むと100~200ステップくらいは書けるのではないかと思います。変数などに使えるRAMは3936バイトです。 このサイズに収まるくらいのプログラムソースをご存知の方、情報をお待ちしています。 ランダムに打って対戦するのでは面白くありませんが、あくまでもお遊び程度のものを考えています。初心者でも勝てる程度の弱さで構いません。 私はC言語以外には、VBや昔のBasic程度なら分かりますのでそちらでも構いません。

noname#215107
noname#215107

質問者が選んだベストアンサー

  • ベストアンサー
  • BuriBuri4
  • ベストアンサー率28% (150/525)
回答No.1

初代ファミコン版ドラゴンクエスト3は64KByteに収まっていましたから64KByteもメモリーがあってたった200ステップしか入らないって事は無いと思います、20000ステップ位は入るのではないでしょうか。 >変数などに使えるRAMは3936バイト コード領域が64KByteあるのにデータ領域がたった3KByteっておかしくないですか?スペックを見間違えていませんか? オセロは比較的単純な二人零和有限確定完全情報ゲームでとっくの昔に必勝法が確立されており対戦ソフトとしては30年前に行くところまでいってしまいました。 なので今ころ中途半端なソースを公開する人は滅多にいないと思います。 「リバーシのアルゴリズム」 http://www.amazon.co.jp/dp/4875934289 などのアルゴリズムの解説本(Java/C++のソースコード付き)は出ていますのでそういう書籍を参考にされていはいかがでしょうか。 また人間のプレイヤー向けに定石などを解説した「強くなるオセロ」 http://www.amazon.co.jp/dp/4816350330 のようなオセロ入門書もありますので、そういった本を参考に車輪の再発明をするのも楽しいと思います。

noname#215107
質問者

お礼

回答ありがとうございます。 ステップ数については、おっしゃる通りだと思います。このへんはまあ、適当です。 200ステップ程度の規模のプログラムが理想です。 昔、BASICで書かれた対局可能なオセロゲーム(弱かったですが)が雑誌2ページくらいに掲載されていたのですが、このあたりのサイズをイメージしています。 ファミコンは主要なルーチンはアセンブラで書かれていたと思います。6502は使ったことがありませんが、同時代のZ80は良く使いました。 開発環境のメモリ残量の減りをみると、1万ステップはとても無理です。せいぜい1000ステップ以下だと思います。マイコンの場合、RISCチップですし、Cコンパイラの最適化が試用期間を過ぎるとOFFになってしまうため、あまり効率は良くないのは確かです。実際は2バイトで1ワードですので、NOP命令一個でも2バイト食います。また他のライブラリを乗っけることを考えたら、残りは余りないと考えたほうがいいかもしれません。 >コード領域が64KByteあるのにデータ領域がたった3KByteって >おかしくないですか?スペックを見間違えていませんか? いえ、間違えていません。 使用しているマイコンはPIC18F26K20です。 http://akizukidenshi.com/catalog/g/gI-05397/ コード領域は、ROM上にありますので、変数領域として使えません。定数領域としては使えます。 ANSI準拠のCですが、この部分だけは考慮する必要があります。 rom const int a=1; ←(ROM上に配置、a=1で固定) int a=1; ←(aはRAM上に配置)

関連するQ&A

  • 8×8LEDマトリクス(制御)プログラム

    最近C言語の勉強を始めたばかりなのですが、 学校で H8-3048マイコンで8×8のマトリクスLEDを光らせることになりました… それも、目の形で光らせるのだとか。。。 しかし、プログラムの作り方がわかりません。。。 もし参考にできるものがあれば教えていただけるとうれしいです。 ちなみにまだ回路も出来上がっていないのでそちらもアドバイスかなにかあれば教えてください・・・。 よろしくお願いします。

  • モンテカルロ法ベースのオセロプログラムを作りたいのですが

    今、C言語でモンテカルロ法ベースのオセロプログラムを作っているのですが、なかなかうまくいきません。 エラー内容: ある程度書いてみたのですが、実行すると「Segmentation fault」とでてしまいます。 アルゴリズム内容: 構造体を用意して、ランダムに手を打ち勝ったら手の内容と勝ち数をカウントして、構造体に格納します。最後に一番勝ったてを指すというプログラムを書いています。 質問点: 「Segmentation fault」とでてしまいます。何故なのでしょうか? 解決方法と理由を教えてください。 プログラム内で他にも変な場所があれば、教えてください。 それと、モンテカルロ法だけだと弱いので、何かいい手はないでしょうか? 質問が多くて申し訳ございませんが、教えていただければ幸いです。 オセロのプログラムデータは添付しています。 開発環境のOSはubuntuを使用しています。Windowsの時、文字化けする可能性があります。 なにとぞよろしくお願いします。

  • 電光掲示板のプログラムの変更

    PICを使って電光掲示板を作ろうとしました。とあるホームページのソースリストを見て作ろうとしたのですが、LEDドットマトリックスが足りず5個を4個にしなければいけなくなりました。そこのプログラムを直したいのですが.. ホームページを載せておきます。ならべくどこをどう直すなど、詳しく教えてもらえるとありがたいです。よろしくお願いします。  とある提示版で質問したところ自分でやれと叩かれ、がんばってみたのですができません。どうかおねがいします。 マトリックス240 http://nonchansoft2.at.infoseek.co.jp/matrix7.htm ソースリスト http://nonchansoft2.at.infoseek.co.jp/matrix8x.htm

  • Arduinoで複数のLEDマトリクスに映像出力

    私はこのページを参考に( http://kousaku-kousaku.blogspot.jp/2008/08/arduinoprocessingledweb.html )ArduinoMegaの互換機ChipKitMax32を使用して、12×32のLEDマトリクスを制御し映像を表示させています。 が、映像を表示させるには速度的に問題があり、参考先のプログラムではdelayMicrosecondsで各ドットの明るさを制御していますがそれも怪しく、映像自体のフレームレートを下げるなどしても改善せず、マイコン1台で映像表示するのは厳しいか…と思い、 8×8のLEDマトリクスにつき1台のArduino unoを使用し、それを何個も連結させ大きなLEDマトリクスにしようと考えました。 複数のArduinoを接続する方法として、I2CやSPI通信等がありますが、SPIでは後々Arduino unoのピン数が足りなくなるかもという不安もあり、複雑そうですがI2CでArduino同士を通信させようと思いました。 回路のイメージは添付画像の通り、 プログラムの内容は、 1 Processingから映像の各ドットの明るさの数値を受け取る 2 Arduinoマスタからスレーブ1へ最初の8つの数値を送る 3 スレーブ1がマスタから受け取った8つの数値をLEDマトリクス1の一行目の各ドットの明るさに割り振り点灯 4 Arduinoマスタからスレーブ2へ次の8つの数値を送る 5 スレーブ2がマスタから受け取った8つの数値をLEDマトリクス2の一行目の各ドットの明るさに割り振り点灯(LEDマトリクス1・2の一行目が点灯完了) これをあと7回くりかえし、LEDマトリクスの全画面の点灯完了 最終的には8×8のLEDマトリクスを10台程使用して、16×40のLEDマトリクスに映像を表示させたいです。 Arduinoで複数のLEDマトリクスを扱う場合、「映像表示の速度に耐えられるようにするために、Arduino自体の数を増やす、その通信をI2Cで行い、上記のようなプログラムで制御する」という方法で正しいか、可能かどうかの判断をお願いしたいです。 また、これより良い方法や、その他アドバイス等ありましたらお願い致します。

  • プログラムを始めるなら

    C言語をある程度知っている人なら、プログラミングは大丈夫だと言われる理由って何でしょう? 別にC言語を元に全てのプログラムができたわけでもないし、 オブジェクト指向のプログラムとは毛色が違うし。 私自身C言語,javaなどのソースが読める程度しかできませんが、 プログラミングが出来るとはお世辞にも言えません。 何故このような事が言われているのでしょう? また、最初に学ぶべき言語としてはやはりC等の言語がいいのでしょうか? それともアセンブリ言語のような物の方がいいのでしょうか?

  • 【DoJa】オセロのソースが公開されているサイト知りませんか?

    初めて質問させていただきます。 iアプリのオセロ(リバーシ)を自分で作りたいと思っています。開発環境(DoJa-3.5)は既にあり、Javaの知識は昔、授業で習った程度です><。 そこでまず公開されているソースを見て、内容をじっくり勉強していきたいと思っているのですが、見つかりません・・・(TДT)。CやJavaのオセロのプログラムは検索すればたくさん出てくるのですが、DoJaで作ってあるのは探しても見つけられません。本屋にも参考になるのはありませんでした。 どなたかDoJaのオセロのソースが載っているサイトなど知りませんか?大変恐縮ですが、ご存知の方ご回答お願いします。

  • ヌメロンのプログラム

    C言語で3桁ヌメロンをつくりたいと思うのですが プログラムが思いつきません (ヌメロンは番組でやっているのとルールは同じです でもシャッフルやダブルなどのアイテムはいりません 数字も完全ランダムでいいです) ソースコードかフローチャートなどヒントになる ものを教えてください よろしくお願いします

  • 数独を解くプログラム

    私は、ナンプレ(数独)が好きでよく問題を解いています。 ふと、(以前少しだけC言語の勉強をしていたので)C言語でナンプレを解くプログラムを作るとしたらどんなソースになるのか気になりました。 私自身のプログラム理解のレベルがソースをかなりゆっくり読んで理解できる程度なので、プログラムにおこすことなど、とてもできません。 また、過去の質問を検索してみましたがJavaやC#のものは見つけられましたが、Cは見つけられませんでした。 面倒だとは思いますが、よろしければご教授ください。

  • プログラム言語を覚えるならどれか?

    プログラム言語を覚えるならどれか? 現在これが得意と言えるほどのプログラム言語がありません。 今後(10年くらい)、ある程度の期間に渡って使い続けるために プログラム言語を新たに覚えるとしたら、何が良いですか? 候補は以下のものを考えていますが、これ以外のものでも かまいません。 1:C# 2:SQL言語(いっぱいあるらしく、何が良いのかわかりません) 3:JAVA 4:VB (VB.NETとかの.NETって言うプログラムは覚えたほうが良いでしょうか?) できれば有名な参考書とかも教えてください。 なお、学生時代はUNIXのGCCを使用して簡単なプログラムを組んでいました。 今はACCESS(VBA含む)を用いてデータベースを作ることがあります。 社内SEの駆け出しです。

  • PIC LEDの点滅プログラム

    現在C言語でLEDの点滅プログラムを作成しているのですが なかなかうまくいきません。 LEDの点滅プログラムのソースなど公開しているサイトがありましたら教えてください。 参考にしてプログラムを考えていきたいと思っています。 基本的、シンプルな点滅プログラムを希望します。 PIC16F84Aを使用することを前提に考えています。 よろしくお願いいたします。

専門家に質問してみよう