当前位置:   article > 正文

Python实现连连看_python连连看源代码

python连连看源代码
# coding:utf-8
import pygame, sys, random, time, easygui
from pygame.locals import *
# 初始化pygame环境
pygame.init()
# 创建窗口
canvas = pygame.display.set_mode((1000, 600))
# 加载图片
bg = pygame.image.load("imgs/bg.jpg")
win = pygame.image.load("imgs/win.png")
# 设置标题
pygame.display.set_caption("连连看")
# 图片位置数组
p = [[60, 120], [170, 120], [280, 120], [390, 120], [500, 120], [610, 120], [720, 120], [830, 120],
     [60, 230], [170, 230], [280, 230], [390, 230], [500, 230], [610, 230], [720, 230], [830, 230],
     [60, 340], [170, 340], [280, 340], [390, 340], [500, 340], [610, 340], [720, 340], [830, 340],
     [60, 450], [170, 450], [280, 450], [390, 450], [500, 450], [610, 450], [720, 450], [830, 450]]

# 定义变量存储点击的卡片信息
first_num = 0
first_x = 0
first_y = 0

# 创建handleEvent方法
def handleEvent():
    # 全局变量
    global first_num, first_x, first_y
    for event in pygame.event.get():
        if event.type == pygame.QUIT or event.type == KEYDOWN and event.key == K_ESCAPE:
            sys.exit()
            pygame.quit()
        # 判断点击鼠标左键
        if event.type == MOUSEBUTTONDOWN and event.button == 1:
            # 获取鼠标坐标
            mouse_x = event.pos[0]
            mouse_y = event.pos[1]
            # 调用Click方法获取点击到的卡片信息
            if Click(mouse_x, mouse_y):
                sec_num = Click(mouse_x, mouse_y)[0]
                sec_x = Click(mouse_x, mouse_y)[1]
                sec_y = Click(mouse_x, mouse_y)[2]
                # 创建列表存储点击标号相同卡片的下标
                dellist = []
                # 给第一次点击的卡片信息赋值
                if first_num == 0:
                    first_num = sec_num
                    first_x = sec_x
                    first_y = sec_y
                else:
                    # 第二次点击卡片标号相同判断坐标
                    if sec_num == first_num  :
                        if not(first_x == sec_x and first_y == sec_y) :
                            # 获取标号相同的卡片在cards列表中的下标
                            for i in range(len(cards)):
                                if cards[i].num == sec_num:
                                    dellist.append(i)
                            # 删除卡片
                            for j in range(2):
                                if j == 0:
                                    cards.pop(dellist[j])
                                else:
                                    cards.pop(dellist[j] - 1)
                            first_num = 0
                            first_x = 0
                            first_y = 0
                    # 第二次点击卡片标号不同时给点击卡片信息重新赋值
                    else:
                        first_num = sec_num
                        first_x = sec_x
                        first_y = sec_y
                
# 创建Card类
class Card ():
    def __init__(self, num , x, y):
        self.num = num
        self.img = pygame.image.load('imgs/' + str(num) + '.png')
        self.x = x
        self.y = y
    def paint(self):
        canvas.blit(self.img, (self.x, self.y))
        
# 创建cards列表存储所有卡片
cards = []
for i  in range(0, 32):
    n = int(i % 16 + 1)
    m = int(random.randint(0, (31 - i)))
    x = p[m][0]
    y = p[m][1]
    cards.append(Card(n , x, y))
    p.pop(m)
    
# 添加点击事件获取点击到的卡片信息
def  Click(mouse_x, mouse_y):
    x1 = mouse_x
    y1 = mouse_y
    # 获取所有卡片信息
    for i in range(0, len(cards)):
        imgx = cards[i].x
        imgy = cards[i].y
        # 判断鼠标点击位置是否在卡片上
        if imgx + 100 > x1  and x1 > imgx and imgy + 100 > y1 and y1 > imgy:
            img = cards[i].num
            return img , imgx, imgy
    return False

#获取开始时间
start_time = time.time()
while True:
    # 画出游戏背景
    #canvas.blit(bg, (0, 0))
    #添加游戏结束背景
    if len(cards) == 0:
        canvas.blit(win,(0,0))
    else:
        canvas.blit(bg,(0,0))
    
    # 画出所有图片
    for i in range(0, len(cards)):
        cards[i].paint()
    #获取游戏时间
    if len(cards) != 0:
        end_time = time.time()
    timing = int(end_time - start_time)
    #easygui.msgbox('耗时:' + str(timing))
    Time = pygame.font.SysFont('华文琥珀',40)
    TextTime = Time.render('time:' + str(timing),True,(255,255,255))
    canvas.blit(TextTime,(720,40))
    # 更新屏幕内容
    pygame.display.update()
    # 调用handleEvent方法
    handleEvent()































































































































































































































































































声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号