作者bleed1979 (十三)
看板C_and_CPP
標題Re: [討論] ?A?B猜數字遊戲的AI
時間Sat Sep 22 09:06:56 2012
不曉得這個版會不會有人參加這樣的趣味競賽。
如果這樣能幫到原po的忙的話...
GuessNumberAI.h
http://codepad.org/pPM6p5ki
========================================
#pragma once
#include <fstream>
#include <iomanip>
class GuessNumberAI {
public:
GuessNumberAI() {
std::fstream fout("./my_guess_number_score.txt", std::ios::out);
for(int i = 1; i <= 20; ++i) {
guess_times[i] = 0;
}
for(int r = 0; r < 1000; ++r) {
for(int i = 123; i < 10000; ++i) {
char g[5];
g[0] = (i / 1000) + '0';
g[1] = ((i % 1000) / 100) + '0';
g[2] = ((i % 100) / 10) + '0';
g[3] = (i % 10) + '0';
g[4] = '\0';
if(g[0] == g[1] || g[0] == g[2] || g[0] == g[3] ||
g[1] == g[2] || g[1] == g[3] ||
g[2] == g[3]) {
continue;
}
std::string str(g);
int t = algorithm(str);
if(t <= 0 || t > 20) {
fout << "you are too weak, out!" << std::endl;
return;
}
++guess_times[t];
}
}
int width = 0;
for(int i = 1; i <= 20; ++i) {
if(guess_times[i] > 0) {
int tmp = guess_times[i];
int w = 0;
while(tmp > 0) {
tmp /= 10;
++w;
}
width = width < w ? w : width;
}
}
for(int i = 1; i <= 20; ++i) {
fout << std::setw(width + 1) << std::right << i;
}
fout << std::endl;
for(int i = 1; i <= 20; ++i) {
fout << std::setw(width + 1) << guess_times[i];
}
fout << std::endl;
fout.close();
}
~GuessNumberAI() {}
int algorithm(const std::string& guess_str);
private:
int guess_times[21];
};
GuessNumberAI.cpp
http://codepad.org/cj6FK9Nz
====================================================
#include "GuessNumberAI.h"
int GuessNumberAI::algorithm(const std::string& guess_str) {
}
int main() {
GuessNumberAI app;
return 0;
}
想玩的人可以在algorithm()裡創造自己的演算法。
guess_str長度為4,從 0123 ~ 9876,跑1000圈。
編譯會錯,因為algorithm()等待你的return猜測次數。
只要有一次可能猜超過20次就直接out了。
my_guess_number_score.txt就是你的成績。
※ 引述《SocketAM2 (AM2)》之銘言:
: 前陣子在python版看到有人討論到這個當年煞到我的遊戲,
: 一下子熱血舊夢又被重燃...
: 我還算有能力把我手上的想法用C弄出來,
: 幾個程式設計相關的板這裡也算是人氣較旺,
: 來這裡搞搞看有沒有人願意一起來玩玩瘋瘋
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.177.97
推 SocketAM2:對於非隨機性的算法1234~9876一圈足矣,要稍修一下 09/22 09:43
→ SocketAM2:中間的r做成call時傳入的引值讓使用者可以改 09/22 09:44
→ SocketAM2:一些較複雜的非隨機算法跑一圈有可能會超過十分鐘 09/22 09:46