“易語言.飛揚”開發的綵球遊戲,作者美女勿近,含源代碼

飛揚綵球 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])
                        {返回 假;}
                    }
                }
            }
        }
        返回 真;
    }
    
    公開 事件處理 邏輯 繪畫事件(繪畫事件 事件)
    {
        刷新面板();
        返回 真;
    }
    
    公開 事件處理 邏輯 鼠標左鍵被放開(鼠標左鍵被放開 事件)
    {
        處理程序(事件.橫座標(),事件.縱座標());
        返回 真;
    }    
    
}
發佈了71 篇原創文章 · 獲贊 1 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章