【C语言】简单实现三子棋
2016-11-07 12:51
507 查看
今天我们来完成一个三子棋的小游戏。
游戏要实现:
在3*3的棋盘上进行人机对弈,玩家输入棋盘坐标下棋,电脑通过产生随机数下棋。最终,谁先完成三子相连,就是赢家。
若在棋盘下满还未决出胜负,那就是平局。
为了完成这个游戏,我们要建立三个文件,分别为chessboard.h chessboard.c test.c
它们分别完成的任务是相关函数的声明,相关函数的实现,以及主函数。
我们先看chessboard.h完成的部分。
#define _CRT_SECURE_NO_WARNINGS 1
#define rows 3 //定义行数
#define cols 3 //定义列数
void init_board(char board[rows][cols],int x,int y); //初始化棋盘
void display_board(char board[rows][cols],int x,int y); //显示棋盘
void player_move(char board[rows][cols],int x,int y); //玩家下棋
void computer_move(char board[rows][cols]); //电脑下棋
char check_win(char board[rows][cols],int x,int y); //判断输赢
再来看chessboard.c的部分。
最后我们来看test.c完成的部分。
#include "chessboard.h"
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
void menu()
{
printf("********************************\n");
printf("**********1->>开始游戏**********\n");
printf("**********0->>游戏结束**********\n");
printf("********************************\n");
}
void game()
{ int i=0,j=0;
char rt = 0;
char board[rows][cols]={ 0 } ; //rows 和 cols的值宏定义给出了
srand((unsigned)time(NULL)); //产生随机值的种子
init_board(board,rows,cols);
display_board( board,rows,cols);
do
{
player_move(board,rows,cols);
display_board( board,rows,cols);
if((rt = check_win(board,rows,cols))!=' ')
{
break;
}
printf("电脑正在下棋......\n");
Sleep(1000);
computer_move(board);
display_board( board,rows,cols);
rt = check_win(board,rows,cols);
}while(rt==' ');
if(rt=='0')
{ printf("电脑赢了!\n"); }
if(rt=='x')
{ printf("玩家赢了!\n"); }
if(rt=='m')
{ printf("这一场是平局!\n"); }
}
int main()
{
int input = 0;
do
{
menu();
printf("请输入:");
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("游戏结束!\n");
break;
default:
printf("输入有误!!\n");
break;
}
}while(input);
return 0;
}
以上就是三子棋的游戏全部程序。
其中有部分写的不是特别简介,还可以进一步优化。
如果您有什么更好的建议,可以给我留言。
游戏要实现:
在3*3的棋盘上进行人机对弈,玩家输入棋盘坐标下棋,电脑通过产生随机数下棋。最终,谁先完成三子相连,就是赢家。
若在棋盘下满还未决出胜负,那就是平局。
为了完成这个游戏,我们要建立三个文件,分别为chessboard.h chessboard.c test.c
它们分别完成的任务是相关函数的声明,相关函数的实现,以及主函数。
我们先看chessboard.h完成的部分。
#define _CRT_SECURE_NO_WARNINGS 1
#define rows 3 //定义行数
#define cols 3 //定义列数
void init_board(char board[rows][cols],int x,int y); //初始化棋盘
void display_board(char board[rows][cols],int x,int y); //显示棋盘
void player_move(char board[rows][cols],int x,int y); //玩家下棋
void computer_move(char board[rows][cols]); //电脑下棋
char check_win(char board[rows][cols],int x,int y); //判断输赢
再来看chessboard.c的部分。
#include "chessboard.h" #include<stdio.h> #include<stdlib.h> void init_board(char board[rows][cols],int x,int y) //初始化棋盘 { int i=0; int j=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { board[i][j] = ' '; } } } void display_board(char board[rows][cols],int x,int y) //显示棋盘 { int i; for(i=0;i<x;i++) { printf("%c | %c | %c\n",board[i][0],board[i][1],board[i][2]); if(i<(x-1)) { printf("---------\n"); } } } void player_move(char board[rows][cols],int x,int y) //玩家下棋,玩家下‘x’ { int a = 0; int b = 0; while (1) { printf("玩家输入坐标:"); scanf("%d %d", &a, &b); if ((a > 0 && a <= x) && (b > 0 && b <= y)) //判断坐标是否合法,玩家输入的是坐标,而不是数组下标 { if (board[a - 1][b - 1] == ' ') //判断此处有没有被下棋 { board[a - 1][b - 1] = 'x'; break; } else { printf("此处已有棋子,不能下在此处.\n"); } } else { printf("坐标输入不合法\n"); } } } void computer_move(char board[rows][cols]) //电脑下棋,电脑下‘0’ { while (1) { int x = 0; int y = 0; x = rand() % 3; //让下标合法,取余后,能下的行数只能为0,1,2 y = rand() % 3; //取余后,能下的列数只能为0,1,2 if (board[x][y] == ' ') { board[x][y] = '0'; break; } } } int board_full(char board[rows][cols],int x,int y) //检查棋盘是否有空位 { int i=0,j=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { if(board[i][j]==' ') return 0; } } return 1; } char check_win(char board[rows][cols],int x,int y) //判断输赢 { int i=0,j=0; //判断玩家的输赢,玩家下的是x, 赢得话就让它返回x int ret = board_full(board,rows,cols ); for(i=0;i<x;i++) { if ((board[i][0]==board[i][1]) && (board[i][1]==board[i][2]) && (board[i][0]=='x')) //判断一行的三个是否相等 { return 'x'; } } for(j=0;j<y;j++) { if(( board[0][j]==board[1][j]) && (board[1][j]==board[2][j]) &&(board[0][j]=='x')) //判断一列的三个是否相等 { return 'x'; } } if((board[0][0]==board[1][1]) &&(board[1][1]==board[2][2]) &&(board[0][0]=='x')) //判断一条对角线的三个是否相等 { return 'x'; } if((board[0][2]==board[1][1]) && (board[1][1]==board[2][0]) &&(board[0][2]=='x')) //判断另一条对角线的三个是否相等 { return 'x'; } for(i=0;i<x;i++) //判断电脑的输赢,电脑下的是0, 赢得话就让它返回0, { if (( board[i][0]==board[i][1]) && (board[i][1]==board[i][2]) && (board[i][0]=='0')) { return '0'; } } for(j=0;j<y;j++) { if(( board[0][j]==board[1][j]) && (board[1][j]==board[2][j]) &&(board[0][j]=='0')) { return '0'; } } if(( board[0][0]==board[1][1]) &&( board[1][1]==board[2][2]) &&(board[0][0]=='0')) { return '0'; } if(( board[0][2]==board[1][1]) && (board[1][1]==board[2][0]) &&(board[0][2]=='0')) { return '0'; } if(ret==1) //判断棋盘是否已下满 { return 'm'; } return ' '; }
最后我们来看test.c完成的部分。
#include "chessboard.h"
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
void menu()
{
printf("********************************\n");
printf("**********1->>开始游戏**********\n");
printf("**********0->>游戏结束**********\n");
printf("********************************\n");
}
void game()
{ int i=0,j=0;
char rt = 0;
char board[rows][cols]={ 0 } ; //rows 和 cols的值宏定义给出了
srand((unsigned)time(NULL)); //产生随机值的种子
init_board(board,rows,cols);
display_board( board,rows,cols);
do
{
player_move(board,rows,cols);
display_board( board,rows,cols);
if((rt = check_win(board,rows,cols))!=' ')
{
break;
}
printf("电脑正在下棋......\n");
Sleep(1000);
computer_move(board);
display_board( board,rows,cols);
rt = check_win(board,rows,cols);
}while(rt==' ');
if(rt=='0')
{ printf("电脑赢了!\n"); }
if(rt=='x')
{ printf("玩家赢了!\n"); }
if(rt=='m')
{ printf("这一场是平局!\n"); }
}
int main()
{
int input = 0;
do
{
menu();
printf("请输入:");
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("游戏结束!\n");
break;
default:
printf("输入有误!!\n");
break;
}
}while(input);
return 0;
}
以上就是三子棋的游戏全部程序。
其中有部分写的不是特别简介,还可以进一步优化。
如果您有什么更好的建议,可以给我留言。
相关文章推荐
- c语言简单实现三子棋(五子棋)
- 三子棋游戏(简单)————C语言实现
- c语言简单实现三子棋
- 用c语言简单实现三子棋游戏
- c语言编程实现简单三子棋游戏
- C语言实现简单的三子棋小游戏
- 【C语言基础】C语言三子棋的简单实现
- C语言实现简单的三子棋小程序
- 使用C语言实现简单的三子棋程序
- C语言实现简单的三子棋
- C语言实现简单的三子棋小游戏
- 用c语言实现简单三子棋游戏
- c语言实现简单的三子棋
- 用C语言实现简单的三子棋小游戏
- 用C语言实现一个简单的HTTP客户端(HTTP Client)
- c语言实现的简单的员工工资管理系统
- C语言简单数据缓存实现
- 简单代码实现LCD菜单(C语言的实现方法---加强版 有视频教程)
- C语言实现的简单的print函数,只支持%c和%d。
- 一个大学C语言试题的简单实现--员工信息管理程序