C语言实现背包与商城的小项目
C语言实现背包商城的小项目
简介:
用C语言实现
1.账号登录(包括创建账号)
2.个人账号信息显示
3.背包操作
4.商城操作
5.背包升级
6.切换账号与退出游戏
源代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
结构体
1.商品结构-名称、单价、库存量、描述
2.角色结构-编号、名称、密码、金钱、点券(背包)
3.背包结构-角色编号、游戏道具(商品[])、道具数量
*/
typedef struct _thing
{
int id; //道具编号
char name[50]; //道具名称
double price; //单价
int exist; //道具数量
char desc[200]; //道具描述
}Thing;
typedef struct _bag
{
int playid; // 所属角色编号
int count; //背包道具数量
int max; //背包当前容量
Thing things[10]; //背包道具信息
}Bag;
typedef struct _people
{
int id; //角色编号
char name[20]; //角色名称
char password[20]; // 密码
Bag bag; //角色背包
double money; //金币
double turemoney; //点券,可用于解锁背包格子
}People;
//整体变量,方便更改
int m=13; //定义商城道具种类
int n=5; //定义角色数量
double p=100; //背包扩展所需点券
int q=10; //背包最大的容量
//新增账号
People people_chu[]={
{101,"白起","a1",{101,0,2},50000,300},
{102,"赵云","b2",{102,0,2},100000,200},
{103,"后羿","c3",{103,0,2},15000,100},
{104,"李白","d4",{104,0,2},60000,400},
{105,"孙尚香","e5",{105,0,2},70000,200}
};
//初始化商城道具
Thing thing_chu[]={
{1,"破晓",3400,2,"【被动】 唯一被动—破甲:+22.5%物理穿透(远程英雄使用时效果翻倍) 唯一被动:普通攻击伤害提升50点(远程英雄使用时效果翻倍)"},
{2,"无尽战刃",2140,5,"【属性】+ 120物理攻击,+20%暴击率 【被动】 唯一被动:+50%暴击效果"},
{3,"宗师之力",2100,6,"【属性】 物理攻击+60,暴击率+20%,最大法力+400,最大生命+400 【被动】 唯一被动—强击:使用技能后,2秒内提升自身8%移动速度,并使得下次普通攻击造成额外1.0*物理攻击的物理伤害,冷却时间2秒"},
{4,"纯净苍穹",2230,4,"【属性】+40%攻击速度,+20%暴击率 【被动】 唯一被动—精准:普通攻击附带60点物理伤害;唯一被动—驱散:90秒CD,受到的所有伤害降低50%,持续1.5秒,可以在被控制时使用"},
{5,"制裁之刃",1800,7,"【属性】 +100物理攻击,+10%物理吸血 【被动】 唯一被动—精准:普通攻击附带60点物理伤害;唯一被动—重伤:造成伤害使得目标的生命恢复效果减少50%,持续1.5秒(如果该伤害由普攻触发,则持续时间延长至3秒)"},
{6,"末世",2160,6,"【属性】+ 60物理攻击,+30%攻击速度,+10%物理吸血 【被动】 唯一被动—破败:普通攻击附带敌人当前生命值8%的物理伤害(对野怪最多80)"},
{7,"名刀司命",1760,10,"【属性】+ 60物理攻击,+5%冷却缩减 【被动】 唯一被动—暗幕:免疫致命伤并免疫伤害,增加20%移动速度持续1秒近战/0.5秒远程,90秒冷却"},
{8,"碎星锤",2100,8,"属性】+ 80物理攻击,+10%冷却缩减 【被动】 唯一被动:+45%物理护甲穿透"},
{9,"泣血之刃",1740,8,"【属性】+ 100物理攻击,+25%物理吸血"},
{10,"破军",2950,3,"【属性】+ 200物理攻击 【被动】 唯一被动—破军:目标生命低于50%时伤害提高30%"},
{11,"闪电匕首",1840,5,"【属性】+ 30%攻击速度,+20%暴击率,+8%移速 【被动】 唯一被动—电弧:普通攻击有30%几率释放连锁闪电,对目标造成100+0.3AD法术伤害"},
{12,"影刃",2070,6,"【属性】+ 40%攻击速度,+20%暴击率,+5%移速 【被动】 唯一被动—暴风:暴击后提升自身30%攻击速度和10%移动速度,持续2秒"},
{13,"暗影战斧",2090,6,"【属性】+ 85物理攻击,+15%冷却缩减,+400最大生命【被动】 唯一被动—残废:普通攻击有30%几率降低敌人20%移动速度,持续2秒唯一被动—切割:增加(50+英雄等级*10)点护甲穿透"}
};
//显示商城道具
void show_thing() //初始化道具函数
{
int i;
printf("========================================================================================================================\n");
printf("编号\t名称 \t单价 \t库存量\t描述\n");
for(i=0;i<m;i++)
printf("%-4d\t%-8s\t%-8.2lf\t%-6d\t%-s\n",thing_chu[i].id,thing_chu[i].name,thing_chu[i].price,thing_chu[i].exist,thing_chu[i].desc);
printf("========================================================================================================================\n");
}
//显示所拥有角色信息
void show_player(mn1)
{
int i;
printf("========================================================================================================================\n");
printf("编号 \t角色 \t密码 \t金币 \t点券\n");
if(mn1<5)
printf("%-10d\t%-10s\t%-10s\t%-10.2lf\t%-10.2lf\n",people_chu[mn1].id,people_chu[mn1].name,people_chu[mn1].password,people_chu[mn1].money,people_chu[mn1].turemoney);
else
{ for(i=0;i<n;i++)
printf("%-10d\t%-10s\t%-10s\t%-10.2lf\t%-10.2lf\n",people_chu[i].id,people_chu[i].name,people_chu[i].password,people_chu[i].money,people_chu[i].turemoney);
}
printf("========================================================================================================================\n");
}
//显示背包信息
void show_bag(int player_id)
{
int i=player_id;
int j;
printf("========================================================================================================================\n");
printf("角色编号\t道具总数量\t最大容量\n");
printf("%-10d\t%-10d\t%-10d\n",people_chu[i].bag.playid,people_chu[i].bag.count,people_chu[i].bag.max);
printf("========================================================================================================================\n");
printf("拥有道具\t道具数量\t描述\n");
for(j=0;j<people_chu[i].bag.count;j++)
{
printf("%-10s\t%-4d\t%-s\n",people_chu[i].bag.things[j].name,people_chu[i].bag.things[j].exist,people_chu[i].bag.things[j].desc);
printf("========================================================================================================================\n");
}
}
//创建账号
void chuanjian()
{
void menu1();
char userName[25];
char passWord[25];
getchar();
printf("用户名:");
gets(userName);
printf("密码:");
gets(passWord);
n++;
printf("创建成功!\n");
people_chu[n-1].id=100+n;
strcpy(people_chu[n-1].name,userName);
strcpy(people_chu[n-1].password,passWord);
people_chu[n-1].money=0;
people_chu[n-1].turemoney=0;
menu1();
}
//登录账号
void denglu()
{
int mn=-1;
int i;
void menu1();
int login(char user_Name[],char pass_Word[]);
char userName[20];
char passWord[20];
getchar();
printf("用户名:");
gets(userName);
printf("密码:");
gets(passWord);
for(i=0;i<n;i++)
{
if((strcmp(userName,people_chu[i].name)==0)&&(strcmp(passWord,people_chu[i].password)==0))
{
mn++;
if(mn>=0)
{
printf("---------------------登录成功--------------------------\n");
if(n>=6)
{
printf("系统送您5个角色账号,请注意查收!\n");
menu2(i);
}
else
menu2(i);
}
}
}
if(mn==-1)
{
printf("------------------用户名或密码错误---------------------\n");
menu1();
}
}
//购买道具函数
void buy_thing(int player_id)
{
int i;
int thing_id;
show_thing();
printf("请选择您想要购买的道具编号:");
scanf("%d",&thing_id);
for(i=0;i<m;i++)
{
if(i+1==thing_id)
{
if(people_chu[player_id].money<thing_chu[i].price)
printf("金币不足!无法购买,请赚取足够金币再来!\n");
else if((people_chu[player_id].bag.max-people_chu[player_id].bag.count)==0)
printf("背包空间不足!无法购买,请扩展背包后再来!\n");
else if(thing_chu[i].exist==0)
printf("商城库存不足!无法购买该道具!\n");
else
{
printf("恭喜你,成功购买%s!\n",thing_chu[i].name);
people_chu[player_id].money=people_chu[player_id].money-thing_chu[i].price;
people_chu[player_id].bag.count++;
thing_chu[i].exist--;
strcpy(people_chu[player_id].bag.things[people_chu[player_id].bag.count-1].name,thing_chu[i].name);
people_chu[player_id].bag.things[people_chu[player_id].bag.count-1].exist++;
strcpy(people_chu[player_id].bag.things[people_chu[player_id].bag.count-1].desc,thing_chu[i].desc);
}
}
}
}
//背包扩展
void bag_add(int player_id)
{
if(people_chu[player_id].turemoney<p)
printf("点券不足!无法扩展背包!\n");
else if(people_chu[player_id].bag.max>q)
printf("背包已到达最大容量!无法扩容!\n");
else
{
printf("恭喜您!背包扩容成功!\n");
people_chu[player_id].turemoney-=p;
people_chu[player_id].bag.max++;
printf("当前背包容量为%d\n",people_chu[player_id].bag.max);
}
}
//菜单一
void menu1()
{
int mn;
int mingling;
printf("====================================================\n");
printf("= 1.账号登录 =\n");
printf("= =\n");
printf("= 2.创建账号 =\n");
printf("====================================================\n");
printf("请选择操作:");
scanf("%d",&mingling);
if(mingling==1)
{
denglu();
}
else if(mingling==2)
chuanjian();
else
{
printf("输入命令不合法!请重新输入!\n");
menu1();
}
}
//菜单二
void menu2(int mn2)
{
void gameover();
int mingling;
while(1)
{
printf("====================================================\n");
printf("= 1.账号信息 =\n");
printf("= 2.个人背包 =\n");
printf("= 3.商城 =\n");
printf("= 4.购买道具 =\n");
printf("= 5.背包扩容 =\n");
printf("= 6.切换账号 =\n");
printf("= 7.退出游戏 =\n");
printf("====================================================\n");
printf("请输入命令:\n");
scanf("%d",&mingling);
switch(mingling)
{
case 1 :
{
show_player(mn2);
system("pause");
break;
}
case 2 :
{
show_bag(mn2);
system("pause");
break;
}
case 3 :
{
show_thing();
system("pause");
break;
}
case 4 :
{
buy_thing(mn2);
system("pause");
break;
}
case 5 :
{
bag_add(mn2);
system("pause");
break;
}
case 6 :
{
menu1();
}
case 7 :
{
gameover();
break;
}
default :
{
printf("错误命令!请重新选择\n");
break;
}
}
}
}
//游戏结束函数
void gameover()
{
printf("============================================================================\n");
printf("=============================GAME OVER ================================\n");
printf("============================================================================\n");
exit(0);
}
//主函数
void main()
{
menu1();
}
运行部分图
执行文件
链接:https://pan.baidu.com/s/1ts-dG8e2HgQlm3CBGNRp6Q
提取码:0tme
谢谢大家!