如何修复代码skulptor上的重置按钮(基于Python的环境)? [英] How do I fix the reset button on code skulptor (Python based environment)?
本文介绍了如何修复代码skulptor上的重置按钮(基于Python的环境)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试编写一个记忆游戏到目前为止,除了重置按钮之外它正在工作。这是我到目前为止的代码:
Hi, I am trying to code a memory game so far and it's working except for the reset button. Here's my code so far:
#Memory Game
import simplegui
import simplegui as sg
from random import shuffle
import time
#Canvas Details
CANVAS_SIZE = 900, 800
CARD_COLS = 5
CARD_ROWS = 4
CARD = CARD_COLS * CARD_ROWS #Number of cards
CARD_WIDTH = CANVAS_SIZE[0] / float( CARD_COLS )#Card size
CARD_HEIGHT = CANVAS_SIZE[1] / float( CARD_ROWS )
FONT_SIZE = 200 #Font size
# Global Variables
turns = 0
card_list = exposed_list = None
card_1 = card_2 = None #Compare two selected card
card_type = "Numbers"
high_score = 0
matches = 0
#New Game Function
def new_game():
global card_list, exposed_list, turns, card_1, card_2
card_1 = card_2 = None
turns = 0
label_turns.set_text("Number of Turns = " + str(turns))
card_list = range(10) * 2
shuffle(card_list)
exposed_list = [False] * CARD
def mouseclick( pos ):
global card_1, card_2, turns, matches
card = pos[0] * CARD_COLS / CANVAS_SIZE[0] + pos[1] * CARD_ROWS / CANVAS_SIZE[1] * CARD_COLS
matches = 0
if not exposed_list[card]:
exposed_list[card] = True
if card_1 == None:
card_1 = card
turns += 1
label_turns.set_text( "Number of Turns = " + str( turns ) )
elif card_2 == None:
card_2 = card
if card_list[card_1] == card_list[card_2]: # if equals, clean selected cards
card_1 = card_2 = None
matches += 1
else:
# hide cards
exposed_list[card_1] = exposed_list[card_2] = False
card_1 = card
card_2 = None
turns += 1
label_turns.set_text( "Number of Turns = " + str( turns ) )
# draw playmat
def draw( canvas ):
global high_score, matches
# draw exposed and hidden cards
for i in range( CARD ):
# card upper-left coords
card_x = ( i % CARD_COLS ) * CARD_WIDTH
card_y = ( i / CARD_COLS ) * CARD_HEIGHT
# hidden card
if not exposed_list[i]:
canvas.draw_polygon( [
( card_x, card_y ),
( card_x + CARD_WIDTH, card_y ),
( card_x + CARD_WIDTH, card_y + CARD_HEIGHT ),
( card_x, card_y + CARD_HEIGHT )
],
2, "red", "green" )
# exposed card
else:
canvas.draw_polygon( [
( card_x, card_y ),
( card_x + CARD_WIDTH, card_y ),
( card_x + CARD_WIDTH, card_y + CARD_HEIGHT ),
( card_x, card_y + CARD_HEIGHT )
],
2, "red", "black" )
card_value = card_list[i]
text_width = frame.get_canvas_textwidth( str( card_value ), FONT_SIZE, "serif" )
canvas.draw_text( str( card_value ),
(
card_x + ( CARD_WIDTH - text_width ) / 2,
card_y + ( FONT_SIZE + CARD_HEIGHT ) / 2 * 5 / 6.
),
FONT_SIZE, "white", "serif" )
if matches == 10:
if (turns > high_score):
turns = high_score
# create frame and add buttons and labels
frame = sg.create_frame( "Memory Game", CANVAS_SIZE[0], CANVAS_SIZE[1], 180 )
frame.add_button( "Reset", new_game )
frame.add_label( "" )
label_turns = frame.add_label( "" )
frame.add_label("Best Score:")
frame.add_label(str(high_score) + " " + "turns")
# register event handlers
frame.set_mouseclick_handler( mouseclick )
frame.set_draw_handler( draw )
# start
new_game()
frame.start()
我认为问题在于
I think the problem is with
frame.add_button( "Reset", new_game )
谢谢你,祝你有个愉快的一天
我的尝试:
Thank you and have a nice day
What I have tried:
frame.add_button("Reset", new_game, (CARD_COLS, CARD_ROWS))
这导致错误说宽度必须是整数
This caused an error saying "width has to be an integer"
("Reset", new_game, str(CARD_COLS), str(CARD_ROWS))
这导致错误说给出了5个参数,需要4个
This caused an error saying "5 arguments given, four needed"
frame.add_button("Reset", new_game(CARD_COLS, CARD_ROWS))
这会导致错误,说处理程序必须是函数
This cause an error saying "handler must be a function"
推荐答案
请参阅 CodeSkulptor文档 [ ^ ]有关 frame.add_button
方法的详细信息。
See CodeSkulptor Documentation[^] for details on the frame.add_button
method.
这篇关于如何修复代码skulptor上的重置按钮(基于Python的环境)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文