Flash趣味游戏制作:猜数字



  今天向大家介绍一款使用Flash制作的有趣的小游戏:猜数字。这个游戏是许多PDA和手机上的必备游戏之一,深受大家的喜爱。

  游戏规则:每次游戏开始前都会产生一个随机的四位数,你的任务就是根据游戏对你每次试探给出的反馈不断试探,力图用最少的试探次数猜出正确的答案。

  在游戏界面的左下角可以输入四个数字,但是不能有重复的数。输入后按右边的确定按钮(这里是“GO”),游戏会对你的输入和程序产生的数进行判断,如果有n个数字的值正确且位置正确,会显示nA;如果有n个数字在四个随机数范围内,但是位置不对,则提示nB。如果最后提示为4A,则你的判断完全正确。

  游戏演示如图1 所示:


图1

  一、界面制作

  1、首先在Flash中新建一个影片,将影片默认图层命名为bg,在第3帧插入关键帧,使用绘图工具绘制图2所示的游戏背景,并将图层延续到第20帧。


图2

  2.在bg层上面插入图层input,在第3帧插入关键帧,使用矩形工具绘制一个带变框的正方形,并复制3个副本,按照图3所示的顺序排列好,作为游戏数字输入框的背景。


图3

  3、在input上插入图层inputbox,在第3 帧插入关键帧,使用文本工具绘制四个文本框,大小和前面所绘矩形相同,在属性面板中设置为输入文本框,然后从左到右排列好,分别放置在四个正方形上面,并设置文本变量名为txt1到txt4,如图4所示:


图4

  4、新建一个图层ab,在第3帧插入关键帧,在此层用来设置游戏对玩家输入数字的反馈信息。先用矩形工具绘制一个无填充色的矩形边框,然后使用文本工具在矩形框里绘制两个动态文本框,分别设置变量名为txta和txtb,然后分别在两个文本框右边输入字母A和B,如图5所示:


图5

  5、再添加一个图层info,在第3帧插入关键帧,使用文本工具绘制七个动态文本,从上向下排列,分别设置其文本变量为t1到t7,用来显示每此游戏的所有提示记录,也就是每次有7次猜数的机会。然后再绘制一个动态文本框,放置在界面的最右面,设置其文本变量为txtwin,用来显示最后的正确答案,最后在舞台右下角制作一个确定按钮,每此输入完输入后,按下这个按钮就可以进行数字的判断,如图6所示:



图6

  下面进入AS代码编写。

  二、代码的编写

  给确定按钮添加如下Action:

  //下面代码的主要功能是:对玩家输入的数字和游戏产生的数字进行比较,从而得出*A*B的结论,即提示玩家几个数字猜对,几个猜错。

  on (press) {
    a = b=0;  //初始化变量a,b的值为0,a,b分别代表了A和B的数量

    if (txt1 == shu1) {
      a++;  //如果玩家输入的第1个数字和游戏产生的第1个数字相同,
          //则A的数量增1
    } else {
      if (txt1 == shu2 or txt1 == shu3 or txt1 == shu4) {
        b++;
      }//否则和游戏产生的其它3个数字比较,如果和其中一个相同,B数量增1
    }

    if (txt2 == shu2) {
      a++;  //如果玩家输入的第2个数字和游戏产生的第2个数字相同,
          //则A的数量增1
    } else {
      if (txt2 == shu1 or txt2 == shu3 or txt2 == shu4) {
        b++;
      }//否则和游戏产生的其它3个数字比较,如果和其中一个相同,B数量增1
    }

    if (txt3 == shu3) {
      a++;  //如果玩家输入的第3个数字和游戏产生的第3个数字相同,
      //则A的数量增1
    } else {
      if (txt3 == shu1 or txt3 == shu2 or txt3 == shu4) {
        b++;//否则和游戏产生的其它3个数字比较,如果和其中一个相同,B数量增1
      }
    }

    if (txt4 == shu4) {
      a++;  //如果玩家输入的第4个数字和游戏产生的第4个数字相同,
          //则A的数量增1
    } else {
      if (txt4 == shu1 or txt4 == shu2 or txt4 == shu3) {
        b++;
      }//否则,和游戏产生的其它3个数字比较,如果和其中一个相同,B的数量增1
    }

    if (txt1 == txt2 or txt1 == txt3 or txt1 == txt4) {
      gotoAndPlay("dd");
    }
    if (txt2 == txt3 or txt2 == shu4) {
      gotoAndPlay("dd");
    }
    if (txt3 == txt4) {
      gotoAndPlay("dd");
      //上面三个if语句对玩家输入的数字进行判断,如果4个数字之间有相同的数,跳到dd帧,警告玩家输入非法
    } else {
      if (a == 4) {
        gotoAndPlay("win");
        //如果此时判断a的值为4,也就是A的熟练达到4个,则玩家全部判断对了,跳到帧win显示胜利信息
      } else {
        txta = a;
        txtb = b;
      }//如果游戏没结束,既玩家没全部判断对,设置txta和txtb两个文本框的值为A和B的数量
    c[n] = "第"+(n+1)+"次"+a+"A"+b+"B";
    //设置游戏反馈字符串,提示当前的信息,其中n为变量
    t1 = c[0];
    //将c[n]中的变量替换为0,显示"第1次*A*B的信息",下面的代码作用相同
    t2 = c[1];
    t3 = c[2];
    t4 = c[3];
    t5 = c[4];
    t6 = c[5];
    t7 = c[6];
    N++;
   }
  }

  on (release) {
    txt1 = txt2=txt3=txt4="";  //释放此按钮后,清空四个输入文本框,等待用户重新判断
    if (n == 7 and a != 4) {  //如果已经判断了7次,A的数量还没达到4,则游戏失败
      gotoAndPlay("f");
    }
  }

  6、在第10帧插入空白关键帧,设置帧标签为dd,设置如图7所示的警告界面:


图7

  给右下角的返回按钮添加Action:

  on (release) {
    txt1 = txt2=txt3=txt4=txta=txtb="";  //设置输入文本框为空
    gotoAndPlay("pd");  // 重新回到游戏状态
  }
  同时给此关键帧添加AS; stop();

  7、分别在15帧和20帧插入空白关键帧,设置游戏失败和胜利的提示画面,并设置帧标签分别为f(失败)和w(胜利),具体设置可以根据自己的意愿设置即可。最后给两帧都加上AS; stop();

  8、最后添加图层Action,用来设置游戏的主As。

  给第1帧添加如下AS;

  shu1 = int(random(9));
  shu2 = int(random(9));
  shu3 = int(random(9));
  shu4 = int(random(9));
  //上面4句都是取0到9之间的随机数,每此游戏开始确保数字不重复
  a=0;b=0;
  N=0;
  //定义并初始化3变量

  给第2帧添加如下AS;

  if (shu1==shu2 or shu1==shu3 or shu1==shu4)
    gotoAndPlay(1);
  if (shu2==shu3 or shu2==shu4)
    gotoAndPlay(1);
  if (shu3==shu4)
    gotoAndPlay(1);
  //上面的代码判断游戏产生的随机数是否有重复,如果重复,则返回到第1 帧//重新取数

  给第3帧添加如下AS,并且设置此帧标签为pd;
  stop ();//游戏停在此帧,等待玩家输入数字
  if (txt1==shu1)
    a=a+1;
  if (txt2==shu2)
    a=a+1;
  if (txt3==shu3)
    a++;
  if (txt4==shu4)
    a++;
  //上面代码的作用:如果输入的数分别和随机产生的数字每位都对应相同,则变//量a的值加1,这几句其实是用来确定游戏反馈信息*A*B中A的数量
  c=new Array(7);//建立一个含有7个元素的数组对象
  c[0]=c[1]=c[2]=c[3]=c[4]=c[5]=c[6]="";  //对数组中的7个元素分别赋值为空

  最后时间轴如图8所示;


图8

  这样,一个趣味的小游戏就制作完成了,发布出来考考自己的智力吧。

  源文件下载