C语言小游戏-寻宝(幸运之星)

寻宝游戏

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>

typedef struct
{
	char name[20];//姓名
}Player;//玩家

typedef struct
{
	char name[20];//奖品
	float price;//价格
}Price;//奖品

typedef struct
{
	Player a;//获奖的玩家
	Price b[3];//获奖的三件奖品
}Record;//奖品

int LoadPlayer(Player a[])//加载玩家信息
{
	int i=0;
	FILE* fp;//文件指针
	fp=fopen("player.txt","r+");//打开文件
	if(fp==NULL)return 0;//打开失败返回0
	while(!feof(fp))//读取信息到文件结束
	{
		fscanf(fp,"%s\n",a[i].name);
		i++;
	}
	fclose(fp);//关闭文件
	return i;//返回读取到的玩家数量
}

void SavePlayer(Player a[],int n)//保存玩家信息
{
	int i;
	FILE* fp;
	fp=fopen("player.txt","w+");//打开文件
	if(fp==NULL)return ;
	for(i=0;i<n;i++)//根据玩家数量 循环写入文件
	{
		fprintf(fp,"%s\n",a[i].name);
	}
	fclose(fp);//关闭文件
}

int LoadPrice(Price a[])
{
	int i=0;
	FILE* fp;
	fp=fopen("price.txt","r+");
	if(fp==NULL)return 0;
	while(!feof(fp))
	{
		fscanf(fp,"%s %f\n",a[i].name,&a[i].price);
		i++;
	}
	fclose(fp);
	return i;
}

void SavePrice(Price a[],int n)
{
	int i;
	FILE* fp;
	fp=fopen("price.txt","w+");
	if(fp==NULL)return;
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%s %f\n",a[i].name,a[i].price);
	}
	fclose(fp);
}

int LoadRecord(Record a[])
{
	int i=0;
	FILE* fp;
	fp=fopen("record.txt","r+");
	if(fp==NULL)return 0;
	while(!feof(fp))
	{
		fscanf(fp,"%s %s %f %s %f %s %f\n",a[i].a.name,a[i].b[0].name,&a[i].b[0].price,a[i].b[1].name,&a[i].b[1].price,a[i].b[2].name,&a[i].b[2].price);
		i++;
	}
	fclose(fp);
	return i;
}

void SaveRecord(Record a[],int n)
{
	int i;
	FILE* fp;
	fp=fopen("record.txt","w+");
	if(fp==NULL)return;
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%s %s %f %s %f %s %f\n",a[i].a.name,a[i].b[0].name,a[i].b[0].price,a[i].b[1].name,a[i].b[1].price,a[i].b[2].name,a[i].b[2].price);
	}
	fclose(fp);
}


int menu()//菜单
{
	int choice;
	system("cls");
	printf("幸运之星\n");
	printf("1:开始游戏\n");
	printf("2:历史获奖\n");
	printf("3:添加玩家\n");
	printf("4:添加奖品\n");
	printf("0:退出\n");
	printf("请输入选择:");
	scanf("%d",&choice);
	return choice;
}

int AddPlayer(Player a[],int n)//增加玩家
{
	system("cls");
	printf("请输入新增加的玩家姓名:");
	scanf("%s",a[n].name);//添加到尾部
	printf("新增成功!\n");
	system("pause");
	return n+1;//玩家数量+1
}

int AddPrice(Price a[],int n)
{
	system("cls");
	printf("请输入新增加的奖品名称:");
	scanf("%s",a[n].name);
	printf("请输入新增加的奖品价格:");
	scanf("%f",&a[n].price);
	printf("新增成功!\n");
	system("pause");
	return n+1;
}

int StartGame(Player a[],int an,Price b[],int bn,Record r[],int rn)//开始游戏
{
	int i,k,now,j;
	int no[3];//奖品编号
	int arr[100]={0};
	srand(time(NULL));//设置随机数
	system("cls");
	if(an==0)//玩家数量为0
	{
		printf("本轮没有玩家!\n");
		system("pause");
		return rn;
	}
	if(bn==0)//奖品数量为0
	{
		printf("本轮没有奖品!\n");
		system("pause");
		return rn;
	}
	printf("本轮奖品为:\n");
	for(i=0;i<3;i++)//随机选择3个奖品
	{
		no[i]=rand()%bn;
		printf("奖品:%s\t价格:%.2f\n",b[no[i]].name,b[no[i]].price);
		strcpy(r[rn].b[i].name,b[no[i]].name);
		r[rn].b[i].price=b[no[i]].price;
	}
	for(i=0,now=0;i<an-1;i++)//循环人数-1次
	{
		do
		{
			k=rand()%6+1;//随机生成1-6
		}while(k>=an/2);
		for(j=0;j<k;)//走k步
		{
			if(arr[now]==0)//如果当前这个没有被淘汰
			{
				j++;//走一步
				now++;//到下一个人
			}
			else
			{
				now++;//不走 到下一个人
			}
			if(now>=an)now-=an;//超出最大范围 从0重新开始
		}
		arr[(now+an-1)%an]=1;//找到要淘汰的人
		printf("本轮色子为:%d\n",k);
		printf("本轮编号为%d的%s被淘汰!\n",(now+an-1)%an+1,a[(now+an-1)%an].name);
	}
	for(i=0;i<an;i++)//寻找最后一个没被淘汰的人 并且记录下来
	{
		if(arr[i]==0)
		{
			printf("恭喜编号为:%d的%s获得所有奖品!\n",i+1,a[i].name);
			strcpy(r[rn].a.name,a[i].name);
		}
	}
	system("pause");
	return rn+1;	
}

void History(Record r[],int n)//显示获奖记录
{
	int i;
	system("cls");
	if(n==0)
	{
		printf("无获奖记录!\n");
		system("pause");
		return;
	}
	printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","获奖人","奖品1","价格","奖品2","价格","奖品3","价格");
	for(i=0;i<n;i++)
	{
		printf("%-10s%-10s%-10.2f%-10s%-10.2f%-10s%-10.2f\n",r[i].a.name,r[i].b[0].name,r[i].b[0].price,r[i].b[1].name,r[i].b[1].price,r[i].b[2].name,r[i].b[2].price);
	}
	system("pause");
}

int main()
{
	int choice;
	Player p[100];
	int pn=LoadPlayer(p);//加载文件
	Price p2[100];
	int p2n=LoadPrice(p2);
	Record r[100];
	int rn=LoadRecord(r);
	do
	{
		choice=menu();
		switch(choice)
		{
		case 1:
			rn=StartGame(p,pn,p2,p2n,r,rn);
			break;
		case 2:
			History(r,rn);
			break;
		case 3:
			pn=AddPlayer(p,pn);
			break;
		case 4:
			p2n=AddPrice(p2,p2n);
			break;
		}
	}while(choice!=0);
	SavePlayer(p,pn);
	SavePrice(p2,p2n);
	SaveRecord(r,rn);//保存文件
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值