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 相关文章推荐
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
python3+PyQt5实现文档打印功能
Apr 24 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
Python接口测试结果集实现封装比较
May 01 Python
python如何查看网页代码
Jun 07 Python
python中entry用法讲解
Dec 04 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 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/10/09 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
调试php程序的简单步骤
2019/10/04 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
ionic 自定义弹框效果
2017/06/27 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
用python代码做configure文件
2014/07/20 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
python更改已存在excel文件的方法
2018/05/03 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Python csv文件记录流程代码解析
2020/07/16 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
日语专业个人求职信范文
2014/02/02 职场文书
消防安全汇报材料
2014/02/08 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
委托书的样本
2015/01/28 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS