前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言实现三子棋

C语言实现三子棋

作者头像
海盗船长
发布2020-08-27 17:17:18
4700
发布2020-08-27 17:17:18
举报
文章被收录于专栏:基础知识文章

头文件

代码语言:javascript
复制
 1. 头文件
#pragma once
#ifndef _SANZIQI_H_
#define _SANZIQI_H_
#define ROW 3
#define COL 3
void init_board(char arr[ROW][COL], int row, int col);//初始化
void show_board(char arr[ROW][COL], int row, int col);//打印棋盘
void computer_play(char arr[ROW][COL], int row, int col);//电脑走
void Player(char arr[ROW][COL], int row, int col);//玩家走
int Checkfull(char arr[ROW][COL], int row, int col);//判断棋盘是否有空格
char Win(char arr[ROW][COL], int row, int col);//判断输赢
#endif
2.游戏核心
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"三子棋.h"
void init_board(char board[ROW][COL], int row, int col)
{
	int x = 0,y = 0;
	for(x=0;x<row;x++)
		{for(y=0;y<col;y++)
		{
			board[x][y] = ' ';
		}
	}
}
void show_board(char board[ROW][COL], int row, int col)
{
    int i;
    for (i=0; i<row;i++)
    {
        printf("  %c | %c | %c  \n",board[i][0],board[i][1],board[i][2]);
        if (i != row - 1)
            printf(" ---|---|--- \n");
    } 
}
void computer_play(char board[ROW][COL],int row,int col)
{
	srand((unsigned int)time(NULL));
	while(1)
	{
		int x = rand() % 3;
		int y = rand() % 3;
		if(board[x][y]==' ')
		{
			board[x][y] = '#';break;
		}
	}
}
void Player(char board[ROW][COL], int row, int col)
{
    int x = 0;
    int y = 0;
    while (1)
    {
        scanf("%d,%d", &x, &y);
        x--;
        y--;
        if((0 <= x && x <= row - 1) && (0 <= y && y <= col - 1))
        {
            if (board[x][y] == ' ')
            {
                board[x][y] = '*';
                break;
            }
            else {
                printf("请不要把棋放到人家的棋上\n");
            }
        }
    else {
        printf("请在棋盘里面下棋\n");
    }
    }
}
int Checkfull(char board[ROW][COL], int row, int col)
{
	int x = 0,y = 0;
	for(x=0;x<row;x++)
		for(y=0;y<col;y++)
		{
			if(board[x][y]==' ')
				return 1;
		}
		return 0;
}
char Win(char board[ROW][COL],int row,int col)
{
	int i = 0;
	{if(Checkfull(board,ROW,COL) == 0)
		{
			return 'p';
	    }
	}
	for (i = 0; i < row; i++)
    {
        if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][2] != ' '))
        {
            return board[i][0];
        }
    }
    for (i = 0; i < col; i++)
    {
        if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[2][i] != ' '))
        {
            return board[0][i];
        }
    }
    if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[2][2] != ' '))
    {
        return board[0][0];
    }
    if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && (board[2][0] != ' '))
    {
        return board[0][2];
    }
    return ' ';
}
 3.游戏
 #include<stdio.h>
#include<time.h>
#include"三子棋.h"

void nume()
{
	printf("************************\n");
	printf("*********1、play********\n");
	printf("*********0、exit********\n");
	printf("************************\n");
}
void game()
{
	char board[ROW][COL];
    init_board(board,ROW,COL);
	while(1)
	{
		printf("电脑走:\n");
		computer_play(board,ROW,COL);
	    show_board(board,ROW,COL);
	     if (Win(board, ROW, COL) != ' ')
        {
            break;
        }
	    printf("玩家走\n");
        Player(board, ROW, COL);
        show_board(board, ROW, COL);
        if (Win(board, ROW, COL) != ' ')
        {
            break;
        }	
	}
	if (Win(board,ROW,COL) == '*')
    {
        printf("玩家赢\n");
    }
	else if (Win(board,ROW,COL) == '#')
    {
        printf("电脑赢\n");
    }
    else if (Win(board,ROW,COL) == 'P')
    {
        printf("平局\n");
    }

}
int main()
{
	int ch = 0;
	do{
		nume();
		printf("请选择:");
		scanf("%d",&ch);
		switch(ch)
		{
		case 1:game();break;
		case 0:printf("退出游戏");break;
		default:printf("输入错误,请重新输入");break;
		}
	}while(ch);
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 头文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档