飛揚綵球 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])
{返回 假;}
}
}
}
}
返回 真;
}
公開 事件處理 邏輯 繪畫事件(繪畫事件 事件)
{
刷新面板();
返回 真;
}
公開 事件處理 邏輯 鼠標左鍵被放開(鼠標左鍵被放開 事件)
{
處理程序(事件.橫座標(),事件.縱座標());
返回 真;
}
}