C语言实现下三子棋

来源:互联网 发布:相叶雅纪水川麻美 知乎 编辑:程序博客网 时间:2024/05/04 05:02

      三子棋的代码我写了一个.h头文件,用于声明,两个.c文件,其中一个用于函数实现,一个用于测试。代码如下:

Checkerboard.h文件:

#define _CRT_SECURE_NO_WARNINGS 1#ifndef __CHESSBOARD_H__#define __CHESSBOARD_H__#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>void menu();void Game();void Init(arr,rows,cols);void Checkerboard(arr,rows,cols);void Player(arr,rows,cols);int Win_check(arr,rows,cols);void Computer(arr,rows,cols);#endif __CHESSBOARD_H__


checkerboard.c文件:
#include"checkerboard.h"void menu(){printf("*******************************\n");printf("********    1.play    *********\n");printf("********    0.exit    *********\n");printf("*******************************\n");}void Init(char arr[3][3],int rows,int cols){int i = 0;int j = 0;for(i = 0;i < rows;i++){for(j = 0;j < cols;j++){arr[i][j] = ' ';}}}void Checkerboard(char arr[3][3],int rows,int cols){int i = 0;int j = 0;for(i = 0;i < rows;i++){for(j = 0;j < cols;j++){printf(" %c ",arr[i][j]);if(j != 2)printf("|");}printf("\n");if(i != 2)printf("---|---|---\n");}}static int Full(char arr[3][3],int rows,int cols){int i = 0;int j = 0;for(i = 0;i < rows;i++){for(j = 0;j < cols;j++){if(arr[i][j] == ' ')return 0;}}return 1;}void Player(char arr[3][3],int rows,int cols){int x = 0;int y = 0;printf("Please input (x y):>");while(1){scanf("%d %d",&x,&y);if( x > 0 && x <= 3 && y > 0 && y <= 3){if(arr[x-1][y-1] == ' '){arr[x-1][y-1] = 'X';break;}else{printf("Please input again(x y):>");}}else{printf("Please input again(x y):>");}}}void Computer(char arr[3][3],int rows,int cols){int x = 0;int y = 0;srand((unsigned int)time(NULL));while(1){x = rand()%3;y = rand()%3;if(arr[x][y] == ' '){arr[x][y] = 'O';break;}else{if(Full(arr,rows,cols) == 0)continue;elsebreak;}}}int Win_check(char arr[3][3],int rows,int cols){int i = 0;int ret = 0;for(i = 0;i < rows;i++){if((arr[i][0] == arr[i][1])&&(arr[i][2] == arr[i][1])&&(arr[i][1] != ' '))return arr[i][1];}for(i = 0;i < rows;i++){if((arr[0][i] == arr[1][i])&&(arr[2][i] == arr[1][i])&&(arr[1][i] != ' '))return arr[1][i];}if((arr[0][0] == arr[1][1])&&(arr[2][2] == arr[1][1])&&(arr[1][1] != ' '))return arr[1][1];if((arr[0][2] == arr[1][1])&&(arr[2][0] == arr[1][1])&&(arr[1][1] != ' '))return arr[1][1];if(ret = Full(arr,rows,cols))return 'q';return 0;}void Game(){char arr[3][3] = {0};int rows = 3;int cols = 3;int ret = 0;Init(arr,rows,cols);Checkerboard(arr,rows,cols);do{Player(arr,rows,cols);if((ret = Win_check(arr,rows,cols)) != 0){Checkerboard(arr,rows,cols);break;}Computer(arr,rows,cols);Checkerboard(arr,rows,cols);ret = Win_check(arr,rows,cols);}while(ret == 0);if(ret == 'X'){printf("congratulations,you are winner!\n");}else if(ret == 'q'){printf("It is a draw!\n");}else if(ret == 'O'){printf("What a pity ,computer is winner!\n");}}


main.c文件:

#define _CRT_SECURE_NO_WARNINGS 1int main(){int input = 0;do{menu();printf("Please  choose:\n");scanf("%d",&input);switch(input){case 1:Game();break;case 0:break;default:printf("Error input.\n");break;}}while(input);return 0;}


0 0
原创粉丝点击