超级大脑

程序说明

我们已经为你准备了程序模板:memory.py,模板中导入了必要的模块和一些全局变量,你需要编写一些函数,实现这个游戏。

通过该项目你可以巩固对鼠标事件驱动编程,函数和列表的理解。

我们推荐了两种数据结构来表示一组牌,如图2所示,模板中用的是第一种。我们用一个列表表示一组牌,其中每个牌再用一个列表表示,子列表中第一个元素是牌面文字,第二个元素取值为0或1,0表示牌未翻过来,反之用1表示。该数据结构如图2中分割线以上所示。在分割线以下是另一种表示,即采用两个列表,第一个保存牌面文字,游戏中不变化,第二个保存牌是否翻过来,0和1的含义与第一种数据结构相同,取值随着游戏中对牌的点击发生变化。图2中假设第一张牌是“A”但是未被翻过来,所以子列表中第二个元素为0。其它牌未知,用“…”表示。

游戏首先运行的函数是new_game(),该函数负责初始化全局变量,包括:初始化表示一组牌的列表cards,清空(调用列表的clear方法)保存翻过来的牌的列表flipped_cards,将翻牌次数steps置零。

初始化cards的函数是init_cards()(如果你采用第二种数据结构,还需要自己定义一个列表),该函数的功能是从all_characters里取四个字母,构造成["A’, 0]这种形式放进cards里,每个字母放两次,最后打乱cards列表。

draw()函数根据cards的内容把牌绘制在游戏界面中,你需要根据牌的次序计算多边形或文字的位置。翻牌次数也要通过draw函数显示。

鼠标点击事件的驱动函数是mouse_click,游戏功能主要在该函数中实现。该函数的参数是pos,它是一个元组,记录了鼠标点击处所在画布的坐标,你需要根据该坐标计算玩家点击的是哪张牌。该张牌是否翻过来,已经翻过几张牌,翻过的牌面文字是否相同等等游戏逻辑需要你细心设计。

注意:文字在画布上的坐标是其左下角的坐标,如图3所示。

编码步骤

点击添加Bookmark this page

(1)编写draw函数中显示牌的部分。牌用多边形(长方形)绘制,翻过来的牌在绘制完长方形后还要在适当的位置绘制牌面文字。长方形和文字的坐标需要根据牌的次序和CARD_WIDTH、CARD_HEIGHT这两个全局变量计算。可以先手工设计cards列表的内容,检查你的代码能否把正反面的牌都显示出来。

(2)编写mouse_click函数。根据pos参数的横坐标判断点击的是哪张牌,确定了点击的牌后就需要根据flipped_cards里记录的内容判断是否能够翻开这张牌。每次翻开牌都要增加步数。游戏逻辑主要在该函数里完成。

(3)在draw函数里补充显示步数的代码。

以下为完整代码

import simpleguitk as simplegui

import random

# 画布的尺寸

WIDTH = 480

HEIGHT = 150

# 牌的尺寸

CARD_WIDTH = 60

CARD_HEIGHT = 100

cards = [] # 保存4对牌的列表

flipped_cards = [] # 记录翻过的牌

steps = 0

# 初始化一组字母牌

def init_cards():

global cards

all_characters= ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

cards.clear()

random.shuffle(all_characters)

for i in range(4):

one_card = all_characters.pop()

# 注意:cards中的元素也是列表。该列表的第一个元素是某个字母,

# 第二个元素表示该牌是否被翻过来,0表示没翻过来,1表示翻过来。

cards.append([one_card, 0])

cards.append([one_card, 0])

random.shuffle(cards)

def new_game():

global steps

flipped_cards.clear()

steps = 0

init_cards()

def draw(canvas):

# 显示牌

for i,c in enumerate(cards):

if cards[i][1]==0:

canvas.draw_polygon([[i*CARD_WIDTH,0],[CARD_WIDTH*(i+1),0],[CARD_WIDTH*(i+1),CARD_HEIGHT],[i*CARD_WIDTH,CARD_HEIGHT]],1,'black','green')

else:

canvas.draw_polygon([[i*CARD_WIDTH,0],[CARD_WIDTH*(i+1),0],[CARD_WIDTH*(i+1),CARD_HEIGHT],[i*CARD_WIDTH,CARD_HEIGHT]],1,'black','white')

canvas.draw_text(cards[i],[i*CARD_WIDTH,CARD_HEIGHT],CARD_WIDTH,'black')

# 显示步数

canvas.draw_text('步数:',[10,140],10,'yellow')

canvas.draw_text(steps, [45, 140], 10, 'yellow')

def mouse_click(pos):

global steps, cards, flipped_cards

# 代码写在这里

if pos[1]

i = pos[0] // CARD_WIDTH

if cards[i][1]==0:

cards[i][1] =1

steps+=1

flipped_cards.append(i)

if len(flipped_cards)>2:

if cards[flipped_cards[0]][0] != cards[flipped_cards[1]][0]:

cards[flipped_cards[0]][1] = 0

cards[flipped_cards[1]][1] = 0

flipped_cards.pop(0)

flipped_cards.pop(0)

if len(flipped_cards)>4:

if cards[flipped_cards[2]][0]!=cards[flipped_cards[3]][0]:

cards[flipped_cards[2]][1] = 0

cards[flipped_cards[3]][1] = 0

flipped_cards.pop(2)

flipped_cards.pop(2)

if len(flipped_cards) > 6:

if cards[flipped_cards[4]][0] != cards[flipped_cards[5]][0]:

cards[flipped_cards[4]][1] = 0

cards[flipped_cards[5]][1] = 0

flipped_cards.pop(4)

flipped_cards.pop(4)

# 创建用户界面

frame=simplegui.create_frame("超级大脑", WIDTH, HEIGHT)

frame.set_canvas_background("Black")

frame.set_draw_handler(draw)

frame.set_mouseclick_handler(mouse_click)

# 创建按钮

frame.add_button("开始游戏", new_game, 80)

new_game()

frame.start()

python项目超级大脑-python项目之超级大脑相关推荐

  1. Django的简单介绍及虚拟环境的搭建、创建项目,数据库(Windows版超级详细)--Python web应用程序开发(Python实战)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 Djangg ...

  2. python超级大脑游戏mooc_三人游超级大脑挑战

    三人游超级大脑挑战这绝对是一款令你感觉到异常烧脑的手机游戏,游戏的规则十分简单,就是非常考验你的策略和脑力是否灵活,整个游戏是以智力闯关为主要玩法的,每一个关卡内都会有着很多的挑战和难题,充满了趣味的 ...

  3. python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版

    给大家带来的一篇关于Python案例相关的电子书资源,介绍了关于Python.项目开发.Python案例方面的内容,本书是由吉林大学出版社出版,格式为PDF,资源大小99.1 MB,明日科技编写,目前 ...

  4. Django 优秀资源大全项目资源非 Python 包工具贡献

    Awesome Django 介绍 Awesome-Django 是由 Roberto Rosario 发起和维护的 Django 资源列表.该列表收集了大量 Django 相关的优秀应用.项目等资源 ...

  5. python项目实践_python实践项目

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 文章节选自<机器学习--python实践>文末评论赠送本书,欢迎留言 ...

  6. python爬虫小项目挣钱兼职,python程序员兼职平台

    python爬虫去哪接单 python爬虫接单的方式有两种一.接定制需求的单子爬虫定制的需求其实很多,比如 "爬取某某电商网站的评论",这类需求一般是按照爬取数据量的大小来收费,价 ...

  7. 超级搜索everything项目

    超级搜索项目 前言 都有过使用Windows搜索的经历吧,开局一张图,搜索真是慢,对于学习计算机的孩子,由于磁盘中存放着大量的文件,或许有些文件搜索的时间还算快吧,小咲猜想到,可是事实的真相是什么呢? ...

  8. 480集课程-打通Python开发的任督二脉 轻松掌握Python高级开发技术 Python超级学科课程

    480集课程-打通Python开发的任督二脉 轻松掌握Python高级开发技术 Python超级学科课程 ===============课程目录=============== ├─(1) 01-Pyt ...

  9. Python之Django实例--sysinfo项目搭建(中文版 Linux 服务器信息查看应用)

    文章目录 1. 创建项目 1.1 创建项目 1.2 创建App 1.3 配置setting 1.4 生成迁移文件并设置管理员 1.5 测试是否配置成功 1.6 git 提交 1.6.1 设置忽略文件 ...

  10. python基础课程设计项目_python项目

    泉州信息工程学院 软件学院 课程设计报告书 课程名:python课程设计 课程设计项目名称:基于Django的中餐厅网站的设计与实现 团队成员: 刘冬华.杨艺萍 一.项目简介 1.1 项目博客地址 1 ...

最新文章

  1. 数学思想 —— 低维与高维的统一
  2. PHP微信开发框架LaneWeChat框架简介
  3. binary_sort 二叉树
  4. 微信客服推送信息接口报错 45015
  5. pageSet的底层数据库存储逻辑
  6. Qt文档阅读笔记-QNetworkAccessManager官方解析与实例
  7. 对话框控件访问七种方式
  8. 简单句(Simple sentences)-one
  9. 200+页综述!阐述大规模预训练模型机遇与风险
  10. 为什么拼多多黄峥和陆奇走到了一起?
  11. 背包九讲——全篇详细理解与代码实现
  12. DotNetSkin 完美破解
  13. 计算机网络教学常用哪些软件,仿真软件在计算机网络教学中的应用
  14. 码教授|面试官:你还有什么要问我的吗?
  15. java首字母变大写_Java 首字母转大写
  16. echarts饼图:实现多层图表同步自动轮播,鼠标悬浮时停止轮播,移出鼠标后重新开始轮播效果
  17. JAVA计算机毕业设计晨光文具店进销存系统设计与开发计算机(附源码、数据库)
  18. 海亮DAY8 关于Tarjan算法用于割点割边相关感受
  19. OneNote 2010 链接审阅 Word 文档的方法 [含视频]
  20. 我的第一篇软文,悼念下女工程师的经历

热门文章

  1. 船长带你看书——《selenium2 python 自动化测试实战》(2)浏览器操作
  2. css cursor 常用值
  3. bzoj1834: [ZJOI2010]network 网络扩容
  4. [Java拾遗四]JavaWeb基础之Servlet_RequestResponse
  5. 转 Wireshark和TcpDump抓包分析心得
  6. 基于jQuery很牛X的批量上传插件
  7. 哈希表的详细介绍 -转载
  8. (原创)一个JavaScript Function Outliner插件 第三个版本 让你的JavaScript代码也支持折叠...
  9. 第一方Cookie和第三方Cookie
  10. 获取某个日期的当前周一的时间