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中多线程及程序锁浅析
Jan 21 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
Python元组知识点总结
Feb 18 Python
详解python中init方法和随机数方法
Mar 13 Python
如何实现Django Rest framework版本控制
Jul 25 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 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中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
php实现的简单检验登陆类
2015/06/18 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
Python 字符串操作方法大全
2014/03/11 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
python读取和保存图片5种方法对比
2018/09/12 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
博士生入学考试推荐信
2013/11/17 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Python作用域和名称空间的详细介绍
2022/04/13 Python