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访问纯真IP数据库的代码
May 19 Python
Python编码类型转换方法详解
Jul 01 Python
使用Python处理BAM的方法
Sep 28 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
python中的协程深入理解
Jun 10 Python
python实现登录密码重置简易操作代码
Aug 14 Python
python3中替换python2中cmp函数的实现
Aug 20 Python
django框架两个使用模板实例
Dec 11 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
python语言是免费还是收费的?
Jun 15 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采集相关教程之一 CURL函数库
2010/02/15 PHP
20个PHP常用类库小结
2011/09/11 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
nodejs教程之入门
2014/11/21 NodeJs
jQuery选择器基础入门教程
2016/05/10 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
bootstrap模态框远程示例代码分享
2017/05/22 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
Django 实现下载文件功能的示例
2018/03/06 Python
Python格式化日期时间操作示例
2018/06/28 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
python多线程分块读取文件
2019/08/29 Python
python Paramiko使用示例
2020/09/21 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
优秀的茶餐厅创业计划书
2014/01/03 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
学校门卫管理制度
2014/01/30 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
毕业酒会致辞
2015/07/29 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android