c语言三子棋小游戏,通过二维数组构建棋盘.利用七个个函数
void Init();\\构建棋盘
void meau();\\游戏菜单void display();\\构建棋盘
void player();\\玩家进行
void computer();\\电脑进行
char Iswin();\\判断输赢
int Isfull();\\判断棋盘是否下满
来实现逻辑.
头文件 game.h
#ifndef _GAME_H__
#define _GAME_H_
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#define LOW 3
#define ROW 3
void Init();
void meau();
void display();
void player();
void computer();
char Iswin();
int Isfull();
#endif _GAME_H_
棋盘成一个二维数组,可通过LOW,ROW修改棋盘大小.对函数进行声明.
源文件 text.c
#include "game1.h"
void meau()
{
printf("***************************\n");
printf("****1.play 2.exit****\n");
printf("***************************\n");
}
int text(char arr[ROW][LOW])
{
char ret = '0';
Init(arr);
do
{
display(arr);
player(arr);
display(arr);
Iswin(arr);
Isfull(arr);
if (Iswin(arr) != ' ')
{
ret = Iswin(arr);
break;
}
computer(arr);
} while (ret != ' ');
display(arr);
if (ret == 'X')
{
printf("玩家赢\n");
}
else if (ret == '@')
{
printf("电脑赢\n");
}
if (Iswin(arr) == 'F')
{
printf("平局\n");
}
}
int main()
{
char arr[ROW][LOW] = { 0 };
meau();
printf("请选择:>");
int a = 0;
char b = '0';
while (1)
{
scanf("%d", &a);
switch (a)
{
case 1:text(arr);
break;
case 2:
printf("游戏结束");
return 0;
default:
printf("请重新选择");
break;
}
}
}
主函数,函数测试部分.
源文件 game.c
#include"game1.h"
void Init(char arr[ROW][LOW])
{
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < LOW; j++)
{
arr[i][j] = ' ';
}
}
}
void display(char arr[ROW][LOW])
{
int i = 0;
for (i = 0; i < ROW; i++)
{
printf("%c |%c |%c \n",arr[0][i],arr[1][i],arr[2][i]);
if (i < 2)
{
printf("--|--|--");
}
printf("\n");
}
}
void player(char arr[ROW][LOW])
{
int x = 0;
int y = 0;
while (1)
{
printf("请输入坐标>");
scanf("%d%d", &x, &y);
x--;
y--;
if (arr[y][x] == ' ')
{
arr[y][x] = 'X';
break;
}
else
{
printf("输入坐标无效");
continue;
}
}
}
void computer(char arr[ROW][LOW])
{
int x = 0;
int y = 0;
int rand();
int srand();
srand((unsigned)time(NULL));
while (1)
{
x = rand() % 3;
y = rand() % 3;
if (arr[y][x]== ' ')
{
arr[y][x] = '@';
break;
}
else if (arr[y][x]=='X')
continue;
}
}
int Isfull(char arr[ROW][LOW])
{
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < LOW; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
char Iswin(char arr[ROW][LOW])
{
int ret = 0;
int i = 0;
for (i = 0; i < ROW; i++)
{
if ((arr[i][0] == arr[i][1]) && (arr[i][2] == arr[i][1]))
{
return arr[i][0];
}
}
for (i = 0; i < LOW; i++)
{
if ((arr[0][i] == arr[1][i]) && (arr[2][i] == arr[1][i]))
{
return arr[0][i];
}
}
if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]))
{
return arr[0][0];
}
if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]))
{
return arr[2][0];
}
ret = Isfull(arr);
if (ret == 1)
{
return 'F';
}
return ' ';
}
函数逻辑的实现.
结束还应对以下几点进行测试:
玩家是否能够取得胜利
电脑是否能够取得胜利
是否能够产生平局