查看: 7325|回复: 31

[随意闲聊] [挨球一下]国际象棋,Ruby的二维数组,汗[附图]

  [复制链接]
梦石
0
星屑
1580
在线时间
1564 小时
注册时间
2008-7-30
回帖
4207

贵宾

发表于 2009-11-28 09:41:01 | 显示全部楼层 |阅读模式

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

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

×
额,最近心血来潮想做一个国际象棋。顺便挨球一下伪3D(锯齿啊……)。

QQ截图未命名.jpg

脚本+事件,今天早上用VB的方式弄二维数组,郁闷了,突然要想起,要这样。

现在先把基本的做好吧……敌人的AI后面再说。

QQ截图未命名2.jpg

闪……

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2009-11-28 09:42:23 | 显示全部楼层
不错不错……我建议全部做成NPC模样更好看一些(采用java国际象棋的素材),然后再加上横板的攻击动画……
回复

使用道具 举报

梦石
0
星屑
1580
在线时间
1564 小时
注册时间
2008-7-30
回帖
4207

贵宾

 楼主| 发表于 2009-11-28 09:44:45 | 显示全部楼层
不错不错……我建议全部做成NPC模样更好看一些(采用java国际象棋的素材),然后再加上横板的攻击动画……
精灵使者 发表于 2009-11-28 09:42


加上攻击动画是个好点子。NPC的模样我没有素材{:nm_7:}

我之前的想法是,脚本实现AI算法和行旗判断,事件只负责外壳{:nm_7:}。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2009-11-28 09:50:07 | 显示全部楼层
本帖最后由 精灵使者 于 2009-11-28 09:54 编辑

国王和王后应该RMXP默认素材都有呢。
士兵,战士和武士,魔法师都有吧……
p.s.国王-king01
王后-queen01
象-mage04
城堡-warrior02
骑士-Lancer02
卒子-soilder01
至于黑白可以用tune(色调)来改变颜色
至于攻击画面,可以寻找其对应的战斗图,或者自己做行走图战斗恩。
另外棋盘可以使用默认的RMXP系列地图绘制,可以画成森林,沙漠,水域等各种地形……
p.s.如果想练3D的话可以搜索“WARCHESS"这个PC游戏,有很不错的地形和棋子素材
回复

使用道具 举报

梦石
0
星屑
1580
在线时间
1564 小时
注册时间
2008-7-30
回帖
4207

贵宾

 楼主| 发表于 2009-11-28 09:56:54 | 显示全部楼层
本帖最后由 DeathKing 于 2009-11-28 10:02 编辑
国王和王后应该RMXP默认素材都有呢。
士兵,战士和武士,魔法师都有吧……
p.s.国王-king01
王后-queen01
象-mage04
城堡-warrior02
骑士-Lancer02
卒子-soilder01
至于黑白可以用tune(色调)来改变颜色 ...
精灵使者 发表于 2009-11-28 09:50


恩,我都用着。

我使用二维数组来表示棋子的。
每个变量都有一个值(两位),00(0)表示空,十位的1表示黑子,2表示白字。
个位上1表示兵卒,2表示城堡,类推。
这样判定其实就是判定变量而已。
设定一个OFFSET,把事件的XY坐标系与我这个棋盘的坐标系对应。然后就好办多了。
  1. =begin
  2. ■  0 1 2 3 4 5 6 7        1 -> 黑   2 -> 白
  3. 022 23 24 26 25 24 23 22        1 -> 兵卒
  4. 121 21 21 21 21 21 21 21        2 -> 城堡
  5. 200 00 00 00 00 00 00 00        3 -> 骑士
  6. 300 00 00 00 00 00 00 00        4 -> 主教
  7. 400 00 00 00 00 00 00 00        5 -> 皇后
  8. 500 00 00 00 00 00 00 00        6 -> 国王
  9. 611 11 11 11 11 11 11 11
  10. 712 13 14 16 15 14 13 12
  11. =end
  12. # 初始化变量
  13. $chess = Array.new(8){Array.new(7,0)}

  14. # 二维数组
  15. $chess[0][0] = 22
  16. $chess[0][1] = 23
  17. $chess[0][2] = 24
  18. $chess[0][3] = 26
  19. $chess[0][4] = 25
  20. $chess[0][5] = 24
  21. $chess[0][6] = 23
  22. $chess[0][7] = 22
  23. $chess[7][0] = 12
  24. $chess[7][1] = 13
  25. $chess[7][2] = 14
  26. $chess[7][3] = 16
  27. $chess[7][4] = 15
  28. $chess[7][5] = 14
  29. $chess[7][6] = 13
  30. $chess[7][7] = 12
  31. for i in 0..7
  32.   $chess[1][i] = 21
  33.   $chess[6][i] = 11
  34.   $chess[2][i] = 00
  35.   $chess[3][i] = 00
  36.   $chess[4][i] = 00
  37.   $chess[5][i] = 00
  38. end
复制代码

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2009-11-28 09:59:32 | 显示全部楼层
本帖最后由 精灵使者 于 2009-11-28 10:02 编辑

可以直接用图片名判断应该好得多,恩恩。
例如可以使用角色的面向来代表是谁,而且使用图片名来代表棋子要好得多。
你这样会出现很多问题,例如兵(卒)的升变,王车移位等做法都可能要困难些……
例如
黑方无论如何走,停下来都是面朝上。
白方无论如何走,停下来都是面朝下。
然后用面向+图片名判断,就可以准确的判断出是什么棋子。
回复

使用道具 举报

梦石
0
星屑
1580
在线时间
1564 小时
注册时间
2008-7-30
回帖
4207

贵宾

 楼主| 发表于 2009-11-28 10:03:33 | 显示全部楼层
可以直接用图片名判断应该好得多,恩恩。
例如可以使用角色的面向来代表是谁,而且使用图片名来代表棋子要好得多。
你这样会出现很多问题,例如兵(卒)的升变,王车移位等做法都可能要困难些……
例如
黑方无论如何 ...
精灵使者 发表于 2009-11-28 09:59


恩,似乎不错。
之前是根据某用C写推箱子的算法写的,所以有点挨球{:nm_7:}
我做两个版本看看……

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2009-11-28 10:05:18 | 显示全部楼层
本帖最后由 精灵使者 于 2009-11-28 10:07 编辑

呵呵……这是从“我的家”那里引发的灵感呢。
另外现代的国际象棋还有“选中我方棋子的时候可以显示其行走路线(参考战棋的移动)”的模式呢。
p.s.你可以直接使用战棋模版来做,恩恩。
还有,RMXP里面有地形标志这一说,黑格设置为0,白格设置为1,能节约不少游戏的算法,你试验一下看哦~
例如横走就是0-1或者1-0的走法,斜走就是0-0或者1-1的走法……
回复

使用道具 举报

梦石
0
星屑
1580
在线时间
1564 小时
注册时间
2008-7-30
回帖
4207

贵宾

 楼主| 发表于 2009-11-28 10:15:21 | 显示全部楼层
呵呵……这是从“我的家”那里引发的灵感呢。
另外现代的国际象棋还有“选中我方棋子的时候可以显示其行走路线(参考战棋的移动)”的模式呢。
p.s.你可以直接使用战棋模版来做,恩恩。 ...
精灵使者 发表于 2009-11-28 10:05


这个我想到了,所以才用二维数组。
例如,我有一个获取当前所指事件的x坐标和y坐标的函数

case $chess[get_now_x + OFFSET][get_now_y + OFFSET]
when 11
  # 卒
  ……
  (判定是否为第一次移动等一大堆判定,如是否有障碍物)
  for i in 1..2
    # 判定横向是否有障碍物
    set_red(x-offset,y-offset-i) if $chess[get_now_x + OFFSET][get_now_y + OFFSET] = 00
  end
  (修改地图元件,应为是伪3D,如果现实图片的话就和地图合不上,说实话,忘记怎么改了)
end

……等等

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2009-11-28 11:09:58 | 显示全部楼层
修改地图元件?
如果是偶的话,简单的角色移动不就可以么?
p.s.那些棋子是行走图……而不是单独图片
至于3D?启用远小近大即可,恩。
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部