三子棋小程序
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h";
void menu()
{
printf("*******************************\n");
printf("**1.play 0.exit**\n");
printf("*******************************\n");
printf("*********请进行选择************\n");
}
void Printfmenu(char arr[ROW][COL], int row, int col)
{
printf(" %c | %c | %c |\n", arr[0][0], arr[0][1], arr[0][2]);
printf(" \n");
printf(" %c | %c | %c |\n", arr[1][0], arr[1][1], arr[1][2]);
printf(" \n");
printf(" %c | %c | %c |\n", arr[2][0], arr[2][1], arr[2][2]);
printf(" \n");
}
void Inint(char arr[ROW][COL], int row, int col,int set)
{
memset(&arr[0][0], set, row*col*sizeof(char));
}
int main()
{
int n = 0;
int set = ' ';
char arr[ROW][COL];
do{
Inint(arr, ROW, COL, set);
menu();
scanf("%d", &n);
switch (n)
{
case 1:
game(arr,ROW,COL);
case 0:
break;
default:
printf("输入错误请重新输入\n");
}
menu();
scanf("%d", &n);
} while (n);
}
*********************************************************************************************game.c*****************************************************
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void game(char arr[ROW][COL],int row,int col)
{
int win = 6;
while (win)
{
Printfmenu(arr, ROW, COL);
Userplay(arr, ROW, COL);
Printfmenu(arr, ROW, COL);
win = Win(arr, ROW, COL);
if (win == 1)
{
printf("您赢了\n");
break;
}
if (win == 4)
{
printf("平局了\n");
break;
}
Computerplay(arr, ROW, COL);
Printfmenu(arr, ROW, COL);
win = Win(arr, ROW, COL);
if ((win == 1) || (win == 2) || (win == 3))
{
printf("您输了\n");
break;
}
if (win == 4)
{
printf("平局了\n");
break;
}
system("cls");
}
}
void Userplay(char arr[ROW][COL], int row, int col)
{
int i = 1;
int x = 0;
int y = 0;
while (i)
{
printf("玩家走:");
printf("请输入下棋坐标\n");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= ROW&&y >= 1 && y <= COL)
{
if (arr[x - 1][y - 1] != ' ')
{
printf("该位置已经被操作,不可重复操作\n");
i = 1;
}
else
{
arr[x - 1][y - 1] = 'X';
i = 0;
}
}
else
printf("坐标越界,不可操作\n");
}
}
void Computerplay(char arr[ROW][COL], int row, int col)
{
int i = 1;
printf("电脑走\n");
srand((unsigned)time(NULL));
int x = 0;
int y = 0;
while (i)
{
x = rand() % 3;
y = rand() % 3;
if (arr[x ][y ] == ' ')
{
i = 0;
arr[x][y] = 'O';
}
}
}
int Win(char arr[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
int i = 0;
//横着一样
for (x = 0; x <ROW; x++)
{
i = 0;
//if ((arr[x][0] == arr[x][1]) && (arr[x][1] == arr[x][2]) && (arr[x][1] !=' '))
for (y = 0; y < COL-1; y++)
{
if ((arr[x][y] == arr[x][y + 1]) && (arr[x][y] != ' '))
i++;
}
if (i == COL - 1)
return 1;
}
//竖着一样
for (y = 0; y < COL; y++)
{
i = 0;
//if ((arr[0][x] == arr[1][x]) && (arr[1][x] == arr[2][x]) && (arr[1][x] != ' '))
for (x = 0; x < ROW-1; x++)
{
if ((arr[x][y] == arr[x+1][y]) && (arr[x][y] != ' '))
i++;
}
if (i == ROW - 1)
return 1;
}
//对角线一样
i = 0;
for (x = 0,y=0; x < ROW-1; x++,y++)
{
if ((arr[x][y] == arr[x + 1][y + 1]) && (arr[x][y] != ' '))
i++;
else
break;
}
if (i == ROW - 1)
return 1;
i = 0;
for (x = 0, y = COL-1; x < ROW - 1; x++, y--)
{
if ((arr[x][y] == arr[x + 1][y - 1]) && (arr[x][y] != ' '))
i++;
else
break;
}
if (i == ROW - 1)
return 1;
/*if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[1][1] != ' '))
return 1;
if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[1][1] != ' '))
return 1;*/
//满了平局
for (x = 0; x < ROW; x++)
{
for (y = 0; y < COL; y++)
{
if (arr[x][y] != ' ')
i++;
}
}
if (i == row*col)
return 4;
else
return 5;
}
*********************************************************************************************game.h****************************************************
//用于存放三子棋程序所有的头文件 以及函数的声明等等
#ifndef _GAME_H_
#define _GAME_H_
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define ROW 3
#define COL 3
void Userplay(char arr[ROW][COL], int row, int col);
void Computerplay(char arr[ROW][COL], int row, int col);
void game(char arr[ROW][COL], int row, int col);
void Printfmenu(char arr[ROW][COL], int row, int col);
int Win(char arr[ROW][COL], int row, int col);
#endif