master
Your Name 7 years ago
commit c931c4a7ee

@ -0,0 +1,115 @@
#include"sanziqi.h"
void menu() //菜单
{
printf("****************************\n");
printf("* 输入1.开始游戏 *\n");
printf("* 输入0.退出游戏 *\n");
printf("****************************\n");
}
void print_board(char arr[3][3]) //打印棋盘
{
printf("\n");
int i;
for (i = 0; i < 3; i++)
{
printf("%c |%c |%c\n", arr[i][0], arr[i][1], arr[i][2]);
if (i < 2)
printf("—+—+—\n");
}
printf("\n");
}
void init_board(char arr[3][3]) //初始化棋盘
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
arr[i][j] = ' ';
}
}
}
int whom_act() //选择谁先行动
{
int input = 0;
printf("****************************\n");
printf("** 1.电脑先手:O **\n");
printf("** 0.玩家先手:X **\n");
printf("****************************\n");
while (1)
{
printf("请选择谁先落子:");
scanf("%d", &input);
if (input == 1)
return 1;
else if (input == 0)
return 0;
else
printf("选择错误,请重新选择。\n");
}
}
int chess_full(char arr[3][3]) //判断棋子是否下满
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
char judge(char arr[3][3]) //判断输赢,谁达到三字则返回对应的字符
{
int i;
for (i = 0; i < 3; i++)
{
if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][0] != ' '))//行
return arr[i][0];
else if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[0][i] != ' '))//列
return arr[0][i];
else if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[1][1] != ' '))//对角线
return arr[1][1];
else if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[1][1] != ' '))
return arr[1][1];
}
return ' ';
}
void player_act(char arr[3][3]) //玩家行动
{
int x = 0;
int y = 0;
char ch;
while (1)
{
printf("请落子(即输入对应x,y坐标)例如: %d,%d \n", x, y);
scanf("%d,%d", &x, &y);
if(arr[--x][--y] == ' ')
{
arr[x][y] = 'X';
break;
}
else
{
while ((ch = getchar()) != EOF && ch != '\n');//清空缓存区防止scanf接收上次的非法输入从而死循环
printf("wrong input请重新输入\n");
}
}
}
void computer_act(char arr[3][3]) //电脑行动
{
srand((unsigned)time(NULL));//用系统时间初始化随机数种子
while (1)//无限循环直到遇到break退出
{
int x = rand() % 3;//计算机随机落子
int y = rand() % 3;
if (arr[x][y] == ' ')
{
arr[x][y] = 'O';
break;
}
}
}

@ -0,0 +1,56 @@
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "sanziqi.h"
#define computer_first 1
#define player_first 0
int main() //主函数
{
char arr[3][3];
while(1)
{
menu();
int i=0;
scanf("%d",&i);
if(i)
{
init_board(arr);
print_board(arr);
if(whom_act()==computer_first)
{
while(i++<9)
{
computer_act(arr);
print_board(arr);
if(judge(arr)=='O') break;
player_act(arr);
print_board(arr);
if(judge(arr)=='X') break;
}
if(judge(arr)=='X')
printf("你赢了。\n");
else
printf("你输了。\n");
}
else
{
while(i++<9)
{
player_act(arr);
print_board(arr);
if(judge(arr)=='X') break;
computer_act(arr);
print_board(arr);
if(judge(arr)=='O') break;
}
if(judge(arr)=='X')
printf("你赢了。\n");
else
printf("你输了。\n");
}
}
else
break;
}
return 0;
}

@ -0,0 +1,25 @@
#ifndef SANZIQI_H_INCLUDED
#define SANZIQI_H_INCLUDED
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
void init_board(char arr[3][3]); //初始化棋盘
void print_board(char arr[3][3]); //打印棋盘
void menu(); //菜单
int whom_act(); //选择谁先行动
int chess_full(char arr[3][3]); //判断棋子是否下满
char judge(char arr[3][3]); //判断输赢
void player_act(char arr[3][3]); //玩家行动
void computer_act(char arr[3][3]); //电脑行动
#endif // SANZIQI_H_INCLUDED
Loading…
Cancel
Save