如何修复代码skulptor上的重置按钮(基于Python的环境)? [英] How do I fix the reset button on code skulptor (Python based environment)?

查看:99
本文介绍了如何修复代码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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆