现在的位置: 首页 > 综合 > 正文

“易语言.飞扬”开发的彩球游戏,作者美女勿近,含源代码

2013年03月05日 ⁄ 综合 ⁄ 共 6574字 ⁄ 字号 评论关闭

飞扬彩球 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,颜色.品红());
        }
        重来();
    }

    刷新面板()
    {
        彩球场景.画矩形(0,0,369,369);
        计次循环(
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/=41;
        y
/=41;
        
if(y>8)
        {返回;}
        
if(数据[x][y]==0)
        {返回;}
        假如(是否已选择)
        {
        为 真:
            已选择时处理(x,y);
        为其他:
            未选择时处理(x,y);
        }
    }

    未选择时处理(整数 x,整数 y)
    {
        选择声音.播放(声音标记.异步);
        数据[x][y]+=7;
        画图片(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<8)
        {
            如果(数据[x][y
+1]==数据[x][y]-7)
            {
                画图片(x,y
+1);
                未选择时处理(x,y
+1);
            }
        }
        是否已选择
=真;
    }

    已选择时处理(整数 x,整数 y)
    {
        如果(数据[x][y]>7)
        {
            如果(取多少被选择(x,y)
>1)
            {                
                消除声音.播放(声音标记.异步);
                消球();
                下落();
                右移();
                
if(是否结束())
                {界面程序.信息框(
"游戏结束!!!");}
            }
            否则
            {
                数据[x][y]
-=7;
                画图片(x,y);
                是否已选择
=假;
            }
        }
        否则
        {
            取消选择();
            未选择时处理( x, y);
        }

    }

    整数 取多少被选择(整数 x,整数 y)
    {
        整数 n;
        计次循环(9,整数 i)
        {
            计次循环(
9,整数 j)
            {
                如果(数据[x][y]
==数据[i][j])
                {n
++;}                
            }
        }
        返回 n;
    }

    取消选择()
    {
        计次循环(9,整数 x)
        {
            计次循环(
9,整数 y)
            {
                如果(数据[x][y]
>7)
                {
                    数据[x][y]
-=7;
                    画图片(x,y);
                }                
            }
        }
    }

    消球()
    {
        整数 消球个数;
        计次循环(9,整数 x)
        {
            计次循环(
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(整数 x=8;x>=0;x--)
        {
            
            
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=数学运算.取随机数()%9+1;

        for(整数 x=8;x>=y;x--)
        {
            数据[
0][x]=数学运算.取随机数()%7+1;
            画图片(
0,x);
        }
    }

    右移()
    {
        for(整数 x=8;x>=0;x--)
        {
            
if(是否整列为空(x))
            {右移一列(x);}
            

        }
    }

    右移一列(整数 列号)
    {
        if(列号==0)
        {最左边补球();}
        
else
        {
            
if(列号-1>=0)
            {
                
if(是否整列为空(列号-1))
                {右移一列(列号
-1);}
                
else
                {
                    计次循环(
9,整数 x)
                    {
                        数据[列号][x]
<=>数据[列号-1][x];
                        画图片(列号,x);
                        画图片(列号
-1,x);
                    }
                }
            }
        }
    }

    逻辑 是否整列为空(整数 列)
    {
        计次循环(9,整数 x)
        {
            
if(数据[列][x]!=0)
            {返回 假;}
        }
        返回 真;
    }

    逻辑 是否结束()
    {
        计次循环(9,整数 x)
        {
            计次循环(
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])
                        {返回 假;}
                    }
                }
            }
        }
        返回 真;
    }
    
    公开 事件处理 逻辑 绘画事件(绘画事件 事件)
    {
        刷新面板();
        返回 真;
    }
    
    公开 事件处理 逻辑 鼠标左键被放开(鼠标左键被放开 事件)
    {
        处理程序(事件.横坐标(),事件.纵坐标());
        返回 真;
    }    
    
}

抱歉!评论已关闭.