C语言小游戏——三子棋的实现

学了C语言的程序员都有一个通病,不相信自己可以写出一个小游戏,下面我用VS来实现一个三子棋小游戏(本人知识尚浅,不足之处还望指出):

首先我们创建三个文件game.h、test.c、game.c。

首先在test.c中实现主函数:

int main()
{
	int input = 0;
	do{
		menu();
		printf("请选择是否进行游戏:");
		scanf("%d", &input);
		switch (input){
		case 1:game();
			break;
		case 0:printf("游戏结束!");
			break;
		default:printf("请重新输入!\n");
			break;
		}
	}while (input);
	return 0;
}

主函数中有menu()函数:

void menu()
{
	printf("###############################\n");
	printf("####### 1.play   0.exit #######\n");
	printf("###############################\n");
}
以及game()函数:
void game()
{
	int ret = 0;
	char board[ROW][COL];
	srand((unsigned int)time(NULL));
	Init_board(board,ROW,COL);
	Print_board(board, ROW, COL);
	while (1){
		Player(board, ROW, COL);
		if ((ret = is_win(board, ROW, COL)) != ' ')
		{
			break;
		}
		Print_board(board, ROW, COL);
		printf("\n");
		Computer(board, ROW, COL);
		if ((ret = is_win(board, ROW, COL)) != ' ')
		{
			break;
		}
		Print_board(board, ROW, COL);
		printf("\n");
	}
		if (ret == 'X')
		{
			printf("恭喜你,赢了此次比赛\n");
		}
		if (ret == '0')
		{
			printf("电脑胜,你输了\n");
		}
		else if (ret == 'p')
		{
			printf("平局\n");
		}
		Print_board(board, ROW, COL);
}
在这个函数里我们看到又调用了许多的函数,我们将这些都放在game.c里,当然我们去实现这些函数时需要一步一步地去实现,需要什么就创建什么。下面是game.c文件:
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"

void Init_board(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 Print_board(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++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
				printf("|");
			else
				printf("\n");
		}
		if (i < row - 1)
		{
			for (j = 0; j < col; j++)
			{
				printf("---");
				if (j < col - 1)
					printf("|");
				else
					printf("\n");
			}
		}
	}
}

void Player(char board[ROW][COL], int row, int col)
{
	int i, j;
	while (1)
	{
		printf("玩家落子: ");
		scanf("%d %d", &i,&j);
		if (i >= 1 && i <= row&&j >= 1 && j <= col)
		{
			if (board[i - 1][j - 1] == ' ')
			{
				board[i - 1][j - 1] = 'X';
				break;
			}
			else {
				printf("已经有子了!\n");
			}
		}
		else {
			printf("错误落子,请重新落子\n");
		}
	}
}

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

int is_full(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;
}

char is_win(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 (j = 0; j<col; j++)
	{
		if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && board[1][j] != ' ')
		{
			return board[1][j];
		}
	}
	if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && board[1][1] != ' ')
	{
		return board[1][1];
	}
	else if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && board[1][1] != ' ')
	{
		return board[1][1];
	}
	else if (is_full(board, row, col))
	{
		return  'f';
	}
	else return  ' ';
}
我们看到我们使用了#include<game.h>,事实上我们将函数的声明都放在了game.h里:
#ifndef _GAME__H__
#define _GAME__H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

#define ROW 3
#define COL 3

void Init_board(char board[ROW][COL], int row, int col);
void Print_board(char board[ROW][COL], int row, int col);
void Player(char board[ROW][COL], int row, int col);
void Computer(char board[ROW][COL], int row, int col);
char is_win(char board[ROW][COL], int row, int col);
#endif  
我们看一下最终的结果:

剩下的可以自己下去实现,不足之处望指出奋斗









猜你喜欢

转载自blog.csdn.net/jochebed666/article/details/80150235