-
Notifications
You must be signed in to change notification settings - Fork 0
/
wumpus-world.py
118 lines (106 loc) · 3.7 KB
/
wumpus-world.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
"""
Implement Wumpus World
Experiment: 5
@Learner: TE-CO
Name:
Roll No:
Batch: 3
Academic Year: 2024
Sem - 6
"""
# Program:
import random
class WumpusWorld:
def __init__(self, size=4):
self.size = size
self.grid = [[' ' for _ in range(size)] for _ in range(size)]
self.wumpus_location = (random.randint(0, size-1), random.randint(0, size-1))
self.gold_location = (random.randint(0, size-1), random.randint(0, size-1))
while self.gold_location == self.wumpus_location:
self.gold_location = (random.randint(0, size-1), random.randint(0, size-1))
self.pit_locations = []
self.agent_location = (0, 0)
self.generate_pits()
def generate_pits(self):
num_pits = min(self.size, 3)
for _ in range(num_pits):
pit_location = (random.randint(0, self.size-1), random.randint(0, self.size-1))
while pit_location == self.agent_location or pit_location == self.wumpus_location or pit_location == self.gold_location or pit_location in self.pit_locations:
pit_location = (random.randint(0, self.size-1), random.randint(0, self.size-1))
self.pit_locations.append(pit_location)
def display(self):
for i in range(self.size):
print('+---'*self.size + '+')
for j in range(self.size):
if (i, j) == self.agent_location:
print('| A ', end='')
elif (i, j) == self.wumpus_location:
print('| W ', end='')
elif (i, j) == self.gold_location:
print('| G ', end='')
elif (i, j) in self.pit_locations:
print('| P ', end='')
else:
print('| ', end='')
print('|')
print('+---'*self.size + '+')
def move_agent(self, direction):
x, y = self.agent_location
if direction == 'up' and x > 0:
self.agent_location = (x-1, y)
elif direction == 'down' and x < self.size-1:
self.agent_location = (x+1, y)
elif direction == 'left' and y > 0:
self.agent_location = (x, y-1)
elif direction == 'right' and y < self.size-1:
self.agent_location = (x, y+1)
else:
print("Invalid move! Try again.")
def check_game_over(self):
if self.agent_location == self.wumpus_location:
print("Game over! You were eaten by the Wumpus.")
return True
elif self.agent_location == self.gold_location:
print("Congratulations! You found the gold.")
return True
elif self.agent_location in self.pit_locations:
print("Game over! You fell into a pit.")
return True
else:
return False
if __name__ == "__main__":
world = WumpusWorld()
print("Welcome to Wumpus World!")
while True:
world.display()
action = input("Enter your move (up/down/left/right): ").lower()
world.move_agent(action)
if world.check_game_over():
break
'''
Output:
PS C:\Users\Desktop\> python woum.py
Welcome to Wumpus World!
+---+---+---+---+
| A | | | W |
+---+---+---+---+
| P | | | |
+---+---+---+---+
| | | P | |
+---+---+---+---+
| | G | | P |
+---+---+---+---+
Enter your move (up/down/left/right): up
Invalid move! Try again.
+---+---+---+---+
| A | | | W |
+---+---+---+---+
| P | | | |
+---+---+---+---+
| | | P | |
+---+---+---+---+
| | G | | P |
+---+---+---+---+
Enter your move (up/down/left/right): down
Game over! You fell into a pit.
'''