鱼C论坛

 找回密码
 立即注册
查看: 2120|回复: 5

[作品展示] popball的架子搭起来了,这次学乖了MP3换成了MID,大家跑的试试

[复制链接]
发表于 2022-10-20 21:03:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
esc退出 p暂停 鼠标x轴 wsad上下左右(测试几个音效声音) 背景音乐是网上下载的mid,樱桃小丸子

欢迎下载运行,欢迎反馈,谢谢


popball.zip (272.63 KB, 下载次数: 7)





sshot-6.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-20 21:20:42 | 显示全部楼层
原理如下:
使用一个坐标类,来控制所有图形向buf的刷写
class e
{
        int len;
        int *x,*y,*state,*mx,*my;
        public:
                e();
           ~e();
                e(int);
        void putpng(IMAGE&,IMAGE&);
        void set_statu(int,int);
        void set_xy(int,int,int);
        int  get_len();
        int  get_state();
        void paddle_move(IMAGE&);
        void block_stage(int);
};

//创建 1个背景,16个球,60个块和1个拍子 (实际上这个数量无关绘图对像IMAGE的数量,只是想在哪里putimage就指定坐标,
摆放即可,easyx教程都有,这里做个抛砖引玉了.

e bg(1);
e ball(16);
e block(60);
e paddle(1);



图形库,用的是easyx的两个头文件和一个库文件,官网上有,就不发了.
所有图形:abcd
这是文件中对应的4个png图及其防止黑边的mask图,利用了direct.h使用了相对路径,
再也不会出现前几次的黑屏失误了.
IMAGE a,      b,         c,     d;
IMAGE amask,  bmask, cmask, dmask;
void loadimg()
{
        loadimage(&amask,"./res/bg00.png");
        loadimage(&a,"./res/bg01.png");
        loadimage(&bmask,"./res/ball00.png");
        loadimage(&b,"./res/ball01.png");
        loadimage(&cmask,"./res/block00.png");
        loadimage(&c,"./res/block01.png");
        loadimage(&dmask,"./res/paddle00.png");
        loadimage(&d,"./res/paddle01.png");
}


//把流程做了到了一起,读图到内存,对像设置状态,及一个个地初始化好位置,直接把块设置到第6关(6排)
void init()
{
        loadimg();
       
        bg.set_statu(0,1);
       
        init_paddle();
       
        init_ball();
       
        block.block_stage(6);
       
       
}


刷新的话,直接把IMAGE对像作为参数使用类中的方法即可 (类中方法基本上都是for)

void update()
{
        bg.putpng(amask,a);
        ball.putpng(bmask,b);
        block.putpng(cmask,c);
        paddle.putpng(dmask,d);
}



//主函数很少,就是设置好鼠标(不跑出图形窗口和标题) 开始绘图,进入whie后 getmsg() 作返回及控制拍子移动和将来的打子弹

int main()
{
    set_cursor_title();
    init();
    BeginBatchDraw();
    while(getmsg())
    {
            update();
        FlushBatchDraw();
        Sleep(20);
    }
    over();
    return 0;
}





//类的构造和析构和指定个数构造也很简单:

e:: e():len(0),x(NULL),y(NULL),state(NULL),mx(NULL),my(NULL)
{}
e:: ~e()
{
        delete [] x;
        delete [] y;
        delete [] state;
        delete [] mx;
        delete [] my;
}
e:: e(int n):len(n)
{
        x=new int[len];
        y=new int[len];
        state=new int[len];
        mx=new int[len];
        my=new int[len];
        for(int i=0;i<len;i++)
        {
                x[i]=0;
                y[i]=0;
                state[i]=0;
                mx[i]=0;
                my[i]=0;
        }
}




//所有对像的移动,就是靠它:
void e:: putpng(IMAGE&mask,IMAGE&own)
{
        for(int i=0;i<len;i++)
        {
                if(state[i]>0)
                {
                        x[i] += mx[i];
                        y[i] += my[i];
                        putimage(x[i],y[i],&mask,SRCAND);
                        putimage(x[i],y[i],&own,SRCPAINT);
                }
        }
}


其它的,也都是想一些,写一些的.这个效果真还行,不像原始graphics.h卡卡地,很流畅.

最后附一个早前写的原始graphics.h的较完整的已上传到坛里了,和这个easyx版本的无可比性




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-20 21:30:30 | 显示全部楼层
本帖最后由 howzyao 于 2022-10-22 04:08 编辑

忘了一个头,说明也补上:


#include <graphics.h>                  // easyx的头
#include <mmsystem.h>         // play方法,放mp3或wav
#include <Vfw.h>                     //MCI方法,放mid
#include <direct.h>                 //./res/.... 可用
#include <conio.h>                        //getch() kbhit()
#include <stdio.h>                        //sprintf()输入提示
#include <math.h>                        //处理碰撞
MOUSEMSG msg;                        //处理getmsg中的操作
char name[128];                        //配合sprintf用
HWND mciwnd;                        //vfw.h用 柄,放mid
HWND hwnd;                                //约束鼠标 和 设置 图形窗 初始到桌面上的位置已及后续在getmsg中的鼠标操作
RECT screen;                                //同上
POINT screenlt,screenrb;                //同上
HCURSOR nullcursor;                //把光标想换成自己的资源:空 (暂未实现,用windows自带十字暂时用着)

这是所有需要的变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-21 09:39:18 | 显示全部楼层
cooooooooooooooooooooooooool,可以正常运行嘞,音乐好听~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-21 11:21:48 | 显示全部楼层
水边的小姑娘 发表于 2022-10-21 09:39
cooooooooooooooooooooooooool,可以正常运行嘞,音乐好听~


谢谢回馈.
太好了,现在可以无障碍发布了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-22 09:15:38 | 显示全部楼层
各个设备运行正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 13:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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