三字棋(C语言)

一、头文件引用
#pragma once
//数据初始化
#define ROW 3
#define COL 3
//头文件声明
#include<stdio.h>
#include<stdlib.h>
#include<time.h>




//游戏子程序

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 Isonewin(char board[ROW][COL],int row, int col);//判断游戏状态
二、游戏逻辑实现
#define _CRT_SECURE_NO_WARNINGS
#include"game1.h"
//游戏菜单
void menu()
{
	printf("***********************\n");
	printf("***********************\n");
	printf("******* 1.player ******\n");
	printf("******* 0.exit   ******\n");
	printf("***********************\n");
	printf("***********************\n");
}

//游戏逻辑
void game()
{
	char ret;
	char board[ROW][COL];
	Initboard(board, ROW, COL);//棋盘初始化
	displayboard(board, ROW, COL);//棋盘打印
	while (1)
	{
		playermove(board, ROW, COL);  //玩家走
		displayboard(board, ROW, COL);//棋盘打印
		ret = Isonewin(board, ROW, COL);//判断游戏状态
		if (ret != 'c')
		{
			break;
		}
		printf("\n");
		printf("\n");
		printf("\n");
		computermove(board, ROW, COL);//电脑走
		displayboard(board, ROW, COL);//棋盘打印
		ret = Isonewin(board, ROW, COL);//判断游戏状态
		if (ret != 'c')
		{
			break;
		}
	}
	if (ret == '#')                    //规定返回ret为'#'则玩家赢
	{
		printf("you win!\n");           
	}
	else if (ret == '*')               // 返回ret为'*'则电脑赢  
	{
		printf("you lose!\n");
	}
	else if (ret == 'e')               //返回ret为'e'则为平局
	{
		printf("平局\n");
	}
}
//主程序
int main()
{
	srand((unsigned int)time(NULL));
	int input;
	do
	{
		menu();
		printf("请选择 1开始游戏 0退出游戏\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("游戏开始\n");
			game();
			break;
		case 0:
			printf("游戏退出\n");
			break;
		default:
			printf("输入错误 请重新输入\n");
			break;
		}
	} while (input);
}
三、游戏内部函数实现
#define _CRT_SECURE_NO_WARNINGS
#include"game1.h"
void Initboard(char board[ROW][COL], int row, int col)  //棋盘的初始化
{
	int i, j;
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < col;j++)
		{
			board[i][j] = ' ';
		}
	}

}

void displayboard(char board[ROW][COL],int row, int col) //棋盘打印
{
	int i, j;
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < col;j++)
		{
			printf("%c ", board[i][j]);
			if (j < col-1)
			{
				printf("|");
			}
		}
		printf("\n");
		if (i < row - 1)
		{
			printf("--|--|--\n");
		}
	}
}

void playermove(char board[ROW][COL], int row, int col) //玩家走
{
	printf("请输入坐标\n\n");
	int x, y;
	scanf("%d%d", &x, &y);
	if (board[x - 1][y - 1] == ' ')
	{
		board[x - 1][y - 1] = '#';
	}
	else
	{
		printf("输入错误 请重新输入");
		playermove(board, ROW, COL);
	}
}
void computermove(char board[ROW][COL], int row, int col)//电脑走
{
	int x = rand() % ROW;
	int y = rand() % COL;
	if (board[x][y] == ' ')
	{
		board[x][y] = '*';
	}
	else
	{
		computermove(board, ROW, COL);
	}
}
int Isfull(char board[ROW][COL], int row, int col)
{
	int i, j;
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < col;j++)
		{
			if (board[i][j] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}
char Isonewin(char board[ROW][COL], int row, int col)//判断游戏状态
{
	int i;
	for (i = 0;i < row;i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0]!=' ')
		{
			return board[i][0];
		}
	}
	for (i = 0;i < col;i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
		{
			return board[0][i];
		}
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
	{
		return board[0][0];
	}
	else if (board[0][2] == board[1][1] && board[1][1] == board[0][2] && board[0][2] != ' ')
	{
		return board[0][2];
	}
	int ret = Isfull(board, ROW, COL); //判断是否平局  返回1代表棋盘满(平局)  返回0代表继续游戏
	if (ret == 1)
	{
		return 'e';
	}
	else
	{
		return 'c';
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值