C语言_三子棋
2017-10-24 12:26
344 查看
如何用C语言写一个简单的“三子棋游戏”?通过这个练习,希望能对C语言的一个更加熟练的运用。首先可以分多个模块进行代码的编写:主菜单模块,代码实现模块,头文件引用模块。在代码实现部分里,封装了这样几个函数:void game(char arr[ROW][COL]); //游戏界面打印 void main_1(); //游戏的整体实现 int move(char arr[ROW][COL]); //下棋动作实现 int IS_win(char arr[ROW][COL]); //判断游戏结果 int full(char arr[ROW][COL]); //判断棋盘是否下满每一个C语言程序都必须有一个main()函数,所以我这里就把主菜单放在了主函数里,实现输入1开始游戏,输入0结束游戏,输入其他则提示输入错误。主菜单部分:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include "code1.h" void meau() { printf("\t三子棋\n"); printf("开始游戏**********1\n"); printf("结束游戏**********0\n"); printf("请选择:"); } int main() { int a=1; while (a!=0) { meau(); scanf("%d", &a); if (1 == a) { main_1(); } else if (a!=0) { printf("输入错误!\n"); } } printf("谢谢使用!\n"); return 0; }代码实现部分:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include "code1.h" void game(char arr[ROW][COL]) { int i, j; printf("|---|---|---|\n"); for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (2 == j) { printf("| %c |", arr[i][j]); } else { printf("| %c ", arr[i][j]); } } printf("\n|---|---|---|\n"); } }
int move(char arr[ROW][COL]){int x, y;static int cout = 0;if (cout % 2 == 0){printf("甲方下棋:");}else{printf("乙方下棋:");}scanf("%d%d", &x, &y);if (x < 0 || x > 3 || y < 0 || y > 3){printf("输入错误!\n");return 0;}else if ('\0' == arr[x - 1][y - 1]){if (cout % 2 == 0){arr[x - 1][y - 1] = '*';}else{arr[x - 1][y - 1] = '#';}cout++;return 1;}else{printf("该位置已落棋!\n");return 0;}}
int full(char arr[ROW][COL]){int i, j;for (i = 0; i < 3; i++){for (j = 0; j < 3; j++){if ('\0' == arr[i][j]){return 0;}}}return 1;}int IS_win(char arr[ROW][COL]){int i;for (i = 0; i < ROW; i++){if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][0] != '\0') //第i+1排{return arr[i][0];}}for (i = 0; i < COL; i++){if (arr[0][i] == arr[1][i] && arr[0][i] == arr[2][i] && arr[0][i] != '\0') //第j+1排{return arr[0][i];}}if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[0][0] != '\0') // \排{return arr[0][0];}else if (arr[2][0] == arr[1][1] && arr[2][0] == arr[0][2] && arr[2][0] != '\0') // /排{return arr[2][0];}else if (full(arr)){return 1;}return 0;}void main_1(){char arr[3][3] = { 0 };int k=0;for (k=0;k<9;){game(arr);k+=move(arr);if ('*' == IS_win(arr)){game(arr);printf("甲方胜利!\n");break;}else if ('#' == IS_win(arr)){game(arr);printf("乙方胜利!\n");break;}else if (1 == IS_win(arr)){game(arr);printf("平局。\n");break;}}}头文件引用部分:
#ifndef CODE1_H_#define CODE1_H_#define ROW 3#define COL 3void game(char arr[ROW][COL]);void main_1();int move(char arr[ROW][COL]);int IS_win(char arr[ROW][COL]);#endif //code1.h运行结果: