python连连看小游戏_python实现连连看游戏

编程一直是在课余时间,放假时间自学,到现在为止也有半年了。

这是我自己用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!!!")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL

Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源包由多个properties文件组成, properties文件的文件名必须满足命名规范: 文件名_语言代码_国家代码…

RBAC 基于角色的访问控制

RBAC&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff09;&#xff0c;就是用户通过角色与权限进行关联。简单地说&#xff0c;一个用户拥有若干角色&#xff0c;每一个角色拥有若干权限。这样&#xff0c;就构造成“用户-角色-权限”的授权模型。…

C语言书籍大全

学习过linux的同学应该都知道&#xff0c;linux系统几乎都是用c编写&#xff0c;包括现在主流的android,ios系统&#xff0c;都是使用c编程。为了方便大家学习C语言&#xff0c;小编搜集整理了市面几乎所有的C语言书籍&#xff0c;下面给出部分比较有名的&#xff0c;在微信公众…

python子进程修改父进程内变量_如何将父变量传递给python中的子进程?

这里的简单答案是&#xff1a;不要使用subprocess.Popen,使用multiprocessing.Process.或者,更好的是,multiprocessing.Pool或concurrent.futures.ProcessPoolExecutor.使用子进程,程序的Python解释器根本不了解子进程;据它所知,子进程正在运行Doom.所以没有办法直接与它共享信…

设计模式_1_工厂模式与抽象工厂

工厂模式 工厂模式(创建型模式):创建对象接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建延伸到子类进行 主要解决接口选择问题,明确计划不同条件下执行创建不同实例 通过子类实现工厂实例,创建过程在其子类执行 优点:提高扩展性,屏蔽产品具体实现,调用者只关心产品…

android 7.1 apk的systemuid相同导致问题[2]

1上周发的一篇文章《android 7.1 apk的systemuid和系统应用Setting相同导致开机找不到库的问题》&#xff0c;然后有个小伙伴找我讨论了&#xff0c;觉得自己的脑洞了打开了很多&#xff0c;所以针对这个问题再次做一次总结&#xff0c;如果大家有好的建议也可以在文末留言。2先…

uasset python_Unreal Python 结合 C++ 开发蓝图库插件

本文章转载自 智伤帝的个人博客 - 原文链接前言上个月的这个时候我写了一篇文章关于如何嵌入 PySide 调用 Qt 的 GUI 开发。 链接Python 虽然很好&#xff0c;但是有些功能&#xff0c;并没有从 C 里面暴露出来。这种情况就需要通过 C 的蓝图开发来将这部分的功能进行暴露。这样…

设计模式_2_单例模式

单例模式 单例模式(创建型模式): 涉及到的单一的类,该类只负责自己对象的创建,并且只有单个对象被创建,提供唯一的对象访问方式,可直接访问 注: 只能有一个实例作为全局的访问点, 构造函数私有单例类只能自己创建自己唯一的实例, 必须给所有其他对象提供这一实例; !!!使用syn…

送书送书送书,(包邮)送,仅此而已!

亲爱的各位fans们&#xff0c;大家好&#xff0c;这次小编联合5个公众号朋友一起送书&#xff0c;一共送出 6本&#xff0c;当然包邮&#xff01;感谢本次活动的赞助商北京大学出版社。6个公众号联合送书&#xff0c;一共6本书&#xff0c;每个公众号送1本(包邮)。 6个公众号同…

Java多线程_1_Java内存模型_内存模型的3大特性

Java内存模型: 内存分布情况及其关系: 主内存:Java内存模型规定所有的变量都保存在主内存中 工作内存:每个线程都有自己的工作内存,保存了该线程使用到的变量的主内存副本拷贝 主内存与工作内存的关系: 线程对变量的所有操作都必须在自己的工作内存中进行,不能直接读写主内存…

requests 获取div_爬虫系列第五篇 使用requests与BeautifulSoup爬取豆瓣图书Top250

上一篇我们学习了BeautifulSoup的基本用法&#xff0c;本节我们使用它来爬取豆瓣图书Top250。一、网页分析我们爬取的网页的url是https://book.douban.com/top250?icnindex-book250-all。首页如图与豆瓣电影Top250差不多&#xff0c;将页面拉到最底部&#xff0c;可以看到分页…

python--socket套接字/TCP

socket套接字/TCP 一 客户端/服务器架构 C/S架构&#xff0c;包括 硬件C/S架构&#xff08;打印机&#xff09;软件C/S 架构&#xff08;web服务&#xff09;C/S架构的软件&#xff08;软件属于应用层&#xff09;是基于网络进行通信的Server端要&#xff1a; 1.力求一直提供服…

uniapp封装网络请求_八张图带你走进“通过一个完美请求封装一个网络模块”

本文提供视频课程讲解&#xff0c;需要的小伙伴可以点赞私信‘’网络模块‘’前往领取学习大纲1、网络模块在应用中的地位1.1当今占统治地位的网络组件OKHttp OkHttp 是一个相对成熟的解决方案&#xff0c;据说 Android4.4 的源码中可以看到 HttpURLConnection 已经替换成 OkHt…

luogu P1046 陶陶摘苹果

二次联通门 : luoguP1046 /*这个题好难.....由苹果树可知这应该是个树结构的题所以很自然的想到了用树链剖分来搞一下连边 最后查询以1为根节点的子树的权值和...从前闲的没事写着玩... */ #include <cstdio> #define Max 3300void read (int &now) {now 0;char wor…

毕业的这0111年

1.2004年&#xff0c;不知道大家对这个时间有没有感觉&#xff0c;那几年我正在读高中&#xff0c;韩寒的《三重门》席卷校园&#xff0c;同样还有郭敬明的《夏至未至》。那时候的我&#xff0c;还挣扎在温饱阶段&#xff0c;我每天吃饭的时候都想上食堂的三楼吃风味&#xff0…

Struts2_4_ActionMap与ValueStack详解_Struct2的EL及常用标签_防止表单数据重复提交

接着Struts2_3_day的讲 注:使用Struts2的< s:debug>< /s:debug>就可获取数据储存的分布图 StrutsPrepareAndExecuteFilter都会创建一个ActionContext和ValueStack对象, 所以Struts2的数据存储分为两类: ActionMap(contextMap)以及ValueStack; ActionMap中都是以m…

python快递代取系统_代取快递的变现方式,校园跑腿的经营范围有多大?

原标题&#xff1a;代取快递的变现方式&#xff0c;校园跑腿的经营范围有多大&#xff1f;进入大学&#xff0c;随着越来越多的学生加入到网购的行列。快递在学校也是堆积成山&#xff0c;高校校园快递市场也日渐红火。但往往带来的也有更多的麻烦&#xff0c;学生取快递时间变…

java 空指针异常之一。 新建的一个对象没有NEW 导致其SET属性时报错

代码&#xff1a; //会报错 Lendbook lbk;//不会报错 Lendbook lbknew Lendbook();//在这里报错lbk.setLenddate(new Date());lbk.setPersoncode(personcode);lbk.setPersonname(personname); 转载于:https://www.cnblogs.com/Ychao/p/6811648.html

我的互助小蜜圈

写在前面 从不久之前到现在&#xff0c;我的微信公众号从一个小小小阶段到了另一个小小阶段&#xff0c;非常感谢各位读者对我的信任和支持&#xff0c;当然我也是非常用心的维护这这群大佬&#xff0c;时刻想着怎样给各位大佬做好服务 &#xff0c;比如我正在溜娃&#xff0c…

设计模式_3_建造者模式

建造者模式(BuilderPattern) 内在的核心问题就是: 使用多个简单对象根据一种组合关系构造一个我们想要的复杂对象, 属于创建型模式 建造者模式的角色关系 建造者模式中总共有两种角色: 1.建造者: 负责建造每个基本组件 2.指挥者: 将建造者建造好的基本组件按照某种组合关系进…