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 16 Python
Linux下Python获取IP地址的代码
Nov 30 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
pandas中去除指定字符的实例
May 18 Python
详解Python3 基本数据类型
Apr 19 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
Nov 02 Python
详解Scrapy Redis入门实战
Nov 18 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面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
php 数据结构之链表队列
2017/10/17 PHP
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
利用JS制作万年历的方法
2017/08/16 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
python计算auc的方法
2020/09/09 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
小学中等生评语
2014/12/29 职场文书
团委工作总结2015
2015/04/02 职场文书
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技