教你用C语言实现三子棋

目录
  • 三子棋
    • work.c的设置
    • game.h的内容设置
    • game.c的设置
      • 1.棋盘的内容
      • 2.棋盘以及棋盘的初始化
      • 3.打印棋盘
      • 4.下棋步骤 玩家下棋
      • 5.判断是否胜利
  • 总结

三子棋

三子棋的规则是:在3x3的棋盘里,双方轮流下子(以X和O表示),先将3个子连成一条线(横竖斜都可以)的一方获胜

下面是三子棋C语言实现的几个问题:

1.要想实现三子棋,我们需要一个棋盘,然后就是棋盘的内容。

2.下棋的时候需要判断是否该位置合法。

3.玩家和电脑的下棋逻辑不同,玩家需要手动输入,电脑是自己下棋

4.每下一步棋都需要判断游戏是否结束(哪方胜利、平局还是继续下棋)。

设计方式:

需要创建三个文件:一个头文件,两个源文件,头文件里面放的是函数的声明以及一系列预处理命令,命名为game.h

两个源文件,一个里面放的是主函数(游戏大体的运行顺序),命名为work.c,一个里面放的是游戏内容的实现逻辑(放大部分执行函数),命名为game.c

work.c的设置

首先是进入游戏,为了确保游戏可以重复玩,我们可以以循环的方式实现

//work.c里面的内容
#include"gmae.h"//这样的话,在game.h里面包含的文件,在work.c里面也能使用
int main()
{
	int option = 0;//在主函数里面设计循环,可以保证每次游戏结束后可以选择继续游戏或者退出游戏
	do
	{
		Menu();
		scanf("%d", &option);
		switch (option)
		{
		case 1:
			game();//如果选择开始游戏,就会进入到game()函数,
                /*我们需要定义game函数来存放游戏的实现顺序*/
			break;
		case 0:
			printf("已退出");
			break;
		default :
			printf("错误选择,请重新输入");
		}
	} while (option);
	return 0;
}
//work.c里面的内容
void Menu()//定义菜单函数,配合主函数里面的循环,可以实现每次游戏结束会跳到这个界面
{
	printf("*****************\n");
	printf("***  1.play  ****\n");
	printf("***  0.exit  ****\n");
	printf("*****************\n");
	printf("请选择");
}

然后就是游戏进行的顺序需要在game函数里面实现

//work.c里面的内容
void game()
{
	srand((unsigned int)time(NULL));//使用随机数,便于后面电脑下棋时是随机出棋
	char board[ROW][COL] = { 0 };//创建一个二维数组,用来实现棋盘的内容
	printf("游戏开始:\n");
	init_board(board,ROW,COL);//初始化棋盘
	print_board(board, ROW, COL);//打印棋盘
	while (1)
	{
		char ret = '0';
		player_move(board, ROW, COL);//玩家下棋
		print_board(board, ROW, COL);//打印棋盘
		ret = is_win(board, ROW, COL);//判断是否结束
		if (ret == '*')
		{
			printf("玩家胜利\n");
			break;
		}
		computer_move(board, ROW, COL);//电脑下棋
		print_board(board, ROW, COL);//打印棋盘
		ret = is_win(board, ROW, COL);//判断是否结束
		if (ret == '#')//
		{
			printf("电脑胜利\n");
			break;
		}//判断电脑胜利
		if (ret == 'Q')//判断平局
		{
			printf("平局\n");
			break;
		}//判断平局
	}
}
//work.c里面的内容
void game()
{
	srand((unsigned int)time(NULL));//使用随机数,便于后面电脑下棋时是随机出棋
	char board[ROW][COL] = { 0 };//创建一个二维数组,用来实现棋盘的内容
	printf("游戏开始:\n");
	init_board(board,ROW,COL);//初始化棋盘
	print_board(board, ROW, COL);//打印棋盘
	while (1)
	{
		char ret = '0';
		player_move(board, ROW, COL);//玩家下棋
		print_board(board, ROW, COL);//打印棋盘
		ret = is_win(board, ROW, COL);//判断是否结束
		if (ret == '*')
		{
			printf("玩家胜利\n");
			break;
		}
		computer_move(board, ROW, COL);//电脑下棋
		print_board(board, ROW, COL);//打印棋盘
		ret = is_win(board, ROW, COL);//判断是否结束
		if (ret == '#')//
		{
			printf("电脑胜利\n");
			break;
		}//判断电脑胜利
		if (ret == 'Q')//判断平局
		{
			printf("平局\n");
			break;
		}//判断平局
	}
}

下面是对这几点问题的解决方法:

game.h的内容设置

#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 3
#define COL 3//设置了行与列的值,可以更改
#include<stdio.h>
#include<time.h>//用来实现时间戳
//下面是游戏实现逻辑所需的函数声明。
void init_board(char board[ROW][COL], int row, int col);
void player_move(char board[ROW][COL], int row, int col);
void computer_move(char board[ROW][COL], int row, int col);
void print_board(char board[ROW][COL], int row, int col);
char is_win(char board[ROW][COL], int row, int col);

game.c的设置

1.棋盘的内容

我们通过创建一个二维数组来作为棋子,通过输入坐标的方式来进行下棋的步骤

创建数组:

char board[ROW][COL] ;这里括号里面的值我们用提前处理过的ROW与COL来表示,
    通过预处理命令,我们后期可以很方便的更改ROW与COL的值来改变棋盘的大小

2.棋盘以及棋盘的初始化

棋盘是3x3形式,所以我们可以通过循环的方式打印一个棋盘,下面是棋盘的格式

 0 | 0 | 0
---|---|---
 0 | 0 | 0
---|---|---
 0 | 0 | 0 //而这个表里面的0就是我们的下的棋子占有的位置
 /*而这个棋盘的设计是有明显的规律的:
     第一行: 空格%c空格
	第二行:---|循环3遍,但是最后遍不打印“|”
     然后这样的两行在循环中多次打印,就出现了这样的三子棋表格
     注意:最后一行不用再打印“---”

这里我们定义init_board()函数来初始化棋盘(即让数组的所有元素的值都为空格)

void init_board(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.打印棋盘

void print_board(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++)
		{
			printf(" %c ", board[i][j]);
			if (j != col - 1)
			{
				printf("|");//最后一列不打印'|'
			}
		}
		//每次进行上一个循环时,i的值在变化,打印的是不同的值
		printf("\n");
		if (i != row - 1)//最后一行不打印字符
		{
			for (j = 0; j < col; j++)
			{
				printf("---");
				if (j != col - 1)
					printf("|");
			}
		}
		printf("\n");
	}
	printf("\n");
}

4.下棋步骤 玩家下棋

void player_move(char board[ROW][COL], int row, int col)
{
	printf("玩家下棋:\n");
	int x = 0;
	int y = 0;
	int i = 0;
	int j = 0;
	while (1)
	{
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y <= col & y >= 1)
		{
			if (board[x-1][y-1] == ' ')
			{
				board[x-1][y-1] = '*';
				break;
			}
			else
			{
				printf("该坐标被占用,请重新输入\n");
			}
		}
	}
}

电脑下棋

void computer_move(char board[ROW][COL], int row, int col)
{
	char x = 0;
	char y = 0;
	while (1)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}

5.判断是否胜利

char is_full(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;//用是否还有空格判断平局
		}
	}
}
char is_win(char board[ROW][COL], int row, int col)//这里是判断横竖斜三种方式是否出现胜利
{
	int i = 0;
	int j = 0;
	int count = 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][0];
		}
	}
	for (i = 0; i < row; i++)
	{
			if ((board[0][i] == board[1][i])&&(board[2][i]==board[1][i]) && board[1][i] != ' ')
			{
				return board[0][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];
	}
//一旦出现胜利,就返回胜利一方的棋子字符
	if (is_full(board,ROW,COL))
	{
		return 'Q';//平局返回'Q'
	}
	else
		return 'C';//什么情况都没有就继续游戏
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C语言代码 模块化实现三子棋

    目录 主函数(test.c文件) 游戏开始界面设计 游戏运行逻辑(不具体解释函数的实现) 头文件(game.h)及游戏函数文件(game.c) 初始化空棋盘函数 棋盘打印函数 玩家下棋函数 电脑下棋函数 获胜条件判断函数 总结 主函数(test.c文件) 游戏开始界面设计 游戏运行逻辑(不具体解释函数的实现) 头文件(game.h)及游戏函数文件(game.c) 初始化空棋盘函数 棋盘打印函数 玩家下棋函数 电脑下棋函数 获胜条件判断函数 总结 主函数(test.c文件) int main()

  • C语言实现的一个三子棋游戏详解流程

    目录 前言 一.三子棋完成程序运行结果 二.三子棋代码实现 1.创建源文件与头文件 2.整体页面的制作 3.制作并打印棋盘 1.在test.c文件中,定义函数game(); 2.在game.h 头文件中 3.在game.c源文件中 4.人机互动下棋 1.在test.c源文件中 2.在game.h头文件中 3.在game.c源文件中 4.此时打印效果 5.判断输赢 1.在test.c源文件中 2.在game.h头文件中 3.在game.c源文件中 4.最终实现结果 最后 前言 三子棋是我们先前所学

  • 基于C语言实现三子棋小游戏

    在写三子棋之前,我们要先了解三子棋的一个大概的图形,以便于我们整理思路. 首先我们要分模块写代码,不要全部写在主函数里面,模块化的代码便于理解,而且给人一种赏心悦目的感觉,如: game.h game.c test.c game.h---头文件的包含,定义宏变量以及函数声明 #pragma once //头文件的包含 #include<stdio.h> #include<stdlib.h> #include<time.h> //函数的声明 #define ROW 3 #

  • C语言实现简单版三子棋

    本文实例为大家分享了C语言实现简单版三子棋的具体代码,供大家参考,具体内容如下 游戏的主函数设计: 1.打印出可以让玩家选择游戏开始和退出的菜单. 2.如果玩家选择1,则游戏开始,并开始执行game()函数. 3.如果玩家选择0,则游戏退出. 4.如果玩家选择了其他数,提醒玩家选择正确的功能. 主函数的实现: int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请输入-->&qu

  • 适合初学者练习的C语言实现三子棋小游戏

    目录 一.写代码前明确下棋时的步骤与顺序 二 根据初步的主函数完成想要的代码 1.写一个函数来初始化棋盘 2.打印棋盘 3.玩家落子 4.电脑落子 5.判断胜负 三.三子棋实现代码 用简单的C语言来实现小时候玩的三子棋游戏,下面是人机对战,当然这个代码的电脑对手是人工智障而不是人工智能 一.写代码前明确下棋时的步骤与顺序 1.创建一个3*3的棋盘. 2.将上面创建的棋盘中每个格初始化成' '状态. 3.打印出初始化完成的棋盘 4.玩家落子 5.电脑落子 6.判断胜负 写代码之前梳理好大概的思路,

  • 手把手教你用C语言实现三子棋

    目录 1.设计简单菜单 2.创建棋盘 3.下棋过程的实现 3.1玩家下棋 3.2电脑下棋 3.3判断输赢 4.游戏源码 总结 1.设计简单菜单 相信大家在玩游戏时会发现,进入游戏前会有菜单拱你选择,你可以选择你想要的模式,三子棋也是同样的. void menu() { printf("******************************\n"); printf("********* 0.play *********\n"); printf("***

  • 教你用C语言实现三子棋

    目录 三子棋 work.c的设置 game.h的内容设置 game.c的设置 1.棋盘的内容 2.棋盘以及棋盘的初始化 3.打印棋盘 4.下棋步骤 玩家下棋 5.判断是否胜利 总结 三子棋 三子棋的规则是:在3x3的棋盘里,双方轮流下子(以X和O表示),先将3个子连成一条线(横竖斜都可以)的一方获胜 下面是三子棋C语言实现的几个问题: 1.要想实现三子棋,我们需要一个棋盘,然后就是棋盘的内容. 2.下棋的时候需要判断是否该位置合法. 3.玩家和电脑的下棋逻辑不同,玩家需要手动输入,电脑是自己下棋

  • C语言实现三子棋实例代码

    我是半自主的完成了这个程序,看了B站鹏哥视频并仔细思索后才做出来的,我没有完全采用他的方法,导致程序还有一些不足之处,还请各位大佬指出. 首先,我将该程序的实现分为3个板块,main,game.h,和game.c; 代码如下: #define _CRT_SECURE_NO_WARNINGS #include"game.h" void menu() { printf("****************************************\n"); prin

  • C语言实现三子棋游戏

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> void chess_board(char arr[3][3]) //打印棋盘 { int i = 0; int j = 0; for (i = 0; i < 3; i++) { printf( " %c | %c | %c \n", arr [i][0], a

  • C语言实现三子棋

    本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 题目:C语言实现三子棋 问题分析:首先用到数组,存储信息.棋盘的信息和棋子的信息 打印棋盘 读取棋子的位置 判断是否连子 打印棋盘 然后重复 代码如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //数组沙盘 char Global_Gobang[10][10]; int Global_line, Global_p

  • C语言实现三子棋程序

    本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 先直接上代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //2.实现三子棋游戏. #include<Windows.h> //Sleep() RAND_MAX 的头文件 void menu() //打印菜单 { printf("****************************\n"); printf("***

  • C语言实现三子棋游戏(初级版)

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 game.h #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 //声明函数 void InitBoard(char board[ROW][COL], int row, int col); //打印棋盘 void PrintBoard(char board[ROW][COL], i

  • C语言实现三子棋小游戏详解

    在用c语言实现三子棋小游戏之前,我们应当了解三子棋的游戏规则:在九宫格棋盘上,哪一方三个棋子连成一线(一行或一列或对角线)即判定哪一方胜利. 以下为源代码: 1.首先打印出菜单. void menu() { printf("**********************************\n"); printf("**********************************\n"); printf("***** 0.play *********

  • C语言实现三子棋的步骤和代码详解

    一.问题描述 用c语言实现三子棋. 二.基本流程 在写三子棋的代码之前,我们来看看实现这个游戏的逻辑: 1.菜单界面选择开始或者退出游戏. 2.创建棋盘并初始化. 3.打印棋盘. 4.玩家落子(玩家输入行列坐标的方式来落子),'x'表示玩家落子. 5.判定胜负关系(输,赢,和棋),'q'表示和棋. 6.电脑落子(随机位置落子) ,'o'表示电脑落子. 7.判定胜负关系. 8.回到 步骤2 继续执行. 三.步骤 1.菜单界面 1.开始游戏 0.退出游戏 int menu(){ printf("--

  • 利用C语言实现三子棋游戏

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 说明:该游戏的实现需要用到三个文件 1.test.c:放置主函数(main())和菜单函数(menu())和游戏函数(game()). 2.game.c:放置game()里面的相应操作的函数,例如玩家移动(PlayerMove(board)),电脑移动(ComputerMove(board)),以及每一次移动之后打印当前棋盘内容的函数(DisplayBoard(board))等等.由于这些函数内容较多,所以单独放在一个

随机推荐