howzyao 发表于 2022-9-17 17:55:43

游戏 打砖块 测试版+过关版 (放一个目录 声音声音文件通用)

本帖最后由 howzyao 于 2022-9-19 00:00 编辑

不废话,先上图




再上main

int main(int argc, char *argv[])
{
    PlaySound(TEXT("Ding.wav"),NULL,SND_FILENAME | SND_ASYNC|SND_LOOP);
    PlaySound(TEXT("bgm01.wav"),NULL,SND_ASYNC|SND_LOOP   );
    PlaySound(TEXT("Ding.wav"),NULL,SND_FILENAME|SND_ASYNC);//异步,非阻塞线
    PlaySound(TEXT("nextstage.wav"),NULL,SND_FILENAME|SND_ASYNC);
    //SND_NOSTOP        PlaySound不打断原来的声音播出并立即返回FALSE,已试用,前面播放的声音有效,后来播放的声音略过效果。

/*
*/
    //FreeConsole();
    initwindow(800,600,"FramF");
    e ball(0,32,5,WHITE);            // 0==ball 1==bar 2==slug 3==block
    e bar (1,5,80,7,LIGHTGRAY,1);
    e slug(2,16,5,15,LIGHTRED,2);
    e block(3,160,45,20,1,0);




block.stageinitial(ball,bar,slug );
    while( 1 )
    {
      bar.input();
      bar.control(ball);
      bar.work(ball,block,slug);
      delay(20);

    }
    getch();
    return EXIT_SUCCESS;
}

howzyao 发表于 2022-9-17 17:58:08



不废话,上EXE

howzyao 发表于 2022-9-17 18:02:23

忘了上说明了,这里手动上一下:
鼠标操作,仅X轴;
红色块,板得到子弹功能;
绿色,得到吸球;
蓝色,加长,最长5次加长;
黄色,减短,最多从5减到0,原始长度的板(最短),吃了无效果
浅蓝,场景上的球翻倍,(我估计卡,就是这里出问题,却又找不出原因)
希望有坛友能给我指导方向,改进卡的原因.

howzyao 发表于 2022-9-17 18:07:38

忘了上说明了,现在上:

鼠标操作,仅X轴上运动;
吃到红色块,球板得到子弹功能;
绿色,粘球,能再次发球;
蓝色,加长,最大加5次;
黄色,减短,最大从最长减5次,初始为最短,吃到黄色无效果
浅蓝,场景上的球翻倍(感觉就是卡的原因但找不到根源)

无论有没有指导,都希望大家看看,能指导一下改进卡的原因.
如有意向,请留贴,我发e类给指针人士.(主要是太长,1000行吧,怕发上来讨人嫌弃)

howzyao 发表于 2022-9-17 18:09:29

退出,是直接叉之.

howzyao 发表于 2022-9-17 18:10:36

忘了上说明了,现在上:
鼠标操作,仅X轴上运动;
吃到红色块,球板得到子弹功能;
绿色,粘球,能再次发球;
蓝色,加长,最大加5次;
黄色,减短,最大从最长减5次,初始为最短,吃到黄色无效果
浅蓝,场景上的球翻倍(感觉就是卡的原因但找不到根源)

howzyao 发表于 2022-9-17 18:13:55

本帖最后由 howzyao 于 2022-9-17 18:19 编辑

最后,这纯属原创,主要是源自小时候FC上玩的"块砖块",靠回忆,结合学到的C,
想一步做一步的.

又忘了一个事了:里面的声音,原本不会,上网搜了一下MM的用法,就复制而来.
(就是main下的那几句,我也想深入学会,但确实不知从何学起,有会的朋友愿意交流,极大欢迎)
声音文件则是来自硬盘里搜出的WAV,直接听了一下,觉得能用,直接拉过来.改名,就用上了.

因为这不是商业行为,算侵权的话,应当不够格吧?
若有侵权,通知,我及时去掉声音.

头文件就一个:
也是网上搜的: graphics.h
和它的一个库文件: libbgi.a

wp231957 发表于 2022-9-17 19:23:31

howzyao 发表于 2022-9-17 18:13
最后,这纯属原创,主要是源自小时候FC上玩的"块砖块",靠回忆,结合学到的C,
想一步做一步的.



用c做的啊,挺厉害

howzyao 发表于 2022-9-17 21:30:32

wp231957 发表于 2022-9-17 19:23
用c做的啊,挺厉害

用c做的啊,挺厉害

过奖了.

源码都是很低质的遍历,我也是在想是不是这样导致了卡,正在改,尽量让对像数组只遍历一次在while中.
捆扰我的是:
当球每运一步时,它如何来知道所有的块(似乎只有把每个块都for一次)

howzyao 发表于 2022-9-17 21:57:49

e ball(0,32,5,WHITE);
    e bar (1,5,80,7,LIGHTGRAY,1);
    e slug(2,16,5,15,LIGHTRED,2);
    e block(3,195,45,20,1,0);
    int inputs;
    int stage=1,pass_stage=1,choosen_bar=0;
    while( stage<=15 )
    {
      if(pass_stage)
      bar.stageinitial( block,ball,slug,stage,pass_stage);
      input(inputs);
      bar.control(inputs,choosen_bar);
      block.control(1);
         ball.control(2);
         slug.control(3);
      delay(20);
    }
    getch();
    return EXIT_SUCCESS;

改成了这样

void e:: control(int *in,int &iif) // bar.p call to this
{
    if(iif==0)
    {
      for(int i=0;i<N;i++) //每次都遍历,不划算 加入一个开关iif 第1次循环,找一次
      {
            if(p.status==2 or p.status==1 )
            F=i;
            iif=1;
      }

    }
    else if(iif==1)
    {
         p.control();
    }
}

howzyao 发表于 2022-9-17 22:02:13

索性把过关版也发来吧:

就是想当然地在while(1)的基础上套了一套"乱码",自己都法改,现在正在重写,重规划更好的码

while( !bar.rexit() && bar.rewin()>-1 ) //ball.alive() && block.towin()
    {
      
      if( !bar.running(block) )
      block.stageinitial(ball,bar,slug );
      else if( bar.running(block))                      //block.towin()
      {
            bar.input();
            bar.control(ball);
            bar.work(ball,block,slug); // block.stagerunning( ball,bar,slug );
            
      }
      delay(20);
      // designed a pause key there can be...
      // also save it can be...
    }   
    //exited thank you for your playing...

   
   
   

    getch();
    return EXIT_SUCCESS;


howzyao 发表于 2022-9-17 22:04:29

#include "e.h"
using namespace std;
void input(int*);
int main(int argc, char *argv[])
{
    //FreeConsole();
    initwindow(800,600,"e0 ---exit pressed the red x",300,100);
    //PlaySound(TEXT("bgm01.wav"),NULL,SND_ASYNC|SND_LOOP   );
    e ball(0,32,5,WHITE);
    e bar (1,5,80,7,LIGHTGRAY,1);
    e slug(2,16,5,15,LIGHTRED,2);
    e block(3,195,45,20,1,0);
    int inputs;
    int stage=1,pass_stage=1,choosen_bar=0;
    while( stage<=15 )
    {
      if(pass_stage)
      bar.stageinitial( block,ball,slug,stage,pass_stage);
      input(inputs);
      bar.control(inputs,choosen_bar);
      block.control(1);
         ball.control(2);
         slug.control(3);
      delay(20);
    }

上面是目前手上的正在重规划的.

howzyao 发表于 2022-9-17 22:06:32

在上面的各个控制中,如何实现对像间的"对话"?是不是要转行,投奔小甲鱼的msg做法?那个好像能随时"通知"下一行.
页: [1]
查看完整版本: 游戏 打砖块 测试版+过关版 (放一个目录 声音声音文件通用)