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

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

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

1.過(guò)程

蜘蛛紙牌大家玩過(guò)沒(méi)有?之前的電腦上自帶的游戲,用他來(lái)摸魚過(guò)的舉個(gè)手。

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

可不可以自己做一個(gè)呢?

想法有了,實(shí)踐開(kāi)始。

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

最后選了numpy。一是因?yàn)樽髡哂秒娔X的時(shí)間比較短,沒(méi)有時(shí)間力,而手機(jī)的在線編譯器可以用numpy,不能用pygame。二是因?yàn)橹傲私膺^(guò)numpy,但是pygame當(dāng)時(shí)都沒(méi)安裝,是昨天才安裝完畢的三是因?yàn)橄胩魬?zhàn)一下自己。下次可以試試用pygame。

所以一個(gè)動(dòng)都沒(méi)動(dòng)過(guò)numpy的小白開(kāi)始努(作)力(死)。

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

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

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

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

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

2.思路

整體思路:

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

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

3,操作移動(dòng),用input詢問(wèn)要移動(dòng)的牌,信息:移動(dòng)的牌在第幾列?第幾行到第幾行?要移動(dòng)到哪一列?之后將范圍里的牌存儲(chǔ)到列表yidong里并清0,再依次賦值到移動(dòng)到的那一列。期間的錯(cuò)誤操作如移動(dòng)的牌順序不相接,移動(dòng)之后的位置不相接等,通過(guò)扣得分處罰(絕對(duì)不是因?yàn)樽髡邞胁幌朐俜祷卦恢茫?/p>

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

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

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

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

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

3.配置

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

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

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

如果報(bào)錯(cuò)則是沒(méi)安裝,輸出了一個(gè)3x3的矩陣則成功安裝了。

4.代碼

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

四.效果圖

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

相關(guān)文章

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

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

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

    通過(guò)Python 接口使用OpenCV的方法

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

    Python xlwt模塊使用代碼實(shí)例

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

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

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

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

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

    Python實(shí)現(xiàn)身份證號(hào)碼解析

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

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

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

    Python3 使用cookiejar管理cookie的方法

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

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

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

    python如何生成密碼字典

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

最新評(píng)論