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的Django框架中的QuerySets
Apr 20 Python
Python网络编程之TCP套接字简单用法示例
Apr 09 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
python查看模块,对象的函数方法
Oct 16 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
python安装cx_Oracle和wxPython的方法
Sep 14 Python
python如何快速拼接字符串
Oct 28 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
python爬虫 requests-html的使用
Nov 30 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 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四舍五入精确小数位及取整
2014/01/14 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
打包发布Python模块的方法详解
2016/09/18 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
Python进程间通信Queue实例解析
2018/01/25 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python顺序执行多个py文件的方法
2019/06/29 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
python中doctest库实例用法
2020/12/31 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
元旦标语大全
2014/10/09 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
教师节慰问信
2015/02/15 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
新郎新娘致辞
2015/07/31 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
利用Python实现模拟登录知乎
2022/05/25 Python
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js