作为一个新手,学习是很枯燥的,但带着感兴趣的项目,变写变学习将快乐百倍。 项目框架
虽然是一个新手,但是该有的框架还是要有的。只有前期知道需要什么,才能快速的进入状态。 游戏核心 贪吃蛇的运行逻辑是用户控制它超食物走去,当吃到食物时增长一节。
胜利:身体达到总高长度,没有空位生成食物。
失败:贪吃蛇走出界面或者撞到自己。
游戏功能 显示界面:
1.贪吃蛇运行界面
2.文字显示界面
用户控制:
1.开始按钮:点击后进行游戏
2.键盘输入:控制贪吃蛇运行方向
3.暂停按键:停止游戏变化
项目代码 贪吃蛇本体功能要想正常显示贪吃蛇的位置,需要一个坐标来记录它的位置。同理也需要坐标记录食物位置。然后需要一个生成食物的函数、一个移动变化的函数。 - class 贪吃蛇{
- // 每次开始初始化贪吃蛇变量与坐标
- ctor(){
- // 初始化变量
- this.身体坐标 = {};
- this.食物坐标 = {};
- this.方向队列 = {};
- this.方向 = "";
- this.分数 = 0;
- this.难度 = 1;
- // 每个像素点20*20大小,因此界面可以存在20*20个像素,没移动一格变化20坐标,初始坐标尽量在中间
- var x = ..math.random(6, 15);
- var y = ..math.random(6, 15);
- ..table.push(this.身体坐标, {x, y});
- };
- // 用于坐标系判断是否存在,用来排除食物不会直接出现在身体中
- 数组查找 = function(二维数组,数组){
- var 序列化 = ..table.tostring(数组)
- for(k,v in 二维数组){
- if(序列化 = ..table.tostring(v)){
- return true;
- };
- };
- return false;
- };
- // 生成食物
- 生成食物 = function() {
- var 食物坐标列表 = {}
- // 获取空白坐标
- for(x=0;19;1){
- for(y=0;19;1){
- if(!this.数组查找(this.身体坐标,{x,y})){
- ..table.push(食物坐标列表,{x,y})
- };
- };
- };
- if(#食物坐标列表=0){
- return "通关";
- };
- else {
- var 序号 = ..math.random(1,#食物坐标列表)
- this.食物坐标 = 食物坐标列表[序号]
- return false;
- };
- };
- // 移动贪吃蛇测试
- 移动 = function() {
- var 头 = this.身体坐标[1];
- var 新坐标;
- // 读取方向,若没有输入新的,则按之前方向运行
- if(#this.方向队列 > 0){
- this.方向 = this.方向队列[1]
- ..table.remove(this.方向队列,1); //删除
- };
- select(this.方向) {
- case "左" { 新坐标 = {头[1]-1, 头[2]}; }
- case "右" { 新坐标 = {头[1]+1, 头[2]}; }
- case "上" { 新坐标 = {头[1], 头[2]-1}; }
- case "下" { 新坐标 = {头[1], 头[2]+1}; }
- else { return false; }
- };
- // 撞壁检测
- if (新坐标[1] < 0 or 新坐标[1] = 20 or 新坐标[2] < 0 or 新坐标[2] = 20) {
- return true;
- };
- // 撞自己检测
- for (i = 2; #this.身体坐标-1; 1) {
- if (新坐标[1] == this.身体坐标[i][1] and 新坐标[2] == this.身体坐标[i][2]) {
- return true;
- };
- };
- // 插入新头部
- ..table.insert(this.身体坐标, 新坐标, 1);
- // 食物检测
- if(..table.tostring(新坐标) = ..table.tostring(this.食物坐标)){
- this.分数 += this.难度 * 10;
- return this.生成食物();
- };
- // 移除尾部
- ..table.remove(this.身体坐标, #this.身体坐标);
- return false;
- };
- };
复制代码在大神眼里这段代码有许多问题,但能够将自己的想法实现出来结果不完美已经不重要了。
对完整代码及编译后的游戏感兴趣的可以下载链接。 游戏界面 文件链接
https://file.uhsea.com/2503/41c0cba7e1684f70ead2037ce86ff661ZW.7z 解压密码:52pojie 游戏运行程序在dist目录下
|