《三子棋模拟游戏》
实现一程序模拟完成玩家与电脑之间的三子棋对弈:率先完成直线的为赢
程序要求:玩家首先选择是否玩游戏,是的话开始和电脑玩游戏,直到分出胜负或者平局为止,并且期间打印每一走步的情况,并且输出最终输赢还是平局的结果。否的话直接退出游戏。
//定义头文件
#ifndef __SANZIQI_H_
#define __SANZIQI_H_
#define ROW 3
#define COL 3
//初始化
void Initboard(char arr[][COL], int row, int col);
//显示
void Displayboard(char arr[][COL], int row, int col);
//电脑走
void ComputerMove(char arr[ROW][COL], int row, int col);
//判断输赢
int Panduan(char arr[ROW][COL], int row, int col);
//人走
void PeopleMove(char arr[ROW][COL], int row, int col);
//判断输赢
int Panduan(char arr[ROW][COL], int row, int col);
#endif
//定义main函数表
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include"三子棋.h"
#define ROW 3
#define COL 3
//玩游戏开始菜单
int menu(void)
{
int choose;
printf("|--------------------|\n");
printf("|-------1 play-------|\n");
printf("|-------0 exit-------|\n");
printf("|--------------------|\n");
printf("请选择\n");
scanf("%d", &choose);
printf("\n");
return choose;
}
//玩游戏
void game(char arr[ROW][COL], int row, int col)
{
int p = 0;
do
{
ComputerMove(arr, row, col);
Displayboard(arr, row, col);
p = Panduan(arr, row, col);
if (!p)
return;
PeopleMove(arr, row, col);
Displayboard(arr, row, col);
p = Panduan(arr, row, col);
if (!p)
return;
} while (p);
}
int main()
{
int row = ROW;
int col = COL;
char arr[ROW][COL] = { 0 };
//初始化数组
Initboard(arr, row, col);
if (menu())
{
game(arr, row, col);
}
else
printf("欢迎下次光临");
system("pause");
return 0;
}
//定义三子棋函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
//初始化数组为空格
void Initboard(char arr[ROW][COL], int row, int col)
{
int i = 0, j = 0;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
arr[i][j] = ' ';
}
//显示数组情况
void Displayboard(char arr[ROW][COL], int row, int col)
{
int i = 0, j = 0;
printf("-------------\n");
for (i = 0; i < row; i++)
{
printf("|");
for (j = 0; j < col; j++)
{
printf(" %c ", arr[i][j]);
printf("|");
}
printf("\n");
printf("-------------\n");
}
printf("\n");
}
//电脑走
void ComputerMove(char arr[][COL], int row, int col)
{
int i = 0, j = 0;
do
{
srand((int)time(0));
i = rand() % row;
j = rand() % col;
} while (arr[i][j] != ' ');
printf("电脑走\n");
arr[i][j] = '0';
}
//人走
void PeopleMove(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
zz:printf("人走,请输入位置");
scanf("%d%d", &i, &j);
i--;
j--;
if ((0 <= i&&i <= row-1) && (0 <= j&&j <= col-1) && arr[i][j] == ' ')
arr[i][j] = '1';
else
{
printf("瞎下呢\n");
goto zz;
}
}
//判断输赢平局和继续
int Panduan(char arr[ROW][COL], int row, int col)
{
int i = 0, j = 0, a = 0, b = 0, count = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if ((arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2]) ||
(arr[0][j] == arr[1][j] && arr[1][j] == arr[2][j]) ||
(arr[1][1] == arr[2][2] && arr[2][2] == arr[3][3]) ||
(arr[1][3] == arr[2][2] && arr[2][2] == arr[3][1]))
{
if (arr[i][j] == '1')
{
printf("你赢啦");
return 0;
}
else if (arr[i][j] == '0')
{
printf("你都下不过电脑");
return 0;
}
else
return 1;
}
else
{
for (a = 0; a < row; a++)
{
for (b = 0; b < col; b++)
{
if (arr[a][b] != ' ')
count++;
}
}
if (9 == count)
{
printf("平局");
return 0;
}
else
return 1;
}
}
}
}
程序运行结果部分图片