用python整个活(2)——用numpy做一个蜘蛛纸牌

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

四,结束语

用python整个活(2)——用numpy做一个蜘蛛纸牌

总之还是比(磕)较(磕)顺(绊)畅(绊)地完成了。如果代码有错误或者可以优化的地方,一定一定要指出,谢谢。

接下来打算去学习turtle库,出一个新的作品,谢谢智齿

Original: https://blog.csdn.net/C_ygxb/article/details/127766282
Author: ¿¿¿¡¡¡
Title: 用python整个活(2)——用numpy做一个蜘蛛纸牌

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/779057/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • onps栈移植说明(3)——添加网卡

    移植的最后一步就是编写网卡驱动然后将网卡添加到协议栈。网卡驱动其本质上完成的是数据链路层的工作,在整个通讯链路上处于通讯枢纽位置,通讯报文的发送和接收均由其实际完成。针对网卡部分的…

    Python 2023年10月15日
    057
  • Pandas Shift函数(错位相加减)

    Pandas Shift函数基础 官方帮助文档如下: >>> import pandas >>> help(pandas.DataFrame.s…

    Python 2023年8月16日
    0119
  • 2023跨年代码(烟花+雪花)

    一眨眼,马上就2023年了,祝大家在新的一年里:身体健康平安,生活充实饱满,事业步步高升,心情阳光灿烂,财运滚滚而来,家庭美满幸福,新年开心快乐! 本文将给大家分享一些跨年代码,基…

    Python 2023年8月30日
    048
  • Python中的循环结构

    Python中的循环结构 一、回顾分支练习题 1、判断是否为一个合法三角形 需求:输入三角形的3边,如果两边的长度大于第三条边,则代表是一个合法三角形 1、提示用户输入三角形的三边…

    Python 2023年5月24日
    074
  • python中保存一个数组,你会吗?

    在机器学习领域,有时候想把模型运行过程中的重要信息(数组,dnarray类型的)存到一个文档里。方便下次读取。 下面介绍三种: 1. 存成2进制数 numpy提供了接口save和l…

    Python 2023年8月27日
    060
  • pycharm运行python程序环境配置

    第一步:pycharm配置python运行环境: setting————–project interpreter 选择d…

    Python 2023年8月1日
    062
  • python中flask_caching库用法详解(缓存)

    为了尽量减少缓存穿透,并同时减少web的响应时间,可以针对那些需要一定时间才能获取结果的函数和那些不需要频繁更新的视图函数提供缓存服务,可以在一定的时间内直接返回结果而不是每次都需…

    Python 2023年8月14日
    042
  • 基本数据类型之列表

    1.列表的定义 1.采用变量名=[]的方式定义2.采用变量名=list()的方式定义 2.列表的作用 列表是用来存多个数据,并且这些数据是需要按位置存放的,后面我们可以通过索引取出…

    Python 2023年11月1日
    060
  • rk3568代码编译

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一、一键编译命令 二、各个平台编译命令汇总 1.其他编译说明 Android11.0不能直接烧写kernel.im…

    Python 2023年11月7日
    034
  • python调用词云wordcloud字体命名要求

    word_cloud = WordCloud( # 显示中文需要加载本地中文字体,字体设置如果没有该字体msyhbd.ttc会导致出错,(.ttf没有问题),使用simsun.tt…

    Python 2023年8月31日
    057
  • pycharm 常用快捷键 提升代码能力 缩短开发效率

    pycharm 常用快捷键 ctrl+shift+A:万能命令行 shift两次:查看资源文件 新建工程第一步操作 module设置把空包分层去掉,compact empty mi…

    Python 2023年11月2日
    044
  • 初学开发框架—-Django(1)创建django项目

    所有的操作都是在pycharm上实现的,没有用过的自行百度安装教程进行下载安装 创建pycharm虚拟开发环境(包括安装django第三方库) 创建新的pychrm项目,File-…

    Python 2023年8月5日
    047
  • Dubbo-时间轮设计

    前言 Dubbo源码阅读分享系列文章,欢迎大家关注点赞 SPI实现部分 Dubbo-SPI机制 Dubbo-Adaptive实现原理 Dubbo-Activate实现原理 Dubb…

    Python 2023年10月15日
    032
  • 【python小项目】用python写一个小工具——番茄钟

    主体:(一) 一、 概述 (一) 发展历史 1980年,Bjarne Stroustrup博士开始着手创建一种模拟 ,能够具有面向对象的程序设计特色。在当时,面向对象编程还是一个比…

    Python 2023年10月11日
    044
  • python常用标准库(math数学模块和random随机模块)

    常用的标准库 import math 将一个数字四舍五入(为一个方法),取彼此相邻的两个最接近的整数中的最大值。 [En] Round up a number (into one …

    Python 2023年5月24日
    066
  • ChatGPT 试用

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球