require "dxruby" class Boatleft attr_accessor :x, :y @@image0 = Image.loadToArray("image/boatright.png", 2, 1) def initialize(x,y) @x = x @y = y @animecount = 0 @position = 1 @animalnum = 0 end def start baseimage = Image.load('image/boatright.png') image = baseimage.slice(173, 0, 172, 81) Window.draw(@x, @y, image) end def update @x = 471 end def update2 @x = 200 end def canmove return true if $Boat.size >= 1 return false end def add(object) if $leftobjectgroup.include? object else return false end $Boat.each do |obj| if obj.name == object.name return false end end if $Boat.size < 2 $Boat << object end end def addright(object) if $rightobjectgroup.include? object else return false end $Boat.each do |obj| if obj.name == object.name return false end end if $Boat.size < 2 $Boat << object end end def rightbug(object) # $rightobjectgroup.each do |obj| # if obj.name != object.name # return false # end # end end def position(size=0) @position+=size if @position%2 == 0 return "right" else return "left" end end def hasanimals $Boat.each do |animal| @animalnum+=1 if @animalnum %2 == 0 return 300 else return 250 end end end def hasanimals2 $Boat.each do |animal| @animalnum+=1 if @animalnum %2 == 0 return 510 else return 560 end end end def moveboat(where) if where == "right" $Boat.each do |obj| $rightobjectgroup << obj if obj.name == "wolf1" obj.x = 630 obj.y = 260 elsif obj.name == "wolf2" obj.x = 630 obj.y = 334 elsif obj.name == "wolf3" obj.x = 630 obj.y = 410 elsif obj.name == "sheep1" obj.x = 700 obj.y = 260 elsif obj.name == "sheep2" obj.x = 700 obj.y = 334 elsif obj.name == "sheep3" obj.x = 700 obj.y = 410 end leftdeletews(obj) end $Boat = [] else if where == "left" $Boat.each do |obj| $leftobjectgroup << obj if obj.name == "wolf1" obj.x = 80 obj.y = 260 elsif obj.name == "wolf2" obj.x = 80 obj.y = 334 elsif obj.name == "wolf3" obj.x = 80 obj.y = 410 elsif obj.name == "sheep1" obj.x = 150 obj.y = 260 elsif obj.name == "sheep2" obj.x = 150 obj.y = 334 elsif obj.name == "sheep3" obj.x = 150 obj.y = 410 end rightdeletews(obj) end $Boat = [] end end end def rightdeletews(object) $rightobjectgroup.each_index do |index| if $rightobjectgroup[index] == object $rightobjectgroup.delete_at(index) break end end end def leftdeletews(object) $leftobjectgroup.each_index do |index| if $leftobjectgroup[index] == object $leftobjectgroup.delete_at(index) break end end end end class Sheep attr_accessor :x, :y, :name # @@xwei = 150 # @@image0 = Image.load('image/sheep.png') def initialize(x,y,name) # @x = 150 @x = x @y = y @name = name @animecount = 0 end def start # if @@xwei == 150 baseimage = Image.load('image/sheep.png') image = baseimage.slice(0, 0, 57.5, 75) Window.draw(@x, @y, image) # end end def update @@xwei += 1 if @animecount % 10 == 0 @x += @animecount end if @x > 646 - 175 end @x = 175 if @x < 175 @x = 647 - 175 if @x > 647 - 175 @animecount += 1 @animecount -= 40 if @animecount >= 40 end def draw if @x < 646 - 174 image = @@image0.slice(0, 0, 57.5, 75) Window.draw(@x, @y, image) end end end class Wolf attr_accessor :x, :y , :name # @@image0 = Image.load('image/wolf.png') def initialize(x,y,name) @x = x # @x = 220 @y = y @animecount = 0 @wolfnum = 0 @name = name end def start baseimage = Image.load('image/wolf.png') image = baseimage.slice(0, 0, 79, 75) Window.draw(@x, @y, image) end def update @@xwei += 1 if @animecount % 10 == 0 @x += @animecount end if @x > 646 - 175 end @x = 175 if @x < 79 @x = 647 - 79 if @x > 647 - 79 @animecount += 1 @animecount -= 40 if @animecount >= 40 end def draw if @x < 646 - 175 image = @@image0.slice(0, 0, 79, 75) Window.draw(@x, @y, image) end end def haswolf $Boat.each do |wolf| if wolf.class.to_s.start_with? 'Wolf' @wolfnum+=1 end p @wolfnum p wolf.class.to_s return false if @wolfnum > 1 return true end end end @@gameover = Image.load("image/over.png") @@image = Image.load("image/background.png") @@win = Image.load("image/win.png") @@description = Image.load("image/description.png") Window.caption = "Sheep_and_Wolf_story" Window.width = 822 Window.height = 497 def initializes $leftobjectgroup = [] $rightobjectgroup = [] $Boat = [] $boat = Boatleft.new(200,300) $wolf1 = Wolf.new(80,260,"wolf1") $wolf2 = Wolf.new(80,334,"wolf2") $wolf3 = Wolf.new(80,410,"wolf3") $sheep1 = Sheep.new(150,260,"sheep1") $sheep2 = Sheep.new(150,334,"sheep2") $sheep3 = Sheep.new(150,410,"sheep3") $leftobjectgroup.push($boat) $leftobjectgroup.push($sheep1) $leftobjectgroup.push($sheep2) $leftobjectgroup.push($sheep3) $leftobjectgroup.push($wolf1) $leftobjectgroup.push($wolf2) $leftobjectgroup.push($wolf3) end # $sheep = Sheep.new initializes def judge sheepnum = 0 wolfnum = 0 leftsheepnum = 0 leftwolfnum = 0 $rightobjectgroup.each do |obj| if obj.class.to_s.start_with? 'Wolf' wolfnum+=1 end if obj.class.to_s.start_with? 'Sheep' sheepnum+=1 end end if wolfnum > sheepnum if sheepnum == 0 else $canclick = false $re = true # initializes return Window.draw(220, 160, @@gameover) end end $leftobjectgroup.each do |obj| if obj.class.to_s.start_with? 'Wolf' leftwolfnum+=1 end if obj.class.to_s.start_with? 'Sheep' leftsheepnum+=1 end end if leftwolfnum > leftsheepnum if leftsheepnum == 0 else $canclick = false $re = true # return Window.draw(220, 160, @@gameover) end end if sheepnum == 3 && sheepnum > wolfnum $canclick = false return Window.draw(220, 160, @@win) # @continue = false end end # ObjectGroup.push($$boat) description = true $canclick = true $re = false Window.loop do if Input.mousePush?(M_LBUTTON) #retry if $re == true if Input.mousePosX > 270 && Input.mousePosX < 340 && Input.mousePosY > 350 && Input.mousePosY < 420 initializes $canclick = true $re = false end if Input.mousePosX > 470 && Input.mousePosX < 540 && Input.mousePosY > 350 && Input.mousePosY < 420 break end end #game description if $canclick == true if Input.mousePosX > 200 && Input.mousePosX < 350 && Input.mousePosY > 330 && Input.mousePosY < 385 && description == true description = false end if Input.mousePosX > 470 && Input.mousePosX < 650 && Input.mousePosY > 330 && Input.mousePosY < 385 && description == true break end #game start if description == false if Input.mousePosX > 80 && Input.mousePosX < 155 && Input.mousePosY > 260 && Input.mousePosY < 335 && $boat.position == "left" if $boat.add($wolf1) $wolf1.x = 220 $wolf1.y = 260 $wolf1.x = $boat.hasanimals end end if Input.mousePosX > 80 && Input.mousePosX < 155 && Input.mousePosY > 334 && Input.mousePosY < 409 && $boat.position == "left" if $boat.add($wolf2) $wolf2.x = 220 $wolf2.y = 260 $wolf2.x = $boat.hasanimals end end if Input.mousePosX > 80 && Input.mousePosX < 155 && Input.mousePosY > 410 && Input.mousePosY < 485 && $boat.position == "left" if $boat.add($wolf3) $wolf3.x = 220 $wolf3.y = 260 $wolf3.x = $boat.hasanimals end end if Input.mousePosX > 150 && Input.mousePosX < 208 && Input.mousePosY > 260 && Input.mousePosY < 335 && $boat.position == "left" if $boat.add($sheep1) $sheep1.x = 300 $sheep1.y = 260 $sheep1.x = $boat.hasanimals end end if Input.mousePosX > 150 && Input.mousePosX < 208 && Input.mousePosY > 334 && Input.mousePosY < 409 && $boat.position == "left" if $boat.add($sheep2) $sheep2.x = 300 $sheep2.y = 260 $sheep2.x = $boat.hasanimals end end if Input.mousePosX > 150 && Input.mousePosX < 208 && Input.mousePosY > 410 && Input.mousePosY < 485 && $boat.position == "left" if $boat.add($sheep3) $sheep3.x = 300 $sheep3.y = 260 $sheep3.x = $boat.hasanimals end end if Input.mousePosX > 224 && Input.mousePosX < 370 && Input.mousePosY > 260 && Input.mousePosY < 335 && $boat.position == "left" $Boat.each do |obj| if obj.name == "wolf1" obj.x = 80 obj.y = 260 elsif obj.name == "wolf2" obj.x = 80 obj.y = 334 elsif obj.name == "wolf3" obj.x = 80 obj.y = 410 elsif obj.name == "sheep1" obj.x = 150 obj.y = 260 elsif obj.name == "sheep2" obj.x = 150 obj.y = 334 elsif obj.name == "sheep3" obj.x = 150 obj.y = 410 end $Boat.each_index do |index| $Boat.delete_at(index) end end end # move $boat if Input.mousePosX > 224 && Input.mousePosX < 370 && Input.mousePosY > 336 && Input.mousePosY < 380 && $boat.canmove && $boat.position == "left" $boat.moveboat($boat.position(1)) $boat.update end # right if Input.mousePosX > 630 && Input.mousePosX < 700 && Input.mousePosY > 260 && Input.mousePosY < 335 && $boat.position == "right" if $boat.addright($wolf1) $wolf1.x = 700 $wolf1.y = 260 $wolf1.x = $boat.hasanimals2 end end if Input.mousePosX > 630 && Input.mousePosX < 700 && Input.mousePosY > 334 && Input.mousePosY < 409 && $boat.position == "right" if $boat.addright($wolf2) $wolf2.x = 700 $wolf2.y = 260 $wolf2.x = $boat.hasanimals2 end end if Input.mousePosX > 630 && Input.mousePosX < 700 && Input.mousePosY > 410 && Input.mousePosY < 485 && $boat.position == "right" if $boat.addright($wolf3) $wolf3.x = 700 $wolf3.y = 260 $wolf3.x = $boat.hasanimals2 end end if Input.mousePosX > 700 && Input.mousePosX < 750 && Input.mousePosY > 260 && Input.mousePosY < 335 && $boat.position == "right" if $boat.addright($sheep1) $sheep1.x = 300 $sheep1.y = 260 $sheep1.x = $boat.hasanimals2 end end if Input.mousePosX > 700 && Input.mousePosX < 750 && Input.mousePosY > 334 && Input.mousePosY < 409 && $boat.position == "right" if $boat.addright($sheep2) $sheep2.x = 300 $sheep2.y = 260 $sheep2.x = $boat.hasanimals2 end end if Input.mousePosX > 700 && Input.mousePosX < 750 && Input.mousePosY > 410 && Input.mousePosY < 485 && $boat.position == "right" if $boat.addright($sheep3) $sheep3.x = 300 $sheep3.y = 260 $sheep3.x = $boat.hasanimals2 end end if Input.mousePosX > 510 && Input.mousePosX < 610 && Input.mousePosY > 260 && Input.mousePosY < 335 && $boat.position == "right" $Boat.each do |obj| if obj.name == "wolf1" obj.x = 630 obj.y = 260 elsif obj.name == "wolf2" obj.x = 630 obj.y = 334 elsif obj.name == "wolf3" obj.x = 630 obj.y = 410 elsif obj.name == "sheep1" obj.x = 700 obj.y = 260 elsif obj.name == "sheep2" obj.x = 700 obj.y = 334 elsif obj.name == "sheep3" obj.x = 700 obj.y = 410 end $Boat.each_index do |index| $Boat.delete_at(index) end end end if Input.mousePosX > 480 && Input.mousePosX < 610 && Input.mousePosY > 336 && Input.mousePosY < 380 && $boat.canmove && $boat.position == "right" $boat.moveboat($boat.position(1)) $boat.update2 end end end end Window.draw(0, 0, @@image) $leftobjectgroup.each do |obj| obj.start end $rightobjectgroup.each do |obj| obj.start end if description == true Window.draw(110, 85, @@description) end judge end