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

Project1

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

[已经解决] 做了一个五子棋的小游戏,不知道什么问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
403 小时
注册时间
2015-8-30
帖子
395
跳转到指定楼层
1
发表于 2017-1-14 12:13:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. # 常量
  2. module Con
  3.   Size = 480
  4.   White = Color.new(255, 255, 255)
  5.   Black = Color.new(0, 0, 0)
  6.   Gray = Color.new(127, 127, 127)
  7. end
  8. Graphics.resize_screen(Con::Size, Con::Size) # 画面大小
  9. Graphics.frame_rate = 30                     # 帧速率
  10. # 棋盘
  11. class Checkerboard < Sprite
  12.   attr_reader(:size)
  13.   def initialize(size = 15)
  14.     super()
  15.     bitmap = Bitmap.new(Con::Size, Con::Size)
  16.     rect = Rect.new(0, 20, Con::Size, Con::Size)
  17.     bitmap.fill_rect(rect, Con::Gray)
  18.     for i in 1..size
  19.       rect = Rect.new(Con::Size/(size+1), Con::Size/(size+1)*i, Con::Size-Con::Size/(size+1)*2, 1)
  20.       bitmap.fill_rect(rect, Con::Black)
  21.     end
  22.     for i in 1..size
  23.       rect = Rect.new(Con::Size/(size+1)*i, Con::Size/(size+1), 1, Con::Size-Con::Size/(size+1)*2)
  24.       bitmap.fill_rect(rect, Con::Black)
  25.     end
  26.     for i in 1..3
  27.       rect = Rect.new(Con::Size/4*i-1, Con::Size/4*(4-i)-1, 2, 2)
  28.       bitmap.fill_rect(rect, Con::Black)
  29.       rect = Rect.new(Con::Size/4*(4-i)-1, Con::Size/4*i-1, 2, 2)
  30.       bitmap.fill_rect(rect, Con::Black)
  31.     end
  32.     @size = size
  33.     @bitmap = bitmap
  34.   end
  35.   def dispose
  36.     @bitmap.dispose
  37.     super
  38.   end
  39. end
  40. # 下棋
  41. class Playing
  42.   # 主逻辑
  43.   def main
  44.     start
  45.     loop { update }
  46.   end
  47.   # 开始处理
  48.   def start
  49.     Mouse.activate
  50.     @board = Checkerboard.new                    # 棋盘
  51.     @piece = Sprite.new                          # 棋子
  52.     @piece.z = 1
  53.     @piece.bitmap = Bitmap.new(Con::Size, Con::Size)
  54.     @table = Table.new(@board.size, @board.size) # 棋局
  55.     for i in [email protected]
  56.       for j in [email protected]
  57.         @table[i, j] = 0
  58.       end
  59.     end
  60.     @history = [@table]                          # 历史棋局
  61.     [url=home.php?mod=space&uid=8407]@black[/url] = true                                # 下棋方
  62.   end
  63.   # 更新
  64.   def update
  65.     Graphics.update
  66.     Mouse.update
  67.     table = @table
  68.     if Mouse.trigger?(:L)    # 落子
  69.       @table[Mouse.x/(Con::Size/@board.size),Mouse.y/(Con::Size/@board.size)] = (@black ? 1 : 2)
  70.       @history << @table
  71.       @black = !@black
  72.     elsif Mouse.trigger?(:R) # 悔棋
  73.       @history.pop
  74.       @table = @history[-1]
  75.       @black = !@black
  76.     end
  77.     # 更新棋子
  78.     if @table != table
  79.       for i in [email protected]
  80.         for j in [email protected]
  81.           rect = Rect.new(Con::Size/(@board.size+1)*i-2, Con::Size/(@board.size+1)*j-2, 4, 4)
  82.           case @table[i, j]
  83.           when 0
  84.             @piece.bitmap.clear_rect(rect)
  85.           when 1
  86.             @piece.bitmap.fill_rect(rect, Con::Black)
  87.           when 2
  88.             @piece.bitmap.fill_rect(rect, Con::White)
  89.           end
  90.         end
  91.       end
  92.     end
  93.   end
  94. end
  95. Playing.new.main
复制代码
用了Sion大神的鼠标系统(VA鼠标脚本 6/9 更新 v2.32 by Sion)以及鼠标系统中用到的Cache模块,此外没有任何别的脚本被用到。
开始测试之后,画面全黑,除了鼠标可见可动;单击右键发生NoMethodError,脚本82行,nil没有'[]'方法。不知是为什么,特此请教。
小仙女一枚~

Lv4.逐梦者

梦石
0
星屑
9727
在线时间
3227 小时
注册时间
2011-3-24
帖子
739

开拓者

2
发表于 2017-1-15 00:25:00 | 只看该作者
本帖最后由 Mr.Jin 于 2017-1-15 00:30 编辑

你这个小游戏写的问题还比较多,列几个吧…

首先你这个写法,会开一个叫bitmap的临时变量,
那肯定起不到画棋盘的作用,不黑屏才怪
应前加self.

悔棋这部分首先要加个判断嘛,然后pop用法也不对

还有 你要存历史纪录 应该把table做一个副本 直接存引用是没用的

metz.zip (1.02 KB, 下载次数: 93)

最后,给你简单改了改,望能做出一个完整的五子棋游戏

点评

谢谢,  发表于 2017-1-15 11:52

评分

参与人数 1梦石 +1 收起 理由
RaidenInfinity + 1 认可答案

查看全部评分

>>→Lanza Games 2020←<<
Lanza Schneider
浪子心,孤星梦永远流浪……
~不会放弃,我的精力永远充沛~
>>>>>Lanza Adventure<<<<<
>>>>>Lanza的新年派对!<<<<<
>>>>>Lanza的口袋心脏病!<<<<<
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 03:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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