Hunt the Wumpus: Difference between revisions
No edit summary |
No edit summary |
||
Line 47: | Line 47: | ||
=={{header|Javascript}}== |
=={{header|Javascript}}== |
||
See [[Hunt_The_Wumpus/Javascript]]. |
See [[Hunt_The_Wumpus/Javascript]]. |
||
=={{header|M2000 Interpreter}}== |
|||
<lang M2000 Interpreter> |
|||
Module WumpusGame { |
|||
Print "Game: Hunt The Wumpus" |
|||
Arrows=5 |
|||
Dim Room(1 to 20) |
|||
Room(1)=(2,6,5),(3,8,1),(4,10,2),(5,2,3),(1,14,4) |
|||
Room(6)=(15,1,7),(17,6,8),(7,2,9),(18,8,10),(9,3,11) |
|||
Room(11)=(19,10,12),(11,4,13),(20,12,14),(5,11,13), (6,16,14) |
|||
Room(16)=(20,15,17),(16,7,18),(17,9,19),(18,11,20),(19,13,16) |
|||
Enum Things {EmptyRoom, Bat1, Bat2, Pit1, Pit2, Wumpus} |
|||
Dim Content(1 to 20)=EmptyRoom |
|||
i=each(Things,2) ' from 2 to End |
|||
While i { |
|||
r=random(1,20) |
|||
if Content(r)<>EmptyRoom then restart |
|||
Content(r)=Eval(i) |
|||
} |
|||
WumpusPos=r |
|||
PlayerPos=-1 |
|||
TranspotPlayer() |
|||
Done=False |
|||
\\ Help is statement but here used as variable |
|||
Help=False |
|||
While Arrows>0 And Not Done { |
|||
Sense() |
|||
Print "W- Walk, T - Throw Arrow, G - Give up or H for Help" |
|||
a$=Ucase$(Key$) |
|||
If a$="W" Then { |
|||
Print "Choose Tunnel to Walk: 1, 2 or 3" |
|||
r=Val("0"+Key$)-1 |
|||
if r>=0 and r<=2 then { |
|||
i=room(PlayerPos) |
|||
PlayerPos=Array(i, r) |
|||
Select Case Content(PlayerPos) |
|||
Case Wumpus |
|||
Eaten() |
|||
Case Pit1, Pit2 |
|||
{ |
|||
Arrows=0 |
|||
Print "You fall to a bottomless pit;" |
|||
} |
|||
Case Bat1, Bat2 |
|||
{ |
|||
Print "A giant bat takes you in another room;" |
|||
TranspotPlayer() |
|||
} |
|||
End Select |
|||
} |
|||
} Else.if a$="T" Then { |
|||
Arrows-- |
|||
Print "Choose Tunnel to Throw Arrow: 1, 2 or 3" |
|||
r=Val("0"+Key$)-1 |
|||
if r>=0 and r<=2 then { |
|||
i=room(PlayerPos) |
|||
If Content(Array(i, r))=Wumpus then { |
|||
Done=True |
|||
} Else.if random(1,4)=4 then WakeWumpus() |
|||
} |
|||
} Else.if a$="G" Then { |
|||
Arrows=0 |
|||
} Else.if a$="H" Then Help~ |
|||
} |
|||
If Done then Print "You kill the Monster Wumpus; You Win.": Exit |
|||
Print "You loose." |
|||
Sub TranspotPlayer() |
|||
local r=random(1,20) |
|||
While Content(r)<>EmptyRoom {r=random(1,20)} |
|||
PlayerPos=r |
|||
End Sub |
|||
Sub WakeWumpus() |
|||
local j=array(room(WumpusPos),random(0,2)) |
|||
If content(j)=EmptyRoom Then { |
|||
swap content(j), content(WumpusPos) |
|||
WumpusPos=j |
|||
If WumpusPos=PlayerPos then Eaten() |
|||
} |
|||
End Sub |
|||
Sub Eaten() |
|||
Arrows=0 |
|||
Print "You eaten by Wumpus;" |
|||
End Sub |
|||
Sub Sense() |
|||
local k=Room(PlayerPos) |
|||
local j=each(k), Wumpus_near, bat_near, pit_near |
|||
If Help then Print "Player Room:";PlayerPos, "Wumpus Room:";WumpusPos |
|||
While j { |
|||
If Help Then Print "Tunnel:";j^+1, "Room:";Array(j), "Content:";eval$(content(array(j))) |
|||
Select Case content(array(j)) |
|||
Case Bat1, Bat2 |
|||
bat_near=True |
|||
Case Pit1, Pit2 |
|||
pit_near=True |
|||
Case Wumpus |
|||
Wumpus_near=True |
|||
End Select |
|||
} |
|||
If Wumpus_near Then Print "You smell something terrible nearby." |
|||
If bat_near Then Print "You hear a rustling." |
|||
if pit_near Then Print "You feel a cold wind blowing from a nearby cavern." |
|||
End Sub |
|||
} |
|||
WumpusGame |
|||
</lang> |
|||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |
Revision as of 09:32, 25 October 2018
You are encouraged to solve this task according to the task description, using any language you may know.
Create a simple implementation of the classic textual game Hunt The Wumpus.
The rules are:
The game is set in a cave that consists of a 20 room labyrinth. Each room is connected to 3 other rooms (the cave is modeled after the vertices of a dodecahedron). The objective of the player is to find and kill the horrendous beast Wumpus that lurks in the cave.
The player has 5 arrows. If they run out of arrows before killing the Wumpus, the player loses the game.
In the cave there are:
- One Wumpus
- Two giant bats
- Two bottomless pits
If the player enters a room with the Wumpus, he is eaten by it and the game is lost.
If the player enters a room with a bottomless pit, he falls into it and the game is lost.
If the player enters a room with a giant bat, the bat takes him and transports him into a random empty room.
Each turn the player can either walk into an adjacent room or shoot into an adjacent room.
Whenever the player enters a room, he "senses" what happens in adjacent rooms. The messages are:
- Nearby Wumpus: "You smell something terrible nearby."
- Nearby bat: "You hear a rustling."
- Nearby pit: "You feel a cold wind blowing from a nearby cavern."
When the player shoots, he wins the game if he is shooting in the room with the Wumpus. If he shoots into another room, the Wumpus has a 75% of chance of waking up and moving into an adjacent room: if this is the room with the player, he eats him up and the game is lost.
AutoHotkey
See Hunt_The_Wumpus/AutoHotkey
C#
Java
See Hunt_The_Wumpus/Java.
JavaScript
See Hunt_The_Wumpus/Javascript.
M2000 Interpreter
<lang M2000 Interpreter> Module WumpusGame {
Print "Game: Hunt The Wumpus" Arrows=5 Dim Room(1 to 20) Room(1)=(2,6,5),(3,8,1),(4,10,2),(5,2,3),(1,14,4) Room(6)=(15,1,7),(17,6,8),(7,2,9),(18,8,10),(9,3,11) Room(11)=(19,10,12),(11,4,13),(20,12,14),(5,11,13), (6,16,14) Room(16)=(20,15,17),(16,7,18),(17,9,19),(18,11,20),(19,13,16) Enum Things {EmptyRoom, Bat1, Bat2, Pit1, Pit2, Wumpus} Dim Content(1 to 20)=EmptyRoom i=each(Things,2) ' from 2 to End While i { r=random(1,20) if Content(r)<>EmptyRoom then restart Content(r)=Eval(i) } WumpusPos=r PlayerPos=-1 TranspotPlayer() Done=False \\ Help is statement but here used as variable Help=False While Arrows>0 And Not Done { Sense() Print "W- Walk, T - Throw Arrow, G - Give up or H for Help" a$=Ucase$(Key$) If a$="W" Then { Print "Choose Tunnel to Walk: 1, 2 or 3" r=Val("0"+Key$)-1 if r>=0 and r<=2 then { i=room(PlayerPos) PlayerPos=Array(i, r) Select Case Content(PlayerPos) Case Wumpus Eaten() Case Pit1, Pit2 { Arrows=0 Print "You fall to a bottomless pit;" } Case Bat1, Bat2 { Print "A giant bat takes you in another room;" TranspotPlayer() } End Select } } Else.if a$="T" Then { Arrows-- Print "Choose Tunnel to Throw Arrow: 1, 2 or 3" r=Val("0"+Key$)-1 if r>=0 and r<=2 then { i=room(PlayerPos) If Content(Array(i, r))=Wumpus then { Done=True } Else.if random(1,4)=4 then WakeWumpus() } } Else.if a$="G" Then { Arrows=0 } Else.if a$="H" Then Help~ } If Done then Print "You kill the Monster Wumpus; You Win.": Exit Print "You loose." Sub TranspotPlayer() local r=random(1,20) While Content(r)<>EmptyRoom {r=random(1,20)} PlayerPos=r End Sub Sub WakeWumpus() local j=array(room(WumpusPos),random(0,2)) If content(j)=EmptyRoom Then { swap content(j), content(WumpusPos) WumpusPos=j If WumpusPos=PlayerPos then Eaten() } End Sub Sub Eaten() Arrows=0 Print "You eaten by Wumpus;" End Sub Sub Sense() local k=Room(PlayerPos) local j=each(k), Wumpus_near, bat_near, pit_near If Help then Print "Player Room:";PlayerPos, "Wumpus Room:";WumpusPos While j { If Help Then Print "Tunnel:";j^+1, "Room:";Array(j), "Content:";eval$(content(array(j))) Select Case content(array(j)) Case Bat1, Bat2 bat_near=True Case Pit1, Pit2 pit_near=True Case Wumpus Wumpus_near=True End Select } If Wumpus_near Then Print "You smell something terrible nearby." If bat_near Then Print "You hear a rustling." if pit_near Then Print "You feel a cold wind blowing from a nearby cavern." End Sub
} WumpusGame
</lang>
Perl 6
Phix
See Hunt_The_Wumpus/Phix.
Ruby
See Hunt_The_Wumpus/Ruby.