栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > C/C++/C#

C程序实现三子棋

C/C++/C# 更新时间:发布时间: 百科书网 趣学号

       一、如何实现三子棋?

  • 二、使用步骤
    • 1.设置头文件
    • 2.创建函数
    • 3.调用函数
    • 4.游戏实现
  • 总结

一、如何实现三子棋?

首先要了解三子棋的每一步走法,考虑到要用数组来实现坐标的定位(即下棋的位置),并用数组来记录每次下棋后的坐标,判断该坐标系下是否为空格,以此来确定是否继续游戏。

二、使用步骤 1.设置头文件

代码如下(示例):

#include 
#include 
#include 
//符号的定义
#define ROW 3
#define COL 3
//函数的声明
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盘的函数
void DisPlayBoard(char board[ROW][COL], int row, int col);
//玩家走
void PlayerMove(char board[ROW][COL], int row, int col);
//电脑走
void ComputerMove(char board[ROW][COL], int row, int col);
//玩家赢  - *
//电脑赢  - #
//平局    - Q
//游戏继续- C

//判断游戏是否有输赢
char IsWin(char board[ROW][COL], int row, int col);
2.主函数的实现

代码如下(示例):

#include "game.h"
void menu()
{
    printf("******************************n");
    printf("******     1. play      ******n");
    printf("******     0. exit      ******n");
    printf("******************************n");
}
void game()
{
    //存储数据 - 二维数组
    char board[ROW][COL];
    //初始化棋盘-空格
    InitBoard(board, ROW, COL);
    //打印棋盘 - 打印数组内容
    DisPlayBoard(board, ROW, COL);
    char ret = 0;//接收游戏状态

    while (1)
    {
        //玩家下棋
        PlayerMove(board, ROW, COL);
        DisPlayBoard(board, ROW, COL);
        ret = IsWin(board, ROW, COL);
        if (ret != 'C')
            break;

        //电脑下棋
        ComputerMove(board, ROW, COL);
        DisPlayBoard(board, ROW, COL);
        ret = IsWin(board, ROW, COL);
        if (ret != 'C')
            break;

    }
    if (ret == '*')
    {
        printf("玩家获胜!n");
    }
    else if (ret == '#')
    {
        printf("电脑获胜!n");
    }
    else
    {
        printf("平局!n");
    }

    DisPlayBoard(board, ROW, COL);
}
int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("请选择:>");
        scanf_s("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏n");
            break;
        default:
            printf("选择错误,重新选择!n");
            break;
        }
    } while (input);
    return 0;
}
2.构造函数的实现
#include "game.h"
void InitBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}

}
//只适用于3行3列
//void DisPlayBoard(char board[ROW][COL], int row, int col)
//{
//	int i = 0;
//	for (i = 0; i < row; i++)
//	{
//		printf(" %c | %c | %c n", board[i][0], board[i][1], board[i][2]);
//		if (in");
	while (1)
	{
		printf("请输入下棋的坐标:");
		scanf_s("%d%d", &x, &y);
		//判断坐标合法性
		if (x >= 1 && x <= row && y >= 1 && y <=col)
		{
			//下棋
			//坐标是否被占用
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
				printf("坐标被占用,请重新输入:n");
		}
		else
		{
			printf("坐标不合法,请重新输入!n");
		}

	}
}
void ComputerMove(char board[ROW][COL], int row, int col)
{
	printf("电脑走:>n");
	while (1)
	{
		int x = rand() % row;
		int y = rand() % col;
		//判断占用
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
	

}
int IsFull(char board[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 (board[i][j] == ' ')
			return 0; 			
		}
	}
	return 1;
}

char IsWin(char board[ROW][COL], int row, int col)
{
	//判断三行
	int i = 0;
	for (i = 0; i < row; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
		{
			return board[i][1];
		}
	}
	//判断三列
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
		{
			return board[1][i];
		}
	}
	//判断对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
		 return board[1][1]; 
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	//判断平局
	int n = IsFull(board, row, col);
	if (n == 1)
	{
		return 'Q';
	}

	return 'C';

}

4.游戏实现

 

 

 

 

 

总结

这是我第一次完成一个小的c程序游戏项目,希望大家借鉴,若有疑问,欢迎评论!

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1034043.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号