小游戏大概内容:
项目大体为: ①收养猫猫 ②和猫猫玩耍的小游戏 ③将部分信息实时记录至txt
实现手段:①结构体 链栈相关知识 ②文件操作 ③基础选择 循环 变量设置 判断等基本操作
主要思路:
①创造“猫猫”结构体存储 猫猫姓名 幸福度信息 并将最新情况存储与txt文档
②创造循环游戏
提供:
1.喂食猫猫 : 包括猫猫饿与不饿两种情况 和 三种不同食物以供选择 记录每只猫猫吃了每种食物多少次
2.摸摸猫猫 : 用随机数来实现小概率会被猫猫讨厌的功能 //并且随着好感度不同 猫猫表情也不同
3.收养猫猫等选项供玩家选择 :
4.查询猫猫各个信息 :将猫猫的信息输出
5.当且仅当玩家输入“0”时停止循环,即结束游戏
③每次在循环菜单时,设随机数和区间来使猫猫健康度 饱食度有所变化
④随着摸摸猫猫 猫猫的幸福度会提升或有小几率减少
//能完成尽量加的一点: 并且随着幸福度提升 猫猫会有不同的表情
txt文档收录信息:
注:实时刷新,先清空文档,再重新将信息录入 ;确保为最新信息
1.猫猫饱食度
2.猫猫幸福度
3.猫猫姓名
4.猫猫吃每个食物次数
5.猫猫总数
文件思路:
代码部分:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <string.h>
#define OK 1
#define ERROR 0
int total_cat=0;
char filename[]="cute_cat.txt";
//构建猫猫结构体类
typedef struct Cat
{
char name[20];
int favourat; //favourat【1,15】
int hugry; //hugry【0,10】
//三种食物吃了几次
int a;
int b;
int c;
//摸了几次猫猫
int d;
//被咬了几次
int e;
struct Cat *next;
// int ;
}Cat,*Catwhich;
Cat *cat;
//定义全局结构体 方便调用
struct Cat *cat2;
//初始化猫猫链栈
void Int_maomao(Catwhich &cat){
cat = (Cat*)malloc(sizeof(Cat));
cat=NULL;
}
//串联链栈
void Put_maomao(Catwhich &cat){
Cat *cat1;
cat1 = (Cat*)malloc(sizeof(Cat));
cat1->favourat=1;
cat1->hugry=1;
cat1->a=0;
cat1->b=0;
cat1->c=0;
cat1->d=0;
cat1->e=0;
scanf("%s",cat1->name);
cat1->next=cat;
cat=cat1;
}
//寻找想要一起玩的猫猫
void Searchmaomao(Catwhich &cat,Catwhich &cat1,char name[]){
Cat *head=cat;
int i=0;
while(head){
if(strcmp(head->name, name)==0){
i=1;
cat1=head;
break;
}
else head=head->next;
}
if(i==0) printf("未找到该猫猫!");
}
//输出目前所收养的猫猫
void Put_maomaoName(){
Cat *head=cat;
int i=1;
while(head!=NULL){
printf("\n %d. %s",i,head->name);
i++;
head=head->next;
}
}
//输出猫猫信息
void Put_data(Catwhich &cat1) {
printf("%s",cat1->name);
}
//废案
void Free_lianzhan(Catwhich &cat1){
while(cat1!=NULL){
}
free(cat1);
}
//清屏并按任意键以继续
void Clean1(){
printf("\n\n 按任意键以开始游戏......");
getch();
system("cls");
}
//开始界面
void StartGame(){
printf("\n\n\n\n 可爱猫猫");//6个tab位置
printf("\n\n 按任意键以开始游戏......");
getch();
system("cls");
printf("\n\n 你开了一家宠物店 专门收养无家可归的流浪猫猫");
printf("\n\n 按任意键以开始游戏......");
getch();
system("cls");
printf("\n\n 现在是工作时间 可以选择你的工作");
Clean1();
}
//菜单选项
void menu(){
printf("\n\n 以下为目前你可以操作的选项:");
//当收养的猫猫数不为零
if(total_cat!=0){
printf("\n 1.( .ω.)ノ摸摸猫猫");
printf("\n 2.给猫猫喂食");
printf("\n 3.出门收留流浪猫");
printf("\n 4.输入0以退出游戏......");
printf("\n\n\n 请输入所对应的数字以进行相应操作......");
}
//当收养的猫猫数为零
else
{
printf("\n 您暂时没有收养流浪猫,请出门搜寻!");
printf("\n 请输入3以所寻猫猫,继续游戏");
printf("\n 或输入0以退出游戏......");
}
}
//游戏分支
// 1.收留猫猫~
void GetCat(){
char name[20];
printf("\n\n 你想给猫猫起名为:");
Put_maomao(cat); //建立新的猫猫信息
Cat *cat1=cat;
printf("\n\n %s:喵呜~",cat1->name);
printf("\n\n 成功收养%s!",cat1->name);
total_cat++; //猫猫总数加一
system("cls");
}
// 2.摸摸猫猫╰( ̄ω ̄o)
void momo(){
printf("\n\n 您收养了以下猫猫:");
//输出所收养的猫猫名字
Put_maomaoName();
printf("\n\n 请输入您想一起玩的猫猫的名字:");
char name[50];
scanf("%s",name);
Cat *cat1;
//找到所找猫猫
Searchmaomao(cat,cat1,name);
cat2=cat1;
printf("\n\n 好乖好乖~");
cat2->d++;
int num=rand()%99+1;
if(cat2->favourat==1) {
cat2->favourat++;
printf("\n\n 你抚顺了猫猫的毛,但猫猫对你有所警戒");
}
else if(cat2->favourat<=5){
if(num>0&&num<=60) {
cat2->favourat--;
printf("\n\n 你尝试拉猫猫的尾巴,猫猫咬了你一口(HP--)");
cat2->e++;
}
else {
cat2->favourat++;
printf("\n\n 你轻轻揉搓猫猫的脑袋,猫猫趴在你的腿上微眯双眼~");
}
}
else if(cat2->favourat<=10){
if(num>0&&num<=50) {
cat2->favourat--;
printf("\n\n 你不小心把猫猫惹恼了,猫猫咬了你一口(HP--)");
cat2->e++;
}
else {
cat2->favourat++;
printf("\n\n 你抱着猫猫祥和地晒太阳");
}
}
else if(cat2->favourat>10){
cat2->favourat++;
printf("\n\n 你刚打卡房门,猫猫便向你扑来并依偎你的裤腿~");
}
}
//与猫猫玩耍时 猫猫有可能掉饱食度
void BeHungry(){
int num=rand()%99+1;
if(cat2->hugry>2){
if(num<70) cat2->hugry--;
}
}
//投食猫猫
void IfHungry(){
printf("\n\n 您收养了以下猫猫:");
//输出所收养的猫猫名字
Put_maomaoName();
printf("\n\n 请输入您想一起玩的猫猫的名字:");
char name[50];
scanf("%s",name);
Cat *cat1;
//找到所找猫猫
Searchmaomao(cat,cat1,name);
cat2=cat1;
if(cat2->hugry<10){
cat2->hugry=10;
printf("\n\n 请选择你要投喂的食物:");
printf("\n\n 1. 朴实无华の猫粮");
printf("\n\n 2. 无骨坤肉");
printf("\n\n 3. 主人上班摸的一池塘鱼");
char choice=getch();
if(choice=='1'){
printf("\n\n 已投喂“朴实无华の猫粮”");
cat2->a++;
}
else if(choice=='2'){
printf("\n\n 已投喂“无骨坤肉”");
cat2->b++;
}
else if(choice=='3'){
printf("\n\n 已投喂“主人上班摸的一池塘鱼”");
cat2->c++;
}
printf("\n\n %s:喵~",cat2->name);
}
else{
printf("\n\n 猫猫不饿并且打翻了猫粮......");
}
}
//游戏主干
//将信息实时录入txt
void WriteIn(){
FILE*fp=fopen(filename,"w");
if(!fp){
printf("录入猫猫信息失败") ;
}
else{
struct Cat *cat1=cat;
fseek(fp,0,SEEK_END);
while(cat1!=NULL){
fputs("\n",fp);
fputs("猫猫名字:",fp);
fputs(cat1->name,fp);
fputs("\n猫猫心情:",fp);
fprintf(fp,"%d",cat1->favourat);
fputs("\n猫猫吃了朴实无华の猫粮次数:",fp);
fprintf(fp,"%d ",cat1->a);
fputs("\n猫猫吃了无骨坤肉次数:",fp);
fprintf(fp,"%d ",cat1->b);
fputs("\n猫猫吃了主人上班摸的一池塘鱼次数:",fp);
fprintf(fp,"%d ",cat1->c);
fputs("\n摸摸猫猫次数╰( ̄ω ̄o) :",fp);
fprintf(fp,"%d",cat1->d);
fputs("\n被猫猫咬的次数:",fp);
fprintf(fp,"%d",cat1->e);
fputs("\n",fp);
fputs("\n",fp);
cat1=cat1->next;
}
fclose(fp);
}
}
char choice='8';
//开始游玩
void PlayGame(){
while (choice != '\0') {
menu(); //菜单选项
choice=getch();
if (choice == '1') { //摸摸猫猫
momo();
BeHungry();
}
else if (choice == '2') { //投喂猫猫
IfHungry();
}
else if (choice == '3') { //收留猫猫
GetCat();
}
else if (choice == '0') { //再见猫猫
system("cls");
printf("\n\n 再见猫猫~");
break;
}
else {
;
}
//记录猫猫信息于txt文档
WriteIn();
printf("\n\n 按任意键以继续游戏......");
getch();
system("cls");
}
}
int main(){
StartGame(); //启动游戏
PlayGame(); //开始游玩
return 0;
}
对项目的想法:可以加入图像库,对游戏做一定美化,同时可以插入bgm。
丰富游戏内容玩法
参考文献:
(18条消息) C语言文件操作(含详细步骤)_zjruiiiiii的博客-CSDN博客
(18条消息) C语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)_Qian_Qian_IT的博客-CSDN博客