11#!/usr/bin/env python3
2+ import os
3+ import random
4+ import sys
5+ import threading
6+ import time
7+
28import scrap_engine as se
3- import time , os , threading , sys , random
49
510
611class PanelItem (se .Object ):
@@ -10,48 +15,61 @@ def bump_left(self):
1015 self .remove ()
1116
1217 def bump (self , ob , x , y ):
13- ob .set (ob .x - 1 , ob .y )
14- self .set (self .x - 1 , self .y )
18+ ob .set (ob .x - 1 , ob .y )
19+ self .set (self .x - 1 , self .y )
1520
1621
1722class Panel (se .Square ):
1823 def init (self ):
1924 for ob in self .obs :
2025 moving .append (ob )
2126
27+
2228def genpanel ():
2329 global panelindex , test
24- exec ("panel_%s=Panel('#', 10, 1, ob_class=PanelItem)" % panelindex )
25- exec ("panel_%s.add(map, map.width-11, map.height-%i)" % (panelindex , random .randint (8 ,20 )))
26- exec ("panel_%s.init()" % panelindex )
27- panelindex += 1
30+ exec ("panel_%s=Panel('#', 10, 1, ob_class=PanelItem)" % panelindex )
31+ exec (
32+ "panel_%s.add(map, map.width-11, map.height-%i)"
33+ % (panelindex , random .randint (8 , 20 ))
34+ )
35+ exec ("panel_%s.init()" % panelindex )
36+ panelindex += 1
37+
2838
2939def on_press (key ):
3040 global ev
31- ev = str (key )
41+ ev = str (key )
42+
43+
44+ if (
45+ sys .platform == "linux"
46+ ): # Use another (not on xserver relying) way to read keyboard input, to make this shit work in tty or via ssh, where no xserver is available
3247
33- if sys .platform == "linux" : # Use another (not on xserver relying) way to read keyboard input, to make this shit work in tty or via ssh, where no xserver is available
3448 def recogniser ():
35- import tty , sys , termios
36- global ev , old_settings , termios , fd , do_exit
49+ import sys
50+ import termios
51+ import tty
3752
38- do_exit = False
39- fd = sys .stdin .fileno ()
53+ global ev , old_settings , fd , do_exit
54+
55+ do_exit = False
56+ fd = sys .stdin .fileno ()
4057 old_settings = termios .tcgetattr (fd )
4158 tty .setraw (fd )
4259 while True :
43- char = sys .stdin .read (1 )
60+ char = sys .stdin .read (1 )
4461 if ord (char ) == 13 :
45- ev = "Key.enter"
62+ ev = "Key.enter"
4663 elif ord (char ) == 32 :
47- ev = "Key.space"
64+ ev = "Key.space"
4865 else :
49- ev = "'" + char .rstrip ()+ "'"
66+ ev = "'" + char .rstrip () + "'"
5067 if ord (char ) == 3 or do_exit :
5168 termios .tcsetattr (fd , termios .TCSADRAIN , old_settings )
52- ev = "exit"
69+ ev = "exit"
5370else :
54- from pynput .keyboard import Key , Listener
71+ from pynput .keyboard import Listener
72+
5573 def recogniser ():
5674 global ev
5775 while True :
@@ -62,78 +80,97 @@ def recogniser():
6280def main ():
6381 global v , t , ev , g , framenum , genframe
6482 while True :
65- nexty = lambda v ,g ,t : round (player .y - (v * (v / g )- 1 / 2 * g * (v / g )** 2 )- v * t + 1 / 2 * g * t ** 2 )
83+
84+ def nexty (v , g , t ):
85+ return round (
86+ player .y
87+ - (v * (v / g ) - 1 / 2 * g * (v / g ) ** 2 )
88+ - v * t
89+ + 1 / 2 * g * t ** 2
90+ )
91+
6692 for ob in map .obs [1 :]:
67- if player .y + 1 == ob .y and player .x == ob .x :
68- t = 0
69- v = 0
93+ if player .y + 1 == ob .y and player .x == ob .x :
94+ t = 0
95+ v = 0
7096 for ob in map .obs [1 :]:
71- if player .y < ob .y < nexty (v ,g , t ) and ob .x == player .x + 1 :
72- player .set (player .x , ob .y - 1 )
73- t = 0
74- v = 0
97+ if player .y < ob .y < nexty (v , g , t ) and ob .x == player .x + 1 :
98+ player .set (player .x , ob .y - 1 )
99+ t = 0
100+ v = 0
75101 break
76- elif player .y > ob .y > nexty (v ,g , t ) and ob .x == player .x + 1 :
77- player .set (player .x , ob .y + 1 )
78- t = 0
79- v = 0
102+ elif player .y > ob .y > nexty (v , g , t ) and ob .x == player .x + 1 :
103+ player .set (player .x , ob .y + 1 )
104+ t = 0
105+ v = 0
80106 break
81107 if ev == "Key.space" :
82- v = - 0.25
83- ev = 0
108+ v = - 0.25
109+ ev = 0
84110 elif ev == "exit" :
85- ev = 0
111+ ev = 0
86112 raise KeyboardInterrupt
87- if player .set (player .x , nexty (v ,g , t ))!= 0 and t != 0 :
113+ if player .set (player .x , nexty (v , g , t )) != 0 and t != 0 :
88114 for ob in map .obs [1 :]:
89- if ob .x == player .x and ob .y == nexty (v ,g , t ):
90- v = 0
91- player .set (player .x , player .y + 1 )
92- t += 1
115+ if ob .x == player .x and ob .y == nexty (v , g , t ):
116+ v = 0
117+ player .set (player .x , player .y + 1 )
118+ t += 1
93119 # exec("point_%s=PanelItem('*', 'float')"%panelindex)
94120 # exec("point_%s.add(map, player.x-1, player.y)"%panelindex)
95121 # exec("moving.append(point_%s)"%panelindex)
96122 # panelindex+=1
97123 for mov in moving :
98- mov .set (mov .x - 1 , mov .y )
99- if player .x < smap .x - 1 :
124+ mov .set (mov .x - 1 , mov .y )
125+ if player .x < smap .x - 1 :
100126 exit ()
101- h .rechar ((2 - len (str (player .y )))* " " + str (player .y )+ " " + str (map .height )+ " " + str (player .y )+ " " + str (nexty (v ,g ,t ))+ " " + str (player .y - nexty (v ,g ,t )))
102- if genframe + 15 == framenum :
127+ h .rechar (
128+ (2 - len (str (player .y ))) * " "
129+ + str (player .y )
130+ + " "
131+ + str (map .height )
132+ + " "
133+ + str (player .y )
134+ + " "
135+ + str (nexty (v , g , t ))
136+ + " "
137+ + str (player .y - nexty (v , g , t ))
138+ )
139+ if genframe + 15 == framenum :
103140 genpanel ()
104- genframe += 15
141+ genframe += 15
105142 time .sleep (0.05 )
106143 smap .remap ()
107144 smap .show ()
108- framenum += 1
145+ framenum += 1
109146
110147
111148os .system ("" )
112149width , height = os .get_terminal_size ()
113- t = ev = v = 0
114- g = 0.015
115- panelindex = 0
116- framenum = 0
117- genframe = 0
118-
119- map = se .Map (height - 1 , width + 12 , " " )
120- smap = se .Submap (map , 0 , 0 )
121-
122- player = se .Object ("t" )
123- block = PanelItem ("#" )
124- panel = Panel ("#" , 10 , 1 , ob_class = PanelItem )
125- ground = se .Square ("#" , map .width , 5 )
126- h = se .Text ("00 00" )
127-
128- player .add (map , round (smap .width / 2 ), round (map .height / 2 ))
129- block .add (map , map .width - 11 , map .height - 6 )
130- panel .add (map , map .width - 11 , map .height - 10 )
131- ground .add (map , 0 , map .height - 5 )
150+ t = ev = v = 0
151+ g = 0.015
152+ panelindex = 0
153+ framenum = 0
154+ genframe = 0
155+
156+ map = se .Map (height - 1 , width + 12 , " " )
157+ smap = se .Submap (map , 0 , 0 )
158+
159+ player = se .Object ("t" )
160+ block = PanelItem ("#" )
161+ panel = Panel ("#" , 10 , 1 , ob_class = PanelItem )
162+ ground = se .Square ("#" , map .width , 5 )
163+ h = se .Text ("00 00" )
164+
165+ player .add (map , round (smap .width / 2 ), round (map .height / 2 ))
166+ block .add (map , map .width - 11 , map .height - 6 )
167+ panel .add (map , map .width - 11 , map .height - 10 )
168+ ground .add (map , 0 , map .height - 5 )
132169h .add (smap , 0 , 0 )
133- moving = [ob for ob in panel .obs ]+ [block ]
170+ moving = [ob for ob in panel .obs ] + [block ]
134171
135- recognising = threading .Thread (target = recogniser )
136- recognising .daemon = True
172+ recognising = threading .Thread (target = recogniser )
173+ recognising .daemon = True
137174recognising .start ()
138175
139176smap .remap ()
0 commit comments