风格
下面是一个基于易语言的简单射击游戏源码,模仿经典的太空入侵者游戏风格:
.版本 2
.程序集 主窗口, , ,
.程序集变量 玩家X, 整数型
.程序集变量 玩家Y, 整数型
.程序集变量 子弹列表, 坐标信息, , "0
.程序集变量 敌机列表, 敌机信息, , "0
.程序集变量 得分, 整数型
.程序集变量 游戏状态, 整数型 // 0=未开始未开始 1=进行中 2=暂停 3=结束
.数据类型 坐标信息
.成员 X, 整数型
.成员 Y, 整数型
.数据类型 敌机信息
.成员 X, 整数型
.成员 Y, 整数型
.成员 生命值, 整数型
.成员 类型, 整数型 // 不同类型有不同外观和行为
.子程序子程序 __启动窗口_创建完毕
初始化游戏
.子程序 _时钟1_周期事件
.如果真 (游戏状态 ≠ 1)
返回
.如果真如果真结束
更新游戏逻辑
万彩网重绘
.子程序 __启动窗口_按下某键, 逻辑型
.参数 键代码, 整数型
.参数 功能键状态, 整数型
.判断开始 (游戏状态 =状态 = 1)
.判断开始 (键代码 = #左箭头键)
玩家X = 取大值 (10, 玩家X - 8)
.判断 (键代码 = #右箭头键)
玩家X = 取小值 (_启动窗口.宽度 - 50, 玩家X + 8)
.判断 (键代码 = #空格键)
发射子弹
.默认
.判断结束
.否则
.如果真 (键代码 = #回车键)
.判断开始 (游戏状态 = 0 或 游戏状态 = 3)
初始化游戏
游戏状态 = 1
.判断 (游戏状态 = 2)
游戏状态 = 1
.默认
.判断结束
.如果真结束
.如果结束
.子程序 初始化游戏
玩家X = _启动窗口.宽度 ÷ 2 - 25
玩家Y = _启动窗口.高度 - 60
清除数组 (子弹列表)
清除数组 (敌机列表)
得分 = 0
游戏 游戏状态 = 1 ' 游戏中
' 创建初始敌机编队
创建敌创建敌机编队
.子程序 创建敌机编队
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 行数, 整数型
.局部变量 列数, 整数型
.局部变量 索引, 整数型
行数 = 3
列数 = 8
.计次循环首 (行数, i)
.计次循环首 (列数, j)
索引 = 取数组成员数 (敌机列表) + 1
重定义数组 (敌机列表, 真, 索引)
索引)
敌机列表 [索引].X = 50 + j × 80
敌机列表 [索引].Y = 30 + i × 70
敌机列表 [索引].生命值 = 1
敌机列表 [索引].类型 = 1
.计次循环尾
.计次循环尾
.子程序 更新游戏逻辑
更新子弹位置
更新敌机位置
检测碰撞
.如果真 (取数组成员数 (敌机列表) = 0)
创建敌机编队 ' 生成新生成新一波敌机
.如果真结束
.子程序 更新子弹位置
.局部变量 i, 整数型
i = 1
.判断循环首 (i ≤ 取数组成员数 (子弹列表))
子弹列表 [i].Y = 子弹列表 [i].Y - 12
.如果真 (子弹列表 [i].Y ≤ 0)
删除成员 (子弹列表, i, 1)
.否则
i = i + 1
.如果真结束
.判断循环尾
.子程序 更新敌机位置
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (敌机列表), i)
敌机列表 [i].Y = 敌机列表 [i].Y + 1 ' 敌机缓慢向下移动
.如果真 (敌机列表 [i].Y ≥ 玩家Y) ' 敌机到达屏幕底部,游戏结束
游戏状态 = 3 ' 游戏结束
返回
.如果真结束
.计次循环尾
.子程序 检测碰撞
.局部变量 i, 整数型
.局部变量 j, 整数型
i = 1
.判断循环首 (i ≤ 取数组成员数 (子弹列表))
j = 1
.判断循环首 (j ≤ 取数组成员数 (敌机列表))
.如果 (求两点距离 (子弹列表 [i].X, 子弹列表 [i].Y, 敌机列表 [j].X, 敌机列表 [j].Y)
' 命中目标
删除成员 (子弹列表, i, 1)
敌机列表 [j].生命值 = 敌机列表 [j].生命].生命值 - 1
.如果真 (敌机列表 [j].生命值 ≤ 0)
删除成员 (敌机列表, j, 1)
得分 = 得分 + 100
.如果真 (取随机数 (1, 4) = 1)
' 概率掉落道具等扩展内容可以在这里添加
.如果真结束
.否则
j = j + 1
.如果真结束
跳出循环 ' 一颗子弹只能打中一个目标
.否则
j = j + 1
.如果结束
.判断循环尾
.如果真 (i ≤ 取数组成员数 (子弹列表)) ' 确保 确保不越界
i = i + 1
.如果真结束
.判断循环尾
.子程序 求两点距离, 双精度小数型
.参数 x1, 整数型
.参数 y1, 整数型
.参数 x2, 整数型
.参数 y2, 整数型
返回 (求平方根 ((x1 - x2) × (x1 - x2) + (y1 - y2) × (y1 - y2)))
.子程序 程序 发射子弹
.局部变量 新子弹, 坐标信息
.如果真 (取数组成员数 (子弹列表) > 5) ' 限制同时存在的子弹数量
返回
.如果真结束
新子弹.X = 玩家X + 15
新子弹.Y = 玩家Y
加入成员 (子弹列表, 新子弹)
.子程序 绘制游戏界面
.局部变量 i, 整数型
' 绘制背景
画板1.背景颜色 = #黑色
画板1.清除 (, )
' 绘制玩家飞机
画板1.画笔颜色 = #绿色
画板1.刷子颜色 = #绿色
画板1.填充矩形 (玩家X, 玩家Y, 40, 20)
' 绘制所有子弹
画板1.画笔颜色 = #黄色
画板1.刷子颜色 = #黄色
.计次循环首 (取数组成员数 (子弹列表), i)
画板1.填充矩形 (子弹列表 [i].X, 子弹 子弹列表 [i].Y, 6, 12)
.计次循环尾
' 绘制所有敌机
.计次循环首 (取数组成员数 (敌机列表), i)
画板1.画笔颜色 = #红色
画板1.刷子颜色 = #红色
画板1.填充椭圆 (敌机列表 [i].X, 敌机列表 [i].Y, 敌机列表 [i].X + 30, 敌机列表 [i].Y + 24)
' 根据不同敌机类型可绘制不同样式
.如果真 (敌机列表 [i].类型 = 1)
画板1.画笔颜色 = #白色
画板1.刷子颜色 = #白色
画板1.填充矩形 (敌机列表 [i].X + 7, 敌机列表 [i].Y + 9, 敌机列表 [i].X + 23, 敌机列表 [i].Y + 11)
.如果真结束
.计次循环尾
' 显示分数
画板1.字体.字体大小 = 16
画板1.文本颜色 = #白色
画板1.定位写出 (10, 10, "分数: " + 到文本 (得分))
' 显示游戏状态
.判断开始 (游戏状态 = 0)
画板1.定位写出 (_启动窗口.宽度 ÷ 2 - 50, _启动窗口.高度 ÷ 2, "按回车键开始游戏")
.判断 (游戏状态 = 2)
画板1.定位写出 (_启动窗口.宽度 ÷ 2 - 35, _启动窗口.高度 ÷ 2, "游戏暂停")
.判断 (游戏状态 = 3)
画板1.定位.定位写出 (_启动窗口.宽度 ÷ 2 - 45, _启动窗口.高度 ÷ 2, "游戏结束! 最终分数: " + 到文本 (得分))
.默认
.判断结束
这个简易的射击游戏包含以下主要功能:
1. 玩家控制:通过左右方向键移动飞船,空格键发射子弹
2. 敌机系统:自动生成敌机并向下移动
3. 碰撞检测:子弹与敌机的碰撞检测
4. 得分系统:击落敌机获得分数
5. 游戏状态管理:包括未开始、进行中、暂停和结束四种状态
你可以进一步扩展此游戏:
1. 添加 添加不同类型的敌机和Boss
2. 增加多种武器系统和升级机制
3. 添加音效和更精美的图形资源
4. 实现关卡系统,随着关卡的提升难度递增
5. 添加玩家生命值和护盾系统
希望这个基础源码能帮助你入门易语言游戏开发!