No.6 C语言实现三子棋小游戏

C语言学了一段时间了,在这里就展示以下用C语言实现三子棋的小游戏。

//game.h
#ifndef __GAME_h__
#define __GAME_h__

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROW 3
#define  COL  3

void DisplayBoard(char[ROW][COL] , int row, int col) ;
void InitBoard(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) ;
int IsFull(char board[ROW][COL], int row, int col) ;
char IsWin(char board[ROW][COL], int row, int col) ;
void game() ;

#endif

//game.c
#include <stdio.h>
#include "game.h" 

#define _CRT_SECURE_NO_WARNINGS 1

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

//初始化棋盘
void InitBoard(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] = ' ' ;
		}
	}
}

//玩家走
void PlayerMove(char board[ROW][COL], int row, int col) 
{
	int x = 0 ;
	int y = 0 ;
	while(1)
	{
		printf("请输入坐标:") ;
		scanf("%d%d", &x, &y) ;
		if (x>0 && x<=row && y>0 && y<=col)
		{
			if (' ' == board[x-1][y-1])
			{
				board[x-1][y-1] = 'o' ;
				break ;
			}
			else 
				printf("坐标已被占用,请重新输入!\n") ;
		}
		else 
			printf("输入不合法,请重新输入!\n") ;
		
	}
}

//电脑走
void ComputerMove(char board[ROW][COL], int row, int col) 
{
	while(1)
	{
		int x = rand() % 3 ;
		int y = rand() % 3 ;
		if (' ' == board[x][y])
		{
			board[x][y] = 'x' ;
			break ;
		}
	}
}

//判断棋盘是否满
int IsFull(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 ;
		}
	}
	return 1 ;  //棋盘满
}

//判断输赢
char IsWin(char board[ROW][COL], int row, int col)
{
	int i = 0 ;

	if(  IsFull(board, row, col) ==1  )
	{
		return 'E';    //平局
	}
	
	for(i=0; i<row; i++)
	{
		if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]))
		{
			return board[i][1];
		}
	}

	for(i=0; i<col; i++)
	{
		if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]))
		{
			return board[1][i] ;
		}
	}

	if ((board[0][0]==board[1][1]) && (board[1][1]==board[2][2]))
	{
		return board[1][1];
	}

	if ((board[0][2]==board[1][1]) && (board[1][1]==board[2][0]))
	{
		return board[1][1];
	}
	return ' ' ;//既没有输赢,也没有满
}

void game()
{
	char board[ROW][COL] = { 0 } ;
	char ret = '0' ;

	InitBoard(board, ROW, COL) ;
	DisplayBoard(board, ROW, COL) ;

	do
	{
		printf("电脑走: \n") ;

		ComputerMove(board, ROW, COL) ;
		DisplayBoard(board, ROW, COL) ;

		if( IsWin(board, ROW, COL) != ' ')
		{
			break ;   
		}

		printf("玩家走: \n") ;

		PlayerMove(board, ROW, COL) ;
		DisplayBoard(board, ROW, COL) ;
       if( IsWin(board, ROW, COL) != ' ')
		{
			break ;
		}

	}while(1) ;
	
	if ( IsWin(board, ROW, COL)  == 'E')
	{
		printf("平局!\n") ;
	}
	else if ( IsWin(board, ROW, COL)  == 'o')
	{
		printf("恭喜玩家获胜!\n") ;
	}
	else if ( IsWin(board, ROW, COL)  == 'x')
	{
		printf("恭喜电脑获胜!\n") ;
	}
}
//test.c
#include <stdio.h>
#include "game.h"

void menu()
{
	printf("┌────────────┐\n") ;
	printf("│       欢迎使用         │\n") ;
	printf("└────────────┘\n") ;
	printf("┌────────────┐\n") ;
	printf("│     1.开始游戏         │\n") ;
	printf("└────────────┘\n") ;
	printf("┌────────────┐\n") ;
	printf("│     0.退出游戏         │\n") ;
	printf("└────────────┘\n") ;
}

int main()
{
	int input = 0 ;//让用户输入选项执行相应的操作
	do
	{
		srand ((unsigned int) time (NULL )) ;//随机数
		menu() ;
		printf("请选择: ") ;
		scanf("%d" , &input) ;
		switch(input)
		{
			//scanf("%d" , &input) ;
		case 1 :
			game() ;
			break ;
		case 0 :
			printf("即将退出游戏!\n") ;
			break ;
		default :
			printf("输入错误,请重新输入!\n") ;
		}
	}while(input) ;
	return 0 ;
}

试运行:
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/studyhardi/article/details/83021832