popball的架子搭起来了,这次学乖了MP3换成了MID,大家跑的试试
esc退出 p暂停 鼠标x轴 wsad上下左右(测试几个音效声音) 背景音乐是网上下载的mid,樱桃小丸子欢迎下载运行,欢迎反馈,谢谢
原理如下:
使用一个坐标类,来控制所有图形向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);
intget_len();
intget_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;
y=new int;
state=new int;
mx=new int;
my=new int;
for(int i=0;i<len;i++)
{
x=0;
y=0;
state=0;
mx=0;
my=0;
}
}
//所有对像的移动,就是靠它:
void e:: putpng(IMAGE&mask,IMAGE&own)
{
for(int i=0;i<len;i++)
{
if(state>0)
{
x += mx;
y += my;
putimage(x,y,&mask,SRCAND);
putimage(x,y,&own,SRCPAINT);
}
}
}
其它的,也都是想一些,写一些的.这个效果真还行,不像原始graphics.h卡卡地,很流畅.
最后附一个早前写的原始graphics.h的较完整的已上传到坛里了,和这个easyx版本的无可比性
本帖最后由 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; //配合sprintf用
HWND mciwnd; //vfw.h用 柄,放mid
HWND hwnd; //约束鼠标 和 设置 图形窗 初始到桌面上的位置已及后续在getmsg中的鼠标操作
RECT screen; //同上
POINT screenlt,screenrb; //同上
HCURSOR nullcursor; //把光标想换成自己的资源:空 (暂未实现,用windows自带十字暂时用着)
这是所有需要的变量 cooooooooooooooooooooooooool,可以正常运行嘞,音乐好听~ 水边的小姑娘 发表于 2022-10-21 09:39
cooooooooooooooooooooooooool,可以正常运行嘞,音乐好听~
{:5_95:}
谢谢回馈.
太好了,现在可以无障碍发布了.
各个设备运行正常{:10_256:}
页:
[1]