国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python實(shí)現(xiàn)簡易數(shù)獨(dú)小游戲

這篇具有很好參考價值的文章主要介紹了python實(shí)現(xiàn)簡易數(shù)獨(dú)小游戲。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

起源

既然“數(shù)獨(dú)”有一個字是“數(shù)”,人們也往往會聯(lián)想到數(shù)學(xué),那就不妨從大家都知道的數(shù)學(xué)家歐拉說起,但凡想了解數(shù)獨(dú)歷史的玩家在網(wǎng)絡(luò)、書籍中搜索時,共同會提到的就是歐拉的“拉丁方塊(Latin square)”。

拉丁方塊的規(guī)則:每一行(Row)、每一列(Column)均含1-N(N即盤面的規(guī)格),不重復(fù)。這與前面提到的標(biāo)準(zhǔn)數(shù)獨(dú)非常相似,但少了一個宮的規(guī)則。

近代發(fā)展

數(shù)獨(dú)起源于18世紀(jì)初瑞士數(shù)學(xué)家歐拉等人研究的拉丁方陣(Latin Square)。19世紀(jì)80年代,一位美國的退休建筑師格昂斯(Howard Garns)根據(jù)這種拉丁方陣發(fā)明了一種填數(shù)趣味游戲,這就是數(shù)獨(dú)的雛形。20世紀(jì)70年代,人們在美國紐約的一本益智雜志《Math Puzzles and Logic Problems》上發(fā)現(xiàn)了這個游戲,當(dāng)時被稱為填數(shù)字(Number Place),這也是公認(rèn)的數(shù)獨(dú)最早的見報版本。1984年一位日本學(xué)者將其介紹到了日本,發(fā)表在Nikoli公司的一本游戲雜志上,當(dāng)時起名為“數(shù)字は獨(dú)身に限る”(すうじはどくしんにかぎる),就改名為“數(shù)獨(dú)”(すうどく),其中“數(shù)”(すう)是數(shù)字的意思,“獨(dú)”(どく)是唯一的意思。后來一位前任香港高等法院的新西蘭籍法官高樂德(Wayne Gould)在1997年3月到日本東京旅游時,無意中發(fā)現(xiàn)了?[2]??。他首先在英國的《泰晤士報》上發(fā)表,不久其他報紙也發(fā)表,很快便風(fēng)靡全英國,之后他用了6年時間編寫了電腦程序,并將它放在網(wǎng)站上(這個網(wǎng)站也就是著名的數(shù)獨(dú)玩家論壇),后來因一些原因,網(wǎng)站被關(guān)閉,幸好數(shù)獨(dú)大師Glenn Fowler恢復(fù)了數(shù)據(jù),玩家論壇有了新處所。在90年代國內(nèi)就有部分的益智類書籍開始刊登,南海出版社在2005年出版了《數(shù)獨(dú)1-2》,隨后日本著名數(shù)獨(dú)制題人西尾徹也的《數(shù)獨(dú)挑戰(zhàn)》也由遼寧教育出版社出版?!侗本┩韴蟆?、《揚(yáng)子晚報》、《羊城晚報》、《新民晚報》、《成都商報》等等報紙媒體也先后刊登了數(shù)獨(dú)游戲。

基礎(chǔ)解法

排除法(摒除法)

摒除法:用數(shù)字去找單元內(nèi)唯一可填空格,稱為摒除法,數(shù)字可填唯一空格稱為排除法 (Hidden Single)。

根據(jù)不同的作用范圍,摒余解可分為下述三種:

數(shù)字可填唯一空格在「宮」單元稱為宮排除(Hidden Single in Box),也稱宮摒除法。

數(shù)字可填唯一空格在「行」單元稱為行排除法(Hidden Single in Row),也稱行摒除法。

數(shù)字可填唯一空格在「列」單元稱為列排除法(Hidden Single in Column),也稱列摒除法。

唯一余數(shù)法

唯一余數(shù)法:用格位去找唯一可填數(shù)字,稱為余數(shù)法,格位唯一可填數(shù)字稱為唯余解(Naked Single)。余數(shù)法是刪減等位群格位(Peer)已出現(xiàn)的數(shù)字的方法,每一格位的等位群格位有 20 個

python實(shí)現(xiàn)簡易數(shù)獨(dú)小游戲

?文章來源地址http://www.zghlxwxcb.cn/news/detail-448293.html

完整代碼如下:

import random
import math
import pygame
matrix = []
sds = []
 
 
def get_random_unit():
    _num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    random.shuffle(_num_list)
    return _num_list
 
 
def print_grid(arr):
    for i in range(9):
        sds.append(arr[i])
 
 
def get_row(row):
    row_arr = []
    for v in matrix[row]:
        if v == 0:
            continue
        row_arr.append(v)
    return row_arr
 
 
def get_col(col):
    col_arr = []
    for i in range(9):
        val = matrix[i][col]
        if val == 0:
            continue
        col_arr.append(matrix[i][col])
    return col_arr
 
 
def get_block(num):
    col_arr = []
    seq = num % 3
    col_end = 9 if seq == 0 else seq * 3
    row_end = int(math.ceil(num / 3) * 3)
    for i in range(row_end - 3, row_end):
        for j in range(col_end - 3, col_end):
            val = matrix[i][j]
            if val != 0:
                col_arr.append(matrix[i][j])
    return col_arr
 
 
def get_block_seq(row, col):
    col_seq = int(math.ceil((col + 0.1) / 3))
    row_seq = int(math.ceil((row + 0.1) / 3))
    return 3 * (row_seq - 1) + col_seq
 
 
def get_enable_arr(row, col):
    avail_arr = get_random_unit()
    seq = get_block_seq(row, col)
    block = get_block(seq)
    row = get_row(row)
    col = get_col(col)
    unable_arr = list(set(block + row + col))
    for v in unable_arr:
        if v in avail_arr:
            avail_arr.remove(v)
    return avail_arr
 
 
def main():
    can_num = {}
    count = 0
    
    for i in range(9):
        matrix.append([0] * 9)
 
    num_list = get_random_unit()
    for row in range(3):
        for col in range(3):
            matrix[row][col] = num_list.pop(0)
 
    num_list = get_random_unit()
    for row in range(3, 6):
        for col in range(3, 6):
            matrix[row][col] = num_list.pop(0)
 
    num_list = get_random_unit()
    for row in range(6, 9):
        for col in range(6, 9):
            matrix[row][col] = num_list.pop(0)
 
    box_list = []
    for row in range(9):
        for col in range(9):
            if matrix[row][col] == 0:
                box_list.append({'row': row, 'col': col})
 
    i = 0
    while i < len(box_list):
        count += 1
        position = box_list[i]
        row = position['row']
        col = position['col']
        key = '%dx%d' % (row, col)
        if key in can_num:
            enable_arr = can_num[key]
        else:
            enable_arr = get_enable_arr(row, col)
            can_num[key] = enable_arr
 
        if len(enable_arr) <= 0:
            i -= 1
            if key in can_num:
                del (can_num[key])
            matrix[row][col] = 0
            continue
        else:
            matrix[row][col] = enable_arr.pop()
            i += 1
 
    print_grid(matrix)
 
if __name__ == "__main__":
    main()
    
 
# --------------------華麗の分割線--------------------
 
ac_num = 0
pausE = True
difficulty = 3
 
from tkinter import *
from tkinter import ttk
import time
import pygame as py 
 
def setDiff(difF):
    global difficulty
    global diff
    try:
        difficulty = int(difF)
        diff.destroy()
    except:
        pass
diff = Tk()
diff.title('難度選擇')
diff.geometry('300x90')
diff.resizable(0,0)
Label(diff,text='選擇你要挑戰(zhàn)的難度!(0~9)',font=('微軟雅黑',9)).pack()
cmb = ttk.Combobox(diff)
cmb.pack()
cmb['value'] = (0,1,2,3,4,5,6,7,8,9)
Button(diff,text='我選好了',command=lambda:setDiff(cmb.get())).pack()
diff.mainloop()
window = Tk()
window.title('數(shù)獨(dú)')
window.geometry('390x500')
window.resizable(0,0)
begin_time = 0
steps = 0
rights = 0
wrongs = 0
dwc = difficulty*9
ac_name = None
 
list = range(1,82)
try:
    ran = random.sample(list,dwc)
except:
    if difficulty > 9:
        ran = random.sample(list,9)
    elif difficulty < 0:
        ran = random.sample(list,1)
    print('難度輸入出現(xiàn)問題 你將無法通關(guān)')
try:
    py.mixer.init()
    py.mixer.music.load('bg.mp3')
    py.mixer.music.play(-1)
except:
    print('未檢測到名為 bg.mp3  的背景音樂')
    
def setBlock(num,name):
    global begin_time
    if begin_time == 0:
        begin_time = time.time()
    global ac_name
    global ac_num
    if ac_name != name and name != None and ac_name != None:
        ac_name.config(text='?',bg='orange',activebackground='orange',relief='groove')
    if name.cget('bg') != 'green':
        name.config(text='···',relief='sunken',bg='lightblue',activebackground='lightblue')
        ac_name = name
        ac_num = num
    else:
        ac_name = None
def setNum(num):
    global ac_name
    global begin_time
    global dwc
    global ac_num
    global re
    global difficulty
    global steps
    global wrongs
    global rights
    global steP
    try:
        b_color = ac_name.cget('bg')
        if ac_num == num:
            ac_name.config(text='√',activebackground='green',relief='groove',bg='green')
        else:   
            ac_name.config(text='×',activebackground='red',relief='groove')
        ac_name.flash()
        ac_name.flash()
        if ac_num == num:
            ac_name.config(text=str(num),activebackground='green',background='green',relief='groove')
        else:
            ac_name.config(text='?',bg='orange',activebackground='orange',relief='groove')
        if ac_name.cget('bg') == 'green' and b_color == 'lightblue':
            dwc -= 1
            ac_name = None
            rights += 1
            steps += 1
        elif b_color == 'lightblue' and ac_name.cget('bg') == 'orange':
            ac_name = None
            wrongs += 1
            steps += 1
        if dwc == 0:
            ac_name = None
            print('恭喜,你贏了!')
            Label(window,text='恭喜,你贏了!',font=('微軟雅黑',30),bg='lightgreen').place(x=52,y=50)
            use_time = round(time.time()-begin_time,1)
            Label(window,text='用時'+str(use_time)+'秒  正確率'+str(round((rights/steps)*100,1))+'%',bg='yellow').place(x=113,y=121)
        re.config(text='剩余數(shù)字?jǐn)?shù)量:'+str(dwc)+' 難度等級:'+str(difficulty))
        steP.config(text='步數(shù):'+str(steps)+' 正確:'+str(rights)+' 錯誤:'+str(wrongs))
        ac_name = None
        
    except:
        pass
def tipSs():
    '''global sds
    for ynfo in sds:
        print(ynfo)'''
    global ac_num
    global ac_name
    try:
        ac_name.config(text=str(ac_num))
        ac_name.flash()
        ac_name.config(text='···')
    except:
        pass
def pauseOr(bgm):
    global pausE
    if pausE == True:
        py.mixer.music.pause()
        Button(window,text='?',font=('楷體',7),relief='sunken',bg='white',command=lambda:pauseOr(bgm)).place(x=365,y=11)
        pausE = False
    elif pausE == False:
        py.mixer.music.unpause()
        Button(window,text='?',font=('楷體',7),relief='sunken',bg='green',command=lambda:pauseOr(bgm)).place(x=365,y=11)
        pausE = True
j=0
i=0.7
_count = 1
wz = False
# 這里通過win10計算器,兩年前的項目寫出了算法
def spaceBtn(i,j,ri,rj):
    name =  'a'+str(i+1)+str(j+1)
    name = Button(window,text='?',font=('微軟雅黑',10),relief='groove',bg='orange',activebackground='orange',command=lambda:setBlock(sds[i][j],name))
    name.place(x=rj*36,y=ri*38,width=30,height=30)
def numBtn(num):
    Button(window,text=str(num),font=('楷體',15),relief='sunken',bg='white',activebackground='blue',command=lambda:setNum(num)).place(x=x*42+9,y=380,width=37,height=37)
for info in sds:
    for jnfo in info:
        j+=1
        for znfo in ran:
            if _count == znfo:
                wz = True
        _count += 1
        if wz == True:
            spaceBtn(round(i-1),j-1,i,j)
            wz = False
        else:
            Label(window,text=jnfo,font=('微軟雅黑',10),relief='ridge',bg='grey').place(x=j*36,y=i*38,width=30,height=30)
    j=0
    i+=1
for x in range(0,9):
    numBtn(x+1)
Button(window,text='提示',command=tipSs).place(x=50,y=430)
bgm = Button(window,text='?',font=('楷體',7),relief='sunken',bg='green',command=lambda:pauseOr(bgm)).place(x=365,y=11)
re = Label(window,text='剩余數(shù)字?jǐn)?shù)量:'+str(dwc)+' 難度等級:'+str(difficulty),relief='sunken')
re.place(x=185,y=470)
steP = Label(window,text='步數(shù):'+str(steps)+' 正確:'+str(rights)+' 錯誤:'+str(wrongs),relief='sunken')
steP.place(x=5,y=470)
window.mainloop()

主要外部依賴庫:tkinter,pygame

需要改動地方:? ? py.mixer.music.load('bg.mp3'),在同一目錄準(zhǔn)備自己喜歡的游戲背景音樂重命名為bg即可

游戲運(yùn)行效果如下:

下拉框選擇不同等級難度,開始游戲,點(diǎn)擊問號方塊再點(diǎn)擊下方數(shù)字即可填入

點(diǎn)擊黃色問號方塊再點(diǎn)擊提示就會顯示一秒鐘的答案,之后再填入即可

python實(shí)現(xiàn)簡易數(shù)獨(dú)小游戲python實(shí)現(xiàn)簡易數(shù)獨(dú)小游戲python實(shí)現(xiàn)簡易數(shù)獨(dú)小游戲python實(shí)現(xiàn)簡易數(shù)獨(dú)小游戲

詳細(xì)來源:

用python實(shí)現(xiàn)帶界面的數(shù)獨(dú)小游戲_eyz2022的博客-CSDN博客_python 數(shù)獨(dú)游戲

?

?

?

?

?

到了這里,關(guān)于python實(shí)現(xiàn)簡易數(shù)獨(dú)小游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于Python pygame簡易版斗獸棋小游戲源代碼

    基于Python pygame簡易版斗獸棋小游戲源代碼

    基于Python pygame簡易版斗獸棋小游戲源代碼 游戲規(guī)則如下: 勝利條件: 1.吃掉對方全部棋子 2.走入對方獸穴(不可進(jìn)入自己洞穴) 吃法: 1.象獅虎豹狼狗貓鼠象 2.同類棋子先行者吃掉對方 3.老鼠可以進(jìn)河,老鼠在河里時,岸上的動物不能捕食他,他也不能捕食岸上的動物 4.獅虎在河中沒

    2023年04月09日
    瀏覽(101)
  • 實(shí)現(xiàn)用java做一個簡易版《羊了個羊》小游戲(附源代碼)

    實(shí)現(xiàn)用java做一個簡易版《羊了個羊》小游戲(附源代碼)

    該項目是跟著這個b站視頻一步一步寫出來的,初學(xué)java有些地方我看不是很明白,但是講解很仔細(xì),大家可以看原視頻,我沒有添加背景音樂和背景圖片,做出來的效果也勉勉強(qiáng)強(qiáng)。 代碼已經(jīng)上傳到github上了,大家可以去github上直接下載代碼,附上鏈接:點(diǎn)擊進(jìn)入github源碼鏈接

    2024年02月04日
    瀏覽(220)
  • C語言簡易小游戲

    C語言簡易小游戲

    本篇博客將帶領(lǐng)大家自己動手寫一下一些C語言小游戲;以增加對于C語言的興趣?????????? 首先呢我們先來簡單介紹一下這個小游戲: 通常由兩個人玩,一方出數(shù)字,一方猜。出數(shù)字的人要想好一個沒有重復(fù)數(shù)字,不能讓猜的人知道。猜的人就可以開始猜。 如正確答案為

    2024年02月07日
    瀏覽(25)
  • 純c++簡易的迷宮小游戲

    純c++簡易的迷宮小游戲

    一個用c++寫的黑框框迷宮 適合新手入門學(xué)習(xí) 也適合大學(xué)生小作業(yè) 下面附上代碼 初始化游戲界面:設(shè)置迷宮的大?。╓IDTH和HEIGH),生成迷宮地圖(map),包括墻壁、空地、起點(diǎn)和終點(diǎn)。 顯示歡迎界面和游戲規(guī)則:通過Welcome()函數(shù)和Rule()函數(shù)分別實(shí)現(xiàn)。 開始計時:記錄游戲開

    2024年01月17日
    瀏覽(23)
  • Java制作“簡易王者榮耀”小游戲

    Java制作“簡易王者榮耀”小游戲

    第一步是創(chuàng)建項目?項目名自擬 第二部創(chuàng)建個包名?來規(guī)范class 然后是創(chuàng)建類 GameFrame? ?運(yùn)行類 運(yùn)行結(jié)果如下:

    2024年02月04日
    瀏覽(24)
  • python小游戲 拼圖小游戲設(shè)計與實(shí)現(xiàn)

    python小游戲 拼圖小游戲設(shè)計與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項目作品 python小游戲畢設(shè) 拼圖小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 游戲規(guī)則: 將圖像

    2024年02月08日
    瀏覽(27)
  • python小游戲 2048小游戲設(shè)計與實(shí)現(xiàn)

    python小游戲 2048小游戲設(shè)計與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項目作品 python小游戲畢設(shè) 2048小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 今天我們用python實(shí)現(xiàn)

    2024年02月11日
    瀏覽(19)
  • python小游戲 消消樂小游戲設(shè)計與實(shí)現(xiàn)

    python小游戲 消消樂小游戲設(shè)計與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項目作品 python小游戲畢設(shè) 消消樂小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 利用python制作的

    2024年02月01日
    瀏覽(28)
  • python小游戲 打地鼠小游戲設(shè)計與實(shí)現(xiàn)

    python小游戲 打地鼠小游戲設(shè)計與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項目作品 python小游戲畢設(shè) 打地鼠小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 打地鼠的游戲規(guī)

    2024年02月06日
    瀏覽(26)
  • python小游戲 滑雪小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    python小游戲 滑雪小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項目作品 python小游戲畢設(shè) 滑雪小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 我們利用python制作

    2024年02月04日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包