제스처 게임을 위한 Python 웹 앱

9745 단어 pythonwebdev
이 게시물은 Anvil's Advent calendar의 일부입니다. 우리는 Python만 사용하여 24일 동안 매일 웹 앱을 만들고 있습니다! 12일차에는 가상 크리스마스 파티에 완벽한 앱을 만들었습니다!

(이 앱에 대해 제 동료 Ryan에게 특별히 감사드립니다!)

나쁜 인상을 가진 좋은 게임



모두가 크리스마스에 좋은 제스처 게임을 즐깁니다. 1년에 한 번 나쁜 엘비스 인상을 목격하게 되는 이유입니다!

해마다 같은 문구를 적는 데 시간을 보내는 대신 설정을 건너뛰고 바로 영화 제목을 흉내낼 수 있는 빠른 앱을 만들 수 있다고 생각했습니다.

확인해보세요here



임의의 문구 선택



Anvil’s Data Tables servicePython’s random module 을 사용하면 응용 프로그램 데이터베이스에서 임의의 문구를 선택하는 것이 간단했습니다.

우리는 앱 서버 모듈에서 앱 데이터 테이블에서 모든 구문을 가져온 다음 choice() 함수를 사용하여 임의의 구문을 선택하는 getter 함수를 만들었습니다.

from random import randint

@anvil.server.callable
def get_phrase():
  # Return a random phrase from the phrases data table
  return choice(app_tables.phrase.search())['phrase']


클라이언트 측에서 누군가가 get_phrase() 를 클릭할 때마다 실행되는 Show me a phrase button 함수를 만들었습니다.

def show_phrase_button_click(self, **event_args):
    """This method is called when the button is clicked"""
    self.phrase_label.text = anvil.server.call('get_phrase')


그런 다음 Anvil IDE에서 구문 테이블을 편집하고 게임에 대한 구문을 추가했습니다.

타이머 만들기



앱을 더 유용하게 사용하려면 간단한 타이머를 앱에 내장하는 것이 좋겠다고 생각했습니다.

먼저 카운트다운 타이머의 초 수를 저장할 변수를 만들었습니다. 그런 다음 사용자가 타이머 텍스트 상자를 편집할 때마다 카운트다운 변수를 업데이트하는 이벤트 핸들러를 만들었습니다.

def __init__(self, **properties):
    # Set Form properties and Data Bindings.
    self.init_components(**properties)

    # Init the default countdown for the form
    self.countdown = 60  

def countdown_textbox_change(self, **event_args):
  """This method is called when the text in the countdown text box is edited"""
    # Set the forms countdown to whatever number is entered by the user
    self.countdown = self.countdown_textbox.text


사용자가 업데이트할 수 있는 기본 변수가 있으면 start timerreset timer 버튼을 클릭할 때 함수를 생성하기만 하면 됩니다.

양식 맨 위에 있는 time module을 가져오는 것으로 시작했습니다.

그런 다음 카운트다운이 여전히 1보다 위에 있는지 확인하는 while 루프가 포함된 start_timer_click() 함수를 만들었습니다. 각 반복은 time.sleep() 함수를 사용하여 1초 동안 일시 중지한 다음 카운트다운에서 1을 뺍니다. 카운트다운이 0이 되면 타이머가 재설정되고 알림이 트리거되어 사용자에게 알립니다.
reset_timer_button_click()는 단순히 start_timer_click() 변수를 마이너스 1로 설정하여 countdown의 while 루프를 중단합니다. 재설정 버튼을 클릭해도 경고가 발생하지 않도록 마이너스 1을 사용했습니다.

마지막으로 클릭할 때마다 시작 버튼과 재설정 버튼의 가시성을 바꾸는 간단한 함수를 만들었습니다.

def start_timer_click(self, **event_args):
  """This method is called when the start button is clicked"""
  # Change buttons from start to reset
  self.change_timer_buttons()
  # Countdown
  while self.countdown > 0:
    self.countdown_textbox.text = self.countdown = self.countdown - 1
    time.sleep(1)
  # Send an alert if the time runs out
  if self.countdown == 0:
    anvil.alert(anvil.Label(text="Time's up!", align="center",font_size=30))
  # Reset buttons and timer field
  self.countdown = 60
  self.countdown_textbox.text = None
  self.change_timer_buttons()


def reset_timer_button_click(self, **event_args):
  """This method is called when the reset button is clicked"""
  # Stop the timer by tripping the 'while self.countdown > 0' in start_timer_clock()
  self.countdown = -1


def change_timer_buttons(self):
  """This method swaps the visibility of the start and reset timer buttons"""
  self.reset_timer_button.visible = not self.reset_timer_button.visible 
  self.start_timer_button.visible = not self.start_timer_button.visible


클라이언트 측 Python으로 작성된 간단한 타이머입니다.

좋은 웹페이지 즐겨찾기