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和php通信乱码问题解决方法
Apr 15 Python
跟老齐学Python之总结参数的传递
Oct 10 Python
Python爬取读者并制作成PDF
Mar 10 Python
解决uWSGI的编码问题详解
Mar 24 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
单利模式及python实现方式详解
Mar 20 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
Django ValuesQuerySet转json方式
Mar 16 Python
python和go语言的区别是什么
Jul 20 Python
Django如何创作一个简单的最小程序
May 12 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
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
python中反射用法实例
2015/03/27 Python
Django 前后台的数据传递的方法
2017/08/08 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
python time()的实例用法
2020/11/03 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
创建文明学校实施方案
2014/03/11 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
12岁生日演讲稿
2014/05/14 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js
Nginx限流和黑名单配置
2022/05/20 Servers
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python