|
2475 | 2475 | </code></pre></div></div>
|
2476 | 2476 |
|
2477 | 2477 |
|
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, enum, itertools, pygame, random, math, dataclasses, 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, itertools, math, pygame, random |
2479 | 2479 |
|
2480 | 2480 | D = enum.Enum(<span class="hljs-string">'D'</span>, <span class="hljs-string">'n e s w'</span>)
|
2481 | 2481 | P = collections.namedtuple(<span class="hljs-string">'P'</span>, <span class="hljs-string">'x y'</span>)
|
|
2490 | 2490 |
|
2491 | 2491 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span>
|
2492 | 2492 | pygame.init()
|
2493 |
| - screen = pygame.display.set_mode(<span class="hljs-number">2</span> * [SCR_SIDE*RECT_SIDE]) |
| 2493 | + screen = pygame.display.set_mode(<span class="hljs-number">2</span> * [SCR_SIDE * RECT_SIDE]) |
2494 | 2494 | mario = Mario(pygame.Rect(<span class="hljs-number">16</span>, <span class="hljs-number">16</span>, <span class="hljs-number">16</span>, <span class="hljs-number">16</span>), P(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>), <span class="hljs-keyword">False</span>, itertools.cycle(range(<span class="hljs-number">3</span>)))
|
2495 | 2495 | <span class="hljs-keyword">while</span> <span class="hljs-keyword">not</span> any(event.type == pygame.QUIT <span class="hljs-keyword">for</span> event <span class="hljs-keyword">in</span> pygame.event.get()):
|
2496 | 2496 | keys = {pygame.K_UP: D.n, pygame.K_RIGHT: D.e, pygame.K_DOWN: D.s, pygame.K_LEFT: D.w}
|
|
2510 | 2510 | mario.spd = P(*[max(-thresh, min(thresh, s)) <span class="hljs-keyword">for</span> thresh, s <span class="hljs-keyword">in</span> zip(MAX_SPEED, speed)])
|
2511 | 2511 |
|
2512 | 2512 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">update_position</span><span class="hljs-params">(mario)</span>:</span>
|
2513 |
| - larger_speed = max(abs(s) <span class="hljs-keyword">for</span> s <span class="hljs-keyword">in</span> mario.spd) |
2514 |
| - <span class="hljs-keyword">if</span> larger_speed == <span class="hljs-number">0</span>: |
2515 |
| - <span class="hljs-keyword">return</span> |
2516 | 2513 | delta, old_p = P(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>), mario.rect.topleft
|
| 2514 | + larger_speed = max(abs(s) <span class="hljs-keyword">for</span> s <span class="hljs-keyword">in</span> mario.spd) |
2517 | 2515 | <span class="hljs-keyword">for</span> _ <span class="hljs-keyword">in</span> range(int(larger_speed)):
|
2518 | 2516 | mario.spd = stop_on_collision(mario.spd, get_boundaries(mario.rect))
|
2519 | 2517 | delta = P(*[s/larger_speed + dlt <span class="hljs-keyword">for</span> s, dlt <span class="hljs-keyword">in</span> zip(mario.spd, delta)])
|
2520 | 2518 | mario.rect.topleft = [sum(a) <span class="hljs-keyword">for</span> a <span class="hljs-keyword">in</span> zip(old_p, delta)]
|
2521 | 2519 |
|
2522 | 2520 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_boundaries</span><span class="hljs-params">(rect)</span>:</span>
|
2523 |
| - deltas = {D.n: (<span class="hljs-number">0</span>, <span class="hljs-number">-1</span>), D.e: (<span class="hljs-number">1</span>, <span class="hljs-number">0</span>), D.s: (<span class="hljs-number">0</span>, <span class="hljs-number">1</span>), D.w: (<span class="hljs-number">-1</span>, <span class="hljs-number">0</span>)} |
| 2521 | + deltas = {D.n: P(<span class="hljs-number">0</span>, <span class="hljs-number">-1</span>), D.e: P(<span class="hljs-number">1</span>, <span class="hljs-number">0</span>), D.s: P(<span class="hljs-number">0</span>, <span class="hljs-number">1</span>), D.w: P(<span class="hljs-number">-1</span>, <span class="hljs-number">0</span>)} |
2524 | 2522 | <span class="hljs-keyword">return</span> {d <span class="hljs-keyword">for</span> d, delta <span class="hljs-keyword">in</span> deltas.items() <span class="hljs-keyword">if</span> rect.move(delta).collidelist(FLOORS) != <span class="hljs-number">-1</span>}
|
2525 | 2523 |
|
2526 | 2524 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">stop_on_collision</span><span class="hljs-params">(spd, bounds)</span>:</span>
|
|
0 commit comments