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

飞扬彩球 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 ])
                        {返回 假;}
                    }
                }
            }
        }
        返回 真;
    }
    
    公开 事件处理 逻辑 绘画事件(绘画事件 事件)
    {
        刷新面板();
        返回 真;
    }
    
    公开 事件处理 逻辑 鼠标左键被放开(鼠标左键被放开 事件)
    {
        处理程序(事件.横坐标(),事件.纵坐标());
        返回 真;
    }    
    
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值