#include<stdio.h>
#define H 3
#define L 3
void menu()
{
printf("************1.开玩!!!!************\n");
printf("************2.不玩了!!************\n");
printf("请输入:>");
}
void chushihua(char arr[H][L], int h, int l)
{
int i = 0;
int t = 0;
for (i = 0; i < h; i++)
{
for (t = 0; t < l; t++)
{
arr[i][t] = ' ';
}
}
}
void printf_board(char arr[H][L], int h, int l)
{
int i = 0;
int t = 0;
for (i = 0; i < h; i++)
{
for (t = 0; t < l; t++)
{
printf("%c |", arr[i][t]);
if (t == l - 1)
{
printf("\n");
printf("--|--|--|\n");
}
}
}
}
void player_move(char arr[H][L], int h, int l)
{
int H1 = 0;
int L1 = 0;
while (1)
{
printf("请输入:>");
scanf("%d%d", &H1, &L1);
if (arr[H1 - 1][L1 - 1] != ' ')
{
printf("输入错误");
}
else
{
arr[H1 - 1][L1 - 1] = '*';
break;
}
}
}
void computer_move(char arr[H][L], int h, int l)//电脑也会选择有已占用的
{
srand((unsigned int)time(NULL));
while (1)
{
int H1 = rand() % H;
int L1 = rand() % L;
if (arr[H1][L1] == ' ')//排除法不要排反
{
arr[H1][L1] = '#';
break;
}
}
}
char win(char arr[H][L], int h, int l)
{
for (int i = 0; i < h; i++)
{
if (arr[i][0] == '#' && arr[i][1] == '#' && arr[i][2] == '#')
{
return '#';
}
}
for (int t = 0; t < l; t++)
{
if (arr[0][t] == '#' && arr[1][t] == '#' && arr[2][t] == '#')
{
return '#';
}
}
if (arr[0][0] == '#'&&arr[1][1] == '#'&&arr[2][2] == '#')
{
return '#';
}
if (arr[0][2] == '#'&&arr[1][1] == '#'&&arr[2][0] == '#')
{
return '#';
}
for (int i = 0; i < h; i++)
{
if (arr[i][0] == '*' && arr[i][1] == '*' && arr[i][2] == '*')
{
return '*';
}
}
for (int t = 0; t < l; t++)
{
if (arr[0][t] == '*' && arr[1][t] == '*' && arr[2][t] == '*')
{
return '*';
}
}
if (arr[0][0] == '*'&&arr[1][1] == '*'&&arr[2][2] == '*')
{
return '*';
}
if (arr[0][2] == '*'&&arr[1][1] == '#'&&arr[2][0] == '*')
{
return '*';
}
return 'C';
}
void game(char arr[H][L], int x, int y,char* ret1)
{
*ret1 = '0';
while (1)
{
player_move(arr, H, L);
printf_board(arr, x, y);
printf("\n");
*ret1 = win(arr,H,L);
if (*ret1!='C')
{
break;
}
computer_move(arr, H, L);
printf("电脑下棋\n");
printf_board(arr, x, y);
printf("\n");
if (*ret1!= 'C')
{
break;
}
}
}
int main()
{
int input = 0;
char arr[H][L] = {0};
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
{
chushihua(arr, H, L);//初始化棋盘
printf_board(arr, H, L);//打印棋盘
do
{
char ret = '0';
game(arr, H, L, &ret);
if (ret == '*')
{
printf("你赢了\n");
break;
}
else if (ret == '#')
{
printf("菜\n");
break;
}
else if (ret == 'C')
{
printf("平局\n");
break;
}
} while (1);
}continue;
case 2:break;
default:printf("输入错误,请重新输入");
}
break;
} while (1);
return 0;
}
写完这两个小游戏代码 函数一下子就通透了.....之前不会的递归也学明白了(好耶!)