zlh 发表于 2016-2-14 19:38:52

飞机大战小游戏编写教程(3)

本帖最后由 zlh 于 2016-2-14 19:43 编辑

教程开始之前先和大家说一声抱歉,因为前两天晚上都和同学出去玩,忘记发教程了。
今天我们要说的是飞机的移动。
相信大家在写一些小游戏的时候都会遇到如何让单位移动的问题。@黑龍
这个问题确实也困扰过我,不过我也找到了解决方法。
就是使用gotoxy()来控制。gotoxy()只要改变一下其中的一个变量就可以实现移动。
例如gotoxy(x,y)是飞机的当前位置。x--就是向左走,x++就是向右走.y--就是向前走,y++就是向后走。
至于子弹的移动,可以用gotoxy()+for循环。
具体代码是这样的。
void kongzhi(int bx,int by)
{
    int a;
    a=getch();
    switch(a)
    {
    case Left:if(x != 1)
    {
                        x++;
                        gotoxy(x,y);
                        printf(" ");
                       x--;
                         x--;
                         gotoxy(x,y);
                       printf("♂");
   }break;
   case Right:if(x != 18)
   {
                          x++;
                          gotoxy(x,y);
                          printf(" ");
                          x--;
                        x++;
                        gotoxy(x,y);
                          printf("♂");
      }break;
        case Kong:
        {
            bx=y;
            for(by=y;by>1;) //发射子弹
              {
                  by--;
                  gotoxy(x,by);
                  printf("θ");
                  Sleep(20);
                  gotoxy(x,by);
                  printf(" ");
                  y=by;
                  jifan();
                  if(r==0||r1==0||r2==0) break;
                }
                y=bx;
        }break;
      case Esc:t=0; break; //退出
        default:break;
        }
}
这里我们还加入了按Esc退出的功能。

接下来我们讲一下敌机的移动.
敌机的移动和我机的移动大概相同,只要用一个循环一直让他前进就可以了。
这里顺便回答一下为什么让我机不用前进,因为敌方靠过来和我方前进是差不多的。
具体代码:
void dfeiji ()
{
    while(1)
    {
        gotoxy(d,r);
        printf("Ψ");
        gotoxy(d2,r2);
        printf("♀");
        Sleep(900);
        gotoxy(d,r);
        printf(" ");
      gotoxy(d1,r1);
        printf(" ");
        gotoxy(d2,r2);
        printf(" ");
        if(kbhit())
        {
                kongzhi(0,0);
        }
        if(!r){d=rand()%17+1; m++;}
      if(!r1) {d1=rand()%17+1; m++;}
      if(!r2) {d2=rand()%17+1; m++;}
        r++;
        r1++;
        r2++;
      byebye();
      if(r==18) r=0;
      if(r1==18) r1=0;
      if(r2==18) r2=0;
      if(r==0||r1==0||r2==0) break;
    }
}
那么今天的教程就到这里,最后还是要和大家说一声抱歉。那么明天就是我们程序的最后一步,判定游戏结束和分数等数据的统计。

zlh 发表于 2016-2-14 19:42:25

我要狠狠的吐槽一下鱼C的代码格式。复制进去之前是好好地,复制进去之后变得一塌糊涂的

zlh 发表于 2016-2-14 19:42:44

沙发945
@黑龍 @machimilk @小甲鱼的二师兄 @康小泡 @拈花小仙

黑龍 发表于 2016-2-14 19:56:02

{:10_256:}我们都不会出现这个问题啊
还有 ♂ 是啥?

zlh 发表于 2016-2-14 19:57:47

黑龍 发表于 2016-2-14 19:56
我们都不会出现这个问题啊
还有 ♂ 是啥?

这个就是飞机啊。不过为毛在鱼C上输出变成了斜的

拈花小仙 发表于 2016-2-14 21:04:33

{:7_139:}支持楼主ing...

转身为墙 发表于 2016-2-29 09:41:46

支持!!!

day_by_day 发表于 2016-12-18 18:31:55

很想学习下是如何编写的。

HongY 发表于 2017-6-17 22:30:52

有些不明白的地方,kongzhi函数里的Left、Right、Kong是什么意思?是不是代码不全(没看到哪里定义了呀,我VS2017),求好心人解答
页: [1]
查看完整版本: 飞机大战小游戏编写教程(3)