欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+numpy實現(xiàn)一個蜘蛛紙牌游戲

 更新時間:2022年12月07日 16:51:17   作者:??????  
蜘蛛紙牌大家玩過沒有?之前的電腦上自帶的游戲,用他來摸魚過的舉個手。但是現(xiàn)在的電腦上已經(jīng)沒有蜘蛛紙牌了。所以本文就來用Python做一個吧,需要的可以參考一下

1.過程

蜘蛛紙牌大家玩過沒有?之前的電腦上自帶的游戲,用他來摸魚過的舉個手。

但是現(xiàn)在的電腦上已經(jīng)沒有蜘蛛紙牌了。所以……

可不可以自己做一個呢?

想法有了,實踐開始。

首先,應(yīng)該怎么寫?首選的方案就是pygame和numpy。

最后選了numpy。一是因為作者用電腦的時間比較短,沒有時間力,而手機(jī)的在線編譯器可以用numpy,不能用pygame。二是因為之前了解過numpy,但是pygame當(dāng)時都沒安裝,是昨天才安裝完畢的三是因為想挑戰(zhàn)一下自己。下次可以試試用pygame。

所以一個動都沒動過numpy的小白開始努(作)力(死)。

從10月30日寫到11月9日,中間提問了14個問題,查詢了大約五十多個資料,修復(fù)了20多個bug,很感謝回答我的問題的人。

numpy有一個缺點就是只能輸入輸出,自己要移動哪些牌,移動到哪里,很耗費(fèi)時間,于是把三次輸入硬生生壓縮成了一次,有些難理解,并且對于被蓋住的牌,只能用數(shù)字99表示了。整體有些出入。

中間有一次寫了四五個小時代碼,結(jié)果手殘點到返回主頁了沒保存,心態(tài)崩了

還好還是完成了。如果程序運(yùn)行有bug,可以指出

游戲規(guī)則見代碼里

2.思路

整體思路:

1,創(chuàng)造空矩陣a,在0,1,2,3行和第四行的0,1,2,3列變成99牌,定義函數(shù)qipai來起一列牌。創(chuàng)建列表pai,并通過詢問難度來定義不同的牌。

2,定義函數(shù)shan0,為了美觀和不占地方,將矩陣a的全0行刪除

3,操作移動,用input詢問要移動的牌,信息:移動的牌在第幾列?第幾行到第幾行?要移動到哪一列?之后將范圍里的牌存儲到列表yidong里并清0,再依次賦值到移動到的那一列。期間的錯誤操作如移動的牌順序不相接,移動之后的位置不相接等,通過扣得分處罰(絕對不是因為作者懶不想再返回原位置)

4,操作看規(guī)則,print無腦就行

5,操作翻99牌,循環(huán)從下往上偵測,當(dāng)偵測到99牌將這個位置在pai里隨機(jī)賦值,做出錯誤操作處理

6,操作起牌,調(diào)用函數(shù)就行

7,操作收牌,從下往上偵測是否有x.01,如果有,則開始偵測上面的牌是否按規(guī)律排列,按照規(guī)律則依次變成0,否則繼續(xù)偵測x.01作出沒有可收牌的處理

8,完善,修改bug,設(shè)置開始和結(jié)束語

3.配置

首先要python是必不可少的,其次是numpy模塊。

快捷鍵win+R,輸入cmd進(jìn)入終端。如果沒有pip包給爺上網(wǎng)查下載(bushi,輸入pip install numpy安裝,安裝完成之后輸入:

import numpy
???????numpy.zeros((3,3))

如果報錯則是沒安裝,輸出了一個3x3的矩陣則成功安裝了。

4.代碼

import random#導(dǎo)入隨機(jī)數(shù)模塊
 
import numpy as np#導(dǎo)入numpy模塊
 
 
 
 
 
def qipai():#定義函數(shù)qipai,用來起一行牌
 
    xunhuan=40
 
    jiange=1
 
    for xunhuan1 in range(0,10):#一列一列偵測
 
        while xunhuan == xunhuan:#死循環(huán)
 
            xunhuan=xunhuan-1#xunhuan自減,
 
            if a[xunhuan][xunhuan1] != 0:#如果xunhuan行不是零,偵測到其他數(shù)字
 
                chu=a[xunhuan+1][xunhuan1]=random.choice(pai)#將他的上一行變成pai里面的任意一個并用變量儲存
 
                pai.remove(chu)#刪除這一個數(shù)
 
                break#偵測下一列
 
            if xunhuan == 0:#如果檢測到了最后還沒有數(shù)字就是這一列沒有數(shù)字
 
                chu=a[0][xunhuan1]=random.choice(pai)#在0行隨機(jī)發(fā)放數(shù)字并用變量儲存
 
                pai.remove(chu)#刪除這一個數(shù)
 
                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("正在發(fā)牌")
 
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("難度設(shè)置完畢")
 
 
 
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#設(shè)置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:#死循環(huán)
 
    shan0()#刪除0行
 
    
 
    if defen <= 0:#得分變成0時游戲失敗
 
        print("得分為0,游戲失敗?。?!")
 
        print(3/0)#沒啥好方法了,讓他自己報錯吧
 
    print(newa,"\n")#輸出牌局
 
    print("    0     1     2     3     4     5     6     7     8     9")#輸出索引間距
 
    print("目前得分:",defen)#說目前的得分
 
    if np.where(a!=0)[0].shape[0]==0:#如果矩陣為全0
 
        break#游戲成功,退出死循環(huán)
 
    caozuo,lie1,hang1,hang2,lie2 =map(int,input("輸入5個數(shù)字,不知道規(guī)則請輸入2 0 0 0 0(用索引形式)\n").split())#詢問操作并執(zhí)行命令,規(guī)則見上
 
    if caozuo == 1: #要移動牌  
 
        if a[hang1][lie1] != 0 and a[hang2+1][lie1] == 0:#hang1和hang2不等于零且hang2的下面沒有牌才執(zhí)行移動
 
            if a[hang2][lie1] != 0:
 
                xunhuan=hang1#將hang1到hang2的牌保存到y(tǒng)idong
 
                yidong=[]#空列表
 
                while xunhuan <= hang2:#開始偵測
 
                    yidong.append(a[xunhuan][lie1])#添加這個數(shù)
 
                    a[xunhuan][lie1]=0#將這個數(shù)變成0
 
                    xunhuan=xunhuan+1#自增
 
                xunhuan=0
 
                
 
                if len(yidong) != 1:#yidong的長度不是1才執(zhí)行規(guī)律偵測
 
                    while xunhuan < len(yidong)-1:#-1是因為后面有yidong[xunhuan+1],為了不越界
 
                        wuyong=yidong[xunhuan]-yidong[xunhuan+1]-0.01
 
                        sxc=f'{wuyong:.3f}'#大佬教的浮點數(shù)四舍五入三位,前面的牌-后面的牌-0.01=x.00時
 
                        if str(sxc)[:-3]!='000':
 
                            defen=defen-50#defen減50
 
                            print("移動的牌不按規(guī)律排列,作弊次數(shù)+1")
 
                            break#偵測到作弊
 
                        xunhuan=xunhuan+1
 
                xunhuan=0
 
                
 
                while xunhuan == xunhuan:#死循環(huán)偵測,從上往下
 
                    if a[xunhuan][lie2] != 0:#偵測到不為0
 
                        xunhuan=xunhuan+1#偵測下一行
 
                    else:#此時xunhuan是該列最后一個數(shù)字所在行數(shù)的下一行
 
                        xunhuan=xunhuan-1#切換到上一行,該數(shù)字
 
                        if a[0][lie2] != 0:#矩陣這一列的0行不是0
 
                            ktsfwl=0
 
                            dh=a[xunhuan][lie2]#dh變成該數(shù)字在的位置
 
                        else:#若是0,則是直接移動
 
                            ktsfwl=1
 
                        xunhuan1=0
 
                        
 
                        while xunhuan1 < len(yidong):#xunhuan1為yidong的長度時
 
                            geduan=yidong[xunhuan1]#賦值
                            a[xunhuan+1+xunhuan1][lie2]=geduan
                            xunhuan1=xunhuan1+1#xunhuan自增
 
                            
 
                        if ktsfwl == 1:#0行是0,取消偵測,直接退出
 
                            print("移動成功")
 
                            defen=defen-5
 
                            break
 
                        wuyong=dh-a[xunhuan+1][lie2]-0.01
 
                        sxc=f'{wuyong:.3f}'#這一行減移動的首個數(shù)字減0.01的差為x.00
 
                        if str(sxc)[-3:] =='000': 
 
                            print("移動成功")
 
                            defen=defen-5#移動成功
 
                            break
 
                        
                        elif str(a[xunhuan+1][lie2])[:-2] =='.1' and str(dh)[:-3]=='.11':#如果是.11和.1相接也是移動成功
 
                            defen=defen-5
 
                            print("移動成功")
 
                            break
 
                        
 
                        else:#兩種情況都不是
 
                            print("移動的位置不相接,作弊次數(shù)加一")
 
                            defen=defen-50
 
                            zuobi=zuobi+1#判斷作弊
 
                            break
 
                continue#下一次操作
 
 
 
            else:
 
                print("請輸入正確的范圍")
 
                defen=defen-10
 
                continue
 
            
 
        else:
 
            print("請輸入正確的范圍")
 
            defen=defen-10
 
            continue
 
 
 
 
 
    if caozuo == 2:#查看規(guī)則時
 
        print("規(guī)則:共有104個數(shù)字,10組,數(shù)字的小數(shù)點前代表花色,小數(shù)點后代表點數(shù),牌只能放在比他數(shù)值大0.01,花色任意 的牌上,將一樣花色的牌按照13到1的順序排列再輸入5即可消除這一組牌")
 
        print("下面的x指輸入的第二個數(shù)字,y是第三個,z是第四個,w是第五個")
 
        print("將8組牌全部消除則勝利。其中移動牌是將在第x列的第y到第z行的牌移動到第w列,翻99牌則是翻x列標(biāo)注99的牌,下面沒牌之后才能翻。起一行牌則是起一行備用的牌,一行牌會覆蓋在下面,共5組。消除牌則是將x列13到1順序排列并同樣花色的牌全部消除")
 
        print("第一個數(shù)字如果移動牌輸入1,看規(guī)則輸入2,翻99牌輸入3,起牌輸入4,消除牌輸入5")
 
        print("按照上面的要求輸入五個數(shù)字,用空格隔開,輸入行列要用索引形式,如果用不到第2,3,4,5個數(shù)字輸入0")
 
        print("得分初始為1000,正常操作-5,犯規(guī)操作-50,錯誤操作-10,若得分為0則游戲失敗,消除一次牌+500")
 
        print("索引是啥給爺自己查,懶得寫")
 
        continue#下一次操作
 
 
 
 
 
    if caozuo == 3:#翻99牌時
 
        xunhuan=6#因為只有5行上面會有99牌,節(jié)省時間
 
        
 
        if a[0][lie1] != 99:#0行都不是99牌,錯誤操作
 
            print("該列沒有99牌")
 
            defen=defen-10
 
            continue#下一次操作
 
 
 
        while xunhuan >= 0:#循環(huán)檢測第一個99牌
 
            print("a")
 
            xunhuan=xunhuan-1#自減
 
            if a[xunhuan][lie1] == 99:#檢測到99牌
 
                chu=a[xunhuan][lie1]=random.choice(pai)#將99牌的位置隨機(jī)發(fā)放牌
 
                pai.remove(chu)#刪除該數(shù)字
 
                print("已經(jīng)揭牌")
 
                defen=defen-5
 
                break#跳出循環(huán)
 
            
 
            elif a[xunhuan][lie1] != 0:#檢測到不是0也不是99的數(shù)
 
                print("99牌下面還有其他的牌")#下面還有其他的牌
 
                defen=defen-10
 
                break
 
        continue#下一次操作
 
 
 
        
 
    if caozuo == 4:#起牌
 
 
 
        if qi == 0:#如果牌堆沒牌了
 
            print("已經(jīng)沒有牌可以起了")
 
            defen=defen-10
 
        else:#牌堆有牌
 
            qipai()#執(zhí)行函數(shù)qipai
 
            print("已經(jīng)為您起牌")
 
            qi=qi-1#自減牌堆數(shù)量
 
            defen=defen-5
 
        continue#下一次操作
 
 
 
    if caozuo == 5:#消除牌
 
        xunhuan=40#從40行往下檢測
 
        jiange=2#定義
 
        while xunhuan == xunhuan:#開始檢測
 
            jiange=0
 
            if xunhuan==11:#已經(jīng)不夠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':#出現(xiàn)x.01
 
                xunhuan1=xunhuan#此時xunhuan為x.01所在行數(shù)
 
                while xunhuan1 == xunhuan1:#死循環(huán)檢測上-下是否為0.01
 
                    if xunhuan1==xunhuan-12:#12次后沒有發(fā)現(xiàn)錯誤
 
                        xunhuan2=0#消除成功
 
                        while xunhuan2<=12:#依次消除
 
                            a[xunhuan-xunhuan2][lie1]=0#x.01在的行數(shù)依次減1,2…后的行數(shù)為0
 
                            xunhuan2=xunhuan2+1#自增
 
                        jiange=0#jiange為0,是因為正確運(yùn)行跳出循環(huán)的
 
                        break
 
                    
 
                    wuyong=a[xunhuan1-1][lie1]-a[xunhuan1][lie1]-0.01
 
                    sxc=f'{wuyong:.3f}'
 
                    if str(sxc)[-5:]=='0.000':#循環(huán)偵測上下差值-0.01是否為0
 
                        xunhuan1=xunhuan1-1#自減
 
                    else:#這個0.01上面并不按規(guī)律排列
 
                        jiange=1#是因為不按規(guī)律排列而退出循環(huán)
 
                        break
 
                if jiange == 0:#偵測是因為什么跳出循環(huán),如果因為正確操作
 
                    print("已經(jīng)移除")
 
                    defen=defen+500
 
                    break
 
                #非正確操作接著檢測
 
        continue#檢測結(jié)束后繼續(xù)下一次操作
 
#退出循環(huán),游戲勝利
 
print("恭喜獲勝")
 
print("您目前的得分為",defen,"作弊了",zuobi,"次,游戲結(jié)束!")#報成績

四.效果圖

到此這篇關(guān)于Python+numpy實現(xiàn)一個蜘蛛紙牌游戲的文章就介紹到這了,更多相關(guān)Python numpy蜘蛛紙牌游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Python學(xué)習(xí)RabbitMQ消息隊列

    利用Python學(xué)習(xí)RabbitMQ消息隊列

    RabbitMQ和郵局的主要區(qū)別就是RabbitMQ接收、存儲和發(fā)送的是二進(jìn)制數(shù)據(jù)----消息,本篇文章給大家介紹利用Python學(xué)習(xí)RabbitMQ消息隊列,對python消息隊列相關(guān)知識感興趣的朋友參考下
    2015-11-11
  • 通過Python 接口使用OpenCV的方法

    通過Python 接口使用OpenCV的方法

    下面小編就為大家分享一篇通過Python 接口使用OpenCV的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python xlwt模塊使用代碼實例

    Python xlwt模塊使用代碼實例

    這篇文章主要介紹了Python xlwt模塊使用代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python量化交易實戰(zhàn)之使用Resample函數(shù)轉(zhuǎn)換“日K”數(shù)據(jù)

    Python量化交易實戰(zhàn)之使用Resample函數(shù)轉(zhuǎn)換“日K”數(shù)據(jù)

    resample函數(shù)是Python數(shù)據(jù)分析庫Pandas的方法函數(shù),它主要用于轉(zhuǎn)換時間序列的頻次,今天通過本文給大家分享python使用Resample函數(shù)轉(zhuǎn)換時間序列的相關(guān)知識,感興趣的朋友一起看看吧
    2021-06-06
  • Python貓眼電影最近上映的電影票房信息

    Python貓眼電影最近上映的電影票房信息

    這篇文章主要介紹了Python貓眼電影最近上映的電影票房信息,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Python實現(xiàn)身份證號碼解析

    Python實現(xiàn)身份證號碼解析

    本文給大家匯總介紹下使用Python實現(xiàn)身份證號碼驗證解析的幾個方法,有需要的小伙伴可以參考下。
    2015-09-09
  • Python實現(xiàn)隨機(jī)生成迷宮并自動尋路

    Python實現(xiàn)隨機(jī)生成迷宮并自動尋路

    最近在學(xué)習(xí)Python,正好今天在學(xué)習(xí)隨機(jī)數(shù),本文實現(xiàn)了Python實現(xiàn)隨機(jī)生成迷宮并自動尋路,感興趣的可以了解一下
    2021-06-06
  • Python3 使用cookiejar管理cookie的方法

    Python3 使用cookiejar管理cookie的方法

    今天小編就為大家分享一篇Python3 使用cookiejar管理cookie的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python如何統(tǒng)計函數(shù)調(diào)用的耗時

    Python如何統(tǒng)計函數(shù)調(diào)用的耗時

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)統(tǒng)計函數(shù)調(diào)用的耗時,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • python如何生成密碼字典

    python如何生成密碼字典

    這篇文章主要介紹了python如何生成密碼字典,密碼字典主要是配合解密使用,下面利用python實現(xiàn)生成密碼字典,需要的小伙伴可以參考一下
    2022-03-03

最新評論