python实现连连看游戏


Posted in Python onFebruary 14, 2020

编程一直是在课余时间,放假时间自学,到现在为止也有半年了。

这是我自己用python实现的连连看,也是第一个完成的游戏,虽然极其简陋。

思路呢,一开始是想要从一个点出发开始寻路,遇到数字就换一条路,直到找到第二个点,但是这样就得做到不断寻路且不能和重复之前走过的路径,这就有点让我犯难了,想了很久也没想出解决办法,后来去网上参考了大神们的想法:
输入的两个坐标(x1,y1)(x2,y2),分别寻找两个点周围的空白点,空白点的坐标保存在数组a1,a2中,如果a1,a2有重合的点,那么就说明可以用一条直线连接。

如果没有重合的点,那就以其中一个数组a1中的点为坐标,继续寻找该坐标周围的空白点,保存为另一个数组a3,之后比较a2和a3,如果有重合的,就说明可以用两条直线连接,否则两个点不能连接。

然后再把两个坐标相邻的情况考虑进去就差不多了。

import random
import math

#建一个随机列表,作为地图的元素
list1 = []
for i in range(0,50):
 r = random.randint(0,9)
 list1.append(r)
 list1.append(r)
random.shuffle(list1) #打乱

#建地图
map1 = []
map2 = []
list2 = []
for i in range(0,10):
 map1 += [0]
for i in range(0,100,10):
 k = int(i/10)
 map2 = list1[i:i+10]
 map1[k] = map2
for i in range(0,10):
 list2.append("")
map1.insert(0,list2)
map1.append(list2)
for i in range(0,12):
 map1[i].insert(0,"")
 map1[i].append("")
#map1为10*10的地图,序号从1~10,最外面一圈是""


r =l =u =d =1
go1 = 1
go2 = 1
go3 = 1
list1 = []
list2 = []
mylist1 = []
mylist2 = []




#寻找点(x1,y1)附近的空白点,并将坐标存入列表list1
def judgepoint(x1,y1):
 global list1,list2,map1,r,l,u,d
 list1 = []
 list2 = []
 r = l = u = d = 1
 for i in range(1,12):
 if (x1+i)<=11:
 if (map1[x1+i][y1] == "")&(d == 1):
 list2 = [x1+i,y1]
 list1.append(list2)
 else:
 d = 0
 else:
 d = 0
 for i in range(1,12):
 if (x1-i)>=0:
 if (map1[x1-i][y1] == "")&(u == 1):
 list2 = [x1-i,y1]
 list1.append(list2)
 else:
 u = 0
 else:
 u = 0
 for i in range(1,12):
 if (y1+i)<=11:
 if (map1[x1][y1+i] == "")&(r == 1):
 list2 = [x1,y1+i]
 list1.append(list2)
 else:
 r = 0
 else:
 r = 0
 for i in range(1,12):
 if (y1-i)>=0:
 if (map1[x1][y1-i] == "")&(l == 1):
 list2 = [x1,y1-i]
 list1.append(list2)
 else:
 l = 0
 else:
 l = 0


for i in range(12):
 print(map1[i])


while(count < 50):
 x1 = input("请输入坐标x1:")
 y1 = input("请输入坐标y1:")
 x2 = input("请输入坐标x2:")
 y2 = input("请输入坐标y2:")
 x1 = int(x1)
 y1 = int(y1)
 x2 = int(x2)
 y2 = int(y2)
 go1 = 1#表示用一条直线即可完成连接
 go2 = 1#表示用两条
 go3 = 1#用三条
 if map1[x1][y1] == map1[x2][y2]: #先判断输入的两个坐标对应的值是否相等
 if (x1 <= 11)&(x1 >=0)&(y1 >= 0)&(y1 <= 11):
 if go1 == 1: #一条直线的情况
 if (int(math.fabs(x1-x2)) == 1)&(y1 == y2):
  map1[x1][y1]=map1[x2][y2]=""
  go2 = go3 = 0
 if (int(math.fabs(y1-y2)) == 1)&(x1 == x2):
  map1[x1][y1]=map1[x2][y2]=""
  count += 1
  go2 = go3 = 0 

 if go2 == 1: #两条直线的情况
 judgepoint(x1,y1)
 list3 = list1
 judgepoint(x2,y2)
 for i in range(len(list1)):
  for k in range(len(list3)):
  if (i <= (len(list1)-1))&(k <= (len(list3)-1)):
  if list1[i]==list3[k]:
  map1[x1][y1]=map1[x2][y2]=""
  count += 1
  go3 = 0
  break
 if go3 == 1: #三条直线的情况
 judgepoint(x1,y1)
 list3 = list1
 judgepoint(x2,y2)
 list4 = list1
 mylist1 = []
 #以点(x1,y1)周围空白点为坐标进行第二次寻找空白点
 for i in range(len(list3)):
  judgepoint(list3[i][0],list3[i][1])
  mylist1 += list1
 #遍历列表,与点(x2,y2)形成的列表进行比较,寻找交叉点
 for i in range(len(mylist1)):
  for k in range(len(list4)):
  if (i <= (len(mylist1)-1))&(k <= (len(list4)-1)):
  if mylist1[i]==list4[k]:
  map1[x1][y1]=map1[x2][y2]=""
  count += 1
  mylist1 = []
  break
 for i in range(12):
 print(map1[i])
 else:
 print("越界了")
 else:
 print("不对哦")
if (count==50):
 print("YOU WIN!!!")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
介绍Python的@property装饰器的用法
Apr 28 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
python实现Windows电脑定时关机
Jun 20 Python
python查看模块,对象的函数方法
Oct 16 Python
python实现简单图片物体标注工具
Mar 18 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
实例详解Python装饰器与闭包
Jul 29 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
如何利用python实现列表嵌套字典取值
Jun 10 Python
python读取与处理netcdf数据方式
Feb 14 #Python
Python class的继承方法代码实例
Feb 14 #Python
python super函数使用方法详解
Feb 14 #Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 #Python
python集成开发环境配置(pycharm)
Feb 14 #Python
基于python-pptx库中文文档及使用详解
Feb 14 #Python
python pptx复制指定页的ppt教程
Feb 14 #Python
You might like
PHP的面试题集
2006/11/19 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
javascript 拖动表格行实现代码
2011/05/05 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
js实现搜索栏效果
2018/11/16 Javascript
vue多次循环操作示例
2019/02/08 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
老生常谈python之鸭子类和多态
2017/06/13 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
银行实习自我鉴定
2013/10/12 职场文书
工程招投标邀请书
2014/01/26 职场文书
房屋买卖协议书
2014/04/10 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
英文商务邀请函范文
2015/01/31 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
Python中的min及返回最小值索引的操作
2021/05/10 Python
Pytorch 如何实现常用正则化
2021/05/27 Python