사용자 인터페이스 챌린지 - 파이썬

사용자 인터페이스 과제
사용자 인터페이스 챌린지에서는 사용자가 Brain의 화면을 눌러 팔과 발톱 모터를 제어할 수 있도록 Clawbot을 프로그래밍합니다. 그런 다음 화면의 4개 버튼을 사용하여 다양한 10가지 물체를 집어 올려 다시 놓습니다. 이 챌린지에서는 클로봇이 운전하거나 회전할 필요가 없습니다. 물건을 집어 올려 테이블이나 바닥의 같은 자리에 다시 놓습니다.
규칙:
- 4개의 버튼은 각각 4가지 동작 중 하나만 수행해야 합니다. 즉, 발톱을 펼치거나, 발톱을 닫거나, 팔을 들어올리거나, 팔을 내리는 것입니다.
- 컨트롤러를 사용하는 것은 허용되지 않습니다.
- 각 클로봇은 1분 안에 최대한 많은 물건을 들어올리고 다시 놓아야 하며, 물건을 떨어뜨리지 않아야 합니다. 한 번에 한 가지 물건씩 들어올리고 다시 올려놓는 것이 좋습니다.
- 1분 라운드는 1분 표시에서 종료됩니다. 물건을 떨어뜨리면또는됩니다. 라운드가 시작된 지 몇 초밖에 되지 않았더라도 마찬가지입니다. 물건을 떨어뜨리면 해당 팀은 라운드의 전체 1분 동안 실격 처리되지만, 떨어뜨리기 전에 획득한 점수는 계산됩니다.
- 1분 라운드가 끝나기 전에 제공된 물건을 모두 들어올리면, 시간이 종료될 때까지 물건을 재사용할 수 있습니다.
- 물체를 테이블 위에 다시 올려놓기 전에 팔의 모터보다 더 높이 들어 올려야 합니다.
- 성공적으로 물건을 잡고 들어올린 다음 내려놓고 다시 제자리에 놓으면 1점이 됩니다.
- 라운드 사이에 역할을 변경할 수 있지만, 클로봇당 한 명의 사용자만 각 라운드에 참여할 수 있습니다.
- 모든 라운드가 끝난 후 가장 많은 점수를 얻은 그룹이 승리합니다!

챌린지에서의 역할:
- 각 라운드 동안 물건을 들어올리는 사용자는 한 명(리프터)만 있어야 하지만 그룹은 라운드 사이에 사용자를 바꿀 수 있습니다.
- 각 클로봇이 성공적으로 들어올릴 수 있는 물건의 개수를 계산하는점수 기록원이 지정되어야 합니다. 성공적으로 교체된 각 개체는 1점의 가치가 있습니다. 물체를 떨어뜨리면 클로봇의 턴이 끝납니다. 여러 라운드를 플레이할 수 있습니다. 여기에는 점수표가 포함되어 있지만, 추가 그룹과 라운드에 대해 행을 추가할 수 있습니다. 각 그룹은 자체 채점표를 사용할 수도 있고, 모두가 같은 채점표를 사용해 기록할 수도 있습니다. 여러 그룹이 동일한 점수표를 사용하는 경우 두 번째 열에 각 그룹의 Clawbot ID 또는 그룹 이름을 적습니다. 또한, 점수 기록원은 사용자 인터페이스 챌린지가 끝날 때 각 라운드의 점수를 합산하여 총점을 매겨야 합니다.
- 테이블에서 물건을 옮겨 담는 일을 맡은 사람이 있어야 합니다:스위처. 클로봇은 회전하거나 주행하지 않으므로 들어올린 물체는 매번 시도할 때마다 제거하고 새 물체로 교체해야 합니다.
- 시간을 기록하는 사람이 지정되어야 합니다.시간 관리자. 각 라운드는 1분입니다.
- 교사는 이 과제를 시작하기 전에 승인된 물건을 제공해야 합니다.
교사 팁
- 학생들에게 클로봇의 화면만 만질 수 있다는 점을 상기시켜 주세요.
- 떨어뜨려도 안전한 물건만 제공하세요. 빈 캔이나 물병, VEX 큐브, VEX 키트에서 사용하지 않은 부품, 또는 떨어지거나 튀어올라도 영구적으로 손상되지 않는 물건입니다.
- 관찰하는 학생들에게 각 클로봇의 화면이 어떻게 생겼는지 보여주세요. 직사각형은 동일해야 하지만, 각 클로봇의 색상은 다를 가능성이 큽니다.
- 도전 중이나 도전 후에 가장 좋은 색상 선택에 대한 학생들의 의견을 토론하세요.
교사 도구 상자
아래에서 이 과제에 대한 프로그래밍 솔루션 예시와 프로그래밍 기준, 개인 엔지니어링 노트북 기준, 팀 엔지니어링 노트북 기준을 확인하실 수 있습니다.
- 프로그래밍 솔루션 예시
# 프로젝트 코드 시작
screen_buttons = Event()
def has_screen_buttons():
brain.screen.set_fill_color(Color.GREEN)
brain.screen.draw_rectangle(0, 0, 240, 120)
brain.screen.set_fill_color(Color.PURPLE)
brain.screen.draw_rectangle(240, 0, 480, 120)
brain.screen.set_fill_color(Color.ORANGE)
brain.screen.draw_rectangle(0, 120, 240, 240)
brain.screen.set_fill_color(Color.CYAN)
brain.screen.draw_rectangle(240, 120, 480, 240)
wait(1, SECONDS)
screen_buttons(has_screen_buttons)
while True:
screen_buttons.broadcast()
brain.screen.pressing()인 경우:
brain.screen.x_position()인 경우 < 240:
brain.screen.y_position()인 경우 < 120:
claw_motor.spin(전진)
brain.screen.pressing()인 경우:
wait(5, MSEC)
else:
claw_motor.spin(역방향)
brain.screen.pressing()인 경우:
wait(5, MSEC)
else:
brain.screen.y_position()인 경우 < 120:
arm_motor.spin(전진)
brain.screen.pressing()인 경우:
wait(5, MSEC)
else:
arm_motor.spin(역방향)
brain.screen.pressing()인 경우:
wait(5, MSEC)
claw_motor.stop()
arm_motor.stop()
wait(5, MSEC)