[Interactive Python]Memory游戏 Mini-project #5

本文详细介绍了如何使用Python语言实现一款记忆游戏——Memory,通过分清逻辑关系、设置变量和逐步解决问题的方法,使得游戏的实现过程既高效又充满成就感。文章还分享了一个记忆技巧,并提供了游戏的代码实现,以及界面截图。此外,通过代码解释了游戏的运行逻辑,包括初始化游戏、事件处理、绘制界面和更新状态等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

能够越来越熟练使用python语言实现小游戏,很感激!在实现过程中,最主要的是分清逻辑关系,设置好变量,将大步骤细分成小步骤逐步解决。这样不仅容易知道哪里出错,也会因为完成某个小步骤获得成就感,从而很有动力坚持下去!(生活的问题跟编程有很多相似之处!果然学问有很多共通之处)

Memory顾名思义挑战记忆力,将数值一样牌的2个2个配对翻出,用最短的次数内翻出所有牌者胜利。

游戏时我总结了个小技巧:四个四个翻,默念对应的数,这样很容易想起数值前后有哪些数。(你也许有更好的记忆方法,欢迎分享哦~~)

编程思路如下:

1. 首先使用在canvas.draw_polygon函数绘制16个卡片;

2. 再设置鼠标点击实现卡片翻转,显示数字;

3. 这些都没问题后,再编写代码实现规则。游戏过程中有3种状态,第一种为初始状态state=0,点击翻转对应卡片;第二种,为已翻转1个卡片,点击后翻转第2个卡片;在第三种状态下,先判断两个已显示的卡片数字是否相同,从而判断是否翻回去,否则一直显示,再翻转点击的卡片,同时状态切换至状态2.

4. 最后设置翻转了多少回,改变左边的Turns,可以从中获悉谁用的回数少,判断胜负。

这是游戏界面截图(界面简陋,现在注重实现~~后面再一点点讲究美观吧~):




实现代码如下:

#Memory.py

import simplegui
import random

# helper function to initialize globals
def new_game():
    global deck_val, state, exposed, t
    state, t = 0, 0
    deck_val = [i%8 for i in range(16)]
    random.shuffle(deck_val)
    exposed = [False for i in range(16)]
    label.set_text("Turns = "+str(t))
    
# define event handlers
def mouseclick(pos):
    # add game state logic here
    global state, choice, click1, click2, t
    choice = int(pos[0]/50)
    if state ==0:
        state = 1
        click1 = choice
        exposed[click1] = True
    elif state ==1:
    	if not exposed[choice]:
    		state = 2
	        click2 = choice
	        exposed[click2] = True
    elif state == 2:
    	if not exposed[choice]:
	        state = 1
	        if not deck_val[click1] == deck_val[click2]:
	            exposed[click1] = exposed[click2] = False
	        click1 = choice
	        exposed[click1] = True
	        t+=1
    label.set_text("Turns = "+str(t))
          
# cards are logically 50x100 pixels in size    
def draw(canvas):
    global exposed

    for i in range(16):
        if exposed[i]:
            canvas.draw_polygon([(50*i, 0),(50*i+50,0),(50*i+50,100),(50*i,100)],3,'White','Gray')
            canvas.draw_text(str(deck_val[i]), (50*i+20,60), 30, 'White')
        else:
            canvas.draw_polygon([(50*i, 0),(50*i+50,0),(50*i+50,100),(50*i,100)],3,'White','Green')
    pass


# create frame and add a button and labels
frame = simplegui.create_frame("Memory", 800, 100)
frame.add_button("Reset", new_game)
label = frame.add_label("Turns = 0")

# register event handlers
frame.set_mouseclick_handler(mouseclick)
frame.set_draw_handler(draw)

# get things rolling
new_game()
frame.start()


# Always remember to review the grading rubric


# YOLOv5 🚀 requirements # Usage: pip install -r requirements.txt # Base ------------------------------------------------------------------------ gitpython ipython # interactive notebook matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.1 Pillow>=7.1.2 psutil # system resources PyYAML>=5.3.1 requests>=2.23.0 scipy>=1.4.1 thop>=0.1.1 # FLOPs computation torch>=1.7.0 # see https://pytorch.org/get-started/locally (recommended) torchvision>=0.8.1 tqdm>=4.64.0 # protobuf<=3.20.1 # https://github.com/ultralytics/yolov5/issues/8012 # Logging --------------------------------------------------------------------- tensorboard>=2.4.1 # clearml>=1.2.0 # comet # Plotting -------------------------------------------------------------------- pandas>=1.1.4 seaborn>=0.11.0 # Export ---------------------------------------------------------------------- # coremltools>=6.0 # CoreML export # onnx>=1.9.0 # ONNX export # onnx-simplifier>=0.4.1 # ONNX simplifier # nvidia-pyindex # TensorRT export # nvidia-tensorrt # TensorRT export # scikit-learn<=1.1.2 # CoreML quantization # tensorflow>=2.4.1 # TF exports (-cpu, -aarch64, -macos) # tensorflowjs>=3.9.0 # TF.js export # openvino-dev # OpenVINO export # Deploy ---------------------------------------------------------------------- # tritonclient[all]~=2.24.0 # Extras ---------------------------------------------------------------------- # mss # screenshots # albumentations>=1.0.3 # pycocotools>=2.0 # COCO mAP # roboflow # ultralytics # HUB https://hub.ultralytics.com
最新发布
05-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值