2015年09月16日
じゃんけんプログラミング:2次元配列編(経験値考慮版)| C言語プログラミング入門講座
キーワード
:C言語 人工無能 人工知能
AI(人工知能)プログラミングの作り方 | C言語プログラミング入門講座
C言語で、
簡単な「 じゃんけんプログラム 」を作りながら
人工知能(AI:Artificial Intelligence)について、
考えていきたいと思います。
今回は、
「 二次元配列 」、
「 乱数 」、
「 関係演算子 」・「論理演算子」などを利用して、
コンピュータが、出す手(グー、チョキ、パー)を
考える際に、
以前のじゃんけん結果(経験値)を考慮し、
コンピュータの出すじゃんけんの手を
決める
基本的なじゃんけんAIプログラム
を実装してみます。
[ C言語プログラミングの開発環境 ]
Xcode
Macのプログラミングのための
統合開発環境
(IED:Integrated Development Environment)
* その他にも、一例として、
IBMアイビーエム
(International Business Machines Corporation)
によって開発された
「 Eclipse 」(イクリプス・エクリプス)
というオープンソースの統合開発環境 (IDE) でも
Mac環境下でC言語プログラミングの練習が
できると思います。
個人的には、Xcodeの方が、
簡単なプログラミン程度であれば使いやすいのでは
ないかと思います。
「 Eclipse 」は、Javaをはじめ
さまざまなプログラミング言語を学習したい場合には、
役に立つのではないかと思います。
Xcodeを利用して、
C言語プログラミングの実行環境にする方法や、
基本的なコード入力時の
キーボード操作方法についてわからない
わからない方の場合は、
こちらの記事から読み進めてみてください。
:Hello worldプログラム | Xcode(Mac)でC言語入門講座
じゃんけんプログラム:二次元配列編(経験値考慮版)
C言語プログラミング入門講座(動画)
C言語プログラミング入門講座(動画)
C言語サンプルコード
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int myJanken;
int previous = 0;
int twoDMemory[3][3] = {{0, 0, 0}, {0,0,0}, {0,0,0}};
int prediction;
int counter = 0;
int janken_ai;
srand((unsigned)time(NULL));
while (myJanken >= 0 && myJanken <= 2) {
printf("じゃんけんAIと「じゃんけん」をしよう!\n(0=グー、1=チョキ、2=パー、それ以外=終了:数値を入力後「enter」キー)\n:");
scanf("%d",&myJanken);
if (myJanken < 0 || myJanken > 2) break;
counter++;
printf("\nじゃんけん、ぽん!\n");
/* 5回目までは乱数でじゃんけんを出し、その後は経験値(直前の手)を考慮 */
if (counter < 6) {
janken_ai = rand() % 3;
} else {
prediction = 0;
if (twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1;
if (twoDMemory[previous][prediction] < twoDMemory[previous][2]) prediction = 2;
janken_ai = (prediction + 2) % 3;
}
if (janken_ai == 0) {
printf("じゃんけんAI:「グー」です。\n");
} else if (janken_ai == 1) {
printf("じゃんけんAI:「チョキ」です。\n");
} else {
printf("じゃんけんAI:「パー」です。\n");
}
printf("\n\n");
twoDMemory[previous][myJanken]++;
previous = myJanken;
}
}
* コード内に全角スペースが含まれていると
エラーになりますので、
その際は、半角スペースに適宜修正してください。
* int型 (integerインテジャー:整数値)の変数として、
「 myJanken:入力するじゃんけんの手 」
「 previous:以前のじゃんけんの出した手 」
「 twoDMemory:2次元配列メモリー 」
「 prediction:じゃんけんの出す手の予測 」
「 counter:カウンター 」
「 janken_ai:じゃんけんAIの出す手 」
という名前などの変数を作成しています。
変数名は自分でわかりやすいように名前をつけてみてください。
今回のプログラムでは、
プログラムを実行後に、
「 0 」「 1 」「 2 」を
入力後、
「 enter 」キーを押すと、
コンピュータの出す手が、
出力されるようになっています。
上記の数値以外を入力し、
「 enter 」キーを押した場合は、
プログラムを終了します。
* 数値以外を入力して、「 enter 」キーを
押した場合は、エラー出力になります。
以下の記事で、
ー じゃんけんプログラミング(乱数編:特徴なし版)その1 | C言語プログラミング入門講座
ー じゃんけんプログラミング(乱数編:特徴なし版)その2 | C言語プログラミング入門講座
ー じゃんけんプログラミング(乱数編:特徴あり版)その1 | C言語プログラミング入門講座
ー じゃんけんプログラミング(乱数編:特徴あり版)その2 | C言語プログラミング入門講座
C言語プログラミングの練習をしてみた
プログラミングに比べると、
複雑なコードに
なってきているのではないかと思います。
人間が以前に出したじゃんけんの手を記憶し、
次の手に活かせるように
プログラミングされており、
じゃんけんに特化されたプログラムではありますが、
少しずつ人工知能らしくなってきているのでは
ないかと思います。
今回のサンプルプログラムコードの
「 if (counter < 6) 」の
数値を変更することで、
どの段階で、
人間が前に出したじゃんけんの手を考慮することが
できるようになるかを決めることができます。
具体的には、
C言語サンプルコード
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int myJanken;
int previous = 0;
int twoDMemory[3][3] = {{0, 0, 0}, {0,0,0}, {0,0,0}};
int prediction;
int counter = 0;
int janken_ai;
srand((unsigned)time(NULL));
while (myJanken >= 0 && myJanken <= 2) {
printf("じゃんけんAIと「じゃんけん」をしよう!\n(0=グー、1=チョキ、2=パー、それ以外=終了:数値を入力後「enter」キー)\n:");
scanf("%d",&myJanken);
if (myJanken < 0 || myJanken > 2) break;
counter++;
printf("\nじゃんけん、ぽん!\n");
/* 10回目までは乱数でじゃんけんを出し、その後は経験値を考慮 */
if (counter < 11) {
janken_ai = rand() % 3;
} else {
prediction = 0;
if (twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1;
if (twoDMemory[previous][prediction] < twoDMemory[previous][2]) prediction = 2;
janken_ai = (prediction + 2) % 3;
}
if (janken_ai == 0) {
printf("じゃんけんAI:「グー」です。\n");
} else if (janken_ai == 1) {
printf("じゃんけんAI:「チョキ」です。\n");
} else {
printf("じゃんけんAI:「パー」です。\n");
}
printf("\n\n");
twoDMemory[previous][myJanken]++;
previous = myJanken;
}
}
などとすると、
設定を変更することができると思います。
コードを見た感じは、
とっつきにくい感じる方も多いのではないかと
思いますが、
C言語プログラムのコード入力に
慣れる目的などで、
サンプルコードの
入力にチャレンジしてみてください。
[ スポンサードリンク ]
teratail | レバレジーズ株式会社
C言語をはじめとした
プログラミングの関連Q&Aサイトです。
日々のC言語プログラミングの学習、
独学でのプログラミング関連の疑問などを、
「 teratail 」
で質問してみてください。
無料で利用できます。
:teratail
by はじめてのコンピュータ・パソコン
▲ この記事のトップへ
このバナーをクリックすると
「 Xcode(Mac)で覚えるC言語入門講座 」
の一覧ページにリンクします。
ー 独学プログラマーのためのAI(人工知能・無能)プログラム入門講座
:じゃんけんプログラミング(2次元配列編:思考パターン版)| C言語プログラミング入門講座
:AI(人工知能・無能)プログラミングの作り方入門講座(Hello World〜じゃんけんAIプログラム 2次元配列編)
︎ サイトマップ
︎ プロフィール | サイトポリシー・免責事項など
︎ CONTENTS(コンテンツ)一覧
︎ C言語関連本 特集
︎ Xcode(Mac)で覚えるSwiftプログラミング入門講座
︎ Macでコマンド入門講座
︎ パソコン・プログラミング学習関連アプリ 特集
︎ 日本人のプログラミング学習の現在と未来 | #24 デジタルライフコラム
︎ Mac(マック)関連パソコン iMac・MacBookPro・MacBookAir
︎ パソコン・家電の新製品・キャンペーン情報 特集
posted by HajimeteCPC at 14:57
| Xcode(Mac)で覚えるC言語入門講座