大富豪
根据每天的商品价格选择卖出买入!
给你1万元,30天后你会成为最富有的人吗?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <Windows.h>
#include <time.h>
typedef struct {
char name[20];//名称
int count;//数量
float price;//单价
}Goods;//商品
typedef struct {
Goods g[10];
int gnum;//商品数量
char name[20];//玩家姓名
float money;//余额
}Player;
void initAll(Player* player);
int menu();
void help();
void saveRecord(Player* player);
void printRecord();
void sortRecord(Player p[],int n);
void swap(Player p[],int i,int j);
void outputRecord(Player p[],int n);
void startGame(Player* player,Goods goods[],int n);
void PrintNowInfo(Player* player,Goods goods[],int n,int day);//输出当天玩家及商品信息
void BuyGoods(Player* player,Goods goods[],int n);
void SaleGoods(Player* player,Goods goods[],int n);
void setGoods(Goods goods[],int n);
void totalMoney(Player* player,Goods goods[],int n);
void totalMoney(Player* player,Goods goods[],int n)
{
int no,count,i;
while(player->gnum!=0)
{
for(i=0;i<n;i++)
{
if(!strcmp(player->g[player->gnum-1].name,goods[i].name))
{
break;
}
}
player->money+=player->g[player->gnum-1].count*goods[i].price;
player->gnum--;
}
printf("您的总资产为:%.2f\n",player->money);
system("pause");
}
void setGoods(Goods goods[],int n)
{
int i,j,rate;
for(i=0;i<n;i++)
{
j=rand()%3;//0-1涨价 2降价
if(j==2)
{
rate = rand()%10+1;
goods[i].price*=(1-rate/100.0);//减少在1/10
}
else
{
rate = rand()%20;
goods[i].price*=(1+rate/100.0);//涨幅在1/5
}
}
}
void SaleGoods(Player* player,Goods goods[],int n)
{
int no,count,i;
printf("请选择要售卖的商品编号:");
scanf("%d",&no);
if(no<1||no>player->gnum)
{
printf("无该编号!\n");
system("pause");
return;
}
printf("请输入要售卖的商品数量:");
scanf("%d",&count);
if(player->g[no-1].count<count)
{
printf("商品余量不足!\n");
system("pause");
return;
}
for(i=0;i<n;i++)
{
if(!strcmp(player->g[no-1].name,goods[i].name))
{
break;
}
}
player->money+=count*goods[i].price;
player->g[no-1].count-=count;
goods[i].count+=count;
if(player->g[no-1].count==0)//库存为0 需要删除
{
for(i=no-1;i<player->gnum;i++)
{
player->g[i]=player->g[i+1];
}
player->gnum--;
}
printf("售卖成功!\n");
system("pause");
}
void BuyGoods(Player* player,Goods goods[],int n)
{
int no,count,i,flag;
printf("请选择要购买的商品编号:");
scanf("%d",&no);
if(no<1||no>n)
{
printf("无该编号!\n");
system("pause");
return;
}
printf("请输入要购买的商品数量:");
scanf("%d",&count);
if(goods[no-1].count<count)
{
printf("商品余量不足!\n");
system("pause");
return;
}
if(goods[no-1].price*count>player->money)
{
printf("余额不足!\n");
system("pause");
return;
}
player->money-=goods[no-1].price*count;
flag=0;
for(i=0;i<player->gnum;i++)
{
if(!strcmp(player->g[i].name,goods[no-1].name))
{
player->g[i].count+=count;
flag=1;
break;
}
}
if(flag==0)
{
i=player->gnum;
player->g[i].count=count;
goods[no-1].count-=count;
strcpy(player->g[i].name,goods[no-1].name);
player->gnum++;
}
printf("购买成功!\n");
system("pause");
}
void startGame(Player* player,Goods goods[],int n)
{
int day=1;
int choice;
do
{
PrintNowInfo(player,goods,n,day);
printf("1:购买商品\t2:售卖商品\t3:下一天\n");
printf("请选择:");
scanf("%d",&choice);
if(choice==3)
{
day++;
if(day<30)
setGoods(goods,n);//更新商品信息
}
else if(choice==1)
{
BuyGoods(player,goods,n);
}
else if(choice==2)
{
SaleGoods(player,goods,n);
}
}while(day<=30);
totalMoney(player,goods,n);
}
void PrintNowInfo(Player* player,Goods goods[],int n,int day)
{
int i,j;
system("cls");
printf("今天是第%d天\n",day);
printf("%-10s%-10s%-10s%-10s\n","编号","商品","数量","单价");
for(i=0;i<n;i++)
{
printf("%-10d%-10s%-10d%-10.2f\n",i+1,goods[i].name,goods[i].count,goods[i].price);
}
printf("玩家剩余金钱:%.2f\n",player->money);
printf("玩家拥有货物:\n");
printf("%-10s%-10s%-10s\n","编号","商品","数量");
for(i=0;i<player->gnum;i++)
{
printf("%-10d%-10s%-10d\n",i+1,player->g[i].name,player->g[i].count);
}
}
int menu()
{
int choice;
system("cls");
printf("1:开始游戏\n");
printf("2:游戏说明\n");
printf("3:富豪排行榜\n");
printf("4:退出游戏\n");
printf("请输入选择:");
scanf("%d",&choice);
while(choice<1||choice>4)
{
printf("请重新选择:");
scanf("%d",&choice);
}
return choice;
}
int main()
{
int choice;
Player player;
Goods goods[10]={
{"土豆",1000,5},
{"地瓜",800,8},
{"龙虾",100,12},
{"鱼",80,15},
{"大米",1000,3},
{"西瓜",600,2},
{"猪肉",200,15},
{"电脑",10,8000},
{"洗衣机",20,2000}
};
int goodsnum=9;
do
{
choice=menu();
switch(choice)
{
case 1:
srand(time(NULL));
initAll(&player);
startGame(&player,goods,goodsnum);
saveRecord(&player);
break;
case 2:help();break;
case 3:printRecord();break;
}
}while(choice!=4);
return 0;
}
void outputRecord(Player p[],int n)
{
int i;
system("cls");
printf("%-6s%-10s%-10s\n","名次","姓名","财富");
for(i=0;i<n;i++)
{
printf("%-6d%-10s%-10.2f\n",i+1,p[i].name,p[i].money);
}
system("pause");
}
void swap(Player p[],int i,int j)
{
Player t;
t=p[i];
p[i]=p[j];
p[j]=t;
}
void sortRecord(Player p[],int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(p[i].money<p[j].money)
{
swap(p,i,j);
}
}
}
}
void printRecord()
{
Player p[100];
int n=0;
FILE* fp=fopen("record.txt","r+");
if(fp==NULL)
{
printf("无历史记录!\n");
system("pause");
return;
}
fscanf(fp,"%s%f",p[n].name,&p[n].money);
while(!feof(fp))
{
n++;
fscanf(fp,"%s%f",p[n].name,&p[n].money);
}
sortRecord(p,n);
outputRecord(p,n);
fclose(fp);
}
void saveRecord(Player* player)
{
FILE* fp=fopen("record.txt","a+");
if(fp==NULL)return;
fprintf(fp,"%s %f\n",player->name,player->money);
fclose(fp);
}
void help()
{
system("cls");
printf("大富豪:\n");
printf("根据每天的商品价格选择卖出买入!\n");
printf("给你1万元,30天后你会成为最富有的人吗?\n");
system("pause");
}
void initAll(Player* player)
{
system("cls");
printf("请输入玩家姓名:");
scanf("%s",player->name);
printf("游戏即将开始!\n");
player->gnum=0;
player->money=10000;
system("pause");
}