?? 游戲之搞怪碰碰球.ef
字號:
?引入 工具,用戶界面;
枚舉 方塊類型 {行=9,列=9,圖標邊框=50,球0=0,球1=1,球2=2,球3=3,球4=4,球5=5,球6=6}
公開 類 計分面板<基類型=面板>
{
公開 窗口場景 場景;
公開 主窗口 父窗口;
編輯框 說明編輯框,得分編輯框;
文本 文本="游戲玩法:\n 把相同圖形的放在一條直線上,可以是橫向直線、豎向直線及斜直線,當每移動一個圖形時,屏幕上會再生出三個球,當有5個及以上的圖形連在一起時,可以被消掉得分。\n 當屏幕上的每一個空位都有球時,游戲結束。";
公開 事件處理 邏輯 創建完畢(創建完畢事件 事件)
{
場景=創建 窗口場景(本對象);
// 創建游戲編輯框
說明編輯框=創建 編輯框();
說明編輯框.創建(本對象,-1,"",0,0,本對象.寬度()+10,160,(整數)編輯框風格.多行文本 | (整數)編輯框風格.文本只讀,空,"說明編輯框");
說明編輯框.清空();
說明編輯框.寫入文本(文本);
得分編輯框=創建 編輯框();
得分編輯框.創建(本對象,-1,"",50,400,50,20,(整數)編輯框風格.文本只讀 | (整數)編輯框風格.居中對齊,空,"得分編輯框");
返回(真);
}
公開 刷新界面(整數 編號1,整數 編號2,整數 編號3,整數 積分)
{
//畫格子
整數 i,x1,x2,y1,y2;
計次循環(4,i)
{
x1 = 本對象.寬度()/3;
y1 =200+i*50;
x2 = 本對象.寬度()/3+50;
y2 = y1;
//畫橫線
場景.畫線(x1,y1,x2,y2);
}
計次循環(2,i)
{
x1=本對象.寬度()/3+i*50;
y1=200;
x2=x1;
y2=200+50*3;
//畫縱線
場景.畫線(x1,y1,x2,y2);
}
場景.畫文本("《次回》",45,180);
//畫球
位圖 位圖 = 創建 位圖();
文本 位圖名="球型/球"+(編號1).到文本()+".bmp";//更改此處文件夾名即可改變圖形:圖形要求48*48
位圖.加載(位圖名, 位圖類型.BMP);
場景.畫位圖(位圖,本對象.寬度()/3+1,200+1,真);
位圖名="球型/球"+(編號2).到文本()+".bmp";//更改此處文件夾名即可改變圖形:圖形要求48*48
位圖.加載(位圖名, 位圖類型.BMP);
場景.畫位圖(位圖,本對象.寬度()/3+1,200+50+1,真);
位圖名="球型/球"+(編號3).到文本()+".bmp";//更改此處文件夾名即可改變圖形:圖形要求48*48
位圖.加載(位圖名, 位圖類型.BMP);
場景.畫位圖(位圖,本對象.寬度()/3+1,200+100+1,真);
//畫得分
場景.畫文本("《得分》",45,380);
得分編輯框.清空();
得分編輯框.寫入文本(積分.到文本());
}
}
公開 類 游戲面板<基類型=面板>
{
公開 主窗口 父窗口;
公開 窗口場景 場景;
整數[] 格子數組;
坐標點[] 路徑表,消球表;
整數 移動值,消球值;
游戲類 游戲;
整數 邊=(整數)方塊類型.圖標邊框;
公開 整數 編號1=0,編號2=0,編號3=0;
公開 整數 積分=0;
公開 事件處理 邏輯 創建完畢(創建完畢事件 事件)
{
場景=創建 窗口場景(本對象);
格子數組=創建 整數[10][10];
路徑表=創建 坐標點[0];
消球表=創建 坐標點[0];
游戲=創建 游戲類();
格子數組=游戲.初始化游戲(格子數組);
(編號1,編號2,編號3)=游戲.取編號();
積分=0;
返回(真);
}
//點擊格子后的判斷(首先獲得格子坐標):
公開 事件處理 邏輯 鼠標左鍵被放開(鼠標左鍵被放開 事件)
{
//獲得格子坐標
坐標點 點擊位置=本對象.到客戶區坐標(用戶界面.輔助類.取鼠標位置());
整數 行=點擊位置.縱坐標()/邊+1;
整數 列=點擊位置.橫坐標()/邊+1;
//界面程序.信息框("行="+行.到文本()+"\n列="+列.到文本());//測試用,在每格輸出當前格坐標值
//當前格子有球處理?//當前格子無球處理?
(格子數組,路徑表,消球表,移動值,消球值)=游戲.運行游戲(格子數組,行,列);
刷新界面();
如果(游戲.取出球值()==真)
{
格子數組=游戲.隨機出球(格子數組);
(編號1,編號2,編號3)=游戲.取編號();
(消球表,消球值)=游戲.取消球坐標();//取得可以消的球的坐標表
如果(消球表.長度()>=5)//>=5時表示有可消球
{
//消球處理
整數 x;
計次循環(消球表.長度(),x)
{
格子數組[消球表[x].橫坐標()][消球表[x].縱坐標()]=0;
}
}
刷新界面();
}
如果(游戲.是否結束()==真)
{
界面程序.信息框("游戲結束!");
格子數組=創建 整數[10][10];
路徑表=創建 坐標點[0];
消球表=創建 坐標點[0];
格子數組=游戲.初始化游戲(格子數組);
積分=0;
刷新界面();
}
返回(真);
}
公開 刷新界面()
{
父窗口.計分面板.刷新界面(編號1,編號2,編號3,積分);
//畫格子
整數 i,x1,x2,y1,y2;
整數 m,n,行,列,選中行,選中列,選中值;
(選中行,選中列,選中值)=游戲.取選中值();
計次循環(10,i)
{
x1 = 0;
y1 = i*邊;
x2 = 9*邊;
y2 = y1;
//畫橫線
場景.畫線(x1,y1,x2,y2);
x1=i*邊;
y1=0;
x2=x1;
y2=9*邊;
//畫縱線
場景.畫線(x1,y1,x2,y2);
}
//畫移動效果
如果(路徑表.長度()>1)
{
計次循環(路徑表.長度()-1,i)
{
文本 位圖名="球型/球"+移動值.到文本()+".bmp";
文本 位圖名0="球型/球0.bmp";
位圖 位圖 = 創建 位圖();
位圖.加載(位圖名0, 位圖類型.BMP);
x1=(路徑表[i].縱坐標()-1)*邊;y1=(路徑表[i].橫坐標()-1)*邊;
場景.畫位圖(位圖,x1+1,y1+1,真);
用戶界面.輔助類.延時(20);
位圖.加載(位圖名, 位圖類型.BMP);
x1=(路徑表[i+1].縱坐標()-1)*邊;y1=(路徑表[i+1].橫坐標()-1)*邊;
場景.畫位圖(位圖,x1+1,y1+1,真);
用戶界面.輔助類.延時(20);
}
}
路徑表=創建 坐標點[0];
//畫消球效果
文本 位圖名="球型/球"+消球值.到文本()+".bmp";
文本 位圖名0="球型/球0.bmp";
位圖 位圖 = 創建 位圖();
計次循環(3)
{
計次循環(消球表.長度(),i)
{
位圖.加載(位圖名0, 位圖類型.BMP);
x1=(消球表[i].縱坐標()-1)*邊;y1=(消球表[i].橫坐標()-1)*邊;
場景.畫位圖(位圖,x1+1,y1+1,真);
}
用戶界面.輔助類.延時(30);
計次循環(消球表.長度(),i)
{
位圖.加載(位圖名, 位圖類型.BMP);
x1=(消球表[i].縱坐標()-1)*邊;y1=(消球表[i].橫坐標()-1)*邊;
場景.畫位圖(位圖,x1+1,y1+1,真);
}
用戶界面.輔助類.延時(30);
}
如果(消球表.長度()>=5)
{
積分=積分+(10+(消球表.長度()-5)*5);
}
消球表=創建 坐標點[0];
//畫球
計次循環(9,m)
計次循環(9,n)
{
行=m+1;列=n+1;
x1=n*邊;y1=m*邊;
位圖 位圖 = 創建 位圖();
文本 位圖名="球型/球"+格子數組[行][列].到文本()+".bmp";//更改此處文件夾名即可改變圖形:圖形要求48*48
位圖.加載(位圖名, 位圖類型.BMP);
場景.畫位圖(位圖,x1+1,y1+1,真);
//如果(行==選中行 && 列==選中列) 場景.畫文本("OK",x1,y1);//做選中標記
//場景.畫文本("行"+行.到文本()+"列"+列.到文本(),x1,y1);//測試用,畫格子坐標值
}
父窗口.計分面板.刷新界面(編號1,編號2,編號3,積分);
}
}
公開 類 主窗口<基類型=窗口>
{
公開 窗口程序 父窗口;
公開 游戲面板 游戲面板;
公開 計分面板 計分面板;
創建組件()
{
計分面板 = 創建 計分面板();
計分面板.創建(本對象,9*(整數)方塊類型.圖標邊框+1,0,寬度()-9*(整數)方塊類型.圖標邊框+1,9*(整數)方塊類型.圖標邊框+1, 0, "");
計分面板.父窗口=本對象;
游戲面板 = 創建 游戲面板();
游戲面板.創建(本對象, 0, 0, 9*(整數)方塊類型.圖標邊框+1, 9*(整數)方塊類型.圖標邊框+1, 0, "");
游戲面板.父窗口=本對象;
創建狀態條(2,0);
//置狀態文本("學習中... ... 2008.1.30 ",0);
//置狀態文本("http://xhome.5d6d.com",1);
}
公開 事件處理 邏輯 創建完畢(創建完畢事件 事件)
{
創建組件();
返回(真);
}
公開 事件處理 邏輯 繪畫事件(繪畫事件 事件)
{
游戲面板.刷新界面();
返回(真);
}
}
公開 類 窗口程序<基類型="界面程序">
{
公開 主窗口 主窗口1;
公開 邏輯 初始化程序()
{
// 創建主窗口
主窗口1 = 創建 主窗口;
如果(主窗口1.創建(空, "游戲之搞怪碰碰球", 0, 0, 600, 505,
(整數)窗口風格.顯示系統菜單 | (整數)窗口風格.顯示標題欄 | (整數)窗口風格.顯示關閉按鈕 | (整數)窗口風格.顯示最小化按鈕
, "主窗口") == 真)
{
主窗口1.居中(方位.雙向);
主窗口1.顯示(真);
主窗口1.父窗口=本對象;
返回(真);
}
返回(假);
}
}
公開 類 啟動類
{
公開 靜態 啟動()
{
(創建 窗口程序).啟動();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -