質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

6回答

4800閲覧

オセロ作るなら言語は何?

pgsekyoudoutai

総合スコア21

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

2グッド

4クリップ

投稿2015/12/06 01:55

###オセロ作成 言語
学校の課題でオセロのプログラムを組もうと思っています。
そこそこ強いオセロAIにしたいと持っているのですが、今できる言語が、タグの中だとCとJavaScriptだけです。
そこでなんですが、一週間(1日2時間弱)は言語の勉強をしてから作成に入りたいと思っています。
しかし、どの言語でやるのが時間的、難易度的にベストなのかよくわかりません。
アルゴリズム自体はそう変わらないと思うのですがおすすめの言語などあったら教えてください。
また、一週間勉強したとしてどの程度のレベルのオセロAIができると思われますか?
できるだけ強いAIを作るのとできるだけ弱いAIを作るのは同じくらい難しいですか?
質問多くてすみません。回答お願いします。

Chironian, DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izkn

2015/12/06 04:45

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
guest

回答6

0

オセロの前に、◯☓ゲーム(3目並べ、tic-tac-toe) で人間に負けない(勝つか引き分けに持ち込める) ものを作ってみることに挑戦してみては如何でしょう?
言語は問いません。

理由

  • GUIがオセロより単純。
  • AI アルゴリズムもオセロより単純なはず。

投稿2015/12/06 06:37

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pgsekyoudoutai

2015/12/08 13:34

新しい提案ありがとうございます。 はじめに取り組んでみようと思います。
katoy

2015/12/08 14:34

http://postd.cc/tic-tac-toe-understanding-the-minimax-algorithm/ > 三目並べで学ぶミニマックス法 言語は C ではありませんが、ミニマックス法はゲームの手を評価する手法の一つです。 オセロでもこの方法を利用することで初心者には負けない (残り数手の基地は、完全に手を読んで最善の手を打つ) ものをつくることができるはずです。
guest

0

プログラミング言語の選択

pgsekyoudoutai さんが最も得意とする言語を選んでください。習得言語が C, JavaScript のようなのでその中から選択する事になると思います。
一週間しか時間がないようですので基本を早くに作り終えてから「AI」のアルゴリズムをじっくりと作った方が良いと思います。

AI

オセロのAIは検索すればいくらでも見つかりますが、既存のAI通りに作っても自分の力にはならないので自分の思考法をアルゴリズムに落とし込むから始めてみるといいと思います。
pgsekyoudoutai さんは普段、オセロをどんな考え方でプレイしていますか。「四隅を取らせない」「四辺を取らせない」等、オセロのセオリーはいくつかありますが、自分の思考法をアルゴリズム化すると見えてくるものがあると思います。

Re: pgsekyoudoutai さん

投稿2015/12/06 02:24

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pgsekyoudoutai

2015/12/08 13:39

ありがとうございます。アルゴリズムを考える際の手順の参考になりました。 感謝です。。
think49

2015/12/08 15:00

既に二日経過していますが、言語の選択は出来たでしょうか。 作りはじめが遅くなると時間も少なくなっていくので早めに決定した方が良いと思います。 それぞれの習熟度が不明だったので触れていませんでしたが、過去の資産がないならipadcaronさんと同じく私も JavaScript をお勧めします。 HTML を使える条件なら table 要素の API が使えますし、CSS も便利ですね。 それぞれの習熟度が不明だったのであえて触れていませんでしたが、過去の資産がないなら私も JavaScript をお勧めします。 HTML を使える条件なら table 要素の API が使えますし、CSS も便利ですね。 課題の性質から自分で考える事に意味があると思ったのであえて具体的なアルゴリズムには触れていませんでしたが、既に他の方がいくつか紹介されているので参考までに。 私が作るとしたらミニマックス法と前述のセオリーを組み合わせて作ります(セオリーで選択肢を狭める事で先読み時間が短縮できます)。 ただ、既存のアルゴリズムを利用する事を考えると発想の幅を狭めるので他によい方法がないか、pgsekyoudoutai さんの中で考えてみてはどうでしょうか。 そうしたオリジナリティを加える事は課題提出者が評価するポイントに繋がると思います。
guest

0

javascript でok かと。
c だと gui めんどくさいし。

printf で 8x8 盤面を、相手の回のときに毎回表示、縦A-H、横1-8で、例えば b5 て入力させたら、b5に白駒配置して、CPU長考、を繰り返す。

table タグで8x8盤面を作り、マウスクリックで人、自動配置がCPUで。

printf と html なら大差無い気がしますが、mfc と html なら、gui に掛けるコストが莫大なものとなります。肝心の ai に注力するために、gui の面倒な手続きを色々覚えるより、出来る言語で手を抜いた方がいいかと。

まずはai 無しを作る。CPUターンも自分が指す、詰将棋みたいなの。
次に馬鹿ai を作る、おけるとこ見つけたら迷わず指すみたいなの、CPU直ぐに負けそうだけど。
次に角を出来る限り取らない戦法の ai を作る。
次に各種アルゴリズムで作る。

言語習得期間0、gui 1-2日、馬鹿 ai まで1日、あとはじっくり納得できるまで。
なぜさきに馬鹿を作るかというと、作り込みが間に合わない時に無念のリタイアをなんとなく誤魔化せ、、、ないよね。

取り敢えず、詰将棋型のオセロサッサと html/javascriptで作りましょう。

投稿2015/12/08 14:34

ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

アルゴリズム自体はそう変わらないと思うのですがおすすめの言語などあったら教えてください。

基礎的な部分(深さ優先探索+評価関数という構造)はそう変わらないと思いますが、主に評価関数の内容や作り方を皆さん、本当に色々と工夫してます。(他に探索範囲を狭める工夫もあります。)

C言語は高速なのでJava等に比べると1~2手程深く先読みできるのでその分強くなることが期待できますが、アルゴリズムを試行錯誤するには不向きな言語です。アルゴリズムまで含めて開発するのは高校入学後にチャレンジする方が良いかも知れません。その時はC++言語の方がスムーズかも。

一週間勉強したとしてどの程度のレベルのオセロAIができると思われますか?

言語を例え1年勉強しても強いオセロが開発できるわけではありません。

アルゴリズムをどこまで練り上げることができるかが勝負です。
既存のアルゴリズムを真似するところから始めるのが良いと思います。入手できたアルゴリズムが実装に使っている言語を選ぶと速いですね。katoyさんが紹介されているものは良いように思いますよ。

その後、勝負を繰り返して弱点が見つかれば、それを克服するようpgsekyoudoutaiさんなりにアルゴリズムを工夫をするのが良いと思います。
そして、最後にC++へ移植すると最強のオセロができるかも?


【追記】
少し詳しいことを書いてみます。

オセロのようなゲームの場合は、先読みして手を決めます。今から先の盤面を全て先読みしたいのです。しかし、最後までの全てを先読みするには天文学的な時間がかかるので、先読みをある程度の深さで打ち切ります。その打ち切った時の盤面の有利さを評価値として計算し、相手がどんな手を打っても自分の評価値が最大になる手を見つけて打つのです。

その評価値計算方法の1つに「ヒューリスティクス(発見的手法)」と呼ばれる方法があります。ヒューリスティクスって言うと難しそうに見えますが、think49さんが書かれている「四隅を取らせない」「四辺を取らせない」等のことです。あはは。
他にもニューロとかファジーとか様々な方法が提案されてますが、個人でゲームを作る場合はヒューリスティクスが現実的なので、開発者自身のオセロの強さが重要になってきます。
そして、評価値をうまいこと用いてそれ以上評価しなくて良い枝を決定し、探索範囲を狭めるαβ枝刈りと呼ばれるアルゴリズムを使うと高速化できます。

つまり、先読みを深さ優先探索で行い、(時間的に)先読み限界の深さの時の盤面をヒューリスティクスで評価し、その評価値を用いてαβ枝刈りで探索範囲を狭めつつ、最善手を求めるって感じです。

投稿2015/12/06 03:09

編集2015/12/06 04:44
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pgsekyoudoutai

2015/12/08 13:35

具体的な進め方まで教えていただきとても参考になりました。 ありがとうございます。
Chironian

2015/12/08 14:01

リンク先の動画「『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう! 」は、こう見えて実はすっごい良作です(ある意味、感動の超大作かも?)。 オセロの場合、60手でゲームが終了しますが、この手のゲームは一般に、この動画にでてくるように計算時間が増えていくため、恐らく10手~20手くらいしか先読みできません。ちょっと余分に先読みしようとすると、直ぐに数年かかるようになるのです。
pgsekyoudoutai

2015/12/08 14:30

僕もあの動画見たことあったんですが、ネタ動画かと思いきや結構興味深い内容ですよねw 思い出させてくれてありがとうございました!
Chironian

2015/12/08 14:40

おおっ、それは頼もしいです。 勉強に差し支えないように頑張って下さい。プログラミングは結構楽しいのでハマると本当にハマりますから。
guest

0

オセロを作るのが目的ならJavaScript1択。
それを作ることでゲームの基礎やプログラミングになれたいのが目的ならCにチャレンジしてみてはいかがでしょうか。

どちらの言語もメジャーな言語なので、情報はたくさんあります。
根気さえあれば時間はかかりますが、必ず完成できるはずなので頑張ってください。

投稿2015/12/13 01:20

creative

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

必要な入出力を備えた言語なら、言語にこだわる必要はないと思いますが、C, JavaScriptから選ぶなら、より多くのCPUパワーを取り出せる C の方が、AIの実装時に有利かもしれません。

しらみつぶし検索のようなコンピューター的力技に対して、AI的実装は、人間の思考をベースに考えることになると思います。人間の思考は、経験則のパターンマッチングによって不要な検索を打ち切る最適化が行われていると聞いたことがあります。いろんな、方法があるようなので、調べて見るとよいでしょう。

余談ですが、確か、1970年代後半?に ASCII 誌で「誌上最強のオセロ」(うろ覚え!)とかの対戦企画があったのを記憶しています。そのころは、PCではなくSBCでオセロを実装していたようです。(笑)

投稿2015/12/06 03:02

T.Kanno

総合スコア915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pgsekyoudoutai

2015/12/08 13:38

なるほど!より根本的なところから見直してみた方が良さそうですね。 ありがとうございました。
cateye

2015/12/15 21:45 編集

懐かしいですね月刊アスキーのオセロリーグかな? 森田オセロ・・・はソースがどこかに落ちてるかも・・・それにしても森田さん2012に亡くなってたんですね;; 
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問