c语言实现-五子棋(单双人,可改棋盘大小)

本文介绍了一个五子棋游戏的实现,包括游戏的初始化、棋盘显示、玩家和电脑落子、游戏状态判断等功能。游戏提供单人模式和双人模式,玩家可以与电脑对战或者与其他玩家对战。代码中详细解释了各个函数的用途,如玩家输入坐标落子、电脑随机落子等,并通过判断横、竖、斜线是否有连续五个相同棋子来决定游戏胜负。

目录

1详解

        1.1准备

        1.2游戏函数声明

                 1.2.1初始化棋盘数据

                1.2.2打印棋盘及棋盘数据

                1.2.3玩家一落子

                1.2.4玩家二落子

                1.2.5电脑落子

                1.2.6判断游戏状态

                1.2.7打印主菜单

        1.3单人模式主体逻辑

        1.4双人模式主体逻辑

        1.5游戏主体逻辑

2游戏源码


1详解

        1.1准备

编译器:vs2022,如果你的编译器报错,把scanf_s改成scanf即可。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//定义字符
#define ROW 10    //改变这两个数值可改变棋盘大小
#define COL 10

        1.2游戏函数声明

//函数声明

//初始化棋盘数据
void InitBoard(char(*Board)[COL], int row, int col);
//打印棋盘及棋盘数据
void Display_Board(char Board[ROW][COL]);
//玩家一落子
void Player_one(char Board[ROW][COL]);
//玩家二落子
void Player_two(char Board[ROW][COL]);
//电脑落子
void Computer(char Board[ROW][COL]);
//判断游戏状态
char check_win(char Board[ROW][COL]);

                 1.2.1初始化棋盘数据

//初始化棋盘数据
void InitBoard(char(*Board)[COL], int row, int col) {
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			Board[i][j] = ' ';
		}
	}
}

                1.2.2打印棋盘及棋盘数据

由于使用控制台,为了对齐图形,你会时不时的看到空格和换行的输入。

//打印棋盘及棋盘数据
void Display_Board(char Board[ROW][COL]) {
	system("cls");
	int i = 0, j = 0;
	printf("   ");
	for (i = 0; i < COL; i++) {
		if (i < COL - 1)
			printf(" %d |", i + 1);
		else
			printf(" %d ", i + 1);
	}
	printf("\n\n");
	for (i = 0; i < ROW; i++) {
		
		 if (i < ROW - 1) {
			for (j = 0; j < COL; j++) {
				if (j == 0)
					printf("%d   %c |", i + 1, Board[i][j]);
				else if (j < COL - 1) {
					printf(" %c |", Board[i][j]);
				}
				else
					printf(" %c \n", Board[i][j]);
			}
		}
		else {
			for (j = 0; j < COL; j++) {
				if (j == 0&&ROW<10)
					printf("%d   %c |", i + 1, Board[i][j]);
				else if(j==0)
					printf("%d  %c |", i + 1, Board[i][j]);
				else if (j < COL - 1) {
					printf(" %c |", Board[i][j]);
				}
				else
					printf(" %c \n", Board[i][j]);
			}
		}
		

		 if (i < ROW - 1)
			 printf("- ");
		 else
			 printf("  ");
		if (i < ROW - 1) {
			for (j = 0; j < COL; j++) {
				if(j==0){
					printf(" ---|");
				}else if (j < COL - 1)
					printf("---|");
				else
					printf("---\n");
			}
		}
		
	}
}

                1.2.3玩家一落子

//玩家一落子
void Player_one(char Board[ROW][COL]) {
	printf("Please player1 to enter the numbers of rows and columns:");
	int x, y;
	while (1) {
		scanf_s("%d%d", &x, &y);
		
		//判断坐标合法性
		if (x <= ROW && y <= COL && x >= 1 && y >= 1) {
			//判断坐标是否被占用
			if (Board[x - 1][y - 1] == ' ') {
				Board[x - 1][y - 1] = 'X';
				printf("玩家一落子\n\n");
				Display_Board(Board);
				break;
			}
			else {
				printf("该位置已经有棋了哦,请重新下棋:");
			}
		}
		else {
			printf("You have entered an invalid symbol! Please re-enter:");
		}
	}
	
}

                1.2.4玩家二落子

void Player_two(char Board[ROW][COL]) {
	printf("Please player2 to enter the numbers of rows and columns:");
	int x, y;
	while (1) {
		scanf_s("%d%d", &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值