class BattleshipScreen(Screen): def __init__(self, **kwargs): super(BattleshipScreen, self).__init__(name=kwargs.get('name')) self.ui_layout() def ui_layout(self): start_game_button_anchor = AnchorLayout(anchor_x='center', anchor_y='bottom', padding=[dp(25), dp(25), dp(25), dp(25)]) self.start_game_button = MDFloatingActionButton(icon='play', size=[dp(56), dp(56)]) self.start_game_button.md_bg_color = App.get_running_app().theme_cls.primary_color self.start_game_button.text_color = [1, 1, 1, 1] if platform not in ['ios', 'android']: self.start_game_button.bind(on_press=lambda x: self.start_game()) start_game_button_anchor.add_widget(self.start_game_button) game_card = MDCard(padding=dp(24), spacing=dp(24), orientation='vertical', size_hint_x=0.85, size_hint_y=0.7, pos_hint={'top': 0.85, 'center_x': 0.5}) rules = """The objective of Battleship is to try and sink all of the other player's before they sink all of your ships. All of the other player's ships are somewhere on his/her board. Player's take turns guessing out the coordinates of the enemy ships. If it's a hit the cell turns RED. If its a miss the cell turns BLUE. The first played to guess and hit all the ships completely wins!""" game_label = MDLabel(text=rules, font_style='Body1', halign='center', size_hint=(1, 0.5)) game_label.theme_text_color = 'Custom' game_label.text_color = [1, 1, 1, 1] game_card.add_widget(game_label) game_card.md_bg_color = App.get_running_app().theme_cls.accent_color game_card.elevation = 15 self.add_widget(game_card) self.add_widget(start_game_button_anchor) # Nav Bar self.nav_bar = MyNavigationLayout() self.nav_bar_anchor = AnchorLayout(anchor_x='center', anchor_y='top') self.nav_bar_anchor.add_widget(self.nav_bar) self.add_widget(self.nav_bar_anchor) def start_game(self): # add this line - os.system('java -jar ./jar/<filename>.jar') os.system('java -jar ./jar/BATTLESHIP.jar') def return_home(self): self.manager.current = 'welcome'
class AlarmScreen(Screen): def __init__(self, **kw): self.app = MDApp.get_running_app() Clock.schedule_once(self.post_init, 0) super().__init__(**kw) def post_init(self, dt): self.btn = MDFloatingActionButton(icon='alarm-off', pos_hint={ 'center_x': .5, 'center_y': .1 }) self.btn.md_bg_color = self.app.theme_cls.primary_color self.btn.bind(on_release=self.close) self.image = Image(source=self.app.car_image, pos_hint={ 'center_x': .5, 'center_y': .5 }, size_hint=[None, None], size=[200, 200]) self.add_widget(self.image) self.add_widget(self.btn) def on_enter(self, *args): self.start_animation() return super().on_enter(*args) def on_pre_leave(self, *args): Animation.cancel_all(self.image) return super().on_pre_leave(*args) def start_animation(self, *_): a = Animation(size=[300, 300], d=1., t='in_out_elastic') a.bind(on_complete=self.back_aniamte) a.start(self.image) def back_aniamte(self, *_): a = Animation(size=[150, 150], d=1., t='in_out_elastic') a.bind(on_complete=self.start_animation) a.start(self.image) def close(self, *_): self.app.root.ids.sm.current = 'scr 1' if self.app.vibrator: self.app.vibrator.stop() self.app.vibrator = None Clock.schedule_once(self.move_close, .3) def move_close(self, _): cancel_notification(192837) mActivity.moveTaskToBack(True)
def ui_layout(self): self.clear_widgets() layout = BoxLayout(orientation='vertical') scroll = ScrollView(do_scroll_x=False, size_hint=(1, None), size=(Window.width, Window.height)) scroll_box = BoxLayout(orientation='vertical', size_hint_y=None, padding=(dp(12), dp(60)), spacing=dp(5)) scroll_box.bind(minimum_height=scroll_box.setter('height')) # Add more self.scrollbox.add_widget(MDLabel(text='')) to increase padding scroll_box.add_widget(MDLabel(text=' ')) scroll_box.add_widget(MDLabel(text=' ')) scroll_box.add_widget(MDLabel(text=' ')) scroll_box.add_widget(MDLabel(text=' ', size_hint=(1, 5))) for contact in self.util.contact_list: contact_card = ContactCard(util=self.util, contact=contact ) scroll_box.add_widget(contact_card) scroll.add_widget(scroll_box) layout.add_widget(scroll) # Add floating action button to write messages add_contact_anchor = AnchorLayout(anchor_x='right', anchor_y='bottom', padding=[dp(25), dp(25), dp(25), dp(25)]) add_contact_btn = MDFloatingActionButton(icon='account-plus', size=[dp(56), dp(56)]) add_contact_btn.md_bg_color = App.get_running_app().theme_cls.primary_color add_contact_btn.theme_text_color = "Custom" add_contact_btn.text_color = [1, 1, 1, 1] add_contact_btn.bind(on_press=lambda x: self.change_screen('add_contact')) add_contact_anchor.add_widget(add_contact_btn) toolbar_anchor = AnchorLayout(anchor_x='center', anchor_y='top') toolbar = MDToolbar(title='Contacts', anchor_title='center') toolbar.md_bg_color = App.get_running_app().theme_cls.primary_color toolbar.left_action_items = [['arrow-left', lambda x: self.change_screen('message')]] toolbar_anchor.add_widget(toolbar) self.add_widget(layout) self.add_widget(add_contact_anchor) self.add_widget(toolbar_anchor) self.do_layout()
def show_drill(self, chosen_drills): """Shows all the chosen drills on the screen""" i = 0 for page in [self.ids.drill1, self.ids.drill2, self.ids.drill3]: page.ids.title.text = chosen_drills[i]['title'] page.ids.body.text = chosen_drills[i]['description'] if chosen_drills[i]['link'] is not None: floating_button = MDFloatingActionButton(pos_hint={ 'center_x': 0.8, 'center_y': 0.1 }, icon='youtube') floating_button.md_bg_color = self.app.theme_cls.primary_color floating_button.bind(on_release=lambda x, link=chosen_drills[i] ['link']: open_url(link)) page.add_widget(floating_button) self.youtube_button[i] = floating_button i += 1
class DecoderScreen(Screen): def __init__(self, **kwargs): super(DecoderScreen, self).__init__(name=kwargs.get('name')) self.util = kwargs.get('util') if platform not in ['ios', 'android']: self.amr = self.util.auto_morse_recognizer self.ui_layout() def ui_layout(self): record_button_anchor = AnchorLayout( anchor_x='center', anchor_y='bottom', padding=[dp(25), dp(25), dp(25), dp(25)]) self.record_button = MDFloatingActionButton(icon='record', size=[dp(56), dp(56)]) self.record_button.md_bg_color = App.get_running_app( ).theme_cls.primary_color self.record_button.text_color = [1, 1, 1, 1] if platform not in ['ios', 'android']: self.record_button.bind(on_press=lambda x: self.decode_audio()) record_button_anchor.add_widget(self.record_button) self.decode_input = MDTextFieldRound(pos_hint={ 'center_x': 0.5, 'center_y': 0.5 }, size_hint=(0.85, 0.5)) self.decode_input.icon_left_dasabled = True # Moves widget out of the field of view self.decode_input.children[2].children[2].pos_hint = { 'center_x': 500, 'center_y': 500 } # This binds the right icon to record the input self.decode_input.icon_right = 'database-export' self.decode_input.children[2].children[0].bind( on_press=lambda x: self.clear_text()) decode_card = MDCard(padding=dp(24), spacing=dp(24), orientation='vertical', size_hint_x=0.85, size_hint_y=0.7, pos_hint={ 'top': 0.85, 'center_x': 0.5 }) decode_label = MDLabel(text='Decode Morse Code Audio', font_style='Body1', halign='center', size_hint=(1, 0.5)) decode_label.theme_text_color = 'Custom' decode_label.text_color = [1, 1, 1, 1] decode_card.add_widget(decode_label) decode_text = 'Hit record or enter Morse Code below to start decoding' self.decode_output_label = MDLabel(text=decode_text, font_style='Body1', halign='center', size_hint=(1, 0.5)) self.decode_output_label.theme_text_color = 'Custom' self.decode_output_label.text_color = [1, 1, 1, 1] if platform not in ['ios', 'android']: self.audio_indicator = AudioIndicator( stack_width=self.amr.bits_per_frame) else: self.audio_indicator = AudioIndicator(stack_width=40) self.audio_indicator.size_hint = (1, 2) decode_card.add_widget(self.audio_indicator) decode_card.add_widget(self.decode_output_label) decode_card.add_widget(self.decode_input) decode_card.md_bg_color = App.get_running_app().theme_cls.accent_color decode_card.elevation = 15 self.add_widget(decode_card) self.add_widget(record_button_anchor) # Nav Bar self.nav_bar = MyNavigationLayout() self.nav_bar_anchor = AnchorLayout(anchor_x='center', anchor_y='top') self.nav_bar_anchor.add_widget(self.nav_bar) self.add_widget(self.nav_bar_anchor) def update_audio_indicator(self, dt): if hasattr(self.audio_indicator, 'stack_width'): level_array = [ self.audio_indicator.stack_height + 1 if bit == 0 else 0 for bit in dt[-self.audio_indicator.stack_width:] ] self.audio_indicator.set_levels(level_array) def clear_text(self): self.decode_input.text = '' def decode_audio(self): if self.record_button.md_bg_color == App.get_running_app( ).theme_cls.primary_color: self.record_button.md_bg_color = App.get_running_app( ).theme_cls.error_color self.decode_output_label.text = 'Recording Started' print("Start audio recording thread") self.amr.start() Clock.schedule_interval(self.update_amr, self.amr.frame_rate) else: self.decode_output_label.text = 'Recording Stopped' print("Stopped audio recording thread") self.record_button.md_bg_color = App.get_running_app( ).theme_cls.primary_color Clock.unschedule(self.update_amr) self.amr.stop() self.clear_text() def update_amr(self, kargs): print(kargs) morse_code, bit_signal = self.amr.update() self.update_audio_indicator(bit_signal) self.update_text(morse_code) def update_text(self, morse_code): self.decode_input.text = self.decode_input.text + ''.join(morse_code) def return_home(self): self.manager.current = 'welcome'
def ui_layout(self): self.clear_widgets() layout = BoxLayout(orientation='vertical') self.scroll = ScrollView(do_scroll_x=False, size_hint=(1, None), size=(Window.width, Window.height)) scroll_box = BoxLayout(orientation='vertical', size_hint_y=None, padding=(dp(1), dp(60)), spacing=dp(1)) scroll_box.bind(minimum_height=scroll_box.setter('height')) # Add more self.scrollbox.add_widget(MDLabel(text='')) to increase padding scroll_box.add_widget(MDLabel(text=' ')) scroll_box.add_widget(MDLabel(text=' ')) scroll_box.add_widget(MDLabel(text=' ')) for key in self.util.user_data['message_dict']: morse_code = '' temp_dict = self.util.user_data['message_dict'][key][-1:][0] if '_.' not in temp_dict['message']: morse_code = self.util.morse_helper.text_to_morse( str(temp_dict['message'])) else: morse_code = str(temp_dict['message']) message_card = MessageCard( text_post=morse_code, name=key, name_data=(key + '\n' + temp_dict['timestamp']), swipe=True, source='ui/img/default_avatar.png', ) scroll_box.add_widget(message_card) self.scroll.add_widget(scroll_box) layout.add_widget(self.scroll) self.add_widget(layout) # Add floating action button to write messages create_message_anchor = AnchorLayout( anchor_x='right', anchor_y='bottom', padding=[dp(25), dp(25), dp(25), dp(25)]) create_message_btn = MDFloatingActionButton(icon='message', size=[dp(56), dp(56)]) create_message_btn.md_bg_color = App.get_running_app( ).theme_cls.primary_color create_message_btn.theme_text_color = "Custom" create_message_btn.text_color = [1, 1, 1, 1] create_message_btn.bind(on_press=lambda x: self.switch_screens()) create_message_anchor.add_widget(create_message_btn) self.add_widget(create_message_anchor) # Nav Bar self.nav_bar = MyNavigationLayout(scroll_view=self.scroll) self.nav_bar_anchor = AnchorLayout(anchor_x='center', anchor_y='top') self.nav_bar_anchor.add_widget(self.nav_bar) self.add_widget(self.nav_bar_anchor) self.do_layout()
class PaintBallScreen(Screen): def __init__(self, **kwargs): super(PaintBallScreen, self).__init__(name=kwargs.get('name')) self.ui_layout() def ui_layout(self): start_game_button_anchor = AnchorLayout( anchor_x='center', anchor_y='bottom', padding=[dp(25), dp(25), dp(25), dp(25)]) self.start_game_button = MDFloatingActionButton(icon='play', size=[dp(56), dp(56)]) self.start_game_button.md_bg_color = App.get_running_app( ).theme_cls.primary_color self.start_game_button.text_color = [1, 1, 1, 1] if platform not in ['ios', 'android']: self.start_game_button.bind(on_press=lambda x: self.start_game()) start_game_button_anchor.add_widget(self.start_game_button) game_card = MDCard(padding=dp(24), spacing=dp(24), orientation='vertical', size_hint_x=0.85, size_hint_y=0.7, pos_hint={ 'top': 0.85, 'center_x': 0.5 }) rules = """Hit the blocks popping up before they disappear! Hit the blocks a specific number of times to win the game! Keep in mind, you just have limited chances to hit the blocks. So buckle up for some exciting fun! """ game_label = MDLabel(text=rules, font_style='Body1', halign='center', size_hint=(1, 0.5)) game_label.theme_text_color = 'Custom' game_label.text_color = [1, 1, 1, 1] game_card.add_widget(game_label) game_card.md_bg_color = App.get_running_app().theme_cls.accent_color game_card.elevation = 15 self.add_widget(game_card) self.add_widget(start_game_button_anchor) # Nav Bar self.nav_bar = MyNavigationLayout() self.nav_bar_anchor = AnchorLayout(anchor_x='center', anchor_y='top') self.nav_bar_anchor.add_widget(self.nav_bar) self.add_widget(self.nav_bar_anchor) def start_game(self): # add this line - os.system('java -jar ./jar/<filename>.jar') os.system('java -jar ./jar/PAINTBALL.jar') def return_home(self): self.manager.current = 'welcome'
class SnakeScreen(Screen): def __init__(self, **kwargs): super(SnakeScreen, self).__init__(name=kwargs.get('name')) self.ui_layout() def ui_layout(self): start_game_button_anchor = AnchorLayout( anchor_x='center', anchor_y='bottom', padding=[dp(25), dp(25), dp(25), dp(25)]) self.start_game_button = MDFloatingActionButton(icon='play', size=[dp(56), dp(56)]) self.start_game_button.md_bg_color = App.get_running_app( ).theme_cls.primary_color self.start_game_button.text_color = [1, 1, 1, 1] if platform not in ['ios', 'android']: self.start_game_button.bind(on_press=lambda x: self.start_game()) start_game_button_anchor.add_widget(self.start_game_button) game_card = MDCard(padding=dp(24), spacing=dp(24), orientation='vertical', size_hint_x=0.85, size_hint_y=0.7, pos_hint={ 'top': 0.85, 'center_x': 0.5 }) rules = """Snakes and ladders is a game to play with your friends. Navigate your piece from start to finish, avoid the snakes, and take shortcuts going up the ladders. How to play: Each player starts from base. Both players alternatively roll the dice and move the respective pawns. If your pawn lands at the bottom of a ladder, you can move up to the top of the ladder. If your pawn lands on the head of a snake, you must slide down to the bottom of the snake. The first player to get to the last tile numbered '100' is the winner.""" game_label = MDLabel(text=rules, font_style='Body1', halign='center', size_hint=(1, 0.5)) game_label.theme_text_color = 'Custom' game_label.text_color = [1, 1, 1, 1] game_card.add_widget(game_label) game_card.md_bg_color = App.get_running_app().theme_cls.accent_color game_card.elevation = 15 self.add_widget(game_card) self.add_widget(start_game_button_anchor) # Nav Bar self.nav_bar = MyNavigationLayout() self.nav_bar_anchor = AnchorLayout(anchor_x='center', anchor_y='top') self.nav_bar_anchor.add_widget(self.nav_bar) self.add_widget(self.nav_bar_anchor) def start_game(self): # add this line - os.system('java -jar ./jar/<filename>.jar') os.system('java -jar ./jar/SNAKES_AND_LADDERS.jar') def return_home(self): self.manager.current = 'welcome'
class BlueDevicesScreen(MDScreen): def __init__(self, **kw): self.devices = [] self.list_of_devices = None self.toolbar = None self.choosen_color = None self.app = MDApp.get_running_app() self.number_of_devices = 0 self.count_animations = 0 if platform == 'android': self.bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() if not self.bluetoothAdapter: android_toast("This device doesn't support bluetooth", True) else: self.bluetoothAdapter = None Clock.schedule_once(self.post_init, 0) super().__init__(**kw) def post_init(self, dt): scroll = ScrollView(always_overscroll=False) self.list_of_devices = MDList() scroll.add_widget(self.list_of_devices) box = BoxLayout() box.add_widget(scroll) self.refresh_btn = MDFloatingActionButton( icon='refresh', pos_hint={ 'center_x': .5, 'center_y': .5 }, md_bg_color=self.app.theme_cls.primary_color, opacity=0) self.refresh_btn.bind(on_release=self.get_bluetooth_devices) btn_layout = FloatLayout(size_hint_y=None, height=dp(100)) btn_layout.add_widget(self.refresh_btn) self.container = BoxLayout(orientation='vertical') self.toolbar = MDToolbar(pos_hint={'top': 1}) self.toolbar.left_action_items = [ 'chevron-left', lambda x: self.switch_screen() ], self.toolbar.right_action_items = [ 'bluetooth-off', lambda x: self.clear_device() ], self.container.add_widget(self.toolbar) self.container.add_widget(box) self.container.add_widget(btn_layout) self.add_widget(self.container) def enable_bluetooth(self): enableAdapter = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) mActivity.startActivityForResult(enableAdapter, 0) def post_background_permissions(self): if self.bluetoothAdapter: if not self.bluetoothAdapter.isEnabled(): self.enable_bluetooth() return self.get_bluetooth_devices() Clock.schedule_once(self.animate_button_colors, 0) def on_enter(self, *args): if platform == 'android': granted = self.app.check_background() if granted: self.post_background_permissions() else: self.app.root.ids.sm.current = 'scr 1' return super().on_enter(*args) def on_leave(self, *args): self.devices = [] self.number_of_devices = 0 self.list_of_devices.clear_widgets() Clock.schedule_once(self.app.save_theme, 0) Animation.cancel_all(self.refresh_btn) Animation.cancel_all(self.toolbar) self.toolbar.md_bg_color = self.app.theme_cls.primary_color self.refresh_btn.md_bg_color = self.app.theme_cls.primary_color return super().on_leave(*args) def on_pre_enter(self, *args): Animation(opacity=1, d=1.5).start(self.refresh_btn) return super().on_pre_enter(*args) def on_pre_leave(self, *args): self.app.set_decorations() self.refresh_btn.opacity = 0 return super().on_pre_leave(*args) def get_bluetooth_devices(self, *_): if self.bluetoothAdapter: if self.bluetoothAdapter.isEnabled(): results = self.bluetoothAdapter.getBondedDevices() self.devices = results.toArray() self.list_of_devices.clear_widgets() for device in self.devices: name = OneLineListItem(text=device.getName(), opacity=0) name.bind(on_release=self.save_device_name) self.list_of_devices.add_widget(name) self.count_animations = len(self.list_of_devices.children) Clock.schedule_once(self.animate_items_opacity, 0) else: self.enable_bluetooth() def save_device_name(self, widget): self.app.paired_car = widget.text self.app.root.ids.content_drawer\ .ids.md_list.children[0].text = widget.text android_toast(f'Listening for {widget.text}', True) def switch_screen(self): self.app.root.ids.sm.current = 'scr 1' def clear_device(self): self.app.paired_car = '' self.app.root.ids.content_drawer\ .ids.md_list.children[0].text = 'Choose car' def change_decorations(self, *_): if platform == 'android': statusbar = get_hex_from_color(self.choosen_color[:-1]) navbar = get_hex_from_color(self.choosen_color[:-1]) self.app.statusbar(statusbar, navbar) def animate_button_colors(self, *_): self.choosen_color = choice(DECORATION_COLORS) a = Animation(md_bg_color=self.choosen_color, d=.3) b = Animation(md_bg_color=self.choosen_color, d=.3) a.bind(on_start=self.change_decorations) a.start(self.refresh_btn) b.start(self.toolbar) def animate_items_opacity(self, *_): try: a = Animation(opacity=1, d=.25, t='out_bounce') a.bind(on_complete=self.decrease_children) a.start(self.list_of_devices.children[self.count_animations - 1]) except IndexError as e: print(e) for child in self.list_of_devices.children: child.opacity = 1 def decrease_children(self, *_): self.count_animations -= 1 if self.count_animations < 0: self.count_animations = 0 return self.animate_items_opacity()
class TicTacScreen(Screen): def __init__(self, **kwargs): super(TicTacScreen, self).__init__(name=kwargs.get('name')) self.ui_layout() def ui_layout(self): start_game_button_anchor = AnchorLayout( anchor_x='center', anchor_y='bottom', padding=[dp(25), dp(25), dp(25), dp(25)]) self.start_game_button = MDFloatingActionButton(icon='play', size=[dp(56), dp(56)]) self.start_game_button.md_bg_color = App.get_running_app( ).theme_cls.primary_color self.start_game_button.text_color = [1, 1, 1, 1] if platform not in ['ios', 'android']: self.start_game_button.bind(on_press=lambda x: self.start_game()) start_game_button_anchor.add_widget(self.start_game_button) game_card = MDCard(padding=dp(24), spacing=dp(24), orientation='vertical', size_hint_x=0.85, size_hint_y=0.7, pos_hint={ 'top': 0.85, 'center_x': 0.5 }) rules = """You probably already know how to play Tic-Tac-Toe. It's a really simple game, right? That's what most people think. But if you really wrap your brain around it, you'll discover that Tic-Tac-Toe isn't quite as simple as you think! 1. The game is played on a grid that's 3 squares by 3 squares. 2. You are X, your friend (or the computer in this case) is O. Players take turns putting their marks in empty squares. 3. The first player to get 3 of her marks in a row (up, down, across, or diagonally) is the winner. 4. When all 9 squares are full, the game is over. If no player has 3 marks in a row, the game ends in a tie.""" game_label = MDLabel(text=rules, font_style='Body1', halign='center', size_hint=(1, 0.5)) game_label.theme_text_color = 'Custom' game_label.text_color = [1, 1, 1, 1] game_card.add_widget(game_label) game_card.md_bg_color = App.get_running_app().theme_cls.accent_color game_card.elevation = 15 self.add_widget(game_card) self.add_widget(start_game_button_anchor) # Nav Bar self.nav_bar = MyNavigationLayout() self.nav_bar_anchor = AnchorLayout(anchor_x='center', anchor_y='top') self.nav_bar_anchor.add_widget(self.nav_bar) self.add_widget(self.nav_bar_anchor) def start_game(self): # add this line - os.system('java -jar ./jar/<filename>.jar') os.system('java -jar ./jar/TICTACTOE.jar') def return_home(self): self.manager.current = 'welcome'
class ShipScreen(Screen): def __init__(self, **kwargs): super(ShipScreen, self).__init__(name=kwargs.get('name')) self.ui_layout() def ui_layout(self): start_game_button_anchor = AnchorLayout( anchor_x='center', anchor_y='bottom', padding=[dp(25), dp(25), dp(25), dp(25)]) self.start_game_button = MDFloatingActionButton(icon='play', size=[dp(56), dp(56)]) self.start_game_button.md_bg_color = App.get_running_app( ).theme_cls.primary_color self.start_game_button.text_color = [1, 1, 1, 1] if platform not in ['ios', 'android']: self.start_game_button.bind(on_press=lambda x: self.start_game()) start_game_button_anchor.add_widget(self.start_game_button) game_card = MDCard(padding=dp(24), spacing=dp(24), orientation='vertical', size_hint_x=0.85, size_hint_y=0.7, pos_hint={ 'top': 0.85, 'center_x': 0.5 }) rules = """Catch em all is a game where you have to catch the ever escaping target. With a limited amount you need to catch the target as fast as you can.. How to play: A random target appears all over the screen Click on it before it disappears and moves to another target Collect the target 10 times before the timer runs out to finish the game. Clicking on any obstacle or any area outside the ground gives a penalty of 4 seconds""" game_label = MDLabel(text=rules, font_style='Body1', halign='center', size_hint=(1, 0.5)) game_label.theme_text_color = 'Custom' game_label.text_color = [1, 1, 1, 1] game_card.add_widget(game_label) game_card.md_bg_color = App.get_running_app().theme_cls.accent_color game_card.elevation = 15 self.add_widget(game_card) self.add_widget(start_game_button_anchor) # Nav Bar self.nav_bar = MyNavigationLayout() self.nav_bar_anchor = AnchorLayout(anchor_x='center', anchor_y='top') self.nav_bar_anchor.add_widget(self.nav_bar) self.add_widget(self.nav_bar_anchor) def start_game(self): # add this line - os.system('java -jar ./jar/<filename>.jar') os.system('java -jar ./jar/SHIPS.jar') def return_home(self): self.manager.current = 'welcome'
class ConnectPage(GridLayout): def __init__(self, **kwargs): super().__init__(**kwargs) self.cols = 2 self.padding = 10 if os.path.isfile("prev_details.txt"): with open("prev_details.txt", "r") as f: d = f.read().split(",") prev_ip = d[0] prev_port = d[1] prev_username = d[2] else: prev_ip = "192.168.1.9" prev_port = "1234" prev_username = "" self.add_widget(MDLabel()) self.add_widget(MDLabel()) self.add_widget(MDLabel(text="IP : ", halign="center", theme_text_color="Primary")) self.float = FloatLayout() self.ip = MDTextField(text=prev_ip, multiline=False, pos_hint={'x': 0, 'y': 0.2}) self.float.add_widget(self.ip) self.add_widget(self.float) self.add_widget(MDLabel(text="Port : ", halign="center", theme_text_color="Primary")) self.float = FloatLayout() self.port = MDTextField( text=prev_port, multiline=False, pos_hint={'x': 0, 'y': 0.2}) self.float.add_widget(self.port) self.add_widget(self.float) self.add_widget(MDLabel(text="Username : "******"center", theme_text_color="Primary")) self.float = FloatLayout() self.username = MDTextField( text=prev_username, multiline=False, pos_hint={'x': 0, 'y': 0.2}) self.float.add_widget(self.username) self.add_widget(self.float) self.float_layout = FloatLayout() self.connect_fab = MDFloatingActionButton( icon="arrow-right", pos_hint={'x': 0.68, 'y': 0}) self.connect_fab.bind(on_release=self.connect_button) self.float_layout.add_widget(self.connect_fab) self.add_widget(MDLabel()) self.add_widget(MDLabel()) self.add_widget(MDLabel()) self.add_widget(MDLabel()) self.add_widget(MDLabel()) self.add_widget(self.float_layout) def connect_button(self, instance): ip = self.ip.text port = self.port.text username = self.username.text with open("prev_details.txt", "w") as f: f.write(f"{ip},{port},{username}") info = f"Attempting to join {ip}:{port} as {username}" chat_app.info_page.update_info(info) chat_app.screen_manager.current = "Info" Clock.schedule_once(self.connect, 0.5) def connect(self, _): ip = self.ip.text port = self.port.text port = int(port) username = self.username.text if not client.connect(ip, port, username, show_error): return chat_app.create_chat_page() chat_app.screen_manager.current = "Chat"