您的位置:首页 > 编程语言 > C语言/C++

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
运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: