类似于五子棋的三子棋小游戏

来源:互联网 发布:艾滋病 知乎 编辑:程序博客网 时间:2024/05/18 03:28

    第一次写这么长的小型程序,刚开始感觉很困难,但当多次模仿并试着去写的时候你不难发现,写这样的程序,你必须在脑海中将思路缕清晰,一步便是一环,而且环环相套。在我写完这个程序后,我发现一个程序模块化是很重要的,如果一个模块出了问题,会导致整个程序出错误,所以要做到没写几个模块就测试一下,不然你会发现最后测试时会很凌乱。下面就是关于这个程序实现后的代码:

1.首先是测试项目,把你这游戏需要想到要用的子函数并一步一步连起来,便有了大体框架

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include"game.h"void menu1(){printf("*******************************\n");printf("***********1.play。************\n");printf("***********2.exit。************\n");printf("*******************************\n");}void menu2(){printf("*******************************\n");printf("**********1:电脑先下**********\n");printf("**********2:棋手先下**********\n");printf("*******************************\n");}void game(){int j = 0;char board[ROW][COL];srand((unsigned int)time(NULL));init_board(board,ROW,COL);menu2();printf("请选择棋手先后顺续>:\n");scanf("%d",&j);switch(j){case 1:display_board(board,ROW,COL);computer_board(board,ROW,COL);break;case 2:display_board(board,ROW,COL);player_board(board,ROW,COL);break;default:printf("输入错误!\n");break;}}int main(){int i = 0;do{menu1();printf("请选择>:\n");scanf("%d",&i);switch(i){case 1:game();break;case 2:printf("欢迎下次再玩!\n");break;default:printf("选择错误,请重新选择!\n");break;}}while(i!=2);return 0;}
2.实现大体框架下的子函数,并将这些子函数在game.h中写头文件,并引用到各个c源文件中,也就是test.c   game.c中:

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include"game.h"void init_board(char board[ROW][COL],int row,int col){memset(board,' ',ROW*COL*sizeof(char));}void display_board(char board[ROW][COL],int row,int col){int i = 0;for(i=0;i<row;i++){printf(" %c | %c | %c \n",board[i][0],\board[i][1],board[i][2]);if(i!=2)printf("---|---|---\n");}}

void computer_board(char board[ROW][COL],int row,int col){srand((unsigned int)time(NULL));while(1){int x = 0;int y = 0;x=rand()%3;y=rand()%3;if(board[x][y]==' '){board[x][y]='X';break;}}printf("电脑落的子>:\n");display_board(board,ROW,COL);if(judge_win(board,ROW,COL)==1)printf("你也不过如此嘛!\n");else if(judge_full(board,ROW,COL)==3)printf("哈哈,这次棋逢对手喽!\n");else player_board(board,ROW,COL);}void player_board(char board[ROW][COL],int row,int col){int x = 0;int y = 0;back:printf("请棋手落子>:\n");scanf("%d%d",&x,&y);x=x-1;y=y-1;if(((x>=0)&&(x<=2))&&((y>=0)&&(y<=2))){if(board[x][y]==' '){board[x][y]='0';}else {printf("输入错误,请重新输入!\n");goto back;}}else{printf("输入错误,请重新输入!\n");goto back;}display_board(board,ROW,COL);if(judge_win(board,ROW,COL)==2)printf("哈哈,你真厉害,竟然被你赢了!\n");else if(judge_full(board,ROW,COL)==3)printf("呵呵,平局!\n");else computer_board(board,ROW,COL);}int judge_win(char board[ROW][COL], int row, int col)//判断输赢 { int i = 0; for (i = 0; i < row; i++) //玩家行判断 { if ((board[i][0]) == (board[i][1]) && (board[i][1]) == (board[i][2]) && (board[i][0]) == '0') return 2; } for (i = 0; i < col; i++) //玩家列判断 { if ((board[0][i]) == (board[1][i]) && (board[1][i]) == (board[2][i]) && (board[0][i]) == '0') return 2; } if ((board[0][0]) == (board[1][1]) && (board[1][1]) == (board[2][2]) && (board[0][0]) == '0') return 2; //玩家斜判断 if ((board[0][2]) == (board[1][1]) && (board[1][1]) == (board[2][0]) && (board[0][2]) == '0') return 2; for (i = 0; i < row; i++) //机器行判断 { if ((board[i][0]) == (board[i][1]) && (board[i][1]) == (board[i][2]) && (board[i][0]) == 'X') return 1; } for (i = 0; i < col; i++) //机器列判断 { if ((board[0][i]) == (board[1][i]) && (board[1][i]) == (board[2][i]) && (board[0][i]) == 'X') return 1; } if ((board[0][0]) == (board[1][1]) && (board[1][1]) == (board[2][2]) && (board[0][0]) == 'X') return 1; //机器斜判断 if ((board[0][2]) == (board[1][1]) && (board[1][1]) == (board[2][0]) && (board[0][2]) == 'X') return 1; if(judge_full(board, ROW, COL))return 3; } int judge_full(char board[ROW][COL],int row,int col){int x = 0;int y = 0;for(x=0;x<row;x++){for(y=0;y<col;y++)if(board[x][y]==' ')return 0;}return 3;}
3.游戏模块和测试模块既然已实现,那就得引头文件,而此时就得写我们的头文件了:

#ifndef __GAME_H_#define __GAME_H_#include<stdio.h>#include<stdlib.h>#include<string.h>#define  ROW   3#define  COL   3void init_board(char board[ROW][COL],int row,int col);void display_board(char board[ROW][COL],int row,int col);void player_board(char board[ROW][COL],int row,int col);void computer_board(char board[ROW][COL],int row,int col);int judge_win(char board[ROW][COL],int row,int col);int judge_full(char board[ROW][COL],int row,int col);#endif //__GAME_H_



                                             
0 0
原创粉丝点击