【C】三子棋小游戏的简单实现

此处代码写入头文件命名为game.h

#pragma once
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#include <time.h>
#define Col 3
#define Row 3

/*
*       当前版本:v1.0.0
*
*       作者:linqxxy
*
*	函数名称:GuessNum
*
*       完成日期:2019.3.26
*
*	函数功能:猜数字游戏实现
*
*	入口参数:无
*
*	出口参数:空
*
*	返回类型:void
*/
void GuessNum()//附加的猜数字游戏
{
	int num = 0;
	int random = rand() % 100;
	while (1)
	{
		printf("请输入您猜的价格:");
		scanf("%d", &num);
		if (num > random)
		{
			printf("猜大了,请重新输入:\n");
		}
		else if (num < random)
		{
			printf("猜小了,请重新输入:\n");
		}
		else
		{
			printf("恭喜您,猜对了!\n");
			break;
		}
	}
}
/*
*	函数名称:init
*
*	函数功能:初始化数组为空格
*
*	入口参数:arr[Row][Col],row,col
*
*	出口参数:空
*
*	返回类型:void
*/
void init(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] = ' ';
		}
	}
}
/*
*	函数名称:print
*
*	函数功能:打印棋盘
*
*	入口参数:arr[Row][Col],row,col
*
*	出口参数:空
*
*	返回类型:void
*/
void print(char board[Row][Col], int row, int col)//打印棋盘
{
	int i = 0;
	printf("   0   1   2\n");
	for (i = 0; i < row; i++)
	{
		printf("%d   %c| %c | %c\n", i,board[i][0], board[i][1], board[i][2]);
		if (i != row - 1)
		{
			printf("  ---|---|---\n");
		}
	}
}

/*
*	函数名称:ComputerMove
*
*	函数功能:电脑落子
*
*	入口参数:arr[Row][Col],row,col
*
*	出口参数:空
*
*	返回类型:void
*/
void ComputerMove(char board[Row][Col], int row, int col)
{
	printf("电脑落子\n");
	while (1)
	{
		int randnum1 = rand() % row ;
		int randnum2 = rand() % col ;
		if (board[randnum1][randnum2] == ' ')
		{
			board[randnum1][randnum2] = 'X';
			break;
		}
	}	
}
/*
*	函数名称:PlayerMove
*
*	函数功能:玩家落子
*
*	入口参数:arr[Row][Col],row,col
*
*	出口参数:空
*
*	返回类型:void
*/
void PlayerMove(char board[Row][Col], int row, int col)
{
	printf("玩家落子\n");
	while (1)
	{
		int x = 0, y = 0;
		scanf("%d%d", &x, &y);
		if (x >=0 && x< row && y >= 0 && y < col)
		{
			if (board[x][y] == ' ')
			{
				board[x][y] = 'O';
				break;
			}
			else
			{
				printf("落点已经有棋子了,请重新输入\n");
			}
		}
		else
		{
			printf("您的输入有误!");
		}
	}
}
/*
*	函数名称:IsFull
*
*	函数功能:判断棋盘是否下满
*
*	入口参数:arr[Row][Col],row,col
*
*	出口参数:空
*
*	返回类型:char
*/
char IsFull(char board[Row][Col], int row, int col)
{
	int i = 0, j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}
/*
*	函数名称:IsWin
*
*	函数功能:判断是否胜利
*
*	入口参数:arr[Row][Col],row,col
*
*	出口参数:空
*
*	返回类型:char
*/
char IsWin(char board[Row][Col],int row, int col )
{
	int i = 0, j = 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[i][1];
		}
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	else if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}
	else if (IsFull(board, Row, Col))

	{
		return 'f';
	}
	return 0;	
}
/*
*	函数名称:ThirdFlags
*
*	函数功能:游戏逻辑实现
*
*	入口参数:无
*
*	出口参数:空
*
*	返回类型:void
*/

void ThirdFlag()
{
	srand((unsigned)time(NULL));
	char board[Row][Col] = { 0 };
	init(board, Row, Col);
	print(board, Row, Col);
	while (1)
	{
		ComputerMove(board, Row, Col);
		print(board, Row, Col);
		if (IsWin(board, Row, Col) == 'X')
		{
			printf("电脑胜利,请下次加油\n");
			break;
		}
		PlayerMove(board, Row, Col);
			print(board, Row, Col);
		if (IsWin(board, Row, Col) == 'O')
		{
			printf("恭喜您胜利了\n");
			break;
		}
		print(board, Row, Col);
		if (IsWin(board, Row, Col) == 'f')
		{
			printf("棋盘满了,请下次加油\n");
			break;
		}
	}
}
/*
*	函数名称:Menu
*
*	函数功能:菜单功能
*
*	入口参数:空
*
*	出口参数:空
*
*	返回类型:void
*/
void menu()
{
	int N = 0;
	printf("*********************************\n");
	printf("*            1.猜数字           *\n");
	printf("*            2.三子棋           *\n");
	printf("*            3.扫雷             *\n");
	printf("*            4.退出             *\n");
	printf("*********************************\n");
	scanf("%d", &N);
	switch (N)
	{
	case 1:
		GuessNum();
		break;
	case 2:
		ThirdFlag();
		break;
	case 3:
		Clearance();
		break;
	case 4:
		printf("ByeBye!");
		break;
	default:
		printf("您的输入有误\n");
		break;
	}

}

主函数中调用game.h

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#include <time.h>
#include "game.h"

//主函数程序入口
void main()
{
	srand((unsigned)time(NULL));
	menu();
	system("pause");
}


猜你喜欢

转载自blog.csdn.net/qq_38606740/article/details/88832986