1. 程式人生 > >C語言完成成語接龍小遊戲

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()函式中!