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 相关文章推荐
django创建自定义模板处理器的实例详解
Aug 14 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
python使用turtle库绘制树
Jun 25 Python
Flask之请求钩子的实现
Dec 23 Python
Python作用域与名字空间原理详解
Mar 21 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
Python中常见的导入方式总结
May 06 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实现验证码功能
2006/10/09 PHP
浅析PHP水印技术
2007/02/14 PHP
实用函数5
2007/11/08 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
Python中字典的基本知识初步介绍
2015/05/21 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Python 日期与时间转换的方法
2020/08/01 Python
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
一个C/C++编程面试题
2013/11/10 面试题
汽车驾驶求职信
2013/10/25 职场文书
社区包粽子活动方案
2014/01/21 职场文书
企业总经理任命书
2014/06/05 职场文书
新农村建设标语
2014/06/24 职场文书
股权转让协议范本
2014/12/07 职场文书
青年教师个人总结
2015/02/11 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
物业管理交接协议书
2016/03/24 职场文书
A22国内电台短波广播频率表
2022/05/10 无线电
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers
nginx静态资源的服务器配置方法
2022/07/07 Servers