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

C语言实现简易三子棋

2017-04-18 18:16 513 查看
game.h 文件中代码

#ifndef __GAME_H__
#define __GAME_H__
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//定义棋盘
#define ROWS  3
#define COLS  3

//打印菜单
void menu(void);

//初始化棋盘
void init(char board[ROWS][COLS],int rows);

//打印棋盘
void print(char board[ROWS][COLS],int rows);

//玩游戏
void play(char board[ROWS][COLS], int rows);

//玩家下
void player(char board[ROWS][COLS], int rows);

//电脑下
void computer(char board[ROWS][COLS], int rows);

//检查是否有人获胜
int  checkwin(char board[ROWS][COLS], int rows);

//判断棋盘是否已满
int checkboardfull(char board[ROWS][COLS], int rows);

//判断并打印获胜结果
int printwin(char board[ROWS][COLS], int rows);

#endif


game.c 中代码

#include "game.h"
//菜单
void menu()
{
printf("****************************\n");
printf("*****1.play      0.exit*****\n");
printf("****************************\n");

}
//初始化棋盘
void init(char board[ROWS][COLS], int rows)
{
int i, j;
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLS; j++)
board[i][j] = ' ';
}
}
//打印棋盘
void print(char board[ROWS][COLS], int rows)
{
int i, j;
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLS; j++)
{
printf("%c", board[i][j]);
if (j < 2)
printf("  |");

}
printf("\n");
if (i == 2)
printf("   |   |  ");
else
printf("___|___|___");
printf("\n");
}
}
//玩家下棋
void player(char board[ROWS][COLS], int rows)
{
int x, y;
while (1)
{
printf("玩家玩:");
printf("      请输入坐标:");
scanf("%d %d",&x, &y);
if (board[x - 1][y - 1] = ' ')
{
board[x - 1][y - 1] = '#';
break;
}
else
printf("输入位置不合法\n");

}
print(board, ROWS);
}
//电脑下棋
void computer(char board[ROWS][COLS], int rows)
{
int x, y;
srand((unsigned)time(NULL));//生成随机数种子
while (1)
{
x = rand() % ROWS;
y = rand() % COLS;
if (board[x][y] == ' ')
{
board[x][y] = '%';
break;
}
}
printf("电脑玩:\n");
print(board, ROWS);
}

//检查是否有人获胜并返回1 与0
int checkwin(char board[ROWS][COLS], int rows)
{
int i, j;
for (i = 0; i < ROWS; i++)
{
if ((board[i][0] == board[i][1])
&& (board[i][1] == board[i][2])
&& (board[i][2] == '#'))
return 1;
if ((board[i][0] == board[i][1])
&& (board[i][1] == board[i][2])
&& (board[i][2] == '%'))
return 0;
}
for (j = 0; j < COLS; j++)
{
if ((board[0][j] == board[1][j])
&& (board[1][j] == board[2][j])
&& (board[2][j] == '#'))
return 1;
if ((board[0][j] == board[1][j])
&& (board[1][j] == board[2][j])
&& (board[2][j] == '%'))
return 0;
}
if ((board[0][0] == board[1][1])
&& (board[1][1] == board[2][2])
&& (board[2][2] == '%'))
return 0;
if ((board[0][0] == board[1][1])
&& (board[1][1] == board[2][2])
&& (board[2][2] == '#'))
return 1;
if ((board[0][2] == board[1][1])
&& (board[1][1] == board[2][0])
&& (board[2][0] == '#'))
return 1;
if ((board[0][2] == board[1][1])
&& (board[1][1] == board[2][0])
&& (board[2][0] == '%'))
return 0;
}

//检查棋盘是否已满  没满返回0,满了返回1
int checkboardfull(char board[ROWS][COLS], int rows)
{
int i, j;
for (i = 0; i < ROWS; i++)
for (j = 0; j < COLS; j++)
{
if (board[i][j] == ' ')
return 0;
}
return 1;

}

//打印获胜结果
int printwin(char board[ROWS][COLS], int rows)
{
int flag, ret;
flag = checkwin(board, ROWS);
if (flag == 1)
{
printf("玩家赢\n");
return 1;
}
else if (flag==0)
{
printf("电脑赢\n");
return 1;
}
ret = checkboardfull(board, ROWS);
if (ret == 1)
{
printf("你好菜,平手\n");
return 1;
}
return 0;

}
//玩游戏
void play(char board[ROWS][COLS], int rows)
{
while (1)
{
player(board, rows);
if (printwin(board, rows))
break;
computer(board, rows);
if (printwin(board, rows))
break;
}
}


test.c中代码

#include "game.h"
int main()
{
int input;
char board[ROWS][COLS];
menu( );
printf("请选择->:");
scanf("%d", &input);
while (input)
{
init(board, ROWS);//初始化棋盘
print(board,ROWS);//打印棋盘
play(board, ROWS);//玩游戏
menu();
scanf("%d", &input);
}
printf("游戏结束\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 游戏