C语言完成成语接龙小游戏

用C语言实现成语接龙小游戏(新手上路,大神勿喷)

1、首先需要找到一个成语库(从网上下载即可,保存为.txt文件)
2、整体思路如下
由于要用的成语保存在文件里,一边用一边读取会降低代码的效率,所以我们首先建立一个二维动态数组,将文件里的成语读取到二维数组里。首先让用户输入第一个成语,先遍历一遍成语库里的成语,查看成语库里是否包含此成语,若不存在则默认用户输入的不是成语,输出“Your input is not a idiom”,程序结束。如果成语库有该成语,则电脑从成语库里接出下一个成语,然后再由用户接成语,循环往复,一直到用户接的成语最后一字成语库里没有以该字开头的成语,则输出:“YOU WIN!”,程序结束;如果用户接不出电脑输出的成语,则输出:“You fail!”
3、流程图如下:
网上画流程图的软件很多,Edraw,Visio等都比较好用
4、实现代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 30
int main()
{
	FILE *fp;
	int i,flag = 0,t,Y=1,flag1=0;
	int n1 = 20432 , n2 = MAX , j ;
	char buf1[MAX],buf2[MAX],**array;
	
	array = (char **)malloc(n1*sizeof(char *)); 
	fp = fopen("文件保存路径(如:F:\\Linux_report\\idiom.txt)","r");
	if(NULL == fp)
	{
		printf("File open fail\n");
	}
	for(i = 0 ; i < n1 ; i++)
	{
		array[i] = (char *)malloc(n2*sizeof(char));
		fscanf(fp,"%s",array[i]);
	}
	for(i = 0 ; !feof(fp) ; i++)
	{
		fscanf(fp,"%s",array[i]);
	}
	while(Y==1)
	{
		printf("Please input an idiom:\n");
	scanf("%s",buf1);
	for(i = 0 ; i < 20432 ; i++)
	{	
		if(!(strcmp(buf1,array[i])))
		{
			flag = 1;
			break;
		}
	}
	if(flag==0)
	{
		printf("Your input is not a idiom\n"); 
		return 0;
	}
	strcpy(buf2,buf1);
	while(1)
	{
		flag = 0 ;
		flag1 = 0 ;
		for(i = 0 ; i < 20431 ; i++)
	{	
		if((buf2[6]==array[i][0])&&(buf2[7]==array[i][1])&&(array[i][10]!='*'))
		{
			flag1 = 1 ;
			printf("%s\n",array[i]);
			strcpy(buf2,array[i]);
			array[i][10] = '*' ;
			break;
		}
	}
	if(flag1 == 0)
	{
		printf("YOU WIN!");
		return 0;
	}
		printf("Please input an idiom:\n");
		scanf("%s",buf1);
		
		for(i = 0 ; i < 20432 ; i++)
	{	
		if(!(strcmp(buf1,array[i])))
		{
			flag = 1;
			break;
		}
	}
		if(flag==0)
	{
		printf("Your input is not an idiom\n"); 
		return 0;
	}
		
		if((buf1[0]!=buf2[6])||(buf1[1]!=buf2[7]))
		{
			printf("You fail!");
			return 0 ;
		}
		else
		strcpy(buf2,buf1);	
	}
	}
	free(array[i]);
	free(array); 
	return 0;
}

注:代码运行时确保电脑已有正确的成语库,并把路径赋给fopen()函数中!

猜你喜欢

转载自blog.csdn.net/nthzduang_/article/details/83963709