【编程题:方块消除游戏】

emmmm..依然牛客网上的题,难度标识才一颗星,但是感觉自己看代码看了好久才理解实现的过程。

题目描述:如下图,有10*10个不同颜色的方块,每个方块可能是红、绿、蓝、黄、紫5种颜色之一。当点击其中某一个方块时,如果它有相邻的同颜色方块,则将所有与此方块连续同颜色相邻的方块消除;剩下的方块中,如果下方有空位则向下移动,如果左侧整列都为空位则向左移动。


输入

输入数据有多组,每组占一行,包括一个或多个正整数,取值范围为1~100。每个数代表一次点击,数值为点击的方块编号。
以下是各色方块以及方块位置地图的初始值:

RED = 0, GREEN = 1, BLUE = 2, YELLOW = 3, PURPLE = 4;

mp = [
[0, 0, 2, 2, 1, 3, 2, 3, 0, 4],
[1, 1, 1, 2, 0, 4, 0, 3, 3, 2],
[2, 0, 0, 3, 3, 4, 2, 1, 1, 2],
[3, 0, 2, 3, 2, 0, 4, 1, 1, 0],
[3, 0, 2, 2, 4, 1, 4, 0, 3, 2],
[4, 3, 0, 0, 3, 0, 4, 3, 0, 0],
[3, 3, 1, 4, 1, 0, 2, 3, 2, 1],
[0, 3, 2, 2, 3, 1, 4, 0, 2, 1],
[1, 1, 3, 3, 0, 0, 4, 2, 2, 1],
[4, 2, 0, 0, 4, 3, 2, 0, 0, 1]
]

输出

对于每个测试实例,要求输出连续各次点击全部完成之后,红、绿、蓝、黄、紫色方块的数量;每个测试实例的输出占一行。

eg:

INPUT

6

OUTPUT

26 18 22 21 13


具体代码及详解如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Name: demo26.py
# Author: zhuzhuzhu   time:2018/5/17
# Connect: 1406380550@qq.com
# Desc:方块消除游戏(py2)
import Queue
import copy
dx = [-1, 1, 0, 0]
dy = [0, 0, 1, -1]
mp = [[0, 0, 2, 2, 1, 3, 2, 3, 0, 4],[1, 1, 1, 2, 0, 4, 0, 3, 3, 2],[2, 0, 0, 3, 3, 4, 2, 1, 1, 2],[3, 0, 2, 3, 2, 0, 4, 1, 1, 0],[3, 0, 2, 2, 4, 1, 4, 0, 3, 2],[4, 3, 0, 0, 3, 0, 4, 3, 0, 0],[3, 3, 1, 4, 1, 0, 2, 3, 2, 1],[0, 3, 2, 2, 3, 1, 4, 0, 2, 1],[1, 1, 3, 3, 0, 0, 4, 2, 2, 1],[4, 2, 0, 0, 4, 3, 2, 0, 0, 1]
]
# bfs搜索同色def bfs(beg):global mp, dx, dy# 队列长度无限长q = Queue.Queue(maxsize=0)# 点击位置的x,y 坐标x = beg / 10y = (beg - 1) % 10block_color = mp[x][y]if block_color == -1:return False"""    申请获得互斥锁,获得后,如果队列未满,则向队列中添加数据,并通知notify其它阻塞的某个线程,
释放互斥锁。由于队列无限长,这一步其实就是在添加数据。"""q.put((x, y))cnt = 0# qsize判断队列长度,不为空则循环while q.qsize():# get从队列中获取任务,并且从队列中移除此任务。x, y = q.get()# 点击位置(x, y)的周围元素for i in range(4):s = dx[i] + xt = dy[i] + y# 维度不正确或者与点击位置不同色,则结束本次循环,进入下次循环if s < 0 or s > 9 or t < 0 or t > 9 or mp[s][t] != block_color:continuecnt += 1# 若同色,则将这个位置初始化为-1,被标记为-1的数就相当于被消除了mp[s][t] = -1# 将(s, t)加入队列q.put((s, t))# 经过同色消去的处理,点击元素的位置必然发生了变化,若无变化,只能说明出错啦if cnt == 1:mp[beg/10][(beg - 1) % 10] = block_colorreturn Falsereturn True
# 紧凑mapdef merge_map():# 初始化一个10行10列且每个元素均为-1的矩阵tmp_mp = [[-1 for i in range(10)] for j in range(10)]global mpfor i in range(10):cnt = 0for j in range(10):# 这样可以判断有多少个同色if mp[i][j] == -1:cnt += 1if cnt != 10:for j in range(10):tmp_mp[i][j] = mp[i][j]mp = copy.deepcopy(tmp_mp)# print tmp_mp# 统计最终数量def calc_block_num():red = 0green = 0blue = 0yellow = 0purple = 0# 统计红绿蓝黄紫各有多少个for i in range(10):for j in range(10):if mp[i][j] == 0:red += 1elif mp[i][j] == 1:green += 1elif mp[i][j] == 2:blue += 1elif mp[i][j] == 3:yellow += 1elif mp[i][j] == 4:purple += 1print str(red) + ' ' + str(green) + ' ' + str(blue) + ' ' + str(yellow) + ' ' + str(purple)actions = map(str, raw_input())
for action in actions:if action != ' ':if bfs(int(action)):merge_map()
calc_block_num()

总结

目前代码理解这块儿基本没有什么大问题(大概能说服自己),但是如果要求上手敲可能还有些费劲,所以…明天再做一遍加深记忆。

Python学习:方块消除游戏相关推荐

  1. Python学习—2048小游戏等4个小练习

    Python学习-2048小游戏等4个小练习 转载于:https://www.cnblogs.com/ChangAn223/p/10627777.html

  2. 第4-8课:方块消除游戏

    前面基础部分我们介绍过简单的串模型的动态规划,在这个系列中,我们又介绍了区间动态规划模型.状态压缩动态规划模型和线性动态规划模型.我们用的算法实现都是尽量使用状态递推关系式直接用递推的方法,大家可能都 ...

  3. 方块消除游戏(完美世界2017秋招真题)

    方块消除游戏(完美世界2017秋招真题)题目描述 如下图,有10*10个不同颜色的方块,每个方块可能是红.绿.蓝.黄.紫5种颜色之一.当点击其中某一个方块时,如果它有相邻的同颜色方块,则将所有与此方块 ...

  4. Python学习-猜数字游戏

    菩萨蛮·黄鹤楼 茫茫九派流中国,沉沉一线穿南北.烟雨莽苍苍,龟蛇锁大江. 黄鹤知何去,剩有游人处.把酒酹滔滔,心潮逐浪高! --coding:UTF-8-- import random secret ...

  5. 【方块消除】(附加工程)

    方块消除 一.引擎 二.游戏流程 图示 游戏 三.研发阶段 1.导入框架DLFramwork 2.Game游戏入口 3.GameMgr游戏管理类 4.BlockMgr主要提供可供全局访问的方块数组,是 ...

  6. 如何用python画帆船_python 游戏(船只寻宝)

    1. 游戏思路和流程图 实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数) 游戏流程图 2. 使用模块和游戏提示 import r ...

  7. 子菜单挤压下方块元素_小心上瘾!全新类型的消除游戏|《土耳其方块》

    谁能想到,一款休闲益智游戏居然超过<刺激战场>.<王者荣耀>,成为苹果免费排行榜第一.那么究竟是一款什么样的免费游戏能够登顶免费排行榜第一呢?今天就让新游组将这款手游推荐给大家 ...

  8. (私人收藏)python学习(游戏、爬虫、排序、练习题、错误总结)

    python学习(游戏.爬虫.排序.练习题.错误总结) https://pan.baidu.com/s/1dPzSoZdULHElKvb57kuKSg l7bz python100经典练习题 pyth ...

  9. python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!

    Free Python Games非常适合学生,它不仅具有高度的组织性和灵活性,而且能够激发人们探索和理解能力.--Terri Furton Free Python Games在轻松的环境中把游戏和学 ...

最新文章

  1. Jmeter之控制线程执行到某个结果时退出执行
  2. 那些年我们一起玩DIY总结出的经验——网络篇
  3. OpenCV---图像金字塔原理
  4. ThinkPHP 3.1 404页面的设置
  5. Python一句话实现秦九韶算法快速计算多项式的值
  6. 在windows、linux中开启nginx的Gzip压缩大大提高页面、图片加载速度转
  7. MyReport:DataGrid的打印和打印预览
  8. Mac上emacs标记快捷键
  9. RabbitMQ消费者流量控制策略总结
  10. 商业计划书范文3000_大学生商业计划书范文
  11. call stack详解
  12. 帮忙framebuffer扫盲
  13. cd40系列芯片_CD4068_CD4068PDF资料详细参数下载_Powered by 奥伟斯
  14. 南大计算机软件所,2020考研南京大学计算机软件研究所推免夏令营通知_南大软件所20推免_聚创南大考研网...
  15. 炼丹笔记一——基于TensorFlow的vgg16的cifar10和100简单探究超参数对训练集收敛情况的影响
  16. 图解计算机基础网站上线了
  17. 懒人起名神器,百度翻译内容改为驼峰格式
  18. 计算机开始菜的mstsc命令,Win10一周年更新版系统CLSID(GUID)大全
  19. 在双GPU(核显+NVIDIA)计算机中正确安装Ubuntu 18.04下的NVIDIA驱动程序(解决循环登录等问题)
  20. Flask总结完整版

热门文章

  1. 计算机主机结构三部分,计算机主机结构
  2. Redis五种数据类型应用场景详解(超级详细版)
  3. linux线程同步与异步的区别,怎样理解阻塞非阻塞与同步异步的区别?
  4. APP推广之新品APP上线注意
  5. python 装饰器模拟京东登陆
  6. SAP 成本计算概念
  7. Highcharts 3D圆环图
  8. 第十二章 SQL谓词 %INSET
  9. dell服务器查询配置文件,dell R720服务器系统配置文件设置
  10. 【银行架构day1】一个银行的信息系统架构是什么样子