鱼C论坛

 找回密码
 立即注册
查看: 2047|回复: 6

vc++制作贪吃蛇遇到的小问题,求解

[复制链接]
发表于 2014-9-1 00:07:20 | 显示全部楼层 |阅读模式
20鱼币
新人开始学做贪吃蛇,只做出了一小部分,这是直线控制移动的问题,
单独把第一行和最后一行的运行代码都行,组合起来就打不到想要的效果了,求各位大大帮一下



  1. <P> #include<stdio.h>
  2. #include<graphics.h>
  3. #include<conio.h>
  4. int main()
  5. {
  6.   int x,s,m,n,k,g;      //x为数组单元位置,进行([0],[1]),([2],[3])尾位置消除操作,与[2x+2][2x+3]进行头位置增加操作,
  7.                     //s为标志位操作,s=-1时进行判定进入上下操作,s=1时进行进入左右操作
  8.                     //当s=-1时,m进行上下偏移操作,当s=1,n进行左右偏移操作,
  9.                     //k备用,进行循环判定时设定值for(k=0;k<100;k++)
  10.   
  11.   
  12.   x=0;               //初值设定            
  13.   s=1;
  14.   m=0;
  15.   n=0;
  16.   k=0;               
  17.   int a[1000];      //存储节点位置;直线的两个端点,开始坐标和结束坐标存放位置
  18.   a[0]=100;
  19.   a[1]=100;
  20.   a[2]=200;
  21.   a[3]=100;         //设定第一条直线,坐标为(100,100,100,200)由起始点指向下一点,方向向下</P>
  22. <P>
  23. printf("\n\n\n\n\n请按任意键进入画图界面\n\n\n\n\n\n");
  24. getch();                 //按键进入画图界面
  25.   initgraph(640,480);     //进入画图界面
  26. line(a[0],a[1],a[2],a[3]);         //第一个条直线起始位置</P>
  27. <P> </P>
  28. <P>  while(1)         //初始化结束,开始进入循环
  29.   {
  30.   Sleep(10);</P>
  31. <P> </P>
  32. <P>//第一条直线操作开始</P>
  33. <P> Sleep(100);
  34.    
  35.    if(a[1]==a[3])       //判定==,要注意不是赋值=
  36.    {
  37.     s=1;          //进入左右操作
  38.     if(a[0]>a[2])
  39.     {   setcolor(BLACK);
  40.          
  41.             line(a[0],a[1],a[0]-1,a[3]);  
  42.       a[0]=a[0]-1;       //   ←
  43.      
  44.     }
  45.     else if(a[0]<a[2])
  46.     { setcolor(BLACK);
  47.    
  48.             line(a[0],a[1],a[0]+1,a[3]);  
  49.     a[0]=a[0]+1;       //   →
  50.    
  51.     }
  52.   else                     //a[0]=a[2]
  53.   {      x=x-1;
  54.   for(k=0;k<=1000;k=k+2)
  55.   {
  56.    a[k+2]=a[k];
  57.       a[k+1]=a[k+3];
  58.   }
  59.   }             //if的结束括号</P>
  60. <P>   }</P>
  61. <P>//第一条直线操作结束</P>
  62. <P> </P>
  63. <P>
  64. //第x条直线操作开始
  65.             
  66.    if(kbhit())                              
  67.    {  g=getch();                                 //如果成功键入则执行以下操作</P>
  68. <P>      if((g==115)&&(s==1))                 //s键  ↓   原来进行左右操作现在才能进行上下操作
  69.    {                             
  70.         s=-1;                            //进入上下操作
  71.         x=x+1;                           //进行存储操作
  72.      a[2*x+2]=a[2*x];
  73.      a[2*x+3]=a[2*x+1]+1;
  74.      setcolor(WHITE);
  75.               line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
  76.    }</P>
  77. <P>        if((g==119)&&(s==1))                  //w键  ↑  原来进行左右操作现在才能进行上下操作
  78.   {                             
  79.         s=-1;                            //进入上下操作
  80.         x=x+1;                           //进行存储操作
  81.      a[2*x+2]=a[2*x];
  82.      a[2*x+3]=a[2*x+1]-1;
  83.      setcolor(WHITE);
  84.               line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
  85.    }</P>
  86. <P> </P>
  87. <P>  
  88.    if((g==100)&&(s==-1))                  //d键  →
  89.   {                             
  90.         s=1;                            //进入左右操作
  91.         x=x+1;                           //进行存储操作
  92.      a[2*x+2]=a[2*x]+1;
  93.      a[2*x+3]=a[2*x+1];
  94.      setcolor(WHITE);
  95.               line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
  96.    }</P>
  97. <P>
  98.    if((g==97)&&(s==-1))                  //a键  ←
  99.   {                             
  100.         s=1;                            //进入左右操作
  101.         x=x+1;                           //进行存储操作
  102.      a[2*x+2]=a[2*x]-1;
  103.      a[2*x+3]=a[2*x+1];
  104.      setcolor(WHITE);
  105.               line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
  106.    }</P>
  107. <P>
  108.    }                     
  109.    </P>
  110. <P> </P>
  111. <P>   else                  //没有键入,自动执行以下操作
  112.    {
  113.           if(a[2*x]==a[2*x+2])          //进入上下操作
  114.    {    s=-1;              </P>
  115. <P>      if(a[2*x+1]>a[2*x+3])      
  116.    {   
  117.     setcolor(WHITE);
  118.     a[2*x+3]=a[2*x+3]-1;        //   ↑
  119.     line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);  
  120.               
  121.     }</P>
  122. <P>  else  if(a[2*x+1]<a[2*x+3])      
  123.   {   
  124.    setcolor(WHITE);
  125.     a[2*x+3]=a[2*x+3]+1;        //   ↓
  126.     line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);  
  127.               
  128.     }
  129.   
  130.    }
  131.    </P>
  132. <P>   if(a[2*x+1]==a[2*x+3])          //进入左右操作
  133.    {
  134.     s=1;         
  135.     if(a[2*x]>a[2*x+2])
  136.     {     
  137.      setcolor(WHITE);
  138.     a[2*x+2]=a[2*x+2]-1;            //   ←
  139.             line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);   
  140.     }
  141.     else  if(a[2*x]<a[2*x+2])
  142.     {     
  143.      setcolor(WHITE);
  144.     a[2*x+2]=a[2*x+2]+1;            //   →
  145.           line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
  146.     }
  147. </P>
  148. <P>   }
  149.             
  150.    }                 </P>
  151. <P>
  152.         </P>
  153. <P>//第x条直线操作结束</P>
  154. <P> </P>
  155. <P> </P>
  156. <P>  }               //while(1)的结束括号</P>
  157. <P>
  158. closegraph();   //退出画图界面</P>
  159. <P>}               //主函数结束括号</P>
复制代码

最佳答案

查看完整内容

我以前做了一个 是用的小格子 你试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-1 00:07:21 | 显示全部楼层
我以前做了一个 是用的小格子 你试试
未命名.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-1 17:52:34 | 显示全部楼层
我现在也正在做贪食蛇呢,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-1 19:00:47 From FishC Mobile | 显示全部楼层
流行语 发表于 2014-9-1 17:52
我现在也正在做贪食蛇呢,

我没有用堆栈做,才做了控制直线移动部分就卡了快一周,感觉好难,都快看晕了:sweat:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-1 20:19:40 | 显示全部楼层
我现在正在想怎么做呢,还没有思路呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-2 10:45:18 From FishC Mobile | 显示全部楼层
流行语 发表于 2014-9-1 20:19
我现在正在想怎么做呢,还没有思路呢

你可以尝试着做一条通过按键可以自由控制的直线,通过按键是否输入来进行判定,还要有尾部一点的消除和前进方向的增加,反正我是一小个模块一个个测试的,但是作为新手,基础太薄弱了,结构体不是很熟悉,要不就不要那么蛋疼了,好像论坛上就有贪吃蛇的代码,你可以看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-29 21:59:22 | 显示全部楼层
我做过一个,但是实现方法不一样.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 20:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表