用C语言实现三子棋

来源:互联网 发布:淘宝图片锁有用么 编辑:程序博客网 时间:2024/06/03 14:31

分为3个文件。注意:在写调用函数时,要注意调用函数的参数。

test.c//测试

#include<stdio.h>#include<stdlib.h>#include<time.h>#include"game.h"void game(){char p = 0;char arr[row][col]={0};init(arr,row,col);chess_border(arr,row,col);srand((unsigned int)time(NULL));while(1){player(arr,row,col);p = win(arr,row,col);if( p=='M'){printf("玩家赢\n");break;}else if( p=='Y'){printf("电脑赢\n");break;}else if( p =='e'){printf("平局\n");break;}computer(arr,row,col);p = win(arr,row,col);if( p=='M'){printf("玩家赢\n");break;}else if( p=='Y'){printf("电脑赢\n");break;}else if( p=='e'){printf("平局\n");break;}}}void menu(){printf("-----------------------------------\n");printf("@@@  1.play             0.exit  @@@\n");printf("-----------------------------------\n");}int main(){int input = 0;do{menu();printf("请选择:-->");scanf("%d",&input);switch(input){case 1:game();break;case 0:break;default:printf("选择错误,请重新输入\n");break;}}while(input);return 0;}
游戏环节
game.c
#include"game.h"void init(char arr[row][col],int r,int c)//初始化数组{int i =0;int j =0;for(i=0;i<row;i++){for(j=0;j<col;j++){arr[i][j]=' ';}}}void chess_border(char arr[row][col],int r,int c)//设置棋盘{int i =0;for(i=0;i<row;i++){printf(" %c | %c | %c \n", arr[i][0],arr[i][1],arr[i][2]);if(i!=2){printf("---|---|---\n");}}}void player(char arr[row][col],int r,int c)//玩家走{int i =0,j = 0;while(1){printf("请玩家输入坐标:\n");scanf("%d%d",&i,&j);if((i>=0)&&(i<row)&&(j>=0)&&(j<col)){if(arr[i][j]==' '){arr[i][j]='M';chess_border(arr,row,col);break;}else{printf("下标输入有误,请重新输入\n");}}else{printf("下标输入有误,请重新输入\n");}}}void computer(char arr[row][col],int r,int c)//电脑走{while(1){int i =rand()%3;int j =rand()%3;//随机产生一个坐标if(arr[i][j]==' '){printf("请电脑走:\n");arr[i][j]='Y';chess_border(arr,row,col);break;}}}char win(char arr[row][col],int r,int c)//判赢{int i =0;int j =0;for(i=0;i<row;i++){if((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && arr[i][2]!=' '){return arr[i][1];}}for(j=0;j<col;j++){if((arr[0][j] == arr[1][j]) && (arr[1][j] == arr[2][j]) && arr[2][j]!=' '){return arr[1][j];}}if((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && arr[2][2]!=' '){return arr[2][2];}if((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && arr[2][0]!=' '){return arr[2][0];}if(equal(arr,r,c)){return 'e';}return ' ';} int equal(char arr[row][col],int r,int c)//判平局{int i =0;int j =0;for(i=0;i<row;i++){for(j=0;j<col;j++){if(arr[i][j]==' '){return 0;}}}return 1;}

game.h//头文件
#ifndef _GAME_H__#define _GAME_H__#include<stdio.h>#include<stdlib.h>#include<time.h>#define row 3#define col 3
 void init(char arr[row][col],int r,int c); void chess_border(char arr[row][col],int r,int c); void player(char arr[row][col],int r,int c); void computer(char arr[row][col],int r,int c); char win(char arr[row][col],int r,int c); int equal(char arr[row][col],int r,int c);
#endif//_GAME_H__

原创粉丝点击