前提・実現したいこと
http://fanblogs.jp/hajimetecpc/archive/270/0
上記のサイトにて記載されていたプログラムの一部の詳しい理解ができず困っています。
これはジャンケンプログラムの経験値考慮です。
該当箇所がどのような意味なのか知りたいです。
発生している問題・エラーメッセージ
記載されている通りにプログラミングをすると問題なく動くのですが意味が分からないままだと今後使う事ができません。
該当のソースコード
C言語
1#include <stdio.h> 2#include <stdlib.h> 3#include <time.h> 4 5int main(void) { 6int myJanken; 7int previous = 0; 8int twoDMemory[3][3] = {{0, 0, 0}, {0,0,0}, {0,0,0}}; 9int prediction; 10int counter = 0; 11int janken_ai; 12 13srand((unsigned)time(NULL)); 14while (myJanken >= 0 && myJanken <= 2) { 15printf("じゃんけんAIと「じゃんけん」をしよう!\n(0=グー、1=チョキ、2=パー、それ以外=終了:数値を入力後「enter」キー)\n:"); 16scanf("%d",&myJanken); 17if (myJanken < 0 || myJanken > 2) break; 18counter++; 19printf("\nじゃんけん、ぽん!\n"); 20/* 5回目までは乱数でじゃんけんを出し、その後は経験値(直前の手)を考慮 */ 21if (counter < 6) { 22janken_ai = rand() % 3; 23} else { 24ここからprediction = 0; 25if (twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1; 26if (twoDMemory[previous][prediction] < twoDMemory[previous][2]) prediction = 2; 27ここまでです。 28janken_ai = (prediction + 2) % 3; 29} 30if (janken_ai == 0) { 31printf("じゃんけんAI:「グー」です。\n"); 32} else if (janken_ai == 1) { 33printf("じゃんけんAI:「チョキ」です。\n"); 34} else { 35printf("じゃんけんAI:「パー」です。\n"); 36} 37printf("\n\n"); 38 39twoDMemory[previous][myJanken]++; 40previous = myJanken; 41 42} 43 44} 45
試したこと
インターネットで探しましたが該当するものが見つかりませんでした。
補足情報(FW/ツールのバージョンなど)
初心者の為詳しいことはわかりません。
コードは専用のフォーマット枠があります.
ファイル毎に, 入力枠の上辺にある <code> を押すと出てくる ``` で囲まれた "コード" という文字列を置き換える形で入力(コピペ)してください. その際, ``` の右にある "ここに言語を入力" を "c" と置き換えて頂きますと, さらに言語に合わせてフォント等が微調整されます.
ご質問は編集できます. 入力枠の下にはプレビューもありますのでご確認ください.
> 該当箇所がどのような意味なのか知りたい
どこが該当箇所で何を探したのでしょう.
失礼しました. 該当箇所とは
>ここからprediction = 0;
>if (twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1;
>if (twoDMemory[previous][prediction] < twoDMemory[previous][2]) prediction = 2;
>ここまでです。
でしたか.
埋もれてしまって分かりませんでした.
すみませんでした。使うのが初めてなもので理解していませんでした。
早急に直してきます。
追記
prediction = 0;
>if (twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1;
>if (twoDMemory[previous][prediction] < twoDMemory[previous][2]) prediction = 2;
またここの部分でAIが相手の手を予測しているという事ですが、なぜ[1]にすると1[2]は2と予測できるのでしょうか。単純に左辺には1が少ない。だから1が来るだろう2が少ない2と予想しようという事でしょうか。
この数行をもって AI と言うのは盛り過ぎだと思いますが...蓋を開けたらこんなモンということかもしれません.
不等号の向きからして, 多いほうを選んでいるとみるべきでしょう.
回答1件
あなたの回答
tips
プレビュー