キーワード
: C言語 人工知能
思考パターン 思考回路
AI(人工知能)プログラミングの作り方 | C言語プログラミング入門講座
C言語で、
簡単な「 じゃんけんプログラム 」を作りながら
人工知能(AI:Artificial Intelligence)について、
考えていきたいと思います。
今回も、
し?ゃんけんフ?ロク?ラム:二次元配列編(経験値考慮版)| C言語プログラミング入門講座
の記事と同様に、
「 二次元配列 」、
「 乱数 」、
「 関係演算子 」・「 論理演算子 」などを利用して、
基本的なじゃんけんAIプログラム
を実装していきます。
今回のプログラミングの特徴としては、
コンピュータが、
じゃんけんを出す手(グー、チョキ、パー)の
1.思考パターン・思考回路を決めることができる点
2.連続して負けた回数に応じて、
思考パターンを変更できる点
などです。
[ 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言語入門講座
じゃんけんプログラミング(2次元配列編:思考パターン版)
C言語プログラミング入門講座(動画)
C言語プログラミング入門講座(動画)
C言語サンプルコード
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int myJanken;
/* 「グー(0)」のパターンと「チョキ(1)」の2パターン*/
int janken_pattern[2][4] = {{0, 0, 0, 0}, {1, 1 ,1, 1}};
int lose_times = 0;
int pattern_change = 0;
int janken_kind = 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;
printf("\nじゃんけん、ぽん!\n");
janken_ai = janken_pattern[pattern_change][janken_kind];
janken_kind = (janken_kind + 1) % 4;
if (janken_ai == 0) {
printf("じゃんけんAI:「グー」です。\n");
} else if (janken_ai == 1) {
printf("じゃんけんAI:「チョキ」です。\n");
} else {
printf("じゃんけんAI:「パー」です。\n");
}
printf("\n\n");
if ((myJanken == 0 && janken_ai == 1) ||
(myJanken == 1 && janken_ai == 2) ||
(myJanken == 2 && janken_ai == 0)){
lose_times++;
} else {
lose_times = 0;
}
/*連続で2回負けるとパターンを変える*/
if (lose_times >= 2) {
pattern_change = (pattern_change + 1) % 2;
janken_kind = 0;
}
}
}
* コード内に全角スペースが含まれていると
エラーになりますので、
その際は、半角スペースに適宜修正してください。
* int型 (integerインテジャー:整数値)の変数として、
「 myJanken :入力するじゃんけんの手 」
「 janken_pattern :じゃんけんのパターン 」
「 lose_times :負けた回数 」
「 pattern_change :じゃんけんのパターン変更 」
「 janken_kind :じゃんけんの出す手を選ぶ 」
「 janken_ai :じゃんけんAIの出した手 」
という名前などの変数を作成しています。
変数名は自分でわかりやすいように名前をつけてみてください。
今回のプログラムでは、
プログラムを実行後に、
「 0 」「 1 」「 2 」を
入力後、
「 enter 」キー を押すと、
コンピュータの出す手が、
出力されるようになっています。
上記の数値以外を入力し、
「 enter 」キー を押した場合は、
プログラムを終了します。
* 数値以外を入力して、 「 enter 」キー を
押した場合は、エラー出力になります。
以下の記事で、
ー じゃんけんプログラミング(乱数編:特徴なし版)その1 | C言語プログラミング入門講座
ー じゃんけんプログラミング(乱数編:特徴なし版)その2 | C言語プログラミング入門講座
ー じゃんけんプログラミング(乱数編:特徴あり版)その1 | C言語プログラミング入門講座
ー じゃんけんプログラミング(乱数編:特徴あり版)その2 | C言語プログラミング入門講座
C言語プログラミングの練習をしてみた
プログラミングに比べると、
複雑なコードに
なってきているのではないかと思います。
おそらく多くの方にとって、
自分のじゃんけんの思考パターンを意識することは
あまりなく、
無意識で、
自分のじゃんけんの思考パターンを
繰り返している方もいるのではないかと思います。
今回のプログラミングでは、
プログラマーによて、
あらかじめ、
意識的に
人間のじゃんけんのパターンを、
決めておき、
そのパターンをじゃんけんの勝ち負けの
具合によって、
変更できるように
プログラミングされており、
じゃんけんに特化されたプログラムではありますが、
少しずつ人工知能らしくなってきているのでは
ないかと思います。
今回のサンプルプログラムコードの
「 int janken_pattern[2][4] = {{0, 0, 0, 0}, {1, 1 ,1, 1}}; 」の
「 {{0, 0, 0, 0}, {1, 1 ,1, 1}} 」の
数値を変更することで、
じゃんけんのパターンを変更
することができます。
具体的には、
C言語サンプルコード
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int myJanken;
/* 「パー(2)」のパターン
と「チョキ(1)」の2パターン*/
int janken_pattern[2][4] = {{ 2, 2, 2, 2
}, {1, 1 ,1, 1}};
int lose_times = 0;
int pattern_change = 0;
int janken_kind = 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;
printf("\nじゃんけん、ぽん!\n");
janken_ai = janken_pattern[pattern_change][janken_kind];
janken_kind = (janken_kind + 1) % 4;
if (janken_ai == 0) {
printf("じゃんけんAI:「グー」です。\n");
} else if (janken_ai == 1) {
printf("じゃんけんAI:「チョキ」です。\n");
} else {
printf("じゃんけんAI:「パー」です。\n");
}
printf("\n\n");
if ((myJanken == 0 && janken_ai == 1) ||
(myJanken == 1 && janken_ai == 2) ||
(myJanken == 2 && janken_ai == 0)){
lose_times++;
} else {
lose_times = 0;
}
/*連続で2回負けるとパターンを変える*/
if (lose_times >= 2) {
pattern_change = (pattern_change + 1) % 2;
janken_kind = 0;
}
}
}
などとすると、
設定を変更することができると思います。
他にも、
「 if (lose_times >= 2) 」の
数値を変更することで、
パターンを変更をするまでの、
負ける回数の設定もできると思います。
し?ゃんけんフ?ロク?ラム:二次元配列編(経験値考慮版)| C言語プログラミング入門講座
の記事の、
サンプルコードと同様に、
コードを見た感じは、
とっつきにくい感じる方も多いのではないかと
思いますが、
C言語プログラムのコード入力に
慣れる目的などで、
サンプルコードの
入力にチャレンジしてみてください。
[ スポンサードリンク ]
teratail | レバレジーズ株式会社
C言語をはじめとした
プログラミングの関連Q&Aサイトです。
日々のC言語プログラミングの学習、
独学でのプログラミング関連の疑問などを、
「 teratail 」
で質問してみてください。
無料で利用できます。
: C言語プログラミングのQ&A探しに | teratail
by はじめてのコンピュータ・パソコン
▲ この記事のトップへ
このバナーをクリックすると
「 Xcode(Mac)て?覚えるC言語入門講座 」
の一覧ページにリンクします。
ー 独学プログラマーのためのAI(人工知能・無能)プログラム入門講座
: し?ゃんけんフ?ロク?ラム:二次元配列編(経験値考慮版)| C言語プログラミング入門講座
: AI(人工知能・無能)プログラミングの作り方入門講座(Hello World〜じゃんけんAIプログラム 2次元配列編)
? サイトマップ
? プロフィール | サイトポリシー・免責事項など
? CONTENTS(コンテンツ)一覧
? C言語関連本 特集
? Xcode(Mac)で覚えるSwiftプログラミング入門講座
? Macでコマンド入門講座
? パソコン・プログラミング学習関連アプリ 特集
? 日本人のプログラミング学習の現在と未来 | #24 デジタルライフコラム
? Mac(マック)関連パソコン iMac・MacBookPro・MacBookAir
? パソコン・家電の新製品・キャンペーン情報 特集