pygame_terminal_ii
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
pygame_terminal_ii [2023/11/06 01:27] – appledog | pygame_terminal_ii [2023/11/06 01:58] (current) – appledog | ||
---|---|---|---|
Line 135: | Line 135: | ||
threading.Timer(self.interval, | threading.Timer(self.interval, | ||
</ | </ | ||
+ | |||
+ | === Cursor | ||
+ | One notable addition here is the cursor. I believe that 535ms is the speed of the original IBM-PC DOS terminal. On WIN11 systems today (2023) and on some ubuntu systems it is shown as 530ms. On a C-64 I believe the speed was 750ms. | ||
+ | |||
+ | We couldn' | ||
+ | |||
+ | === draw() in Terminal | ||
+ | If you have been following along from [[Pygame Terminal]] you will see that drawText() is in Game, and no draw() function was provided by Terminal. However, one should be. | ||
+ | |||
+ | In an early version of [[PyHack]] I copied the levelmap into the buf before drawing it: | ||
+ | |||
+ | < | ||
+ | def drawGame(self): | ||
+ | for y in range(self.level.h): | ||
+ | for x in range(self.level.w): | ||
+ | self.term.setch(x, | ||
+ | |||
+ | for y in range(self.term.rows): | ||
+ | for x in range(self.term.cols): | ||
+ | ch = self.term.buf[y][x].ch | ||
+ | color = self.term.buf[y][x].color | ||
+ | self.drawText(x, | ||
+ | |||
+ | # draw cursor | ||
+ | if self.term.cc: | ||
+ | self.drawText(self.term.cx, | ||
+ | </ | ||
+ | |||
+ | This was the initial integration, | ||
+ | |||
+ | First, add this to Terminal: | ||
+ | |||
+ | < | ||
+ | def draw(self, window): | ||
+ | for y in range(self.rows): | ||
+ | for x in range(self.cols): | ||
+ | ch = self.buf[y][x].ch | ||
+ | color = self.buf[y][x].color | ||
+ | window.drawText(x, | ||
+ | |||
+ | # draw cursor | ||
+ | if self.cc: | ||
+ | window.drawText(self.cx, | ||
+ | </ | ||
+ | |||
+ | Next, you can add this to Window: | ||
+ | |||
+ | < | ||
+ | def drawText(self, | ||
+ | text_surface = self.font.render(text, | ||
+ | x = self.fontwidth * at_x | ||
+ | y = self.fontheight * at_y | ||
+ | self.screen.blit(text_surface, | ||
+ | < | ||
+ | |||
+ | After you delete drawText() from Game, The terminal will have been fully abstracted out of the Game class. The Game class makes updates using term.setch or term.putch, and there is no special thing done other than to draw it. If a special draw function is needed one could be constructed. But in general Game no longer needs to call drawText() as if it was managing the screen instead of Terminal. | ||
+ | |||
+ | == Creating a LP/TTY device | ||
+ | The first thing we need to do is create a lp-style output device. This will require the function putch and the helper functions cr and lf. | ||
+ | |||
+ | Secondly we will need to add functions such as " | ||
+ |
pygame_terminal_ii.1699234062.txt.gz · Last modified: 2023/11/06 01:27 by appledog