三子棋(智能版)
一、应用多文件的方法,把代码分为三部分
1、头文件
2、主函数代码
3、玩游戏过程
二、代码展示
1、头文件
#ifndef __GAME_H__
#define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1#define ROW 3
#define COL 3#include
#include
#include void start_board(char arr[ROW][COL],int row,int col);
void print_board(char arr[ROW][COL],int row,int col);
void computer_move(char arr[ROW][COL],int row,int col);
void player_move(char arr[ROW][COL],int row,int col);
char check_win(char arr[ROW][COL],int row,int col);#endif//__GAME_H__
2、主函数
#include "game.h"void print_menu()
{printf("****************************welcome you !****************************\n");printf("******************** 1、play 0、exit ********************\n");printf("****************************good luck !****************************\n");
}void game()
{char ret = 0;long input = 0;long flag = 1;char board[ROW][COL]={0};start_board(board,ROW,COL);printf("******************** 1、computer 2、you ********************\n");while (flag) //选择谁先走{printf("please sclect:>");scanf("%d",&input);if (input==1){flag=0;goto loop1;}else if(input==2){print_board(board,ROW,COL); //打印棋盘flag=0;goto loop2;}elseprintf("enter error !\n");}//print_board(board,ROW,COL);do {
loop1:printf("computer>:\n");computer_move(board,ROW,COL); //电脑走print_board(board,ROW,COL); //打印棋盘ret = check_win(board,ROW,COL); //判断输赢{if (ret != 'g')break;}
loop2:player_move(board,ROW,COL); //玩家走print_board(board,ROW,COL); //打印棋盘ret = check_win(board,ROW,COL); //判断输赢} while (ret == 'g');if (ret == '#'){printf("computer win !\n");}else if (ret=='e'){printf("equal !\n");}else if (ret=='*'){printf("you win !\n");}}void test()
{int input = 0;srand((unsigned int)time(NULL)); //产生随机数种子do {print_menu(); //打印菜单printf("please select:>");scanf("%d",&input);switch (input){case 1:game();break;case 0:break;default:printf("oh this error!\n");}} while (input);
}int main()
{test();return 0;
}
3、玩游戏过程
#include "game.h"void start_board(char arr[ROW][COL],int row,int col) //初始化数组
{int i = 0;int j = 0;for (i=0; ifor (j=0; j ' ';}}
}void print_board(char arr[ROW][COL],int row,int col) //打印棋盘{int i = 0;int j = 0;for (i=0; iprintf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]);if (i1){printf("--- --- ---\n");}}printf("\n");
}void computer_move(char arr[ROW][COL],int row,int col) //电脑走 电脑识别不让对方赢
{int x = 0;int y = 0;int i = 0;int j = 1;if (j==1){for (i=0; i1; i++){if (arr[i][0]==arr[i][1] && arr[i][2]==' ' && arr[i][1]!=' '){arr[i][2]='#';j=0;break;}}}if (j==1){for (i=0; iif (arr[i][1]==arr[i][2] && arr[i][0]==' ' && arr[i][1]!=' '){arr[i][0]='#';j=0;break;}}}if (j==1){for (i=0; iif (arr[0][i]==arr[1][i] && arr[2][i]==' ' && arr[1][i]!=' '){arr[2][i]='#';j=0;break;}}}if (j==1){for (i=0; iif (arr[1][i]==arr[2][i] && arr[0][i]==' ' && arr[1][i]!=' '){arr[0][i]='#';j=0;break;}}}if (j==1){for (i=0; iif (arr[i][0]==arr[i][2] && arr[i][1]==' ' && arr[i][0]!=' '){arr[i][1]='#';j=0;break;}}}if (j==1){for (i=0; iif (arr[0][i]==arr[2][i] && arr[1][i]==' ' && arr[0][i]!=' '){arr[1][i]='#';j=0;break;}}}if(j==0){goto end;}else if (arr[1][1]==' '){arr[1][1]='#';j=0;}else if (arr[0][0]==' '&& (arr[0][1]=='*' || arr[1][0]=='*')){arr[0][0]='#';j=0;}else if (arr[0][2]==' '&& (arr[0][1]=='*' || arr[1][2]=='*')){arr[0][2]='#';j=0;}else if (arr[2][0]==' ' && (arr[1][0]=='*' || arr[2][1]=='*')){arr[2][0]='#';j=0;}else if (arr[2][2]==' ' && (arr[2][1]=='*' || arr[1][2]=='*')){arr[2][2]='#';j=0;}else if (arr[0][0]==' '){arr[0][0]='#';j=0;}else if (arr[0][2]==' '){arr[0][2]='#';j=0;}else if (arr[2][0]==' '){arr[2][0]='#';j=0;}else if (arr[2][2]==' '){arr[2][2]='#';j=0;}else if(arr[0][0]==arr[1][1] && arr[2][2]==' ' && arr[1][1]!=' '){arr[2][2]='#';j=0;}else if (arr[0][2]==arr[1][1] && arr[2][0]==' ' && arr[1][1]!=' '){arr[2][0]='#';j=0;}else if (arr[2][0]==arr[1][1] && arr[0][2]==' ' && arr[1][1]!=' '){arr[0][2]='#';j=0;}else if (arr[2][2]==arr[1][1] && arr[0][0]==' ' && arr[1][1]!=' '){arr[0][0]='#';j=0;}while (j){x = rand()%row;y = rand()%col;if (arr[x][y]==' '){arr[x][y]='#';break;}
end:;}
}void player_move(char arr[ROW][COL],int row,int col) //玩家走{int x = 0;int y = 0;while (1){printf("please player enter:>");scanf("%d%d",&x,&y);if (x>=1 && x<=3 && y>=1 && y<=3) //判断玩家坐标是否合格{if (arr[x-1][y-1]==' '){arr[x-1][y-1]='*';break;}else{printf("Be occupied!\n");}}elseprintf("enter error !\n");}
}char check_full(char arr[ROW][COL],int row,int col) //判断棋盘是否满了
{int i = 0;int j = 0;for (i=0; ifor (j=0; j if (arr[i][j]==' '){return 0;}}}return 1;
}char check_win(char arr[ROW][COL],int row,int col) //判断输赢{int i = 0;for (i=0; iif (arr[i][0]==arr[i][1] && arr[i][1]==arr[i][2] && arr[i][1] != ' '){return arr[i][1];}}for (i=0; iif (arr[0][i]==arr[1][i] && arr[1][i]==arr[2][i] && arr[1][i] != ' '){return arr[1][i];}}if (arr[0][0]==arr[1][1] && arr[1][1]==arr[2][2] && arr[1][1]!=' ') {return arr[1][1];}else if (arr[0][2]==arr[1][1] && arr[1][1]==arr[2][0] && arr[1][1]!=' '){return arr[1][1];}else if(check_full(arr,ROW,COL)){return 'e';}else {return 'g';}
}
三、神叨叨,本代码中间有很多需要优化的地方,大家多多指正,欢迎关注,私信。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
