C語言完成成語接龍小遊戲
阿新 • • 發佈:2018-11-14
用C語言實現成語接龍小遊戲(新手上路,大神勿噴)
1、首先需要找到一個成語庫(從網上下載即可,儲存為.txt檔案)
2、整體思路如下
由於要用的成語儲存在檔案裡,一邊用一邊讀取會降低程式碼的效率,所以我們首先建立一個二維動態陣列,將檔案裡的成語讀取到二維數組裡。首先讓使用者輸入第一個成語,先遍歷一遍成語庫裡的成語,檢視成語庫裡是否包含此成語,若不存在則預設使用者輸入的不是成語,輸出“Your input is not a idiom”,程式結束。如果成語庫有該成語,則電腦從成語庫裡接出下一個成語,然後再由使用者接成語,迴圈往復,一直到使用者接的成語最後一字成語庫裡沒有以該字開頭的成語,則輸出:“YOU WIN!”,程式結束;如果使用者接不出電腦輸出的成語,則輸出:“You fail!”
3、流程圖如下:
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()函式中!