[問題] 又是遊戲

看板C_and_CPP (C/C++)作者 (ㄚ春)時間16年前 (2009/04/04 23:06), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/1
真的事麻煩各位大大了~~ 小弟的春假完全貢獻給程式設計了 無奈 時間不多 學程設真的好需要時間 可是偏偏主科有4科@@ #include <stdio.h> #include <stdlib.h> #include<time.h> #include<string.h> void history_brd(int w_t,int l_t,double p);//寫入排行榜 void view_history();//讀出排行榜 void game(int w_t,int l_t) { //int w_t=0;int l_t=0; char history,brd_choice; int x; float p; do{ int s; int w=0,l=0,n1; printf("請輸入你要的局數(一場)\n"); scanf("%d",&n1); n1=(n1+1)/2; do{ srand(time(NULL)); int n=rand()%3+1; printf("%d",n); printf("(1剪刀 (2石頭 (3布\n"); printf("請輸入你的選擇\n"); scanf("%d",&s); if(n==1&&s==1) { printf("你出剪刀!!\n"); printf("電腦出剪刀\n"); printf("平手唷!!!\n"); } else if(n==1&&s==2) { printf("你出石頭!!\n"); printf("電腦出剪刀\n"); printf("你贏囉!!\n"); w=w+1; } else if(n==1&&s==3) { printf("你出布\n"); printf("電腦出剪刀\n"); printf("你輸囉!!!\n"); l=l+1; } else if(n==2&&s==2) { printf("你出石頭!!\n"); printf("電腦出石頭\n"); printf("平手唷!!!\n"); } else if(n==2&&s==1) { printf("你出剪刀!!\n"); printf("電腦出石頭\n"); printf("你輸囉!!\n"); l=l+1; } else if(n==2&&s==3) { printf("你出布!!\n"); printf("電腦出石頭\n"); printf("你贏囉!!!\n"); w=w+1; } else if(n==3&&s==3) { printf("你出布!!\n"); printf("電腦出布\n"); printf("平手唷!!!\n"); } else if(n==3&&s==2) { printf("你出石頭!!\n"); printf("電腦出布\n"); printf("你輸囉!!\n"); l=l+1; } else if(n==3&&s==1) { printf("你出剪刀!!\n"); printf("電腦出布\n"); printf("你贏囉!!!\n"); w=w+1; } }while( w<n1 && l<n1); if(w==n1) { printf("你贏了此場\n"); w_t=w_t+1; } else if(l==n1) { printf("你輸了此場\n"); l_t=l_t+1; } printf("想繼續玩請按1\n"); scanf("%d",&x); printf("你目前的戰績為%d勝%d敗\n",w_t,l_t); }while(x==1); p=(w_t/(l_t+w_t))*100; printf("你的最終戰績為%d勝%d敗勝率%6f\n",w_t,l_t,p); printf("\n是否要加入歷史排行榜?(y/n)"); fflush(stdin); scanf("%c",&history); if(history == 'y') { history_brd( w_t, l_t,p); printf("是否觀看歷史排行榜 ? (y/n)"); fflush(stdin); scanf("%c",&brd_choice); if(brd_choice == 'y') { view_history(); } } system("pause"); } void new_player() { char name[99]; printf("請輸入你的名子"); scanf("%s",&name[99]); } int main() { int s1; printf("歡迎來到猜拳遊戲\n"); printf("請輸入你的選擇\n"); printf("(1.進入遊戲(2.載入遊戲(3.觀看排行榜\n"); scanf("%d",&s1); if(s1==1) { new_player(); int w_t=0; int l_t=0; game( w_t,l_t); } /*if(s1==2) { }*/ if(s1==3) { view_history() ; } system("pause"); return 0; } void history_brd(int w_t,int l_t,double p) { FILE *out; char name[50]; time_t timep; time (&timep); out = fopen("board.bin","a+"); printf("\n請輸入你的姓名 : "); scanf("%s",name); fprintf(out,"%s總共在猜拳遊戲中%d勝%d敗勝率%f時間 %s",name,w_t,l_t,p,ctime(&timep)); fclose(out); } void view_history() { char list[200]; FILE *inp; inp = fopen("board.bin","a+"); system("cls"); while(fscanf(inp,"%s", &list) != EOF) { printf("%s\n",list); memset(list,0,sizeof(char)*200); fgets(list,199,inp); printf("%s\n",list); } fclose(inp); system("pause"); } 這個是我目前作業的半完成品 助教說在排行榜要依勝率排行(就是小弟的變數P) 助教有提示跟fseek有關..... 小弟不才 不會用 有好心人可以提示一下 或者教一下嘛 ---------------------------------------------------- 對程設來說我就像塊海綿 助教倒了半瓶水 可是偏偏要我擠出一杯水 我該如何是好 ---------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.172.97.92

04/04 23:09, , 1F
fseek都給了,上網查一下用法吧。
04/04 23:09, 1F

04/04 23:10, , 2F
查了 無頭緒><
04/04 23:10, 2F

04/04 23:43, , 3F
我查了一下,fseek是改變讀取的位置
04/04 23:43, 3F

04/04 23:43, , 4F
用口水補那半瓶水
04/04 23:43, 4F

04/04 23:45, , 5F
或許助教是想要loop把資料一筆一筆列出來?
04/04 23:45, 5F

04/04 23:47, , 6F
不過覺得這方法太爛了,應該不是想這樣用吧
04/04 23:47, 6F

04/05 00:05, , 7F
可是學程式就是要一直找資料
04/05 00:05, 7F

04/05 00:12, , 8F
試了一下fseek改變位之後,寫下去的話,會把原來資料
04/05 00:12, 8F

04/05 00:13, , 9F
蓋掉,所以不能插入資料,我看還是每次記錄的時候
04/05 00:13, 9F

04/05 00:15, , 10F
就開新檔->把此次資料寫入正確位置->存檔->把舊檔砍了
04/05 00:15, 10F

04/05 00:16, , 11F
新檔改名,讓檔案一直保持排序的狀態比較方便
04/05 00:16, 11F

04/05 00:17, , 12F
補一下,先讀舊檔->新資料在正確的時候加到新檔中->
04/05 00:17, 12F
文章代碼(AID): #19rtTeO1 (C_and_CPP)
文章代碼(AID): #19rtTeO1 (C_and_CPP)