kartrace 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ Metadata-Version: 2.4
2
+ Name: kartrace
3
+ Version: 0.1.0
4
+ Summary: A fast-paced kart racing game built with rayforge_burgerguy and pygame
5
+ Author: burgerguy
6
+ Requires-Python: >=3.8
7
+ Requires-Dist: rayforge_burgerguy
8
+ Requires-Dist: pygame
9
+ Dynamic: author
10
+ Dynamic: requires-dist
11
+ Dynamic: requires-python
12
+ Dynamic: summary
@@ -0,0 +1,94 @@
1
+ """Kart racer built entirely from rayforge parts. python kart_race.py (add --demo to watch the AI drive you)
2
+ W/S throttle/brake, A/D steer, SHIFT/SPACE drift (hold in a corner, release for a mini-turbo), R restart, ESC quit."""
3
+ import math, random
4
+ import rayforge as rf
5
+ from rayforge import hud
6
+
7
+ COLORS = [(220, 40, 40), (40, 120, 230), (240, 200, 40), (60, 190, 80), (200, 80, 220), (240, 130, 30)]
8
+ SOUNDS = {"boost": "boost", "drift_boost": "drift_boost", "bump": "bump", "spin": "spin"}
9
+
10
+
11
+ class KartRace(rf.App):
12
+ title, width, height, scale = "Kart Race", 400, 250, 3
13
+ input_factory = staticmethod(lambda: rf.Input.racing())
14
+
15
+ def setup(self):
16
+ a, rng = self.args, random.Random(self.args.seed)
17
+ self.track = tr = rf.Track.preset("twisty", boost_at=[0.28, 0.62])
18
+ self.view = rf.Mode7Renderer(self.width, self.height, tr.image, scale=tr.scale,
19
+ sky_texture=rf.textures.sky_clouds(), fog=0.014)
20
+ self.snd = rf.SoundBank(enabled=not a.mute)
21
+ self.race = rf.Race(tr, laps=3, countdown=3.5)
22
+ self.tex = [rf.textures.kart(color=c) for c in COLORS]
23
+ self.racers = []
24
+ for i, pos in enumerate(tr.grid_positions(6)):
25
+ v = rf.Vehicle(*pos)
26
+ bot = i != 4 or a.demo
27
+ drv = rf.AIDriver(v, tr, skill=0.9 + 0.015 * i, lane=(-1) ** i * 0.4, seed=i) if bot else None
28
+ self.racers.append(self.race.add(rf.Racer(v, "YOU" if i == 4 else f"CPU{i}", drv, i == 4)))
29
+ self.me = self.racers[4]
30
+ self.cam = rf.ChaseCam(distance=5.0, height=2.1)
31
+ self.fx = rf.ParticleSystem(a.seed)
32
+ self.scenery, tree = [], rf.textures.tree()
33
+ for i in range(0, tr.n, 5):
34
+ h = tr.headings[i]; side = rng.choice((-1, 1)); off = tr.width / 2 + 3.5 + rng.random() * 6
35
+ x = tr.waypoints[i][0] - math.sin(h) * side * off; y = tr.waypoints[i][1] + math.cos(h) * side * off
36
+ if tr.surface_at(x, y) == rf.GRASS:
37
+ self.scenery.append(rf.M7Sprite(x, y, tree, size=3.2 + rng.random() * 1.5))
38
+ self.last_count = None
39
+
40
+ def update(self, dt):
41
+ inp, race = self.input, self.race
42
+ race.update(dt)
43
+ txt = race.countdown_text()
44
+ if txt != self.last_count and txt:
45
+ self.snd.play("go" if txt == "GO!" else "countdown")
46
+ self.last_count = txt
47
+ for r in self.racers:
48
+ v = r.vehicle
49
+ if not race.started:
50
+ continue
51
+ if r.driver is None and not r.finished:
52
+ th = inp.axis("brake", "accelerate")
53
+ ctrl = (th, inp.axis("left", "right"), False, inp.down("drift"))
54
+ else:
55
+ ctrl = r.driver.drive(dt) if r.driver else rf.AIDriver(v, self.track).drive()
56
+ v.update(dt, *ctrl, surface=self.track.surface_at(v.x, v.y))
57
+ if v.drifting and self.frame_no % 2 == 0:
58
+ bx, by = v.x - math.cos(v.heading) * 0.9, v.y - math.sin(v.heading) * 0.9
59
+ self.fx.emit(bx, by, 0.2, -v.vx * .1, -v.vy * .1, 1.5, 0.35, (255, 190, 60) if v.drift_time < 1.9 else (90, 190, 255), 0.18, 6)
60
+ for i, a in enumerate(self.racers):
61
+ for b in self.racers[i + 1:]:
62
+ a.vehicle.collide(b.vehicle)
63
+ race.rubber_band()
64
+ self.fx.update(dt)
65
+ self.snd.play_events(self.me.vehicle.pop_events(), SOUNDS)
66
+ for r in self.racers[:]:
67
+ if r is not self.me: r.vehicle.pop_events()
68
+ for ev, r in race.pop_events():
69
+ if r is self.me: self.snd.play("lap" if ev == "lap" else "win")
70
+ self.snd.engine(self.me.vehicle.speed_fraction * 0.9)
71
+ v = self.me.vehicle
72
+ self.cam.update(dt, v.x, v.y, v.heading)
73
+ if inp.pressed("restart"): self.setup()
74
+
75
+ def draw(self, screen):
76
+ sprites = self.scenery + [rf.M7Sprite(r.vehicle.x, r.vehicle.y, self.tex[i], size=1.9, heading=r.vehicle.heading)
77
+ for i, r in enumerate(self.racers)] + self.fx.mode7_sprites()
78
+ hud.blit_frame(screen, self.view.render(self.cam.cam, sprites))
79
+ W, H = screen.get_size(); race, me = self.race, self.me
80
+ hud.text(screen, f"LAP {race.current_lap(me)}/{race.laps}", (20, 14), 44)
81
+ hud.text(screen, f"{race.place(me)}/{len(self.racers)}", (W - 20, 14), 64, (255, 220, 80), anchor="topright")
82
+ hud.text(screen, f"{int(abs(me.vehicle.speed) * 9)} km/h", (W - 20, H - 20), 40, anchor="bottomright")
83
+ if me.best_lap: hud.text(screen, f"best {me.best_lap:.1f}s", (20, 60), 30)
84
+ c = race.countdown_text()
85
+ if c: hud.text(screen, c, (W // 2, H // 3), 160, (255, 230, 90), anchor="center")
86
+ hud.track_minimap(screen, self.track, [(r.vehicle.x, r.vehicle.y, COLORS[k]) for k, r in enumerate(self.racers)], (20, H - 190))
87
+ if me.finished:
88
+ hud.text(screen, "FINISH!", (W // 2, H // 3), 120, (255, 230, 90), anchor="center")
89
+ for i, r in enumerate(race.standings()):
90
+ hud.text(screen, f"{i + 1}. {r.name}", (W // 2, H // 2 + i * 34), 36, anchor="center")
91
+
92
+
93
+ if __name__ == "__main__":
94
+ KartRace().run()
@@ -0,0 +1,12 @@
1
+ Metadata-Version: 2.4
2
+ Name: kartrace
3
+ Version: 0.1.0
4
+ Summary: A fast-paced kart racing game built with rayforge_burgerguy and pygame
5
+ Author: burgerguy
6
+ Requires-Python: >=3.8
7
+ Requires-Dist: rayforge_burgerguy
8
+ Requires-Dist: pygame
9
+ Dynamic: author
10
+ Dynamic: requires-dist
11
+ Dynamic: requires-python
12
+ Dynamic: summary
@@ -0,0 +1,7 @@
1
+ kart_race.py
2
+ setup.py
3
+ kartrace.egg-info/PKG-INFO
4
+ kartrace.egg-info/SOURCES.txt
5
+ kartrace.egg-info/dependency_links.txt
6
+ kartrace.egg-info/requires.txt
7
+ kartrace.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ rayforge_burgerguy
2
+ pygame
@@ -0,0 +1 @@
1
+ kart_race
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,16 @@
1
+ from setuptools import setup
2
+
3
+ setup(
4
+ name="kartrace",
5
+ version="0.1.0",
6
+ author="burgerguy",
7
+ description="A fast-paced kart racing game built with rayforge_burgerguy and pygame",
8
+ py_modules=["kart_race"],
9
+ python_requires=">=3.8",
10
+ install_requires=[
11
+ "rayforge_burgerguy",
12
+ "pygame"
13
+ ],
14
+ # This treats the file as a direct executable script instead of looking for a function
15
+ scripts=["kart_race.py"],
16
+ )