Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/johnowhitaker/swoggle
Testing NBDev by creating 'Swoggle'
https://github.com/johnowhitaker/swoggle
Last synced: about 2 months ago
JSON representation
Testing NBDev by creating 'Swoggle'
- Host: GitHub
- URL: https://github.com/johnowhitaker/swoggle
- Owner: johnowhitaker
- License: apache-2.0
- Created: 2019-12-26T07:01:18.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-04-11T23:58:34.000Z (over 1 year ago)
- Last Synced: 2024-08-09T04:07:42.224Z (5 months ago)
- Language: Jupyter Notebook
- Homepage: https://johnowhitaker.github.io/swoggle/
- Size: 1.3 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Title
> summary
# Swoggle Game Engine
Implements a silly game we invented last Christmas and have been playing recently.
Rules are TODO.
## Install
Should be as easy as:
`pip install swoggle`
## How to use
To get a board with the basic setup, use the swoggle class:
```python
s = Swoggle(agents=[])
s.show()
```[1.1][...][...][...][...][...][...][4.4]
[...][...][...][...][...][...][...][...]
[...][...][...][...][.d.][...][...][...]
[...][...][.d.][...][...][...][...][...]
[...][...][...][...][...][.d.][...][...]
[...][...][...][.d.][...][...][...][...]
[...][...][...][...][...][...][...][...]
[2.2][...][...][...][...][...][...][3.3]
Spa: []Players can move (after rolling a dice). For example, player 1 could move to the square with a drone:
```python
s.move(1, (0, 0), (3, 2), 5) # Only works if dice_roll is high enough
s.show()
```Moved 1 (0, 0) (3, 2)
[..1][...][...][...][...][...][...][4.4]
[...][...][...][...][...][...][...][...]
[...][...][...][...][.d.][...][...][...]
[...][...][1d.][...][...][...][...][...]
[...][...][...][...][...][.d.][...][...]
[...][...][...][.d.][...][...][...][...]
[...][...][...][...][...][...][...][...]
[2.2][...][...][...][...][...][...][3.3]
Spa: []You can move with the drone, but only half as far:
```python
s.move(1, (3, 2), (1, 1), 5, drone=True) # Only works if dice_roll is high enough
s.show()
```Moved 1 (3, 2) (1, 1)
[..1][...][...][...][...][...][...][4.4]
[...][1d.][...][...][...][...][...][...]
[...][...][...][...][.d.][...][...][...]
[...][...][...][...][...][...][...][...]
[...][...][...][...][...][.d.][...][...]
[...][...][...][.d.][...][...][...][...]
[...][...][...][...][...][...][...][...]
[2.2][...][...][...][...][...][...][3.3]
Spa: []You can leave the drone behind to move elsewhere. But you cannot take an occupied base without the drone:
```python
s.move(1, (1, 1), (7, 0), 6) # No drone - no luck
```Invalid Move 1 (1, 1) (7, 0)
You can take a droned player with a drone for yourself or a powerjump:
```python
s.move(1, (1, 1), (4, 0), 6, drone=True) # Put 1 in position
s.move(2, (7, 0), (4, 0), 6, powerjump=True) # take one with a powerjump
s.show()
```Moved 1 (1, 1) (4, 0)
Player 1 sent to Swoggle Spa
Drone destroyed
Moved 2 (7, 0) (4, 0)
[..1][...][...][...][...][...][...][4.4]
[...][...][...][...][...][...][...][...]
[...][...][...][...][.d.][...][...][...]
[...][...][...][...][...][...][...][...]
[2..][...][...][...][...][.d.][...][...]
[...][...][...][.d.][...][...][...][...]
[...][...][...][...][...][...][...][...]
[..2][...][...][...][...][...][...][3.3]
Spa: [1]Now player 1 must try to escape, by rolling a 5 ot 6
```python
s.move(1, (0, 0), (0, 0), 4) # No escape with a 4
s.move(1, (0, 0), (0, 0), 5) # Escaped
s.show()
```Player 1 did not escape
Player 1 escaped
[1.1][...][...][...][...][...][...][4.4]
[...][...][...][...][...][...][...][...]
[...][...][...][...][.d.][...][...][...]
[...][...][...][...][...][...][...][...]
[2..][...][...][...][...][.d.][...][...]
[...][...][...][.d.][...][...][...][...]
[...][...][...][...][...][...][...][...]
[..2][...][...][...][...][...][...][3.3]
Spa: []```python
s.move(1, (0, 0), (4, 0), 6) # Capture 2
s.move(1, (4, 0), (7, 0), 5) # Take 2's base to win the game
s.show()
```Player 2 sent to Swoggle Spa
Moved 1 (0, 0) (4, 0)
Player 1 defeated player 2
Moved 1 (4, 0) (7, 0)
[1.1][...][...][...][...][...][...][4.4]
[...][...][...][...][...][...][...][...]
[...][...][...][...][.d.][...][...][...]
[...][...][...][...][...][...][...][...]
[...][...][...][...][...][.d.][...][...]
[...][...][...][.d.][...][...][...][...]
[...][...][...][...][...][...][...][...]
[...][...][...][...][...][...][...][3.3]
Spa: []# Adding agents
We have several agents to choose from. Let's create a game with 2 random agents and 2 basic agents and watch them play:
```python
sr = Swoggle([RandomAgent(i+1) for i in range(2)]+[BasicAgent(i+3) for i in range(2)])
sr.show()
```[1.1][...][...][...][...][...][...][4.4]
[...][...][...][...][...][...][...][...]
[...][...][...][...][.d.][...][...][...]
[...][...][.d.][...][...][...][...][...]
[...][...][...][...][...][.d.][...][...]
[...][...][...][.d.][...][...][...][...]
[...][...][...][...][...][...][...][...]
[2.2][...][...][...][...][...][...][3.3]
Spa: []```python
# Run repeatedly to see a game play out
sr.move_agents()
sr.show()
```Moved 3 (6, 1) (7, 0)
Player 4 defeated player 3
Moved 4 (1, 6) (7, 7)
[...][...][...][...][...][...][...][4.4]
[...][...][...][...][...][...][...][...]
[...][...][...][...][.d.][...][...][...]
[...][...][.d.][...][...][...][...][...]
[...][...][...][...][...][.d.][...][...]
[...][...][...][.d.][...][...][...][...]
[...][...][...][...][...][...][...][...]
[...][...][...][...][...][...][...][...]
Spa: []# Where Next?
The point of this exercise was to 1) Learn NBev and 2) Get a gae ready for RL experiments. So far so good :)