Python学习:方块消除游戏
【编程题:方块消除游戏】
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学习:方块消除游戏相关推荐
- Python学习—2048小游戏等4个小练习
Python学习-2048小游戏等4个小练习 转载于:https://www.cnblogs.com/ChangAn223/p/10627777.html
- 第4-8课:方块消除游戏
前面基础部分我们介绍过简单的串模型的动态规划,在这个系列中,我们又介绍了区间动态规划模型.状态压缩动态规划模型和线性动态规划模型.我们用的算法实现都是尽量使用状态递推关系式直接用递推的方法,大家可能都 ...
- 方块消除游戏(完美世界2017秋招真题)
方块消除游戏(完美世界2017秋招真题)题目描述 如下图,有10*10个不同颜色的方块,每个方块可能是红.绿.蓝.黄.紫5种颜色之一.当点击其中某一个方块时,如果它有相邻的同颜色方块,则将所有与此方块 ...
- Python学习-猜数字游戏
菩萨蛮·黄鹤楼 茫茫九派流中国,沉沉一线穿南北.烟雨莽苍苍,龟蛇锁大江. 黄鹤知何去,剩有游人处.把酒酹滔滔,心潮逐浪高! --coding:UTF-8-- import random secret ...
- 【方块消除】(附加工程)
方块消除 一.引擎 二.游戏流程 图示 游戏 三.研发阶段 1.导入框架DLFramwork 2.Game游戏入口 3.GameMgr游戏管理类 4.BlockMgr主要提供可供全局访问的方块数组,是 ...
- 如何用python画帆船_python 游戏(船只寻宝)
1. 游戏思路和流程图 实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数) 游戏流程图 2. 使用模块和游戏提示 import r ...
- 子菜单挤压下方块元素_小心上瘾!全新类型的消除游戏|《土耳其方块》
谁能想到,一款休闲益智游戏居然超过<刺激战场>.<王者荣耀>,成为苹果免费排行榜第一.那么究竟是一款什么样的免费游戏能够登顶免费排行榜第一呢?今天就让新游组将这款手游推荐给大家 ...
- (私人收藏)python学习(游戏、爬虫、排序、练习题、错误总结)
python学习(游戏.爬虫.排序.练习题.错误总结) https://pan.baidu.com/s/1dPzSoZdULHElKvb57kuKSg l7bz python100经典练习题 pyth ...
- python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!
Free Python Games非常适合学生,它不仅具有高度的组织性和灵活性,而且能够激发人们探索和理解能力.--Terri Furton Free Python Games在轻松的环境中把游戏和学 ...
最新文章
- Jmeter之控制线程执行到某个结果时退出执行
- 那些年我们一起玩DIY总结出的经验——网络篇
- OpenCV---图像金字塔原理
- ThinkPHP 3.1 404页面的设置
- Python一句话实现秦九韶算法快速计算多项式的值
- 在windows、linux中开启nginx的Gzip压缩大大提高页面、图片加载速度转
- MyReport:DataGrid的打印和打印预览
- Mac上emacs标记快捷键
- RabbitMQ消费者流量控制策略总结
- 商业计划书范文3000_大学生商业计划书范文
- call stack详解
- 帮忙framebuffer扫盲
- cd40系列芯片_CD4068_CD4068PDF资料详细参数下载_Powered by 奥伟斯
- 南大计算机软件所,2020考研南京大学计算机软件研究所推免夏令营通知_南大软件所20推免_聚创南大考研网...
- 炼丹笔记一——基于TensorFlow的vgg16的cifar10和100简单探究超参数对训练集收敛情况的影响
- 图解计算机基础网站上线了
- 懒人起名神器,百度翻译内容改为驼峰格式
- 计算机开始菜的mstsc命令,Win10一周年更新版系统CLSID(GUID)大全
- 在双GPU(核显+NVIDIA)计算机中正确安装Ubuntu 18.04下的NVIDIA驱动程序(解决循环登录等问题)
- Flask总结完整版