/* 5/17 ***○×ゲーム*** */
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void display(int flg, int hantei, int h_ban[4][4], char *ban[10]);
int jvalue(int hantei_e, int hantei_t);
void cpu_att(int flg, int h_ban[4][4], int *, int *);
void cpu_def(int flg, int h_ban[4][4], int *, int *);
int main(){
char *ban[10] = {" "," "," "," "," "," "," "," "," "};
int h_ban[4][4] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int y; /* 行判定 */
int x; /* 列判定 */
int hantei; /* 行と列の和(a,1なら1 b,2なら5) */
int flg=1; /* ○×判定フラグ ○:1, ×:2, null:0 */
int playban, tekazu=0; /* 何手目か */
int jug=0;
int i, j;
int win1[4] = {0,0,0,0};
int win2[4] = {0,0,0,0};
int crosswin1;
int crosswin2;
printf(" \ [1] [2] [3] \n");
printf("[1] %s %s %s \n",ban[0],ban[1],ban[2]);
printf("[2] %s %s %s \n",ban[3],ban[4],ban[5]);
printf("[3] %s %s %s \n",ban[6],ban[7],ban[8]);
printf("あなたは先手(0)後手(1)?\n");
scanf("%d",&playban);
while(tekazu != 9){
if(tekazu%2 == playban){
rewind(stdin);
printf("\n1Pの番 縦(1,2,3):");
scanf("%d",&y);
if(y >= 1 && y <= 3){
printf("1Pの番 横(1,2,3):");
scanf("%d",&x);
if(x <=0 || x >= 4){
continue;
}
}
else{
continue;
}
if(h_ban[y][x] != 0){
printf("もう置いてあるぽ(・ε・)\n");
continue;
}
}
else{
printf("\nCPUの番\n");
cpu_att(flg, h_ban, &y, &x);
for(;;){
if(h_ban[y][x] != 0){
cpu_def(flg, h_ban, &y, &x);
}
if(h_ban[y][x] != 0){
srand(time(NULL));
y = rand()%3+1;
x = rand()%3+1;
continue;
}
else{
break;
}
}
}
display(flg, jvalue(y, x), h_ban, ban);
/******* 勝敗判別 *******/
for(i=1; i<=3; i++){
win1[i] = 100 * h_ban[i][1] + 10 * h_ban[i][2] + h_ban[i][3];
win2[i] = 100 * h_ban[3][i] + 10 * h_ban[2][i] + h_ban[1][i];
}
crosswin1 = 100 * h_ban[1][1] + 10 * h_ban[2][2] + h_ban[3][3];
crosswin2 = 100 * h_ban[3][1] + 10 * h_ban[2][2] + h_ban[1][3];
for(i=1; i<=3; i++){
if(win1[i] == 111 || win2[i] == 111 || crosswin1 == 111 || crosswin2 == 111){
jug = 1;
break;
}
else if(win1[i] == 222 || win2[i] == 222 || crosswin1 == 222 || crosswin2 == 222){
jug = 2;
break;
}
else{
jug = 0;
}
}
switch(jug){
case 0:
break;
case 1:
printf("○の勝ち");
return 0;
case 2:
printf("×の勝ち");
return 0;
}
tekazu++;
if(flg == 1){
flg = 2;
}
else{
flg = 1;
}
}
printf("引き分けよ♪\n");
return 0;
}
/******* ○×を表示する関数 *******/
void display(int flg, int hantei, int h_ban[4][4], char *ban[10]){
switch(hantei){
case 1:
if(flg == 1){
h_ban[1][1] = 1;
ban[0] = "○";
break;
}
if(flg == 2){
h_ban[1][1] = 2;
ban[0] = "×";
break;
}
case 2:
if(flg == 1){
h_ban[1][2] = 1;
ban[1] = "○";
break;
}
if(flg == 2){
h_ban[1][2] = 2;
ban[1] = "×";
break;
}
case 3:
if(flg == 1){
h_ban[1][3] = 1;
ban[2] = "○";
break;
}
if(flg == 2){
h_ban[1][3] = 2;
ban[2] = "×";
break;
}
case 4:
if(flg == 1){
h_ban[2][1] = 1;
ban[3] = "○";
break;
}
if(flg == 2){
h_ban[2][1] = 2;
ban[3] = "×";
break;
}
case 5:
if(flg == 1){
h_ban[2][2] = 1;
ban[4] = "○";
break;
}
if(flg == 2){
h_ban[2][2] = 2;
ban[4] = "×";
break;
}
case 6:
if(flg == 1){
h_ban[2][3] = 1;
ban[5] = "○";
break;
}
if(flg == 2){
h_ban[2][3] = 2;
ban[5] = "×";
break;
}
case 7:
if(flg == 1){
h_ban[3][1] = 1;
ban[6] = "○";
break;
}
if(flg == 2){
h_ban[3][1] = 2;
ban[6] = "×";
break;
}
case 8:
if(flg == 1){
h_ban[3][2] = 1;
ban[7] = "○";
break;
}
if(flg == 2){
h_ban[3][2] = 2;
ban[7] = "×";
break;
}
case 9:
if(flg == 1){
h_ban[3][3] = 1;
ban[8] = "○";
break;
}
if(flg == 2){
h_ban[3][3] = 2;
ban[8] = "×";
break;
}
}
printf(" \ [1] [2] [3] \n");
printf("[1] %s %s %s \n",ban[0],ban[1],ban[2]);
printf("[2] %s %s %s \n",ban[3],ban[4],ban[5]);
printf("[3] %s %s %s \n",ban[6],ban[7],ban[8]);
}
/******* 判定計算関数 *******/
int jvalue(int y, int x){
int hantei;
int a;
if(y == 1){
a = 0;
}
else if(y == 2){
a = 3;
}
else if(y == 3){
a = 6;
}
hantei = a + x;
return (hantei);
}
/******* CPUの思考るーちん(攻撃) *******/
void cpu_att(int flg, int h_ban[4][4], int *y, int*x){
int i, j;
int atai1 = 110, atai2 = 101, atai3 = 11;
int denger1[4] ={0,0,0,0};
int denger2[4] ={0,0,0,0};
int denger3, denger4;
if(h_ban[2][2] == 0){
*y = 2;
*x = 2;
}
else{
for(i=1; i<=3; i++){
denger1[i] = 100 * h_ban[i][1] + 10 * h_ban[i][2] + h_ban[i][3];
denger2[i] = 100 * h_ban[1][i] + 10 * h_ban[2][i] + h_ban[3][i];
}
denger3 = 100 * h_ban[1][1] + 10 * h_ban[2][2] + h_ban[3][3];
denger4 = 100 * h_ban[3][1] + 10 * h_ban[2][2] + h_ban[1][3];
for(i=1; i<=3; i++){
if(flg == 2){
atai1 = 220;
atai2 = 202;
atai3 = 22;
}
if(denger1[i] == atai1 || denger1[i] == atai2 || denger1[i] == atai3){
if(denger1[i] == atai1){
*y = i;
*x = 3;
break;
}
else if(denger1[i] == atai2){
*y = i;
*x = 2;
break;
}
else{
*y = i;
*x = 1;
break;
}
}
else if(denger2[i] == atai1 || denger2[i] == atai2 || denger2[i] == atai3){
if(denger2[i] == atai1){
*y = 3;
*x = i;
break;
}
else if(denger2[i] == atai2){
*y = 2;
*x = i;
break;
}
else{
*y = 1;
*x = i;
break;
}
}
else if(denger3 == atai1 || denger3 == atai2 || denger3 == atai3){
if(denger3 == atai1){
*y = 3;
*x = 3;
break;
}
else if(denger3 == atai2){
*y = 2;
*x = 2;
break;
}
else{
*y = 1;
*x = 1;
break;
}
}
else if(denger4 == atai1 || denger4 == atai2 || denger4 == atai3){
if(denger3 == atai1){
*y = 1;
*x = 3;
break;
}
else if(denger3 == atai2){
*y = 2;
*x = 2;
break;
}
else{
*y = 3;
*x = 1;
break;
}
}
}
}
}
/******* CPUの思考るーちん(防御)*******/
void cpu_def(int flg, int h_ban[4][4], int *y, int*x){
int i, j;
int atai1 = 110, atai2 = 101, atai3 = 11;
int denger1[4] ={0,0,0,0};
int denger2[4] ={0,0,0,0};
int denger3, denger4;
if(h_ban[2][2] == 0){
*y = 2;
*x = 2;
}
else{
for(i=1; i<=3; i++){
denger1[i] = 100 * h_ban[i][1] + 10 * h_ban[i][2] + h_ban[i][3];
denger2[i] = 100 * h_ban[1][i] + 10 * h_ban[2][i] + h_ban[3][i];
}
denger3 = 100 * h_ban[1][1] + 10 * h_ban[2][2] + h_ban[3][3];
denger4 = 100 * h_ban[3][1] + 10 * h_ban[2][2] + h_ban[1][3];
for(i=1; i<=3; i++){
if(flg == 1){
atai1 = 220;
atai2 = 202;
atai3 = 22;
}
if(denger1[i] == atai1 || denger1[i] == atai2 || denger1[i] == atai3){
if(denger1[i] == atai1){
*y = i;
*x = 3;
break;
}
else if(denger1[i] == atai2){
*y = i;
*x = 2;
break;
}
else{
*y = i;
*x = 1;
break;
}
}
else if(denger2[i] == atai1 || denger2[i] == atai2 || denger2[i] == atai3){
if(denger2[i] == atai1){
*y = 3;
*x = i;
break;
}
else if(denger2[i] == atai2){
*y = 2;
*x = i;
break;
}
else{
*y = 1;
*x = i;
break;
}
}
else if(denger3 == atai1 || denger3 == atai2 || denger3 == atai3){
if(denger3 == atai1){
*y = 3;
*x = 3;
break;
}
else if(denger3 == atai2){
*y = 2;
*x = 2;
break;
}
else{
*y = 1;
*x = 1;
break;
}
}
else if(denger4 == atai1 || denger4 == atai2 || denger4 == atai3){
if(denger3 == atai1){
*y = 1;
*x = 3;
break;
}
else if(denger3 == atai2){
*y = 2;
*x = 2;
break;
}
else{
*y = 3;
*x = 1;
break;
}
}
}
}
}
みっともないプログラムである(・ε・)が
一応形になったので上げてみた。
CPUがちょっと人間くさいのが特徴というか短所というか・・・w
だれかもっと強いの作って・・・OTL
ちなみにコレは基本的な対応だけ行い、あとは乱数まかせのプログラムですヾ(≧▽≦)
やっぱりあれだよね?あまりにも強いCPUがあってもつまらな・・・ヽ( ゚ 3゚)
明日からJava をやる予定ですが、俺は未経験なのでちょっと心配。
あ、そういえばやっと配属先が決まり、さらに希望通りになりましたーわぁいヽ(ω・ヽ)(ノ・ω)ノ わぁい♪