IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 以C语言实现三子棋 -> 正文阅读

[C++知识库]以C语言实现三子棋

三子棋介绍

三子期是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。

三子棋规则

玩家和电脑交替在棋盘中落下一个棋子,直到一方胜利或者平局,则结束游戏。

当棋盘上同一行或者同一列或者对角线的三个棋子都相同时,棋子所属方胜利。

当棋盘已满还未分出胜负,则平局。


代码

game.h

//函数的声明
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#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);
char isWin(char chessBoard[ROW][COL]);
int isFull(char chessBoard[ROW][COL]);

game.c

//函数的定义
#include"game.h"
//初始化棋盘
void Initboard(char Board[ROW][COL], int row, int col)

{
	system("color E1");//自己加的颜色的调用 因为对这方面不大熟悉 想了解的可以搜下
	int i = 0, j = 0;
	for ( i = 0; i < ROW; i++)
	{
		for ( j = 0; j < ROW; j++)
		{
			Board[i][j] = ' ';
		}
	}
}
//实际参数和形式参数可以同名   声明定义的函数()内的为形式参数 调用的为实际参数


//打印棋盘
void displayboard(char Board[ROW][COL], int row, int col)
{
	int i,j=0;
	//打印第一行
	for (i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
		{
			printf(" %c ", Board[i][j]);
			if (j < COL - 1)
			{
				printf("|");
			}	
		}
		printf("\n");
		//打印分隔行
		if (i < ROW - 1)
		{
			for (int j = 0; j < COL; j++)
			{
				printf("---");
				if (j < COL - 1)
				{
					printf("|");
				}
			}printf("\n");
		}
		
	}
}
//玩家下棋
void playermove(char Board[ROW][COL], int row, int col)
{
	int x=0, y=0;
	while (1)
	{
		printf("玩家走  请输入坐标(行,列)\n");
    	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");
		}
	}
	system("pause");
}
//电脑下棋
void computermove(char Board[ROW][COL], int row, int col)
{
	int x = 0, y = 0;
	printf("电脑走\n");
	while (1)
	{
		x = rand() % ROW;
		y = rand() % COL;
		if (Board[x][y]!=' ')
		{
			continue;
		}Board[x][y] = '#';
			break;
	}

}
//判断棋盘是否满
int isFull(char chessBoard[ROW][COL]) {
	for (int row = 0; row < ROW; row++) {
		for (int col = 0; col < COL; col++) {
			if (chessBoard[row][col] == ' ') {
				return 0;
			}
		}
	}
	return 1;
}
//判断输赢
char isWin(char chessBoard[ROW][COL]) 
{ 
	//判断行
	for (int row = 0; row < ROW; row++) {
		if (chessBoard[row][0] != ' '
			&& chessBoard[row][0] == chessBoard[row][1]
			&& chessBoard[row][0] == chessBoard[row][2]) {
			return chessBoard[row][0];
		}
	}
	//判断列
	for (int col = 0; col < COL; col++) {
		if (chessBoard[0][col] != ' '
			&& chessBoard[0][col] == chessBoard[1][col]
			&& chessBoard[0][col] == chessBoard[2][col]) {
			return chessBoard[0][col];
		}
	}
	//斜着
	if (chessBoard[0][0] != ' '
		&& chessBoard[0][0] == chessBoard[1][1]
		&& chessBoard[0][0] == chessBoard[2][2]) {
		return chessBoard[0][0];
	}
	if (chessBoard[2][0] != ' '
		&& chessBoard[2][0] == chessBoard[1][1]
		&& chessBoard[2][0] == chessBoard[0][2]) {
		return chessBoard[2][0];
	}
	//满盘为平局
	if (isFull(chessBoard)) {
		return 'q';
	}
	//iswin回执的依据
	return ' ';
}


test.c

//函数的调用
//测试游戏(主函数)
#include"game.c"
void menu()
{
	printf("********************************\n");
	printf("*********1.play   0.exit********\n");
	printf("********************************\n");
}
void game() 
{
	char  winner = ' ';
	char board[ROW][COL] = {0};
	//初始化棋盘
	Initboard(board, ROW, COL);
	//打印棋盘
	displayboard(board, ROW, COL);
	while (1)
	{
    //玩家下棋
	playermove(board,ROW,COL);
	displayboard(board, ROW, COL);
	winner = isWin(board);
	if (winner != ' ')
	{
		break;
	}
	//电脑下棋
	computermove(board,ROW,COL);system("cls");
	displayboard(board, ROW, COL);
	winner = isWin(board);
	if (winner!=' ')
	{
		break;
	}
	}
	if (winner == '*') {
		printf("恭喜您 您赢了!\n");
	}
	else if (winner == '#') {
		printf("您连人工智障都下不过!\n");
	}
	else {
		printf("您只能和人工智障打平手!!\n");
	}
	
}
void test()
{
	int input = 0;
	srand((unsigned int)time(NULL));//时间戳
	do
	{
		menu();
		printf(" \n请输入( 1 / 0 )\n");
		scanf_s("%d", &input);
		switch (input)
		{
		case 1: printf("开始游戏\n    三子棋\n");
			    system("cls");game(); break;
		case 0: printf("退出游戏 \n"); break;
		default:printf(" 选择错误  请重新输入\n"); break;
		} 
	} while (input); 
}

int main()
{
	test();
	return 0;
}

调试软件:visual stidio 2019

说明:1.小比特一枚,但加入了自己的思路

? ? ? ? 2.system("cls");(清屏)我也是第一次使用 加在自己觉得还好的思路 欢迎批评指正。

? ? ? ? 3.对于c中颜色图形界面的使用可以了解下EasyX

? ? ? ? 4.希望大佬可以对我提出一些宝贵的意见(菜鸟在线求公开处刑)

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:31:35  更:2021-08-18 12:33:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 14:19:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码