📄 游戏之搞怪碰碰球.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 + -