永发信息网

flash纸牌记忆游戏源码,教教我!

答案:2  悬赏:60  手机版
解决时间 2021-03-09 00:29
  • 提问者网友:末路
  • 2021-03-08 21:38
最近学习制作Flash游戏中!
遇到不会的了,请大虾给我段代码?
代码可以加注释最好不过!

首先开始时!
会有N张纸牌在里面,全部看不见是什么牌的,即是背面!
我点一张牌,他就会翻过来,而且看见是什么牌的了。
继续点第二张,如果和第一张的数字相同,就会对消。
如果不相同,那这两张牌就会翻回背面。
继而再开始上面的步罩。
大概实现上面的代码就行了,其它的我自己会完善。
最佳答案
  • 五星知识达人网友:廢物販賣機
  • 2021-03-08 22:46
1. 先创建一个影片剪辑"b",影片剪辑的第一帧画上一个"牌",这个牌是还没反过来的那种.(注册点在牌的左上角)
  2. 在影片剪辑"b"的第2帧插入一个空白关键帧.

  3. 创建一个新的影片剪辑"k",这个影片剪辑的每一帧就是一种以经翻过来的牌,也就是说,这里的每一帧上,你画上一个牌,每一帧都是一个不同的样式就好了.一共有多少种牌你自己决定.

  4.回到影片剪辑"b"的编辑中,在空的第2帧上放上你的影片剪辑"k",最好让他和第一帧的"牌"重合(也就是播放起来不会抖动).

  5.选中影片剪辑"b"的第一帧,按F9,在打开的动作面板中输入: stop();

  6.选中影片剪辑"b"的第二帧中的那个影片剪辑"k",在属性面板的"实例名称"一栏填写"kid".然后,选中影片剪辑"b"第2帧以后的一帧(总之播放从2帧到这一帧的时间就是牌显示的时间,自己多试试就知道),按F5插入帧(注意不是关键帧!).

  7.在"库"中选中影片剪辑"b",点右键,选"链接",在出现的对话框中,勾选第一项和第3项,并在"标识符"一栏填写"block".

  8.回到主场景,选择你要开始游戏的那一帧(比如说第一帧),按F9,在打开的动作面板中输入(注意标点):

  _root.h = 5;
  _root.w = 4;
  _root.k = 10;
  _root.prox = 0;
  _root.proy = 0;
  _root.xscl = 10;
  _root.yscl = 10;
  _root.hei = 80;
  _root.wid = 80;
  //--------------------------------------------------------------------------
  stop();
  _root.score = 0;
  _root.blocks = [];
  _root.firx = 0;
  _root.firy = 0;
  for (i=1; i<=_root.w; i++) {
  _root.blocks[i] = [];
  for (j=1; j<=_root.h; j++) {
  _root.blocks[i][j] = 0;
  }
  }
  for (i=1; i<=_root.k; i++) {
  var px = random(_root.w)+1;
  var py = random(_root.h)+1;
  while (_root.blocks[px][py]>0) {
  px = random(_root.w)+1;
  py = random(_root.h)+1;
  }
  _root.blocks[px][py] = i;
  while (_root.blocks[px][py]>0) {
  px = random(_root.w)+1;
  py = random(_root.h)+1;
  }
  _root.blocks[px][py] = i;
  }
  for (i=1; i<=_root.w; i++) {
  for (j=1; j<=_root.h; j++) {
  with (_root) {
  attachMovie("block", "block"+i+"/"+j, getNextHighestDepth(), {_x:prox+(j-1)*(wid+xscl), _y:proy+(i-1)*(hei+yscl),_height:_root.hei,_width:_root.wid});
  }
  _root["block"+i+"/"+j].px = i;
  _root["block"+i+"/"+j].py = j;
  _root["block"+i+"/"+j].k = _root.blocks[i][j];
  _root["block"+i+"/"+j].onMouseDown = function() {
  var xx = _root._xmouse;
  var yy = _root._ymouse;
  if((xx-this._x>0 && xx-this._x<_root.wid) && (yy-this._y>0 && yy-this._y<_root.hei)){
  if (_root.firx == 0) {
  this.gotoAndStop(2);
  this.kid.gotoAndStop(this.k);
  _root.firx = this.px;
  _root.firy = this.py;
  } else if (_root.firx == this.px && _root.firy == this.py) {
  this.gotoAndStop(1);
  _root.firx = 0;
  _root.firy = 0;
  } else {
  if (_root.blocks[this.px][this.py] == _root.blocks[_root.firx][_root.firy]) {
  _root.score++;
  _root["block"+_root.firx+"/"+_root.firy].removeMovieClip();
  _root.firx = 0;
  _root.firy = 0;
  if(_root.score >= _root.k){
  _root.gotoAndStop(【这里写上游戏胜利后主场景将要跳转的帧数】);
  }
  this.removeMovieClip();
  } else {
  _root["block"+_root.firx+"/"+_root.firy].play();
  _root.firx = 0;
  _root.firy = 0;
  this.gotoAndPlay(2);
  this.kid.gotoAndStop(this.k);
  }
  }
  }
  };
  }
  }

  在虚线前的语句你都可以改等号之后的数字:
  h -- "牌"矩阵的横个数;
  w -- "牌"矩阵的纵个数;
  k -- "牌"的种类,每个种类将会创建一对牌;
  (注意!!!对于这3个量,你必须满足: h*w = 2*k 否则将会使得flash卡掉!)
  prox -- 牌矩阵的左上角横坐标.
  proy -- 牌矩阵的左上角纵坐标.
  xscl -- 牌的横坐标间距.
  yscl -- 牌的纵坐标间距.
  hei -- 牌的高度.
  wid -- 牌的宽度.

  还有,黑色框框中的东西也要你自己改....

  好了,这样就应该和你说的差不多了。你看看还有没什么不对的地方?或者你给个邮箱什么的,我把文件发过去给你也行。

  题外话:这个是我手工打了半个小时的。。。怎么样也得加点分吧。。。
全部回答
  • 1楼网友:妄饮晩冬酒
  • 2021-03-08 22:54
任务占坑
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯