囲碁のゲームを作っているのですが、先行と後攻の2人でゲームを作るように
int siro();
int kuro();
int cnt=1;
int q;
short chk_flg=1;
int kari[17][17]={0};
char m[3][3]={"+","○","●"};
char k[6],l[6];
void main(void)
{
int i,j,a=0,b,c;
printf(" 0 1 2 3 4 5 6 7 8 9 101112131415\n");
printf(" __________________________________\n");
for(i=0;i<16;i++){
printf("%2d",i);
printf(" |");
for(j=0;j<16;j++){
printf("%s",m[kari[j]]);
}
printf("|\n");
}
printf("  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n");
while(a!=1){
kari[j]=kuro();
printf("\n\n");
printf(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n");
printf(" _________________________________________________\n");
for(i=0;i<16;i++){
printf("%2d",i);
printf("|");
for(j=0;j<16;j++){
printf(" %s",m[kari[j]]);
}
printf(" |\n");
}
printf("  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n");
kari[j]=siro();
printf("\n\n");
printf(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n");
printf(" _________________________________________________\n");
for(i=0;i<16;i++){
printf("%2d",i);
printf("|");
for(j=0;j<16;j++){
printf(" %s",m[kari[j]]);
}
printf(" |\n");
}
printf("  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n");
cnt++;
}
printf("お疲れ様でした。\n");
}
int siro()
{
int i,j,a,b,c,o,u,y=0;
printf("\n%d回目 後攻の番\n",cnt);
printf("縦 ");
rewind(stdin);
gets(k);
o=strlen(k);
for(q=0;q<o;q++){
if(isalpha(k[q])){
chk_flg=0;
}else{
chk_flg=1;
}
}
while(o==0 || chk_flg==0){
printf("\n数値を入れてください1\n");
rewind(stdin);
gets(k);
o=strlen(k);
for(i=0;i<o;i++){
if(isalpha(k[q])){
chk_flg=0;
}else{
chk_flg=1;
}
}
}
printf("横 ");
rewind(stdin);
gets(l);
u=strlen(l);
for(q=0;q<u;q++){
if(isalpha(l[q])){
chk_flg=0;
}else{
chk_flg=1;
}
}
while(u==0 || chk_flg==0){
printf("\n数値を入れてください2\n");
rewind(stdin);
gets(l);
u=strlen(l);
for(q=0;q<u;q++){
if(isalpha(l[q])){
chk_flg=0;
}else{
chk_flg=1;
}
}
}
j=atoi(l);
i=atoi(k);
while(y!=1){
while(i>=16 || j>=16 ||i<0 || j<0){
printf("\n15までだっつーの!!\n");
printf("縦 ");
rewind(stdin);
gets(k);
o=strlen(k);
for(q=0;q<o;q++){
if(isalpha(k[q])){
chk_flg=0;
}else{
chk_flg=1;
}
}
while(o==0 || chk_flg==0){
printf("\n数値を入れてください3\n");
rewind(stdin);
gets(k);
o=strlen(k);
for(q=0;q<o;q++){
if(isalpha(k[q])){
chk_flg=0;
}else{
chk_flg=1;
}
}
}
printf("横 ");
rewind(stdin);
gets(l);
u=strlen(l);
for(q=0;q<u;q++){
if(isalpha(l[q])){
chk_flg=0;
}else{
chk_flg=1;
}
}
while(u==0 || chk_flg==0){
printf("\n数値を入れてください4\n");
このような感じに作って一応完成はしたのですが、先攻か後攻のどちらかに、
コンピュータの処理に任せて自動的にやり、一人でもゲームができるようにもしたいのですが
やり方が分かりません
どうやればできるか教えてください
どうかよろしくお願いしますm(_ _)m
囲碁のゲームを作っているのですが...
Re:囲碁のゲームを作っているのですが...
うーん、囲碁は自由度の高いゲームですから、AIの実装となると、これまた面倒で難しいのではないかと思います。将棋のAI並に難しいんじゃないかなぁ…
検索サイトで『囲碁 AI プログラム』なんかのキーワードで検索すると何かヒットするかもしれません。
あまり役に立てなくてごめんなさい。
検索サイトで『囲碁 AI プログラム』なんかのキーワードで検索すると何かヒットするかもしれません。
あまり役に立てなくてごめんなさい。
Re:囲碁のゲームを作っているのですが...
# 15路盤ってまた見ない大きさ……。6, 9と13,あと普通の19路盤は見たことがあるけれど
> やり方が分かりません
をバグさんのようにCPUプログラムの実装方法がわからないではなく,
もっと基本的な,片方をCPUに任せる方法自体がわからないと解釈します。
# 着手可能点をランダムに返す実装を用意しても,それを組み込む方法が解らない,という解釈。
入力部分をまずは別関数にして,戻り値を縦何線横何線という情報を持った構造体にします。
その状態で,現状と同様の実行がなされることを確認します。
# 正確にはパスしたかどうかも必要です。
次に,同じ型を持つCPUプログラムを作ります。
あとは,それぞれの関数を順繰りに呼び出します。
関数ポインタを使うと,人同士・CPU同士・人-CPU・CPU-人の組み合わせが柔軟に処理ができると思います。
# C++ならクラス化してしまうところですが。
> やり方が分かりません
をバグさんのようにCPUプログラムの実装方法がわからないではなく,
もっと基本的な,片方をCPUに任せる方法自体がわからないと解釈します。
# 着手可能点をランダムに返す実装を用意しても,それを組み込む方法が解らない,という解釈。
入力部分をまずは別関数にして,戻り値を縦何線横何線という情報を持った構造体にします。
その状態で,現状と同様の実行がなされることを確認します。
# 正確にはパスしたかどうかも必要です。
次に,同じ型を持つCPUプログラムを作ります。
あとは,それぞれの関数を順繰りに呼び出します。
関数ポインタを使うと,人同士・CPU同士・人-CPU・CPU-人の組み合わせが柔軟に処理ができると思います。
# C++ならクラス化してしまうところですが。