作者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
1F:→ tsaiminghan:fseek都给了,上网查一下用法吧。 04/04 23:09
2F:→ a1013944:查了 无头绪>< 04/04 23:10
3F:→ tsaiminghan:我查了一下,fseek是改变读取的位置 04/04 23:43
4F:推 TroyLee:用口水补那半瓶水 04/04 23:43
5F:→ tsaiminghan:或许助教是想要loop把资料一笔一笔列出来? 04/04 23:45
6F:→ tsaiminghan:不过觉得这方法太烂了,应该不是想这样用吧 04/04 23:47
7F:推 typeotoco:可是学程式就是要一直找资料 04/05 00:05
8F:→ tsaiminghan:试了一下fseek改变位之後,写下去的话,会把原来资料 04/05 00:12
9F:→ tsaiminghan:盖掉,所以不能插入资料,我看还是每次记录的时候 04/05 00:13
10F:→ tsaiminghan:就开新档->把此次资料写入正确位置->存档->把旧档砍了 04/05 00:15
11F:→ tsaiminghan:新档改名,让档案一直保持排序的状态比较方便 04/05 00:16
12F:→ tsaiminghan:补一下,先读旧档->新资料在正确的时候加到新档中-> 04/05 00:17