搜索
查看: 2073|回复: 4
打印 上一主题 下一主题

最近有点时间想琢磨下结构体。。

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-16 22:05:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
琢磨琢磨,结果还是有点头疼。本来想用结构体,但是用了几次都没搞对,连之前写的几个函数也出错了。
然后重新改改,用最简单的语言写了下面这个无聊的小程序。



#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
/*这里想用结构体,结果还没搞明白*/
int ph=100,pa=5,pd=5,ps=2,pexp=0,plv=1;
int nh=100,na=5,nd=5,ns=0,nexp=5,nlv=1;
int s1,s2,t,op,k=1,bj;
while (k)
{
if (pexp>=50*plv) /*人物升级,各属性提升,经验归零*/
{plv++;
pexp=0;
ph=100*plv;
pa=5*plv;
pd=5*plv;
}
system("cls");
printf("\n**************************************************\n");
printf("\n\t你的血量 %d\t你的经验 %d\t你的等级%d",ph,pexp,plv);
printf("\n**************************************************\n");
//srand(time(NULL));
nlv=rand()%5+plv; /*敌人等级随个人等级变化*/
nh=100*nlv;na=5*nlv;nd=5*nlv;nexp=5*nlv;

printf("\n你发现了一个%d级敌人\n",nlv);
printf("\n1,攻击\n");
printf("\n2,放弃\n");
printf("\n\n");
scanf("%d",&op);
if(op==2) { printf("\n你决定还是放过他\n"); sleep(2000);
continue;}
else if(op==1)
{

while (nh>0 & ph>0)
{
bj=rand()%2+1;
s1=(na+na*ns)*5-pd;
s2=(pa+pa*ps)*5*bj-nd;
printf("\n你进行了攻击,造成了%d伤害\n",s2);
nh=nh-s2;
printf("\n你受到%d伤害\n",s1);
ph=ph-s1;
}
if (ph>0)
{
printf("\n你胜利了\n");
t=1;ph=100*plv;nh=100*nlv;pexp=pexp+nexp;
}

else
{printf("\n你输了,但是伟大的gm救活了你\n");t=2;ph=100*plv;nh=100*nlv;

t=2; ph=100*plv;nh=100*nlv;}
}
/*这里的t值是之前写的那个版本里的,先留着,看能不能再改改*/

else printf("\n你想做什么\n");
sleep(2000);





}

}


沙发
 楼主| 发表于 2013-3-17 19:05:27 | 只看该作者
改成了结构体,将升级放在了函数里,接下来慢慢将攻击功能改改,也做成函数。

#include <stdio.h>
struct human
{
int hp;
int ap;
int dp;
int skill;
int exp;
int lv;
}player,npc;

void lvup(human)
{
if (player.exp>=50*player.lv) /*人物升级,各属性提升,经验归零*/
        {
player.lv++;
player.exp=0;
player.hp=100*player.lv;
player.ap=5*player.lv;
player.dp=5*player.lv;
   
    }
    if (player.lv%5==0) player.skill++;
return;
}


void main()
{
        player.hp=100;
    player.ap=5;
    player.dp=5;
    player.skill=2;
    player.exp=0;
    player.lv=1;
        npc.hp=100;
        npc.ap=5;
        npc.dp=5;
        npc.skill=0;
        npc.exp=5;
        npc.lv=1;
int s1,s2,t,op,k=1,bj;
while (k)
{
        lvup(player);
   
    system("cls");
        printf("\n**************************************************\n");
        printf("\n\t你的血量 %d\t你的经验 %d\t你的等级%d",player.hp,player.exp,
    player.lv);
        printf("\n**************************************************\n");
    //srand(time(NULL));
    npc.lv=rand()%5+player.lv;   
   
    if(npc.lv%5==0) npc.hp=100*npc.lv*(npc.lv/5+1);
    else npc.hp=100*npc.lv;
    npc.ap=5*npc.lv;npc.dp=5*npc.lv;npc.exp=5*npc.lv;
        printf("\n你发现了一个%d级敌人\n",npc.lv);
        printf("\n1,攻击\n");
        printf("\n2,放弃\n");
    printf("\n\n");
        scanf("%d",&op);
        if(op==2) { printf("\n你决定还是放过他\n"); sleep(2000);
        continue;}
    else if(op==1)
                {       
                       
                                while (npc.hp>0 && player.hp>0)
                                {
                 bj=rand()%2+1;
                                s1=(npc.ap+npc.ap*npc.skill)*5-player.dp;
                                s2=(player.ap+player.ap*player.skill)*5*bj-npc.dp;
                printf("\n你进行了攻击,造成了%d伤害\n",s2);
                                npc.hp=npc.hp-s2;
                                printf("\n你受到%d伤害\n",s1);
                                player.hp=player.hp-s1;
                                }
                                if (player.hp>0)
                {
                                        printf("\n你胜利了\n");
                                        t=1;player.hp=100*player.lv;npc.hp=100*npc.lv;
                    player.exp=player.exp+npc.exp;
                                }
            
                                else
                                {printf("\n你输了,但是伟大的gm救活了你\n");t=2;
                player.hp=100*player.lv;npc.hp=100*npc.lv;
              
                                t=2; player.hp=100*player.lv;npc.hp=100*npc.lv;}
                }   
               
        else printf("\n你想做什么\n");
  sleep(2000);
               
  
  
   
       
        }
   
}

       

板凳
 楼主| 发表于 2013-3-17 22:32:11 | 只看该作者
无聊小游戏0.2版。
/*改成了回合制,增加了技能攻击和普通攻击,以及mp属性,大量运用了函数*/

#include <stdio.h>
struct human
{
int hp;
int mp;
int ap;
int dp;
int skill;
int exp;
int lv;
}player,npc;
void qp()
{
    system("cls");
printf("\n**************************************************\n");
printf("\n\t你的血量 %d\t你的经验 %d\t你的等级%d",player.hp,player.exp,
    player.lv);
printf("\n**************************************************\n");
}
void lvup(human)
{
if (player.exp>=50*player.lv) /*人物升级,各属性提升,经验归零*/
{
player.lv++;
player.exp=0;
player.hp=100*player.lv;
player.ap=5*player.lv;
player.dp=5*player.lv;
player.mp=30*player.lv;
   
    }
    if (player.lv%5==0) player.skill=player.skill+0.1;
return;
}
void npcup(human)
{
npc.lv=rand()%5+player.lv;  
npc.mp=30*npc.lv;  
   
if(npc.lv%5==0) npc.hp=100*npc.lv*(npc.lv/5+1);
else npc.hp=100*npc.lv;
npc.ap=5*npc.lv;npc.dp=5*npc.lv;npc.exp=5*npc.lv;
}
void gj(human)
{int bj,t,s1,s2;
while (npc.hp>0 && player.hp>0)
                  
    {qp();
                printf("\n\t你的血量 %d\t你的能量%d\t敌人的血量%d",player.hp,
                player.mp,npc.hp);
                printf("\n----------------------\n");
                 printf("\n1,普通攻击\n");
                 printf("\n2,技能攻击\n");
                 printf("\n3,逃跑!\n");
                 printf("\n----------------------\n");
                 scanf("%d",&t);
                 switch(t)
                 {case 1:bj=rand()%2+1;
                 s1=(npc.ap+npc.ap*npc.skill)*5-player.dp;
     s2=player.ap*5*bj-npc.dp;
                 printf("\n你进行了普通攻击,造成了%d伤害\n",s2);
    npc.hp=npc.hp-s2;
    printf("\n你受到%d伤害\n",s1);
                player.hp=player.hp-s1;
               
                  sleep(2000);
                 break;
                 case 2:bj=rand()%3+1;/*这个是能越级挑战的关键*/
                s1=(npc.ap+npc.ap*npc.skill)*5-player.dp;
    s2=(player.ap+player.ap*player.skill)*5*bj-npc.dp;
                printf("\n你进行了技能攻击,造成了%d伤害\n",s2);
    npc.hp=npc.hp-s2;
    printf("\n你受到%d伤害\n",s1);
    player.hp=player.hp-s1;
                player.mp=player.mp-5;
                sleep(2000);
                break;
                case 3:break;
                default: printf("\n你没这个技能\n");  sleep(2000);break;
                 
    }
                }               
if (player.hp>0&&npc.hp<=0)
{
printf("\n你胜利了\n");
player.hp=100*player.lv;npc.hp=100*npc.lv;
player.exp=player.exp+npc.exp;
}
            
else if(npc.hp>0&&player.hp<=0)
{printf("\n你输了,但是伟大的zy救活了你\n");t=2;
player.hp=100*player.lv;npc.hp=100*npc.lv;
player.hp=100*player.lv;npc.hp=100*npc.lv;}
     else if(npc.hp>0&&player.hp>0)
           {printf("\n你逃跑了\n");  sleep(2000);}
     
      
return;
}

void main()
{
player.hp=100;
    player.ap=5;
    player.dp=5;
    player.skill=2;
    player.exp=0;
    player.lv=1;
    player.mp=30;
npc.hp=100;
npc.ap=5;
npc.dp=5;
npc.skill=0;
npc.exp=5;
npc.lv=1;
    npc.mp=30;
int s1,s2,op,k=1;
while (k)
{
lvup(player);
    qp();
    //srand(time(NULL));
    npcup(npc);
printf("\n你发现了一个%d级敌人\n",npc.lv);
printf("\n1,攻击\n");
printf("\n2,放弃\n");
    printf("\n\n");
scanf("%d",&op);
if(op==2) { printf("\n你决定还是放过他\n"); sleep(2000);
  continue;}
    else if(op==1)
  {
   gj(player,npc);
   
  }   
  
else {
printf("\n你想做什么\n");
sleep(2000);
  }
}
}  
地板
 楼主| 发表于 2013-3-18 19:25:05 | 只看该作者



进行了大幅度的修改。
  1. #include <stdio.h>
  2. struct human
  3. {
  4. int hp;
  5. int mp;
  6. int ap;
  7. int dp;
  8. int skill;
  9. int exp;
  10. int lv;
  11. int item;
  12. }player,npc;

  13. struct items
  14. {int no;
  15. char name[30];
  16. int it;
  17. }item[30];

  18. void dqitem()/*读取道具信息*/
  19. {
  20. int i;
  21. FILE *fp;
  22. fp=fopen("items.txt","r");
  23. for (i=1;i<30;i++)
  24.         {fscanf(fp,"%d",&item[i].no);
  25.         fscanf(fp,"%s",&item[i].name);
  26.         fscanf(fp,"%d",&item[i].it);
  27.     }

  28. fclose(fp);
  29.         return ;
  30. }

  31. void printitem(int x)/*道具获得的提示语*/
  32.     {
  33. dqitem();
  34.    printf("你获得了新武器 %s ",item[x].name);
  35.    sleep(2000);
  36.   return;
  37.      
  38.    
  39.     }
  40.    
  41. void itemget(human)/*道具获得的函数,得一件一件取得,个级别的威力只是加1*/
  42. {
  43. dqitem();
  44.     int i,s,n=0;
  45. s=(npc.lv-player.lv)*2;
  46. i=rand()%100+s;
  47.    if(i>50) n=item[1].no;
  48.    if(i>70) n=item[2].no;
  49.    if(i>80) n=item[3].no;
  50.    if(i>90) n=item[4].no;
  51.    
  52. if(player.item<n)
  53.    {printitem(n);
  54.    player.item=n;}
  55.    
  56.     return;
  57.    
  58.    
  59.    }



  60. void qp()/*清屏函数,并设置置顶的东东*/
  61. {dqitem();
  62. int x;
  63. x=player.item;

  64.    
  65.     system("cls");
  66.         printf("\n**************************************************\n");
  67.         printf("\n\t血量 %d \t经验 %d  \t等级%d\n",player.hp,player.exp,
  68.     player.lv);
  69.     printf("\n          \t你使用的武器 %s\t            \n",item[x].name);
  70.         printf("\n**************************************************\n");
  71. }

  72. void lvup(human)
  73. {
  74. if (player.exp>=50*player.lv) /*人物升级,各属性提升,经验归零*/
  75.         {
  76. player.lv++;
  77. player.exp=0;
  78. player.hp=100*player.lv;
  79. player.ap=5*player.lv;
  80. player.dp=5*player.lv;
  81. player.mp=30*player.lv;
  82.    
  83.     }
  84.     if (player.lv%5==0) player.skill=player.skill+0.1;
  85. return;
  86. }
  87. void npcup(human)/*随机敌人等级,并将5的倍数级的怪都设定成加强型*/
  88. {
  89. npc.lv=rand()%5+player.lv;  
  90. npc.mp=30*npc.lv;  
  91.    
  92. if(npc.lv%5==0) npc.hp=100*npc.lv*(npc.lv/5+1);
  93. else npc.hp=100*npc.lv;
  94. npc.ap=5*npc.lv;npc.dp=5*npc.lv;npc.exp=5*npc.lv;
  95. }
  96. void gj(human)/*攻击相关的函数在这里,包括扣血,死亡判断。*/
  97. {int bj,t=0,s1,s2,pat,i/*这个是新添加的,加上了武器的攻击力*/;
  98. dqitem();
  99. i=player.item-1;
  100. while (npc.hp>0 && player.hp>0&&t!=3)
  101.                   
  102.                                 {system("cls");
  103.                 printf("\n 你:\t血量 %d  能量%d  \t\t 敌人:\t血量 %d  等级 %d \n",player.hp,
  104.                 player.mp,npc.hp,npc.lv);
  105.                  printf("\n--------------------------------------------------\n");
  106.                  printf("|\t\t          \t\t\t|");
  107.                  printf("\n|\t\t1,普通攻击\t\t\t|\n");
  108.                  printf("|\t\t          \t\t\t|");
  109.                  printf("\n|\t\t2,技能攻击\t\t\t|\n");
  110.                  printf("|\t\t          \t\t\t|");
  111.                  printf("\n|\t\t3,逃跑!  \t\t\t|\n");
  112.                  printf("|\t\t          \t\t\t|");
  113.                  printf("\n--------------------------------------------------\n");
  114.                
  115.                  pat=player.ap+item[i].it;
  116.                  scanf("%d",&t);
  117.                  switch(t)
  118.                  {case 1:bj=rand()%2+1;
  119.                  s1=(npc.ap+npc.ap*npc.skill)*5-player.dp;
  120.                                  s2=pat*10*bj-npc.dp;
  121.                  printf("\n你进行了普通攻击,造成了%d伤害\n",s2);
  122.                                 npc.hp=npc.hp-s2;
  123.                  if (npc.hp<0) break;
  124.                                 printf("\n你受到%d伤害\n",s1);
  125.                 player.hp=player.hp-s1;
  126.                
  127.                   sleep(2000);
  128.                  break;
  129.                  case 2:bj=rand()%2+1;/*这个是能越级挑战的关键*/
  130.                 s1=(npc.ap*5+npc.ap*npc.skill)*5-player.dp;
  131.                                 s2=pat*10*bj+(pat+player.skill)*50-npc.dp;
  132.                 if(player.mp>4)
  133.                 {
  134.                                         printf("\n你进行了技能攻击,造成了%d伤害\n",s2);
  135.                                         npc.hp=npc.hp-s2;player.mp=player.mp-5*player.lv;
  136.                     
  137.                                         if (npc.hp<0) {sleep(2000);break;}
  138.                     
  139.                                         printf("\n你受到%d伤害\n",s1);
  140.                                         player.hp=player.hp-s1;
  141.                                        
  142.                                         sleep(2000);
  143.                                         break;
  144.                 }
  145.                 else {printf("\n你的能量不足\n");sleep(2000);break;}
  146.                
  147.                 case 3:break;
  148.                 default: printf("\n你没这个技能\n");  sleep(2000);break;
  149.                  
  150.                                 }
  151.                 }               
  152. if (player.hp>0&&npc.hp<=0)
  153. {
  154. printf("\n你胜利了\n");
  155. itemget(player,npc);
  156. player.hp=player.hp+50*player.lv;
  157. player.exp=player.exp+npc.exp;
  158. sleep(2000);}
  159.             
  160. else if(npc.hp>0&&player.hp<=0)
  161. {printf("\n你输了,但是伟大的zy救活了你\n");
  162. sleep(2000);
  163. t=2;
  164. player.hp=100*player.lv;
  165. if(player.exp>=10)
  166. player.exp=player.exp-10;
  167. }

  168.      else if(t==3)
  169.            {printf("\n你逃跑了\n");  sleep(2000);}
  170.      
  171. FILE *fp;
  172. fp=fopen("player.txt","w");/*存档*/
  173. fprintf(fp,"%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n",player.hp,player.mp,
  174. player.ap,player.dp,player.skill,player.exp,player.lv,player.item);
  175. fclose(fp);
  176.       

  177. return;
  178. }



  179. void main()/*主函数*/
  180. {
  181.         npc.hp=100;
  182.         npc.ap=5;
  183.         npc.dp=5;
  184.         npc.skill=0;
  185.         npc.exp=5;
  186.         npc.lv=1;
  187.     npc.mp=30;
  188. int s1,s2,op,k=1,t;
  189. printf("\n是否继续上次的游戏?\n");
  190. printf("\n\t\t1.是\n\n");
  191. printf("\n\t\t2.否\n\n");
  192. scanf("%d",&t);
  193. if(t==1)
  194. {        FILE *fp;/*读取数据*/
  195.         fp=fopen("player.txt","r");
  196.         fscanf(fp,"%d",&player.hp);
  197.         fscanf(fp,"%d",&player.mp);
  198.         fscanf(fp,"%d",&player.ap);
  199.         fscanf(fp,"%d",&player.dp);
  200.         fscanf(fp,"%d",&player.skill);
  201.         fscanf(fp,"%d",&player.exp);
  202.         fscanf(fp,"%d",&player.lv);
  203.         fscanf(fp,"%d",&player.item);
  204.         fclose(fp);
  205. }
  206. else         /*初始化人物数据*/
  207.         {       
  208.     player.hp=100;
  209.         player.ap=5;
  210.         player.dp=5;
  211.         player.skill=0;
  212.         player.exp=5;
  213.         player.lv=1;
  214.     player.mp=30;
  215.     player.item=1;
  216.    
  217.     }

  218.         while (k)
  219.         {


  220.         lvup(player);
  221.     qp();
  222.     //srand(time(NULL));
  223.     npcup(npc);
  224.         printf("\n你发现了一个%d级敌人\n",npc.lv);
  225.         printf("\n1,攻击\n");
  226.         printf("\n2,放弃\n");
  227.     printf("\n\n");
  228.         scanf("%d",&op);
  229.         if(op==2)
  230.                 { printf("\n你决定还是放过他\n"); sleep(2000);
  231.                 continue;
  232.                 }
  233.     else if(op==1)
  234.                 {       
  235.                         gj(player,npc);
  236.                                
  237.                 }   
  238.                
  239.         else {
  240.         printf("\n你想做什么\n");
  241.         sleep(2000);
  242.                 }       
  243.         }
  244. }


复制代码

无聊小游戏0.5.zip

9.31 KB, 下载次数: 12

5#
发表于 2013-9-16 09:23:18 | 只看该作者
{:soso__17261225861671879680_3:}看楼主写了你们多给顶了认真会回帖是对楼主的尊重:)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表