C语言是世界上运行速度最快的高级语言,但缺点是过于繁琐而且贴近底层,导致门槛很高。
这篇文章会教你使用C语言写一个最简单的文字游戏,可能需要其它高级语言基础。
初始化
首先需要导入两个库,stdio
和string
,后面会用到。
使用include
语句导入库。
#include<stdio.h>
#include<string.h>
然后,定义一个空的字符串变量,用来接应输入。
#include<stdio.h>
#include<string.h>
char select[0]={};
最后,再写一个main
函数作为实际运行的地方,初始化完成。
#include<stdio.h>
#include<string.h>
char select[0]={};
int main(){
//程序在这里运行
}
输入与输出
文字游戏是离不开文字的,使用stdio
的printf
函数可以打印文字。
#include<stdio.h>
#include<string.h>
char select[0]={};
int main(){
printf("这里是文字游戏测试\n");
}
其中的\n
是转义符,可以使下一段文字换行。
如果有输出,还需要有输入,scanf
函数可以获取键盘输入,并存放在一个变量中。
在scanf
输入任何字符后,都会执行下一条语句,需要注意的是,只输入空白会没有任何反应。
#include<stdio.h>
#include<string.h>
char select[0]={};
int main(){
printf("这里是文字游戏测试\n");
scanf("%s",&select);
printf("你可以输入任意字符继续,除了空白\n");
scanf("%s",&select);
printf("现在,请选择\n");}
循环与判断
文字游戏要有互动,玩家可以自由地选择如何行动,实现这种功能需要判断。
判断语句有:if
、else if
、else
等。
C语言的字符串无法直接使用运算符比较,需要使用string
的!strcmp
函数。
#include<stdio.h>
#include<string.h>
char select[0]={};
int main(){
printf("这里是文字游戏测试\n");
scanf("%s",&select);
printf("你可以输入任意字符继续,除了空白\n");
scanf("%s",&select);
printf("现在,请选择\n");
printf(">A<一个选项\n");
printf(">B<另一个选项\n");
scanf("%s",&select);
if(!strcmp(select,"A")){
printf("这里将显示A的剧情\n");
return 0;
}else if(!strcmp(select,"B")){
printf("这里将显示B的剧情\n");
return 0;
}else{
printf("无效输入\n");
}}
但是这样会出现一个问题,如果玩家输入了A与B以外的字符,游戏告知“无效输入”后就自动退出了,可以使用循环语句while
等避免这种情况。
#include<stdio.h>
#include<string.h>
char select[0]={};
int main(){
printf("这里是文字游戏测试\n");
scanf("%s",&select);
printf("你可以输入任意字符继续,除了空白\n");
scanf("%s",&select);
printf("现在,请选择\n");
while(1){
printf(">A<一个选项\n");
printf(">B<另一个选项\n");
scanf("%s",&select);
if(!strcmp(select,"A")){
printf("这里将显示A的剧情\n");
return 0;
}else if(!strcmp(select,"B")){
printf("这里将显示B的剧情\n");
return 0;
}else{
printf("无效输入\n");
}
}
}
完成
至此,全程序完成。
你好,你最后一个代码文本的片段存在一些问题:
1、初始化select数组为1个元素,但在后面的scanf操作中用%s来读取用户输入,%s是可以接受一个字符串输入的,因此这样的输入方式并不安全,比如如果用户输入一个字符串,则将select后面的地址内容全部覆盖了;
2、另外,select数组的定义应该在任何一个模块里面,你必须知道任何一个变量在运行时都是需要入栈的,因此对于非常量而言,将其放在main函数外面是错误的;
3、while循环中的条件判断语句的第三个语句,你没有加返回语句:return 0;
4、while循环外面也没有放return 0;
1、这个应该是涉及到底层原理了,我没有钻研这块地方,但是在别的编程语言应该不会有这种现象。
2、把变量放在外面是为了跨越函数,当成全局变量,如果只放在
main
函数里,别的函数就不知道这个变量的存在,对于模块化编程不利。3、
else
的作用就是让玩家重新输入,加return 0
会退出游戏。4、如果已经进入了循环,加
return 0
就没有意义了。你甚至仔细看了