前言:本人为C语言初学者,学识尚浅,研究程度存在很大的局限性,眼界很窄。以下所有观点仅代表个人见解和思路,各位游刃有余的前辈可以给予批评和指正!各位与鄙人同路的学子可相互探讨、发表看法,交换观点!
首先,我想说的是,一旦开始一个小项目,就必须具备大局观。清楚的明白每个函数要干什么,放在哪里,先画好框架,再来堆砌堡垒,这是非常重要的!走一步看一步的方法必然会带来很多麻烦!(不要问我为什么知道)
如果我们要实现三子棋,最开始,我们起码要规划三片地:
1.main.c - 用来实现主函数
2.game.c - 实现游戏内部的一些功能
3.game.h - 用来存放函数的声明、库函数头文件等
一.main.c
首先我们要知道,在这里需要实现什么。用户打开你的程序,需要知道你整个程序是干什么的,所以这个责任必须由它承担,起码我们需要给一个交互界面,然后让用户选择,至于函数的调用,可以放一放。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void menu()
{
printf("**********************\n");
printf("****** 1.play ******\n");
printf("****** 2.exit ******\n");
printf("**********************\n");
}
int main()
{
menu();
return 0;
}
我们暂且打印一个菜单,让用户有选择。这个时候我们就要创建一个变量来接收用户输入的值了,然后我们再根据值来判断用户的目的,来做出相应的举动。
但是这个出现一个问题:如果用户完成了游戏,我们要继续给用户一次选择。就好比你打英雄联盟,一局结束了,你可以再次选择开始游戏或者退出游戏。所以我们必然要添加一个循环。
int main()
{
int input = 0;
do
{
menu();
printf("请输入您的选项:");
scanf("%d", &input);
} while ();
return 0;
}
这里用了dowhile,因为无论如何你都要先运行一次程序,然后再判断是否运行,所以dowhile是非常吻合的。但正当我们准备写判断的时候,问题来了:while();这里需要判断,用户的选择也要判断,就不能找个简单的方法解决吗?
确实有!我们把菜单里的 2.exit 改成 0.exit,这样如果用户选择0,我们把input放在while();里就可以直接退出,不用多写判断!menu内容修改如下:
void menu()
{
printf("**********************\n");
printf("****** 1.play ******\n");
printf("****** 0.exit ******\n");
printf("**********************\n");
}
对于用户的选择,有三种可能:
1.选择1,开始游戏
2.选择0,退出游戏
3.选择1和0以外的数字,需要让用户重新输入
面对这种选择环境,不妨用switch
int main()
{
int input = 0;
do
{
menu();
printf("请输入您的选项:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("三子棋游戏开始!\n");
break;
case 0 :
printf("游戏结束,程序退出!\n");
break;
default:
printf("您输入的值非法,请重新输入!\n");
break;
}
} while (input);
return 0;
}