Skip to content

Commit 02ab6be

Browse files
committed
PyGame
1 parent 62b20b2 commit 02ab6be

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2914,7 +2914,8 @@ Pygame
29142914

29152915
#### Runs a simple Mario game:
29162916
```python
2917-
import collections, dataclasses, enum, itertools, math, pygame, random
2917+
import collections, dataclasses, enum, io, itertools, math, pygame, random, urllib
2918+
from urllib.request import urlopen
29182919

29192920
D = enum.Enum('D', 'n e s w')
29202921
P = collections.namedtuple('P', 'x y')
@@ -2923,9 +2924,11 @@ RECT_SIDE, SCR_SIDE, MAX_SPEED = 16, 25, P(x=5, y=10)
29232924
COORDS = [p for p in itertools.product(range(SCR_SIDE), repeat=2) if {*p} & {0, SCR_SIDE-1}] +\
29242925
[(random.randint(1, SCR_SIDE-2), random.randint(2, SCR_SIDE-2)) for _ in range(62)]
29252926
FLOORS = [pygame.Rect(x*RECT_SIDE, y*RECT_SIDE, RECT_SIDE, RECT_SIDE) for x, y in COORDS]
2926-
IMAGE = pygame.image.load('mario_bros.png')
2927+
URL = 'https://raw.githubusercontent.com/gto76/python-cheatsheet/master/web/mario_bros.png'
2928+
IMAGE = pygame.image.load(io.BytesIO(urlopen(URL).read()))
29272929
FRAMES = [IMAGE.subsurface(pygame.Rect(x*16, 0, 16, 16)) for x in range(7)]
29282930
FRAMES += [pygame.transform.flip(f, True, False) for f in FRAMES]
2931+
TILES = [IMAGE.subsurface(pygame.Rect(x*16, 0, 16, 16)) for x in range(9, 14)]
29292932

29302933
def main():
29312934
pygame.init()
@@ -2965,11 +2968,12 @@ def stop_on_collision(spd, bounds):
29652968
y=0 if (D.n in bounds and spd.y < 0) or (D.s in bounds and spd.y > 0) else spd.y)
29662969

29672970
def draw(screen, mario, pressed):
2968-
screen.fill((0, 0, 0))
2971+
screen.fill((85, 168, 255))
29692972
mario.facing_left = mario.spd.x < 0 if mario.spd.x else mario.facing_left
29702973
screen.blit(FRAMES[get_frame_index(mario, pressed) + mario.facing_left*7], mario.rect)
29712974
for rect in FLOORS:
2972-
pygame.draw.rect(screen, (255, 100, 0), rect)
2975+
tile_index = 1 if {*rect.topleft} & {0, (SCR_SIDE-1)*RECT_SIDE} else 0
2976+
screen.blit(TILES[tile_index], rect)
29732977
pygame.display.flip()
29742978

29752979
def get_frame_index(mario, pressed):

index.html

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2475,7 +2475,8 @@
24752475
</code></pre></div></div>
24762476

24772477

2478-
<div><h2 id="pygame"><a href="#pygame" name="pygame">#</a>Pygame</h2><div><h3 id="example-3">Example</h3><div><h4 id="runsasimplemariogame">Runs a simple Mario game:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">import</span> collections, dataclasses, enum, itertools, math, pygame, random
2478+
<div><h2 id="pygame"><a href="#pygame" name="pygame">#</a>Pygame</h2><div><h3 id="example-3">Example</h3><div><h4 id="runsasimplemariogame">Runs a simple Mario game:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">import</span> collections, dataclasses, enum, io, itertools, math, pygame, random, urllib
2479+
<span class="hljs-keyword">from</span> urllib.request <span class="hljs-keyword">import</span> urlopen
24792480

24802481
D = enum.Enum(<span class="hljs-string">'D'</span>, <span class="hljs-string">'n e s w'</span>)
24812482
P = collections.namedtuple(<span class="hljs-string">'P'</span>, <span class="hljs-string">'x y'</span>)
@@ -2484,9 +2485,11 @@
24842485
COORDS = [p <span class="hljs-keyword">for</span> p <span class="hljs-keyword">in</span> itertools.product(range(SCR_SIDE), repeat=<span class="hljs-number">2</span>) <span class="hljs-keyword">if</span> {*p} &amp; {<span class="hljs-number">0</span>, SCR_SIDE<span class="hljs-number">-1</span>}] +\
24852486
[(random.randint(<span class="hljs-number">1</span>, SCR_SIDE<span class="hljs-number">-2</span>), random.randint(<span class="hljs-number">2</span>, SCR_SIDE<span class="hljs-number">-2</span>)) <span class="hljs-keyword">for</span> _ <span class="hljs-keyword">in</span> range(<span class="hljs-number">62</span>)]
24862487
FLOORS = [pygame.Rect(x*RECT_SIDE, y*RECT_SIDE, RECT_SIDE, RECT_SIDE) <span class="hljs-keyword">for</span> x, y <span class="hljs-keyword">in</span> COORDS]
2487-
IMAGE = pygame.image.load(<span class="hljs-string">'mario_bros.png'</span>)
2488+
URL = <span class="hljs-string">'https://raw.githubusercontent.com/gto76/python-cheatsheet/master/web/mario_bros.png'</span>
2489+
IMAGE = pygame.image.load(io.BytesIO(urlopen(URL).read()))
24882490
FRAMES = [IMAGE.subsurface(pygame.Rect(x*<span class="hljs-number">16</span>, <span class="hljs-number">0</span>, <span class="hljs-number">16</span>, <span class="hljs-number">16</span>)) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> range(<span class="hljs-number">7</span>)]
24892491
FRAMES += [pygame.transform.flip(f, <span class="hljs-keyword">True</span>, <span class="hljs-keyword">False</span>) <span class="hljs-keyword">for</span> f <span class="hljs-keyword">in</span> FRAMES]
2492+
TILES = [IMAGE.subsurface(pygame.Rect(x*<span class="hljs-number">16</span>, <span class="hljs-number">0</span>, <span class="hljs-number">16</span>, <span class="hljs-number">16</span>)) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> range(<span class="hljs-number">9</span>, <span class="hljs-number">14</span>)]
24902493

24912494
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span>
24922495
pygame.init()
@@ -2526,11 +2529,12 @@
25262529
y=<span class="hljs-number">0</span> <span class="hljs-keyword">if</span> (D.n <span class="hljs-keyword">in</span> bounds <span class="hljs-keyword">and</span> spd.y &lt; <span class="hljs-number">0</span>) <span class="hljs-keyword">or</span> (D.s <span class="hljs-keyword">in</span> bounds <span class="hljs-keyword">and</span> spd.y &gt; <span class="hljs-number">0</span>) <span class="hljs-keyword">else</span> spd.y)
25272530

25282531
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">draw</span><span class="hljs-params">(screen, mario, pressed)</span>:</span>
2529-
screen.fill((<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>))
2532+
screen.fill((<span class="hljs-number">85</span>, <span class="hljs-number">168</span>, <span class="hljs-number">255</span>))
25302533
mario.facing_left = mario.spd.x &lt; <span class="hljs-number">0</span> <span class="hljs-keyword">if</span> mario.spd.x <span class="hljs-keyword">else</span> mario.facing_left
25312534
screen.blit(FRAMES[get_frame_index(mario, pressed) + mario.facing_left*<span class="hljs-number">7</span>], mario.rect)
25322535
<span class="hljs-keyword">for</span> rect <span class="hljs-keyword">in</span> FLOORS:
2533-
pygame.draw.rect(screen, (<span class="hljs-number">255</span>, <span class="hljs-number">100</span>, <span class="hljs-number">0</span>), rect)
2536+
tile_index = <span class="hljs-number">1</span> <span class="hljs-keyword">if</span> {*rect.topleft} &amp; {<span class="hljs-number">0</span>, (SCR_SIDE<span class="hljs-number">-1</span>)*RECT_SIDE} <span class="hljs-keyword">else</span> <span class="hljs-number">0</span>
2537+
screen.blit(TILES[tile_index], rect)
25342538
pygame.display.flip()
25352539

25362540
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_frame_index</span><span class="hljs-params">(mario, pressed)</span>:</span>

0 commit comments

Comments
 (0)