游戏 打砖块 测试版+过关版 (放一个目录 声音声音文件通用)
本帖最后由 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;
}
不废话,上EXE 忘了上说明了,这里手动上一下:
鼠标操作,仅X轴;
红色块,板得到子弹功能;
绿色,得到吸球;
蓝色,加长,最长5次加长;
黄色,减短,最多从5减到0,原始长度的板(最短),吃了无效果
浅蓝,场景上的球翻倍,(我估计卡,就是这里出问题,却又找不出原因)
希望有坛友能给我指导方向,改进卡的原因. 忘了上说明了,现在上:
鼠标操作,仅X轴上运动;
吃到红色块,球板得到子弹功能;
绿色,粘球,能再次发球;
蓝色,加长,最大加5次;
黄色,减短,最大从最长减5次,初始为最短,吃到黄色无效果
浅蓝,场景上的球翻倍(感觉就是卡的原因但找不到根源)
无论有没有指导,都希望大家看看,能指导一下改进卡的原因.
如有意向,请留贴,我发e类给指针人士.(主要是太长,1000行吧,怕发上来讨人嫌弃) 退出,是直接叉之. 忘了上说明了,现在上:
鼠标操作,仅X轴上运动;
吃到红色块,球板得到子弹功能;
绿色,粘球,能再次发球;
蓝色,加长,最大加5次;
黄色,减短,最大从最长减5次,初始为最短,吃到黄色无效果
浅蓝,场景上的球翻倍(感觉就是卡的原因但找不到根源) 本帖最后由 howzyao 于 2022-9-17 18:19 编辑
最后,这纯属原创,主要是源自小时候FC上玩的"块砖块",靠回忆,结合学到的C,
想一步做一步的.
又忘了一个事了:里面的声音,原本不会,上网搜了一下MM的用法,就复制而来.
(就是main下的那几句,我也想深入学会,但确实不知从何学起,有会的朋友愿意交流,极大欢迎)
声音文件则是来自硬盘里搜出的WAV,直接听了一下,觉得能用,直接拉过来.改名,就用上了.
因为这不是商业行为,算侵权的话,应当不够格吧?
若有侵权,通知,我及时去掉声音.
头文件就一个:
也是网上搜的: graphics.h
和它的一个库文件: libbgi.a howzyao 发表于 2022-9-17 18:13
最后,这纯属原创,主要是源自小时候FC上玩的"块砖块",靠回忆,结合学到的C,
想一步做一步的.
用c做的啊,挺厉害 wp231957 发表于 2022-9-17 19:23
用c做的啊,挺厉害
用c做的啊,挺厉害
过奖了.
源码都是很低质的遍历,我也是在想是不是这样导致了卡,正在改,尽量让对像数组只遍历一次在while中.
捆扰我的是:
当球每运一步时,它如何来知道所有的块(似乎只有把每个块都for一次)
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();
}
} 索性把过关版也发来吧:
就是想当然地在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;
#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);
}
上面是目前手上的正在重规划的. 在上面的各个控制中,如何实现对像间的"对话"?是不是要转行,投奔小甲鱼的msg做法?那个好像能随时"通知"下一行.
页:
[1]