1,过程
蜘蛛纸牌大家玩过没有?之前的电脑上自带的游戏,用他来摸鱼过的举个手。
但是现在的电脑上已经没有蜘蛛纸牌了。所以……
可不可以自己做一个呢?
想法有了,实践开始。
首先,应该怎么写?首选的方案就是pygame和numpy。
最后选了numpy。一是因为作者用电脑的时间比较短,没有时间力,而手机的在线编译器可以用numpy,不能用pygame。二是因为之前了解过numpy,但是pygame当时都没安装,是昨天才安装完毕的三是因为想挑战一下自己。下次可以试试用pygame。
所以一个动都没动过numpy的小白开始努(作)力(死)。
从10月30日写到11月9日,中间提问了14个问题,查询了大约五十多个资料,修复了20多个bug,很感谢回答我的问题的人。
numpy有一个缺点就是只能输入输出,自己要移动哪些牌,移动到哪里,很耗费时间,于是把三次输入硬生生压缩成了一次,有些难理解,并且对于被盖住的牌,只能用数字99表示了。整体有些出入。
中间有一次写了四五个小时代码,结果手残点到返回主页了没保存,心态崩了
还好还是完成了。如果程序运行有bug,可以指出
游戏规则见代码里
2,思路
整体思路:
1,创造空矩阵a,在0,1,2,3行和第四行的0,1,2,3列变成99牌,定义函数qipai来起一列牌。创建列表pai,并通过询问难度来定义不同的牌。
2,定义函数shan0,为了美观和不占地方,将矩阵a的全0行删除
3,操作移动,用input询问要移动的牌,信息:移动的牌在第几列?第几行到第几行?要移动到哪一列?之后将范围里的牌存储到列表yidong里并清0,再依次赋值到移动到的那一列。期间的错误操作如移动的牌顺序不相接,移动之后的位置不相接等,通过扣得分处罚(绝对不是因为作者懒不想再返回原位置)
4,操作看规则,print无脑就行
5,操作翻99牌,循环从下往上侦测,当侦测到99牌将这个位置在pai里随机赋值,做出错误操作处理
6,操作起牌,调用函数就行
7,操作收牌,从下往上侦测是否有x.01,如果有,则开始侦测上面的牌是否按规律排列,按照规律则依次变成0,否则继续侦测x.01作出没有可收牌的处理
8,完善,修改bug,设置开始和结束语
3,配置
首先要python是必不可少的,其次是numpy模块。
快捷键win+R,输入cmd进入终端。如果没有pip包给爷上网查下载(bushi,输入pip install numpy安装,安装完成之后输入:
import numpy
numpy.zeros((3,3))
如果报错则是没安装,输出了一个3×3的矩阵则成功安装了。
4,代码
import random#导入随机数模块
import numpy as np#导入numpy模块
def qipai():#定义函数qipai,用来起一行牌
xunhuan=40
jiange=1
for xunhuan1 in range(0,10):#一列一列侦测
while xunhuan == xunhuan:#死循环
xunhuan=xunhuan-1#xunhuan自减,
if a[xunhuan][xunhuan1] != 0:#如果xunhuan行不是零,侦测到其他数字
chu=a[xunhuan+1][xunhuan1]=random.choice(pai)#将他的上一行变成pai里面的任意一个并用变量储存
pai.remove(chu)#删除这一个数
break#侦测下一列
if xunhuan == 0:#如果检测到了最后还没有数字就是这一列没有数字
chu=a[0][xunhuan1]=random.choice(pai)#在0行随机发放数字并用变量储存
pai.remove(chu)#删除这一个数
break#侦测下一列
xunhuan=40#变量变换
def shan0():#删除矩阵中所有0行
o = np.sum(a == 0, axis=1)
liebiao = []
for xunhuan2 in range(len(o)):
q = o.tolist()[xunhuan2]
if q == 10:
liebiao.append(xunhuan2)#问的大佬,我也看不懂
global newa#全局变量
newa=np.delete(a,liebiao,0)#newa为删除零行后的a,仅仅是显示作用,改变在a上改变
print("正在发牌")
a=np.zeros((40,10))#40x10的全0矩阵
nandu=int(input("请选择难度,简单输入1,中等输入2,困难输入3"))#选择难度
if nandu == 1:#简单难度
pai=[1.01,1.02,1.03,1.04,1.05,1.06,1.07,1.08,1.09,1.10,1.11,1.12,1.13]#一种花色
pai=pai*8#自乘
elif nandu == 2:#中等难度
pai=[1.01,1.02,1.03,1.04,1.05,1.06,1.07,1.08,1.09,1.10,1.11,1.12,1.13,2.01,2.02,2.03,2.04,2.05,2.06,2.07,2.08,2.09,2.10,2.11,2.12,2.13]#两种花色
pai=pai*4#自乘
elif nandu == 3:#困难难度
pai=[1.01,1.02,1.03,1.04,1.05,1.06,1.07,1.08,1.09,1.10,1.11,1.12,1.13,2.01,2.02,2.03,2.04,2.05,2.06,2.07,2.08,2.09,2.10,2.11,2.12,2.13,3.01,3.02,3.03,3.04,3.05,3.06,3.07,3.08,3.09,3.10,3.11,3.12,3.13,4.01,4.02,4.03,4.04,4.05,4.06,4.07,4.08,4.09,4.10,4.11,4.12,4.13]#四种花色
pai=pai*2#自乘
print("难度设置完毕")
for xunhuan in range(0,10):
a[0][xunhuan]=99
xunhuan=0
for xunhuan in range(0,10):
a[1][xunhuan]=99
xunhuan=0
for xunhuan in range(0,10):
a[2][xunhuan]=99
xunhuan=0
for xunhuan in range(0,10):
a[3][xunhuan]=99
a[4][0]=99
a[4][1]=99
a[4][2]=99
a[4][3]=99#设置99牌站位
dh=0
s=0
chu=0
t=0
xunhuan=0
jiange=0
xunhuan1=0
zuobi=0
defen=1000
qi=5
lie3=0
ktsfwl=0
wuyong=0
zuobima=0
#初始化变量
qipai()#开局起牌
while 1 == 1:#死循环
shan0()#删除0行
if defen = 0:#循环检测第一个99牌
print("a")
xunhuan=xunhuan-1#自减
if a[xunhuan][lie1] == 99:#检测到99牌
chu=a[xunhuan][lie1]=random.choice(pai)#将99牌的位置随机发放牌
pai.remove(chu)#删除该数字
print("已经揭牌")
defen=defen-5
break#跳出循环
elif a[xunhuan][lie1] != 0:#检测到不是0也不是99的数
print("99牌下面还有其他的牌")#下面还有其他的牌
defen=defen-10
break
continue#下一次操作
if caozuo == 4:#起牌
if qi == 0:#如果牌堆没牌了
print("已经没有牌可以起了")
defen=defen-10
else:#牌堆有牌
qipai()#执行函数qipai
print("已经为您起牌")
qi=qi-1#自减牌堆数量
defen=defen-5
continue#下一次操作
if caozuo == 5:#消除牌
xunhuan=40#从40行往下检测
jiange=2#定义
while xunhuan == xunhuan:#开始检测
jiange=0
if xunhuan==11:#已经不够13张牌时还没有x.01
print("没有可以消除的牌")
defen=defen-10
break
xunhuan=xunhuan-1#自减
wuyong=a[xunhuan][lie1]-0.01
sxc=f'{wuyong:.3f}'#sxc为上减下减0.01
if str(sxc)[-3:] == '000':#出现x.01
xunhuan1=xunhuan#此时xunhuan为x.01所在行数
while xunhuan1 == xunhuan1:#死循环检测上-下是否为0.01
if xunhuan1==xunhuan-12:#12次后没有发现错误
xunhuan2=0#消除成功
while xunhuan2
四,结束语
总之还是比(磕)较(磕)顺(绊)畅(绊)地完成了。如果代码有错误或者可以优化的地方,一定一定要指出,谢谢。
接下来打算去学习turtle库,出一个新的作品,谢谢智齿
Original: https://blog.csdn.net/C_ygxb/article/details/127766282
Author: ¿¿¿¡¡¡
Title: 用python整个活(2)——用numpy做一个蜘蛛纸牌
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/779057/
转载文章受原作者版权保护。转载请注明原作者出处!