用编程实现简单的三子棋游戏
先是头文件区域,声明主函数将用到的函数
- 头文件区
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __SANZIQI_H__
#define __SANZIQI_H__
#define ROW 3
#define COL 3
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//显示棋盘
void Display(char board[ROW][COL], int row, int col);
//玩家下棋
void Player(char board[ROW][COL], int row, int col);
//电脑下棋
void Computer(char board[ROW][COL], int row, int col);
//判断输赢
char is_win(char board[ROW][COL], int row, int col);
//判断是否下满
int IsNull(char board[ROW][COL], int row, int col);
#endif
- 主要用到的函数
//初始化棋盘
void InitBorad(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for(i=0; i<row; i++)
{
for(j=0; j<col; j++)
{
arr[i][j] = ' ';
}
}
}
//显示棋盘
void Display(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
printf("----------\n");
for(i=0; i<row; i++)
{
printf("|");
for(j=0; j<col; j++)
{
printf("%2c|",arr[i][j]);
}
printf("\n----------\n");
}
}
//电脑下棋
void Computer(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
srand((unsigned int)time(NULL));
while(1)
{
i = rand() % ROW;
j = rand() % COL;
if(arr[i][j] == ' ')
{
arr[i][j] = 'x';
break;
}
}
}
//玩家下棋
void Player(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
while(1)
{
printf("请输入要下的棋的坐标:");
scanf("%d,%d",&i,&j);
i--;
j--;
if((0<=i && i<=row-1) && (0<=j && j<=col-1))
{
if(arr[i][j] == ' ')
{
arr[i][j] = 'o';
break;
}
else
{
printf("该位置已有棋子\n");
}
}
else
{
printf("输出错误,请重新输入。");
}
}
}
//判断输赢
char is_win(char arr[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][1] != ' '))
{
return arr[i][1];
}
}
for (i = 0; i < col; i++)
{
if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[1][i] != ' '))
{
return arr[1][i];
}
}
if (((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] != ' '))
{
return arr[1][1];
}
if (((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] != ' '))
{
return arr[1][1];
}
if (IsNull(arr,ROW, COL))
{
return 'q';
}
return ' ';
}
//棋盘是否下满
int IsNull(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for(i=0; i<row; i++)
{
for(j=0; j<col; j++)
{
if(arr[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
- 主函数区
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "SANZIQI.h"
void mune()
{
printf("********************\n");
printf("* 1.开始游戏 *\n");
printf("* 0.结束游戏 *\n");
printf("********************\n");
}
void game()
{
int n = 0;
char arr[ROW][COL]; //定义棋盘
InitBorad(arr, ROW, COL); //初始化
Display(arr, ROW, COL);
while(1)
{
//电脑下棋
Computer(arr,ROW,COL);
printf("电脑的回合:\n");
Display(arr, ROW, COL);
//判断输赢
if(is_win(arr,ROW,COL) != ' ')
{
break;
}
//玩家下棋
Player(arr,ROW,COL);
Display(arr, ROW, COL);
//判断输赢
if(is_win(arr,ROW,COL) != ' ')
{
break;
}
}
if(is_win(arr,ROW,COL) == 'x')
{
printf("电脑赢。\n");
}
if(is_win(arr,ROW,COL) == 'o')
{
printf("玩家赢。\n");
}
if(is_win(arr,ROW,COL) == 'q')
{
printf("平局。\n");
}
}
int main()
{
int i = 0;
do
{
mune();
printf("请选择:");
scanf("%d", &i);
switch(i)
{
case 1:
game();
break;
case 0:
printf("结束游戏\n");
break;
default:
printf("输出错误\n");
break;
}
}while(i);
return 0;
}