您的位置:首页 > 编程语言 > C语言/C++

用C语言实现简单 三子棋(井字棋)小游戏

2018-10-16 01:14 751 查看

函数头

放在头文件里

#ifndef __GAME_H__
#define __GAME_H__

#define _CRT_SECURE_NO_WARNINGS  1

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

#define ROW 3 //行为3
#define COL 3 //列为3

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);//电脑出棋函数

int IsFull(char board[ROW][COL],int row,int col);//判断棋盘是否满棋
int IsWin(char board[ROW][COL],int row,int col);
void game();

#endif //__GAME_H__

主函数

选择1进入游戏函数 开始游戏
选择零 则退出游戏

#define _CRT_SECURE_NO_WARNINGS  1

#include"game.h"

void mune()
{
printf("\n\n\n█████████████████████\n");
printf("█████     经典③子棋游戏     ████\n");
printf("█████████████████████\n");
printf("███████   1.开始游戏   ██████\n");
printf("███████   0.退出游戏   ██████\n");
printf("█████████████████████\n");

}

int main()
{
int input = 0;
do
{
srand((unsigned int)time(NULL));//生成随机数函数
mune( );//游戏菜单函数
printf("请输入数字进行选择:\n");
scanf("%d",&input);
switch(input)
{
case 1:
game( );
break;
case 0:
printf("退出游戏!");
break;
default:
printf("输入错误,请重新输入:\n");
}
}while(input);
return 0;
}

游戏函数
初始化棋盘函数————打印原始棋盘函数————电脑出棋函数—与—玩家出棋函数(循环调用每调用一次判断一次输赢)————判断输赢函数(中间嵌套判断是否棋盘已满的函数决定平局)

#define _CRT_SECURE_NO_WARNINGS  1

#include"game.h"

void game()
{
char ret = '0';
char board[ROW][COL] = {0};//创建二维数组
InitBoard(board,ROW,COL);//调用初始化棋盘的函数
DisplayBoard(board,ROW,COL);//打印原始棋盘
//下棋过程
do
{
printf("▁▂▃电脑已出棋~该您出棋啦▃▂▁\n");
ComputerMove(board,ROW,COL);//电脑出棋
DisplayBoard(board,ROW,COL);//打印棋盘显示电脑出的棋
ret = IsWin(board,ROW,COL);//根据判断输赢函数的返回值来决定谁赢谁输
if(ret !=' ')               //返回空格继续下棋返回0电脑赢,返回x玩家赢
{                              //返回空格继续下棋  返回p为平局
break;
}
PlayerMove(board,ROW,COL);//到玩家出棋
DisplayBoard(board,ROW,COL);//打印棋盘
ret = IsWin(board,ROW,COL);
if(ret !=' ')
{
break;
}
}while(ret = ' ');
//不等于空格跳出后判断谁赢
ret = IsWin(board,ROW,COL);
if(ret == 'p')
{
printf("\n▁▂▃恭喜您和聪明的电脑打成平手啦▃▂▁\n");
}
else if(ret == '0')
{
printf("\n▁▂▃很遗憾~电脑取得了胜利▃▂▁\n");
}
else if(ret == 'X')
{
printf("\n▁▂▃恭喜您取得了胜利~再接再厉哦▃▂▁\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 DisplayBoard(char board[ROW][COL],int row,int col)
{
int i = 0;
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 ComputerMove(char board[ROW][COL],int row,int col)
{
while(1)
{

int x = rand() % row;
int y = rand() % col;
if(board[x][y] == ' ')
{
board[x][y] = '0';
break;
}
}
}

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 >= 1)&&(x <= row)&&(y >= 1)&&(y <= col))
{
if( board[x-1][y-1] == ' ')
{
board[x-1][y-1] = 'X';
break;
}
else
{
printf("抱歉~您输入的坐标已经被电脑抢先了一步,请重新输入\n");
}
}
else
{
printf("您输入的坐标已经超出棋盘的范围啦~请重新输入哦\n");
}

}
}

int IsWin(char board[ROW][COL],int row,int col)
{
int i = 0;
int j = 0;
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(j = 0;j<col;j++)
{
if(board[0][j] == board[1][j]&&board[1][j] == board[2][j]&&board[0][j] != ' ')
{
return board[0][j];
}
}
if(board[0][0] == board[1][1]&&board[1][1] == board[2][2]&&board[0][0] != ' ')
{

return board[0][0];
}
else if(board[2][0] == board[1][1]&&board[1][1] == board[0][2]&&board[2][0] != ' ')
return board[2][0];
else if(IsFull(board,row,col))
return 'p';
else
return ' ';
}

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;
}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: