作者a1013944 (ㄚ春)
看板C_and_CPP
標題[問題] 又是遊戲
時間Sat Apr 4 23:06:15 2009
真的事麻煩各位大大了~~
小弟的春假完全貢獻給程式設計了
無奈 時間不多
學程設真的好需要時間
可是偏偏主科有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
→ tsaiminghan:fseek都給了,上網查一下用法吧。 04/04 23:09
→ a1013944:查了 無頭緒>< 04/04 23:10
→ tsaiminghan:我查了一下,fseek是改變讀取的位置 04/04 23:43
推 TroyLee:用口水補那半瓶水 04/04 23:43
→ tsaiminghan:或許助教是想要loop把資料一筆一筆列出來? 04/04 23:45
→ tsaiminghan:不過覺得這方法太爛了,應該不是想這樣用吧 04/04 23:47
推 typeotoco:可是學程式就是要一直找資料 04/05 00:05
→ tsaiminghan:試了一下fseek改變位之後,寫下去的話,會把原來資料 04/05 00:12
→ tsaiminghan:蓋掉,所以不能插入資料,我看還是每次記錄的時候 04/05 00:13
→ tsaiminghan:就開新檔->把此次資料寫入正確位置->存檔->把舊檔砍了 04/05 00:15
→ tsaiminghan:新檔改名,讓檔案一直保持排序的狀態比較方便 04/05 00:16
→ tsaiminghan:補一下,先讀舊檔->新資料在正確的時候加到新檔中-> 04/05 00:17