From 776bb220f0b269c14616d922c4aa4d5e8260cb4b Mon Sep 17 00:00:00 2001 From: Jo Jerrica Decker Date: Wed, 4 Apr 2018 04:47:28 +0100 Subject: [PATCH] Initial commit --- README.md | 9 ++++- jeromBD-metal-CCBY3.png | Bin 0 -> 11808 bytes scroller/char_sheet.py | 17 ++++++++++ scroller/character.py | 16 +++++++++ scroller/scroller.py | 31 +++++++++++++++++ test.py | 73 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 jeromBD-metal-CCBY3.png create mode 100644 scroller/char_sheet.py create mode 100644 scroller/character.py create mode 100644 scroller/scroller.py create mode 100644 test.py diff --git a/README.md b/README.md index d27577d..488021d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ # PyScroller -A simple pygame-based text scroller. \ No newline at end of file +A simple pygame-based text scroller. + +# Attribution + +This code uses the tileset +["16x16 Studded Metal Fonts"](https://opengameart.org/content/16x16-studded-metal-fonts) +by [Jerom](https://opengameart.org/users/jerom), used under +[CC-BY 3.0](https://creativecommons.org/licenses/by/3.0/). diff --git a/jeromBD-metal-CCBY3.png b/jeromBD-metal-CCBY3.png new file mode 100644 index 0000000000000000000000000000000000000000..8e04597c11928b8956c5bf2ec2a6eb677db37a72 GIT binary patch literal 11808 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 z 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 E23Jk_rvLx| literal 0 HcmV?d00001 diff --git a/scroller/char_sheet.py b/scroller/char_sheet.py new file mode 100644 index 0000000..dfa7e68 --- /dev/null +++ b/scroller/char_sheet.py @@ -0,0 +1,17 @@ +from pygame import image + + +class CharSheet: + def __init__(self, filename, characters, char_width, char_height): + self.sheet = image.load(filename) + self.characters = characters + self.char_width = char_width + self.char_height = char_height + + def get_sheet(self, character): + index = self.characters.index(character.char) + + y = index // self.char_height + x = index - (self.char_height * y) + + return [x, y] diff --git a/scroller/character.py b/scroller/character.py new file mode 100644 index 0000000..c0de184 --- /dev/null +++ b/scroller/character.py @@ -0,0 +1,16 @@ +class Character: + def __init__(self, + x=0, + y=0, + x_speed=0.1, + y_speed=0.1, + angle=0, + radius=20, + char=' '): + self.x = x + self.y = y + self.x_speed = x_speed + self.y_speed = y_speed + self.angle = angle + self.radius = radius + self.char = char diff --git a/scroller/scroller.py b/scroller/scroller.py new file mode 100644 index 0000000..a683594 --- /dev/null +++ b/scroller/scroller.py @@ -0,0 +1,31 @@ +from . import character + + +class Scroller: + def __init__(self, text): + self.text = text + self.next_char = 0 + self.sheet_chars = [] + + def get_next_char(self, + x=0, + y=0, + x_speed=0.1, + y_speed=0.1, + angle=0, + radius=20): + self.sheet_chars.append(character.Character(x, + y, + x_speed, + y_speed, + angle, + radius, + self.text[self.next_char])) + + if (self.next_char < (len(self.text) - 1)): + self.next_char += 1 + else: + self.next_char = 0 + + def delete_first_char(self): + self.sheet_chars.pop(0) diff --git a/test.py b/test.py new file mode 100644 index 0000000..33ef5ef --- /dev/null +++ b/test.py @@ -0,0 +1,73 @@ +import pygame +import math +from scroller import scroller +from scroller import char_sheet + +pygame.init() + +size = width, height = 320, 240 + +black = 0, 0, 0 +red = 255, 0, 0 +characters = [' ', '!', '\"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', + ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', + '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', + 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', + 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', + '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', + 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', + 'z', '{', '|', '}', '~', '©'] + +char_sheet = char_sheet.CharSheet("jeromBD-metal-CCBY3.png", + characters, 16, 16) + +x = 320 +y = 120 + +clock = pygame.time.Clock() + +scroller = scroller.Scroller("IT'S BEEN... one week since you looked at me, " + + "cocked your head to the side and said \"I'm " + + "angry\" ") + +screen = pygame.display.set_mode(size) + +while 1: + dt = clock.tick(60) + + screen.fill(black) + + i = 0 + + if not scroller.sheet_chars: + scroller.get_next_char(320, 120, 0.1, 2, 0, 20) + + for sheet_char in scroller.sheet_chars: + sheet_char.x -= sheet_char.x_speed * dt + + sheet_char.angle += sheet_char.y_speed + + sheet_char.y = ((sheet_char.radius * + math.sin(sheet_char.angle * math.pi / 180)) + + 120) + + if (sheet_char.x < -(char_sheet.char_width)): + scroller.delete_first_char() + i -= 1 + else: + if (i == (len(scroller.sheet_chars) - 1) and + sheet_char.x <= (width - char_sheet.char_width)): + scroller.get_next_char(320, 120, 0.1, 2, 0, 20) + print(str(len(scroller.sheet_chars) - 1) + " | " + str(i) + + " | " + str(scroller.next_char)) + + i += 1 + + sect = char_sheet.get_sheet(sheet_char) + sprite = pygame.Rect((sect[0] * 16), + (sect[1] * 16), 16, 16) + + screen.blit(char_sheet.sheet, (sheet_char.x, + sheet_char.y), sprite) + + pygame.display.flip()