设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3096|回复: 5
打印 上一主题 下一主题

[原创发布] 水蓝的脚本教程之井字棋的脚本实现

 关闭 [复制链接]

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
跳转到指定楼层
1
发表于 2009-8-1 19:00:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 dbshy 于 2009-8-1 19:01 编辑

大家好,大家好,我是水蓝
爱生活,爱RUBY,发扬奥特曼精神
这个本来不准备写教程的,昨天晚上打DOTA比较郁闷,就写了个井字棋的小游戏
结果写完后突然看到以前柳之一曾经发过井字棋,所以就不发这个游戏了,就写个教程


做为一个有文化有素养有道德有人品的四有药师,在下非常有人品的
提醒各位,这个教程需要有一点脚本知识,另外高手退散


首先写两个类Scene_jzq 和 Spriteset_jzq
scene_jzq
作为游戏的场景,主刷新
spriteset_jzq
则作为棋盘和棋子等BITMAP的显示

忘了说了,必须要一个很重要的外挂脚本,那就是鼠标脚本
没必要把整个鼠标脚本都拷下来,只需要把鼠标模块拷下来
就差不多了,另外上面的API声明一定要

好,现在来说一下算法
首先就是生成两个二维数组,这个用来对AI和判断胜负有帮助
   @tp_yq = Table.new(4, 4)
    @tp_cc = Table.new(4, 4)
   
     for i in 1..3
      for j in 1..3
        @tp_yq[i,j] = 0
        @tp_cc[i,j] = 0
      end
    end
   
为什么要两个呢?因为有两种不同的棋子
如果一个位置下了棋子的响应的数组元素赋值  
第一种棋子赋为1,第二种棋子赋为2,比如[1,1]的位置下了第一个 棋子,就是@tp_yq[1,1] = 1


然后就是判断胜负的方法,井字棋的胜负只有八种情况
所以用枚举法来判断胜负


    if @tp_yq[1,1] + @tp_yq[1,2] + @tp_yq[1,3] == 3 or
       @tp_yq[2,1] + @tp_yq[2,2] + @tp_yq[2,3] == 3 or
       @tp_yq[3,1] + @tp_yq[3,2] + @tp_yq[3,3] == 3 or
       @tp_yq[1,1] + @tp_yq[2,1] + @tp_yq[3,1] == 3 or
       @tp_yq[1,2] + @tp_yq[2,2] + @tp_yq[3,2] == 3 or
       @tp_yq[1,3] + @tp_yq[2,3] + @tp_yq[3,3] == 3 or
       @tp_yq[1,1] + @tp_yq[2,2] + @tp_yq[3,3] == 3 or
       @tp_yq[1,3] + @tp_yq[2,2] + @tp_yq[3,1] == 3 then
       $judge = 1
    end   
   
    if @tp_cc[1,1] + @tp_cc[1,2] + @tp_cc[1,3] == 6 or
       @tp_cc[2,1] + @tp_cc[2,2] + @tp_cc[2,3] == 6 or
       @tp_cc[3,1] + @tp_cc[3,2] + @tp_cc[3,3] == 6 or
       @tp_cc[1,1] + @tp_cc[2,1] + @tp_cc[3,1] == 6 or
       @tp_cc[1,2] + @tp_cc[2,2] + @tp_cc[3,2] == 6 or
       @tp_cc[1,3] + @tp_cc[2,3] + @tp_cc[3,3] == 6 or
       @tp_cc[1,1] + @tp_cc[2,2] + @tp_cc[3,3] == 6 or
       @tp_cc[1,3] + @tp_cc[2,2] + @tp_cc[3,1] == 6 then
       $judge = 2
    end   
  end     
  
  
   现在就是写主刷新的时候
  分为两个部分,一个是我方的刷新,一个是电脑的刷新
  
我方刷新部分
  IF 按下鼠标左键 THEN
   IF 在棋盘区域 THEN
    获得鼠标的位置,这里不仅是坐标,而且要找出在二维数组中
    的位置
    IF 位置没有下过 THEN
     显示棋子
     在所在的二维数组中赋值
   

  敌方除了要自己写AI算出要走的位置,其他的一样
  
  脚本如下
  case $game_phase
      when 1
        if Input.trigger?(Input::C) then
         
          if in_area? then
            course_x,course_y = judge_course_positon
            if @tp_yq[course_x,course_y] != 1 and  @tp_cc[course_x,course_y] != 2 then
              @spriteset_jzq.require_position(1, ((course_y - 1) * 3 + course_x))
              @tp_yq[course_x,course_y] = 1
              $game_phase = 2
            end
          end
        end
        
      when 2
        course_x,course_y = make_action
        @spriteset_jzq.require_position(2, ((course_y - 1) * 3 + course_x))
        @tp_cc[course_x,course_y] = 2
        $game_phase = 1
      end
      
    end
   
   最后就是电脑的AI
   我这个人比较懒,就说一下大概的思路
   
  一.电脑先手一定要强中央的位置,这一点是毋庸置疑的
  二.电脑攻击,如果在赢的八种情况中,如果任意一种情况上有二个棋子的话,就要下第三个
   三.电脑防御,同上
   
   
   上面所说都可以用枚举法,也就是IF写出来
   
   棋盘和棋子等的显示,比较简单,就不说了
   
   
   更多的内容,可以看我的工程中的脚本
    Project5.rar (192.93 KB, 下载次数: 314)

Project5.rar

192.93 KB, 下载次数: 149

来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。

Lv1.梦旅人

~琉璃の雪~<

梦石
0
星屑
49
在线时间
36 小时
注册时间
2008-11-6
帖子
3678
2
发表于 2009-8-1 19:10:42 | 只看该作者
先占个楼,慢慢学习,感谢LZ支持小游戏区。
~现在开始自绘头像~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
433 小时
注册时间
2007-5-1
帖子
993
3
发表于 2009-8-1 20:44:49 | 只看该作者
嗯,支持一下。
其实在棋子的赋值上面下点功夫的话,用一个二维数组记录棋盘状态足矣。

例如第一种棋子赋值1,第二种棋子赋值10,那么判定时3和30就分别代表了两种棋子的胜负了。

嗯,不能浪费签名了,打广告。本人的悲剧作品:
坑化游戏《龙之影》      R剧《星空》     小游戏《剑与拳头》
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
4
发表于 2009-8-1 21:17:48 | 只看该作者
话说最近还真多人写教程~
顶顶db前辈~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-3-17
帖子
132
5
发表于 2009-8-2 18:59:53 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6860
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

6
发表于 2009-8-2 21:43:49 | 只看该作者
写教程的人多是好事:lol











你知道得太多了

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-28 08:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表