1.上古神器3攻略
2.你好。安卓flash as3.0小游戏,打砖要源代码,类似于连连看,打砖块之类的块游。能发我吗?
上古神器3攻略
填一个大坑。戏源
傍晚六点下班,码安一家人吃个晚饭。卓打砖块api接口页面源码三岁的游戏源码用小孩儿正是闹腾的年纪,要陪着才肯乖乖洗澡睡觉。安卓周末得带着孩子逛商场、打砖游乐园,块游忙中偷闲挤出来的戏源碎片时间大都交付给了抖音、手游和网络小说。码安PS2、卓打砖块PS3、游戏源码用PS4都有买,安卓但结婚生子后再没怎么开过。
这是五爷的生活。五爷是位普通的互联网从业人员,也是位称职的父亲。他希望网络生活和现实生活是分开的,所以身边几乎没什么人知道,他曾加入一个名为“鬼谷工作室”的游戏制作小组中,有个“中二”的马甲叫“精灵”,还主导开发了红极一时的FLASH游戏《上古神器》系列。这款基于《天之痕》素材开发的同人游戏一度“霸榜”过,让很多小游戏玩家第一次接触到了《轩辕剑》系列。
起
年,台湾大宇的《轩辕剑肆:黑龙舞兮云飞扬》已经上市,以《轩辕剑》系列游戏为主题的讨论社区“轩辕之家”还颇有人气。集动画创作与应用程序开发于一身的Flash正值壮年,视频网站尚未兴起,综合性Flash动画门户网站“闪吧”门庭若市。
鬼谷工作室就脱胎于这样的源码屏蔽罩时代背景。
风雨萧瑟阁和吟风舞墨两人都是《轩辕剑叁外传:天之痕》的忠实粉丝,有情怀,还有点技术,玩到深处难以自已,一拍脑门,决定为《天之痕》搞个Flash续作。风雨萧瑟阁负责动画,吟风舞墨负责程序。开发过程遇到困难,就去“轩辕之家”、“闪吧”等网站寻求帮助。年5月日,《妖星再现1——离别》做了出来。再过一个月,《妖星再现2——宿命》诞生了。
《妖星》是国内第一款Flash中文RPG,它的故事上承《轩辕剑叁外传:天之痕》,下接《轩辕剑叁:云和山的彼端》,不仅填补了两者间的剧情空白,更吸引来一批同样热爱《轩辕剑》的玩家。鬼谷工作室开始逐渐壮大,《妖星再现3——圣战》有了专属的封面,加入了支线剧情,体量变大了不少,名气也响了不少。
精灵当时读的是计算机系,C语言没学好,于是开始钻研Flash。玩过了《妖星》三部曲,他就想:“这个太简单了,我也能做出来,干嘛不整一个。班级源码网站”
紧接着,牵线搭桥的人出现了。精灵在混“轩辕之家”的时候结识了宇文太师,他是轩辕之家的管理之一,和台湾大宇有过联系,同时也是鬼谷工作室的一员。如今在现实生活中做市场营销的宇文太师在当时就显露出善于发展下线的潜质,他问精灵:“你不是会Flash么,那你也来做一个加入鬼谷呗。”
于是精灵带着《上古神器》的框架来到了鬼谷工作室。而在他专注于《上古神器》的几年里,《妖星再现4》一度被搁置,风雨萧瑟阁和吟风舞墨逐渐销声匿迹。
精灵告诉我,他其实算是鬼谷工作室的第二代人。第一代开发《妖星》的具体细节,他不太清楚,但第一代的一些理念,他是知道的。一来是要证明自己,想走不一样的道路;二来是要证明游戏不一定是害人的,也可以给人带来快乐和感动。
这在今天听起来或许有些老套,不过《妖星》三部曲也已经是年的老游戏了。
承
如果说《妖星》是对《天之痕》的续写,那么《上古神器》就是对《天之痕》保留整体风格的改编。精灵喜欢《天之痕》意味独到的中国风,更喜欢《天之痕》主角陈靖仇带点懦弱、知道该做什么,可是不敢忤逆师父,最后还是硬着头皮去做的性格。
于是kubernetes 源码开发,年,他发布了以陈靖仇为主角的《上古神器1》。严格来讲,《上古神器1》其实只是个demo,一场必胜的战斗加上一个帮老奶奶找手镯的任务组成了玩家可玩的全部内容。五分钟不到的游戏流程结束后,有人疑惑,也有人不爽:“还没做完就别拿出来”。
但精灵的目的已经达到了。他知道自己有能力做游戏,也有人想玩他的游戏。只不过此时的他并没有料到,等到《上古神器2》正式上线,已经是一年后的事了。
《上古神器2》作为一款同人游戏,虽然整体系统不如《天之痕》完整,但也把炼妖壶、ATB回合制和五行鬼谷道术等等特色相对简化地复刻了出来。这种高完成度、长流程的RPG作品,在当时的Flash游戏圈非常罕见。
不过,《上古神器2》的开发过程颇有点“愚公移山”的味道。当时的论坛上找不到现成的游戏资源,又没有成熟的资源提取器。为了获得足够用的游戏素材,精灵只能沿用鬼谷工作室一脉相传的“笨办法”。
碰到合适的音乐,但是没办法提取,于是就一边外放一边把声音录下来;想要一张完整的场景图,就控制人物在A位置截个屏,接着走到B位置再截个屏,activiti源码面试最后两张图合起来把人物P掉。精灵说到这里笑了笑:“如果你仔细看,会发现人物边缘扣得不是很好,有些其他的色块,可能是因为橡皮擦没擦干净。”
相比于《妖星》系列,《上古神器2》更为丰富的内容为精灵带来了更为庞大的工作量。回忆起那段时光,他告诉我:“每天都在想自己今天抠了多少图”。
就这样,凭借着“笨办法”,在鬼谷工作室全体成员的辅助下,精灵最后把《上古神器2》做了出来。
陈靖仇和于小雪依然是主角,原本在《天之痕》中同样是女主角之一的拓跋玉儿却变成了路人角色。精灵对此的解释十分坦荡:“我喜欢小雪,玉儿太强势了。还是小雪和陈靖仇更般配。”
我又问:“那你觉得你现在的妻子更像小雪还是玉儿?”
精灵斩钉截铁地回复了“玉儿”两个字。想了想又补充了一句:“有时候你觉得你喜欢,但你去找的话,你会发现其实不是。”
《上古神器2》发布后广受好评,无数人借此入坑《轩辕剑》,这让精灵迅速地投入到《上古神器3》的制作当中。确定好剧情主框架后,他找美术约了画,把部分文案交给了组员,自己则专心于游戏系统的升级和技能特效的更新。
由于没有专业的测试人员,他会把未经测试的游戏发在内部供小部分人试玩收集反馈意见。而游戏每流传出去一次,Flash游戏网站上就会多一个《上古神器》的新版本。这也导致不少遇上了BUG的人误认为《上古神器3》就是个未完成的作品。
但在精灵看来,最后改名《仙岛录》的《上古神器3》不论在系统、剧情还是特效上,都要比《上古神器2》高上好几个档次。只不过因为FLASH游戏的热度渐渐减退,《仙岛录》的知名度和影响力都没有到达前作的高度。
《仙岛录》的游戏系统更为复杂
《仙岛录》之后,《上古神器4》的系统框架很快就搭好了。时代的浪潮来得更快,Flash的编程语言从AS2.0升级到了全新的AS3.0,精灵也走出象牙塔,开始为工作奔波。
《上古神器4》就此搁置。
转
精灵从没有觉得自己离开过鬼谷工作室:“本来就是网络兴趣小组嘛,并不存在什么明显的人员交替。大家都在群里,只是有的人慢慢就没有声音了。”忙于工作后,他也就把鬼谷工作室交到了第三代人的手上。
由于想做游戏又缺乏经验,精灵给后辈提了个“不妨从休闲游戏入手”的建议。于是,之后的鬼谷工作室推出了《鬼谷连连看》、《鬼谷灵兽吃桃子》和《鬼谷灵兽贪吃蛇》三款休闲游戏。虽然依旧用的是《天之痕》的素材,但游戏形式已经变成了连连看、打砖块和贪吃蛇。
上手之后,第三代又陆续推出了类魔塔的《莎兰女王逃离梦境》和养成类型的《王子养成》。或许是游戏系统比较简单,或许是没能形成统一的风格,又或许是单纯的时代变了,这些真正的原创作品终究没能达到《妖星再现》和《上古神器》的高度。
毕业之后的精灵在游戏公司待过一段时间。他把自己投入进去,看着自己做的游戏上市,为公司赚钱,为自己带来年终奖……但那毕竟是公司主导的游戏,他只是个打工的,很多东西并不能由他决定。只在偶尔回想起《上古神器》的时候,精灵才能找回那种为自己的兴趣,自己的理想而奋斗的感觉。
当然,更多的是没回想起《上古神器》的时候。“有段时间干脆就完全忘记了——‘我做过这个东西吗?没有吧?’比如说玩《神秘海域4》的时候,压根就没想起来还有个Flash小游戏在那里,还有人在千年等坑。”
年,《上古神器》风靡一时、鬼谷工作室尚在巅峰的时候,精灵曾找到风雨萧瑟阁,请他作为鬼谷的创始人写点感触。风雨萧瑟阁回忆了一番过往,结尾是这样写的:
“就像在往日初夏的下午,你百无聊赖地坐在教室里面,躲过讲台上老头子的目光,偷偷看着你喜欢的,却从来不敢和她说话的女孩子。当你们都长大了,女孩变成了女人,而且还不是你的,即使已经从可乐瓶变成可乐罐,当你们偶遇,也许是希尔顿,也许是菜市场,你还是不可抑制地想起她高高竖起的马尾,柔软而又修长的脖子,甚至若隐若无的白色内衣,因为,那是你少年的梦。
妖星,就是那个女孩子。当岁月流逝,当你的心被现实慢慢淹没,你仍然会发现,有些东西,不是你在讲台上的咆哮,不是你在领奖时的荣耀,不是你击败对手能够替代的,而当你回头去寻觅,想回到那个阳光明媚的夏天,却再也不可能了。
这是少年的梦开始的地方,只能怀念。”
对于精灵来说,《上古神器》似乎也渐渐变成了那个只能怀念的梦。
结
精灵变回了五爷。在五爷岁这年,他决定把《上古神器4》做到手机上。
此时距离年《上古神器》初代问世已经相隔年。谈到有关续作的话题时,他并没有表现出太大的压力:“主要是有空了,而且现在人的碎片时间都在手机上,目前的手游氪金元素普遍太重,内容比较浮躁。如果这时候能有一款同人向的,相对轻松的单机RPG,我想可能会有不少人愿意尝试。”
五爷联系过TapTap,但对面不接受非完全原创的作品。五爷没觉得沮丧,他认为现在是自媒体时代了,鬼谷游戏也已经有了自己的公众号,只要游戏好玩,总有办法推得出去。
由于当年《上古神器》的源代码全丢了,一切都要从头来过,《上古神器4》目前的开发进度并不算太快。按照五爷的估计,至少得到明年,游戏才能正式上安卓端和PC端。PC端是新人用unity做的——几个月前,有位网友带着自己刚起步的游戏来到《上古神器》的贴吧求剧本支持。五爷一看,小兄弟还不错,把人拉了进来,鬼谷工作室的第四代终于有了着落。
《上古神器》曾经的定位一直是推广《轩辕剑》,支持正版游戏。但在五爷看来,这个年头支持正版游戏已经变成一件相对容易的事情了,“到时候就鸣谢一下大宇曾为我们带来的关于整个时代的回忆吧”。
实际上,除了《上古神器4》,五爷还有些别的计划。他想要以当年鬼谷工作室海报上的个人为原型,做一款登陆Steam的完全原创游戏。
五爷在鬼谷的粉丝群里搞了个众筹,想要把自己做进游戏的人可以先联系他,他再去找美术供应商把角色做出来。众筹最后获得了非常积极的响应,用他的话来说:“大多数粉丝已经有这个经济能力了,也愿意用这种方式变相支持鬼谷工作室。敌人、场景之类的美术可能要自掏腰包,毕竟这是我自己想做的游戏。不过把成本分摊出去的话,游戏就更有可能做出来了。”
当然,首先还是得做好《上古神器4》。
今年的9月3号,五爷在B站上传了标题为《上古神器4开发进度演示》的视频。底下的第一个评论问:“鬼谷工作室做的?”当年的精灵,现在的五爷回复道:
“是啊,回来填坑。”
你好。flash as3.0小游戏,要源代码,类似于连连看,打砖块之类的。能发我吗?
的源码!!
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.text.*;
import flash.geom.Point;
public class GameMain extends Sprite
{
private var i:int = 0;
private var j:int = 0;
private var k:int = 0;
private var tf:TextFormat = new TextFormat();
private var ContainTxt:Sprite = new Sprite();
private var arrTxt:Array = new Array();
private var arrTxtColor:Array = new Array();
private var arrTxtValue:Array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
private var arrTemp:Array = new Array(5);
private var arrValue:Array = [0, 2, 4, 8, , , , , , , , GameMain, ];
private var arrColor:Array = [0xffffff, 0x, 0xff, 0xffcc, 0xff, 0xff, 0xff, 0xff, 0xffff, 0xff, 0xff, 0xffff];
private var B_change:Boolean = false;
private var dotest:int = 0;
private var score:int = 0;
public function GameMain():void
{
Depth(); //深度管理
new_Game(); //初始化
TF1();
}
private function new_Game():void
{
stage.addEventListener(Event.ENTER_FRAME, ValueToTxt);
Create_one();
Create_one();
stage.addEventListener(KeyboardEvent.KEY_DOWN, KEYDOWN);
}
private function KEYDOWN(ekey:KeyboardEvent):void
{
switch (ekey.keyCode)
{
case :
for (j = 0; j <= 3; j++)
{
for (i = 0; i <= 3; i++)
{
arrTemp[i] = arrTxtValue[i][j];
}
arrTemp[4] = 0;
doMove();
for (i = 0; i <= 3; i++)
{
arrTxtValue[i][j] = arrTemp[i];
}
}
break;
case :
for (k = 0; k <= 3; k++)
{
for (j = 0; j <= 3; j++)
{
arrTemp[j] = arrTxtValue[k][j];
}
arrTemp[4] = 0;
doMove();
for (j = 0; j <= 3; j++)
{
arrTxtValue[k][j] = arrTemp[j];
}
}
break;
case :
for (j = 0; j <= 3; j++)
{
for (i = 0; i <= 3; i++)
{
arrTemp[i] = arrTxtValue[3 - i][j];
}
arrTemp[4] = 0;
doMove();
for (i = 0; i <= 3; i++)
{
arrTxtValue[3 - i][j] = arrTemp[i];
}
}
break;
case :
for (k = 0; k <= 3; k++)
{
for (j = 0; j <= 3; j++)
{
arrTemp[j] = arrTxtValue[k][3 - j];
}
arrTemp[4] = 0;
doMove();
for (j = 0; j <= 3; j++)
{
arrTxtValue[k][3 - j] = arrTemp[j];
}
}
break;
default:
break;
}
}
private function doMove():void
{
var temp:int = 0;
score++;
//
do
{
for (i = 0; i <= 3; i++)
{
if (arrTemp[i] == 0)
{
if (arrTemp[i] != arrTemp[i + 1])
{
arrTemp[i] = arrTemp[i + 1];
arrTemp[i + 1] = 0;
B_change = true;
}
}
}
temp++;
} while (temp <= 3);
//
do
{
for (i = 1; i < 4; i++)
{
if (arrTemp[i] == arrTemp[i - 1])
{
if (arrTemp[i] != 0)
{
arrTemp[i - 1] = arrTemp[i] * 2;
arrTemp[i] = 0;
B_change = true;
}
}
}
temp++;
} while (temp <= 3);
//
do
{
for (i = 0; i < 4; i++)
{
if (arrTemp[i] == 0)
{
arrTemp[i] = arrTemp[i + 1];
arrTemp[i + 1] = 0;
}
}
temp++;
} while (temp <= 3);
// donothing
}
private function Create_one():void
{
do
{
i = Math.floor(Math.random() * 4);
j = Math.floor(Math.random() * 4);
} while (arrTxtValue[i][j] != 0);
if (Math.random() < 0.)
{
arrTxtValue[i][j] = arrValue[1];
}
else
{
arrTxtValue[i][j] = arrValue[2];
}
}
private function ValueToTxt(e:Event):void
{
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
var n:int = arrValue.indexOf(arrTxtValue[i][j]);
arrTxtColor[i][j].backgroundColor = arrColor[n];
arrTxt[i][j].text = arrTxtValue[i][j];
arrTxt[i][j].setTextFormat(tf);
}
}
//
if (B_change)
{
Create_one();
B_change = false;
}
}
private function GameOver():void
{
stage.removeEventListener(Event.ENTER_FRAME, ValueToTxt);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, KEYDOWN);
}
private function TF1():void
{
tf.align = "center";
tf.bold = true;
tf.size = ;
tf.font = "Arial";
tf.color = 0xFFFFFF;
}
private function Depth():void
{
addChild(ContainTxt); //文本框容器
var Frame:Sprite = FRAME();
addChild(Frame); //结构
FrameTxt(); //文本框
}
private function FrameTxt():void
{
for (i = 0; i < 4; i++)
{
arrTxt[i] = new Array();
arrTxtColor[i] = new Array();
for (j = 0; j < 4; j++)
{
var temptxt:TextField = new TextField();
var temptxtColor:TextField = new TextField();
temptxt.selectable = temptxtColor.selectable = false;
temptxt.x = i * ;
temptxtColor.x = i * ;
temptxt.y = j * + ;
temptxtColor.y = j * ;
temptxtColor.width = temptxtColor.height = ;
temptxtColor.background = true;
ContainTxt.addChild(temptxtColor);
ContainTxt.addChild(temptxt);
arrTxt[i][j] = temptxt;
arrTxtColor[i][j] = temptxtColor;
}
}
}
private function FRAME():Sprite
{
var tempframe:Sprite = new Sprite();
for (i = 0; i <= 4; i++)
{
tempframe.graphics.moveTo(i * , 0);
tempframe.graphics.lineStyle(8, 0xCCCCCC);
tempframe.graphics.lineTo(i * , );
}
for (j = 0; j <= 4; j++)
{
tempframe.graphics.moveTo(0, j * );
tempframe.graphics.lineStyle(8, 0xCCCCCC);
tempframe.graphics.lineTo(, j * );
}
return tempframe;
}
}
}