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的轻便web框架Bottle
Apr 08 Python
利用Python开发微信支付的注意事项
Aug 19 Python
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
关于Python数据结构中字典的心得
Dec 04 Python
几种实用的pythonic语法实例代码
Feb 24 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
python实现简单银行管理系统
Oct 25 Python
django框架cookie和session用法实例详解
Dec 10 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
Django 用户认证Auth组件的使用
Nov 30 Python
详解python的异常捕获
Mar 03 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
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
2011/08/23 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python学习之编写查询ip程序
2016/02/27 Python
浅谈python中set使用
2016/06/30 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
Python Process多进程实现过程
2019/10/22 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
Python进行特征提取的示例代码
2020/10/15 Python
应聘编辑自荐信范文
2014/03/12 职场文书
法定代表人证明书
2014/11/28 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
2015年除四害工作总结
2015/07/23 职场文书
三下乡活动心得体会
2016/01/23 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
24年收藏2000多部退役军用电台
2022/02/18 无线电