做哪種網(wǎng)站流量上的快東莞網(wǎng)站建設(shè)最牛
(2)標識選中的圖片
在判斷出玩家選中的是哪一張圖片之后,接下來就可以標識選中的圖片了,即在該選中的圖片外圍畫矩形。代碼如下所示。
FIRSTCLICK = True #FIRSTCLICK是全局變量
if(click_col>=0 and click_row>=0) and \(not pics_map[click_row][click_col] == MAP_EMPTY):global FIRSTCLICKif FIRSTCLICK:drawRect(click_row, click_col)FIRSTCLICK = False
其中,第1行中if語句的作用是保證玩家的鼠標是否點在圖片上,并且選中的該圖片不是MAP_EMPTY。在“3.2 顯示圖片”中提到,游戲進行中,如果圖片被玩家消除掉,則該圖片在圖片地圖中對應(yīng)位置的值就設(shè)置為MAP_EMPTY,如果該圖片已經(jīng)被消除,則無需將其標識出來。
因為要修改全局變量FIRSTCLICK,因此第3行代碼對該變量進行說明,第4行的if語句確定玩家是第一次點擊圖片,之后調(diào)用自定義函數(shù)drawRect()在指定的圖片外圍畫矩形,最后將FIRSTCLICK 設(shè)置為False。
(3)實現(xiàn)圖片標識
通過自定函數(shù)drawRect()實現(xiàn)圖片標識,代碼如下所示。
def drawRect(row, col):lu_posX = col*MAP_WIDTH + MAP_XDELTAlu_posY = row*MAP_HEIGHT + MAP_YDELTArd_posX = (col+1)*MAP_WIDTH + MAP_XDELTArd_posY = (row+1)*MAP_HEIGHT + MAP_YDELTAcanvas.create_rectangle( lu_posX,lu_posY,rd_posX, rd_posY, outline='red', width=3, tags="rectRedOne")
其中,drawRect()的兩個參數(shù)分別標識要標識圖片所在的行數(shù)和列數(shù),第2-3行代碼通過圖片所在的行數(shù)和列數(shù),得到該圖片左上角的坐標;第4-5行代碼得到圖片右下角的坐標;第6行代碼通過canvas調(diào)用create_rectangle()方法畫矩形,該方法的前四個參數(shù)分別標識所畫矩形左上角和右下角的橫縱坐標,outline參數(shù)指定了矩形的顏色,width參數(shù)指定了畫線的粗細程度,tags參數(shù)指定了該矩形的標簽,此標簽在消除用戶選中的圖片時會用到。
通過以上代碼,當玩家點擊游戲中的某張圖片時,就會標記該圖片,如圖10所示。
圖10 標記選中圖片
(4)完整代碼
GAMESTART = False
FIRSTCLICK = Truedef clickCanvas(event):if GAMESTART:click_col, click_row = getClickedMap(event.x, event.y)if(click_col>=0 and click_row>=0) \and (not pics_map[click_row][click_col] == MAP_EMPTY):global FIRSTCLICKif FIRSTCLICK:drawRect(click_row, click_col)FIRSTCLICK = Falsedef drawRect(row, col):lu_posX = col*MAP_WIDTH + MAP_XDELTAlu_posY = row*MAP_HEIGHT + MAP_YDELTArd_posX = (col+1)*MAP_WIDTH + MAP_XDELTArd_posY = (row+1)*MAP_HEIGHT + MAP_YDELTAcanvas.create_rectangle( lu_posX,lu_posY,rd_posX, rd_posY, outline='red', width=3, tags="rectRedOne")
def getClickedMap(xpos, ypos):x = -1y = -1for i in range(0, ROW_PIC):x1 = i*MAP_WIDTH + MAP_XDELTAx2 = (i+1)*MAP_WIDTH + MAP_XDELTAif xpos>=x1 and xpos<=x2:x = ifor j in range(0, COL_PIC):y1 = j*MAP_HEIGHT + MAP_YDELTAy2 = (j+1)*MAP_HEIGHT + MAP_YDELTAif ypos>=y1 and ypos<=y2:y = jreturn x, ydef file_new():getPic()initMap()drawMap()global GAMESTARTGAMESTART = Trueroot.configure(menu=menubar)
canvas.bind('<Button-1>', clickCanvas) #本行代碼為新添加代碼
canvas.pack()root.mainloop()