如何在Ruby中修复NoMethodError?

如何解决如何在Ruby中修复NoMethodError?

我写了一个基于Ruby的后端多人游戏(蛇)。此功能必须接收前端命令并发送游戏的当前状态。但是对于changeside方法,在函数的四行上抛出NoMethod错误,我不知道为什么会因为该类方法而存在。

方法示例

  def changeside(nump,newSide)
     opp = {'R':'L','U':'D','D':'U','L':'R'}
     cx = {'L':-1,'R':1,'U':0,'D':0}
     cx = {'L':0,'R':0,'U':-1,'D':1}
     if newSide!=opposite[players[nump]['side']] && ['R','L','U','D'].count( newSide)==1
       players[nump]['side']['cx'] = cx[newSide]
       players[nump]['side']['cy'] = cy[newSide]
     end

  end

错误示例

2020-10-07 18:01:23 - NoMethodError - undefined method `[]' for nil:NilClass:

我正在运行的功能

def getStatus(game)
      ans = {"opStatus"=>TRUE}
      puts game
      $games[game['gid'.to_i]]['game'].changeside(2,game['side'])
      $games[game['gid'.to_i]]['game'].move(($games[game['gid']]['fid']==game['pid']?1:2))
      ans["gameStatus"] = $games[game['id']]['game'].run
      ans['timer'] = $games[game['id']]['game'].timer
      ans['snake'] = $games[game['id']][($games[game['id']]['fid']==game['pid']?1:2)].snake
      ans['enemy'] = $games[game['id']][($games[game['id']]['fid']==game['pid']?2:1)].snake
      ans['food'] = $games[game['id']]['game'].food
    end

这是JSON发送到函数

{"gid"=>"1","side"=>"R","pid"=>"1"}

解决此问题,我调试了这一刻,但无法进入类方法。 这是类游戏的完整代码。 它位于另一个文件中,并被

调用
`require_relative 'game.rb'`

该类的完整代码

class Game
  attr_accessor :players,:food,:walls,:timer,:run,:winner

  def initialize()
    @players = {}
    @winner = -1
    @players[1] = {'snake'=>[[9,2],[8,[7,2]]}
    @players[1]['cx'] = 0
    @players[1]['cy'] = -1
    @players[1]['side'] = 'U'
    @players[2] = {'snake'=>[[2,9],[2,8],7]]}
    @players[2]['cx'] = -1
    @players[2]['cy'] = 0
    @players[2]['side'] = 'L'
    @timer = 0
    @run = FALSE

    genFood
  end
  def genFood()
    @food = [rand(10)+1,rand(10)+1]
    while  players[1]['snake'].include?(food) || players[2]['snake'].include?(food)
      @food = [rand(10)+1,rand(10)+1]
    end
  end

  def move(nump)

    if @run
      @timer+=0.25
      @players[nump]['snake'].shift
      @players[nump]['snake'].push([@players[id]['snake'][0]+@players[id]['cx'],@players[id]['snake'][1]+@players[id]['cy']])
      if @players[nump]['snake'][0] == food
        @players[nump]['snake'][0].unshift(food)
        @food = [rand(10)+1,rand(10)+1]
        while  players[nump]['snake'].include(food) or players[1]['snake'].include(food)
          @food = [rand(10)+1,rand(10)+1]
        end
      end
      if @player[nump]['snake'].count(@player[nump]['snake'][-1])==2 ||
          @winner = ((nump==1)?2:1)
      elsif @players[((nump==1)?2:1)]['snake'].count(@player[nump]['snake'][-1])==1
        @winner = 0
      else
        if @timer==60
          if @players[1]['snake'].length()>@players[2]['snake'].length()
            @winner = 1
          elsif @players[1]['snake'].length()<@players[2]['snake'].length()
            winner = 2
          else
            winner = 0
          end
        end
      end
    end
  end

  def changeside(nump,newSide)
    opp = {'R':'L','L':'R'}
    cx = {'L':-1,'D':0}
    cx = {'L':0,'D':1}
    if newSide!=opposite[players[nump]['side']] && ['R','D'].count( newSide)==1
      players[nump]['side']['cx'] = cx[newSide]
      players[nump]['side']['cy'] = cy[newSide]
    end
  end

end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?