飞扬彩球 V1.0
九江_美女勿近 2008年1月23日3时
2008年1月24日修正了点击分数区数组出界问题
其中声音及图片来自易语言的例程
美女勿近:“多普达手机上有一个彩球游戏,我用飞扬写了一个试试,请大家多多指教。点击选择,再击消除”。
请到EF论坛下载完整程序和源代码:http://bbs.dywt.com.cn/dispbbs.asp?boardID=148&ID=147131&page=1
(如果图片再仔细处理一下,界面会更美观)
以下是此游戏的核心EF源代码:
飞扬彩球V1.0 九江_美女勿近 2008年1月23日3时
2008年1月24日修正了点击分数区数组出界问题
其中声音及图片来自易语言的例程
*/
引入 用户界面,工具;
公开 类 彩球
<基类型=面板>{
用户界面.窗口场景 彩球场景;
整数[] 数据;
图片组 彩球图片;
位图 位图1;
掩码 掩码1;
逻辑 是否已选择;
整数 得分;
声音 选择声音;
声音 消除声音;
公开 初始化()
{
本对象.宽度=369;
本对象.高度=369+25;
本对象.左边=10;
本对象.顶边=10;
本对象.提高层次();
彩球场景=创建 窗口场景(本对象);
数据=创建 整数[9][9];
彩球图片=创建 图片组;
彩球图片.初始化(39,39,真,15);
位图1=创建 位图;
掩码1=创建 掩码;
选择声音=创建 声音();
消除声音=创建 声音();
选择声音.创建("声音/选中.wav");
消除声音.创建("声音/消除.wav");
计次循环(15,整数 x)
{
位图1.加载("图片/"+(x+1).到文本()+".bmp",位图类型.BMP);//调试时请把更改目录
彩球图片.添加(位图1,颜色.品红());
}
重来();
}
刷新面板()
{
彩球场景.画矩形(
计次循环(8, 整数 x)
{
彩球场景.画线(0,x*41+41,369,x*41+41);
彩球场景.画线(x*41+41,0,x*41+41,369);
}
计次循环(9,整数 x)
{
计次循环(9,整数 y)
{
画图片(x,y);
}
}
彩球场景.画矩形(0,370,100,20);
彩球场景.画文本("得分:"+得分.到文本(),0,370);
}
公开 重来()
{
数学运算.置随机数种子();
是否已选择
得分=0;
计次循环(9,整数 x)
{
计次循环(9,整数 y)
{
数据[x][y]=数学运算.取随机数()%7+1;
}
}
刷新面板();
}
处理程序(整数 x,整数 y)
{
x
y/=41;
if(y>8)
{返回;}
if(数据[x][y]==0)
{返回;}
假如(是否已选择)
{
为 真:
已选择时处理(x,y);
为其他:
未选择时处理(x,y);
}
}
未选择时处理(整数 x,整数 y)
{
选择声音.播放(声音标记.异步);
数据[x][y]
画图片(x,y);
如果(x>0)
{
如果(数据[x-1][y]==数据[x][y]-7)
{
画图片(x-1,y);
未选择时处理(x-1,y);
}
}
如果(x<8)
{
如果(数据[x+1][y]==数据[x][y]-7)
{
画图片(x+1,y);
未选择时处理(x+1,y);
}
}
如果(y>0)
{
如果(数据[x][y-1]==数据[x][y]-7)
{
画图片(x,y-1);
未选择时处理(x,y-1);
}
}
如果(y
{
如果(数据[x][y+1]==数据[x][y]-7)
{
画图片(x,y+1);
未选择时处理(x,y+1);
}
}
是否已选择=真;
}
已选择时处理(整数 x,整数 y)
{
如果(数据[x][y]
{
如果(取多少被选择(x,y)>1)
{
消除声音.播放(声音标记.异步);
消球();
下落();
右移();
if(是否结束())
{界面程序.信息框("游戏结束!!!");}
}
否则
{
数据[x][y]-=7;
画图片(x,y);
是否已选择=假;
}
}
否则
{
取消选择();
未选择时处理( x, y);
}
}
整数 取多少被选择(整数 x,整数 y)
{
整数 n;
计次循环(
{
计次循环(9,整数 j)
{
如果(数据[x][y]==数据[i][j])
{n++;}
}
}
返回 n;
}
取消选择()
{
计次循环(
{
计次循环(9,整数 y)
{
如果(数据[x][y]>7)
{
数据[x][y]-=7;
画图片(x,y);
}
}
}
}
消球()
{
整数 消球个数;
计次循环(
{
计次循环(9,整数 y)
{
如果(数据[x][y]>7)
{
数据[x][y]=0;
画图片(x,y);
消球个数++;
}
}
}
得分+=消球个数*(消球个数+1);
彩球场景.画矩形(0,370,100,20);
彩球场景.画文本("得分:"+得分.到文本(),0,370);
}
画图片(整数 x,整数 y)
{
如果(数据[x][y]==0)
{
位图1=彩球图片.取图片(14);
彩球场景.画位图(位图1,x*41+1,y*41+1,真);
}
否则
{
位图1=彩球图片.取图片(数据[x][y]-1);
彩球场景.画位图(位图1,x*41+1,y*41+1,真);
}
}
下落()
{
整数 i;
{
for(整数 y=8;y>0;y--)
{
if(数据[x][y]==0)
{
i=y-1;
循环(数据[x][i]==0)
{
i--;
if(i<0)
{跳出;}
}
if(i>=0) //有下落的球
{
数据[x][y]<=>数据[x][i];
画图片(x,y);
画图片(x,i);
}
}
}
}
}
最左边补球()
{
数学运算.置随机数种子();
整数 y
for(整数 x=8;x>=y;x--)
{
数据[0][x]=数学运算.取随机数()%7+1;
画图片(0,x);
}
}
右移()
{
{
if(是否整列为空(x))
{右移一列(x);}
}
}
右移一列(整数 列号)
{
{最左边补球();}
else
{
if(列号-1>=0)
{
if(是否整列为空(列号-1))
{右移一列(列号-1);}
else
{
计次循环(9,整数 x)
{
数据[列号][x]<=>数据[列号-1][x];
画图片(列号,x);
画图片(列号-1,x);
}
}
}
}
}
逻辑 是否整列为空(整数 列)
{
计次循环(
{
if(数据[列][x]!=0)
{返回 假;}
}
返回 真;
}
逻辑 是否结束()
{
计次循环(
{
计次循环(9,整数 y)
{
if(数据[x][y]>0)
{
if(x>0)
{
if(数据[x][y]==数据[x-1][y])
{返回 假;}
}
if(x<8)
{
if(数据[x][y]==数据[x+1][y])
{返回 假;}
}
if(y>0)
{
if(数据[x][y]==数据[x][y-1])
{返回 假;}
}
if(y<8)
{
if(数据[x][y]==数据[x][y+1])
{返回 假;}
}
}
}
}
返回 真;
}
公开 事件处理 逻辑 绘画事件(绘画事件 事件)
{
刷新面板();
返回 真;
}
公开 事件处理 逻辑 鼠标左键被放开(鼠标左键被放开 事件)
{
处理程序(事件.横坐标(),事件.纵坐标());
返回 真;
}
}