Das folgende ist mein Code. Ich habe versucht, nur den Code einzufügen, an dem ich das Problem vermute.Ruby NoMethodError - Undefinierte Methode
Klasse Ship
enthält getStatus
:
class Ship
def initialize(name, size, status, shipNumber, firedUpon)
@name = name
@size = size
@status = status
@shipNumber = shipNumber
@firedUpon = firedUpon
end
def setSize(nSize)
@size = nSize
end
def getSize
return @size
end
def setName(nName)
@name = nName
end
def getName()
return @name
end
def setStatus(nStatus)
@status = nStatus
end
def getStatus
return @status
end
def setFiredUpon(nFired)
@firedUpon = nFired
end
def getFiredUpon
return @firedUpon
end
def setShipNumber(nNum)
@shipNumber = nNum
end
def getShipNumber
return @shipNumber
end
def ==(rhs)
if (@name !=rhs.getName() || @size != rhs.getSize() || @status != rhs.getStatus() || @shipNumber != rhs.getShipNumber() || @firedUpon != rhs.getFiredUpon())
return false
end
return true
end
end
Klasse Vorstand fordert getStatus und enthält rangeIsOccupied:
load 'ship.rb'
class Board
def initialize()
@gameBoard = Array.new(100)
@Ships = Array.new(5)
#initialize all ships on board
r = 0
while(r < 100)
@gameBoard[r] = Ship.new('', -1, false, -1, false)
r = r + 1
end
@Ships[0] = Ship.new('Carrier', 5, true,0, false)
@Ships[1] = Ship.new('BattleShip', 4, true,1, false)
@Ships[2] = Ship.new('Cruiser', 3, true,2, false)
@Ships[3] = Ship.new('Submarine', 3, true,3, false)
@Ships[4] = Ship.new('Destroyer', 2, true,4, false)
end
def printBoard()
board_size = 10
alphabet = 'abcdefghijklmnopqrstuvwxyz'
puts 'x = hit ship' "\n" 'o = ship on board' "\n" 'm = empty space' "\n"
puts '---------------------------------------------------------' "\n"
puts ' |A| |B| |C| |D| |E| |F| |G| |H| |I| |J|'
s = 0
rownum = 0
printrow = true
while(s < 100)
if printrow
print rownum
print ' - '
print ' '
printrow = false
end
if @gameBoard[s].getShipNumber() != -1 && @gameBoard[s].getFiredUpon()
print 'x'
elsif([email protected][s].getStatus)
print 'm'
else
print 'o'
end
if s % 10 == 9
print "\n"
printrow = true
rownum = rownum + 1
else
print ' '
end
s = s + 1
end
end
def isValidDirection(x1, y1, x2, y2)
if x1 == x2 || y1 == y2
return true
end
return false
end
def rangeIsOccupied(x1, y1, x2, y2)
#if horizontal
if(y1 == y2)
while(x1 != x2)
if @gameBoard[(y1*10)+x1].
return true
end
if x1 > x2
x1 = x1 - 1
else
x1 = x1 + 1
end
end
if @gameBoard[(y1*10)+x1].getStatus
return true
end
else
while y1 != y2
if @gameBoard[(y1*10)+x1].getStatus
return true
end
if y1 > y2
y1 = y1 - 1
else
y1 = y1 + 1
end
end
if @gameBoard[(y1*10)+x1].getStatus
return true
end
end
return false
end
Klasse Game
Anrufe getBoard()
und randomizeFleet
, der Beginn der Problem:
load 'player.rb'
class Game
def initialize()
@p1 = Player.new('', 1, true)
@p2 = Player.new('cpu', 2, false)
gamemode = 0
puts '---------------------------------------------------------'
print "Gamemodes:\n1. Player vs. CPU\n2. CPU vs. CPU\n"
puts '---------------------------------------------------------'
print "Please select a gamemode (1/2):\n: "
gamemode = gets.chomp
@p2.getBoard().randomizeFleet()
Wenn ich versuche, meine codeI bekommen, den Fehler zu laufen:
Pension: 89: in rangeIsOccupied': undefined method
getStatus' für nil: NilClass (NoMethodError)
Ich möchte dieses Problem überwinden, .