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的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
Python判断一个文件夹内哪些文件是图片的实例
Dec 07 Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Python FtpLib模块应用操作详解
Dec 12 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
python中pdb模块实例用法
Jan 15 Python
详细总结Python常见的安全问题
May 21 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备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
django框架ModelForm组件用法详解
2019/12/11 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
德国家具折扣店:POCO
2020/02/28 全球购物
学院领导推荐信
2013/10/30 职场文书
人力资源管理专业学生自我评价
2013/11/20 职场文书
中学自我评价
2014/01/31 职场文书
励志演讲稿600字
2014/08/21 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
介绍信格式
2015/01/30 职场文书
入党积极分子群众意见
2015/06/01 职场文书
中学政教处工作总结
2015/08/13 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书