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

Pygame 五子棋編程

這篇具有很好參考價(jià)值的文章主要介紹了Pygame 五子棋編程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

編程說(shuō)明:?pygame編程五子棋程序。

設(shè)計(jì)流程:新建棋盤,落子畫圓,校驗(yàn)五子相連,贏家信息顯示,自動(dòng)重啟下一局,程序打包成exe。

關(guān)鍵點(diǎn)

????新建棋盤:考慮線的間隔,需提前計(jì)算好。

? ??落子畫圓:考慮黑白交替,已落子坐標(biāo)位不可重復(fù)落子。

? ? 校驗(yàn)五子相連:分成橫、豎、左斜、右斜四個(gè)方向的相連,其中如果第一個(gè)為白子,第二個(gè)不為同色的白子,則列表清零重新計(jì)算,當(dāng)列表出現(xiàn)五子相連即列表長(zhǎng)度出現(xiàn)5個(gè)值,則跳出循環(huán),提示贏家信息。

? ? 贏家信息顯示:先提前獲取系統(tǒng)字體簡(jiǎn)稱,設(shè)定正確的字體,否則中文顯示為方框設(shè)定函數(shù)為pygame.font.SysFont("simhei",25)。

????程序打包成exe:準(zhǔn)備.ico圖標(biāo),使用指令在cmd框下執(zhí)行Pyinstaller -F -w -i wzq.ico wzq.py 指定icon圖標(biāo)進(jìn)行打包,在cmd黑框查看生成文件路徑,找到生成的exe文件即可,坑為Pyinstaller確認(rèn)為最新版本,版本過(guò)舊會(huì)報(bào)錯(cuò)導(dǎo)致打包失敗,pip升級(jí)或者卸載重裝即可。

參考鏈接:

1.pygame基礎(chǔ)教程

https://blog.csdn.net/qq_40801987/article/details/121506910

2.Python Pygame制作簡(jiǎn)單五子棋游戲(詳細(xì)代碼+解釋)

https://blog.csdn.net/weixin_43918046/article/details/119521845?spm=1001.2014.3001.5506

3.python中的tkinter庫(kù)彈窗messagebox詳解

https://www.jb51.net/article/216076.htm

4.pygame在屏幕上顯示中文的方法

https://www.jianshu.com/p/eeea79aaf4b8

5.pygame基礎(chǔ)語(yǔ)法

https://www.cnblogs.com/liuzhongkun/p/16165288.html

效果展示

Pygame 五子棋編程

Pygame 五子棋編程

程序詳情

# encoding:utf-8

#調(diào)用pygame庫(kù)

import pygame

import sys

#調(diào)用常用關(guān)鍵字常量,例當(dāng)產(chǎn)生 KEYDOWN 或 KEYUP 事件時(shí),key 屬性描述具體哪個(gè)按鍵被按下

from pygame.locals import QUIT,KEYDOWN

import numpy as np

# from tkinter import *

# from tkinter import messagebox? #一方獲勝后彈出面板,第二種顯示樣式

#判斷鼠標(biāo)的落點(diǎn)

def find_pos(x,y):

? ? for i in range(27,670,44):

? ? ? ? for j in range(27,670,44):

? ? ? ? ? ? L1=i-22

? ? ? ? ? ? L2=i+22

? ? ? ? ? ? R1=j-22

? ? ? ? ? ? R2=j+22

? ? ? ? ? ? if x>=L1 and x<=L2 and y>=R1 and y<=R2:

? ? ? ? ? ? ? ? return i,j

? ? return x,y

#已落子不可以重復(fù)落子

def check_over_pos(x,y,over_pos):

? ? for val in over_pos:

? ? ? ? if val[0][0]==x and val[0][1]==y:

? ? ? ? ? ? return False? #表示已落子

? ? return True #表示沒(méi)有落子

#判斷五子連心

def check_win(over_pos):

? ? mp=np.zeros([15,15],dtype=int)

? ? for val in over_pos:

? ? ? ? x=int((val[0][0]-27)/44)

? ? ? ? y=int((val[0][1]-27)/44)

? ? ? ? if val[1]==white_color: #通過(guò)顏色判斷白子

? ? ? ? ? ? mp[x][y]=2#表示白子

? ? ? ? else:

? ? ? ? ? ? mp[x][y]=1#表示黑子

? ? for i in range(15): #查看有沒(méi)豎型五子相連。例橫坐標(biāo)為0,查看縱坐標(biāo)是否有五子相連的白子或者黑子

? ? ? ? pos1=[]

? ? ? ? pos2=[]

? ? ? ? for j in range(15):

? ? ? ? ? ? if mp[i][j]==1:? #把黑子保存到列表post1

? ? ? ? ? ? ? ? pos1.append([i,j])

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? pos1=[] #關(guān)鍵點(diǎn),如果下次循環(huán)不為白色,則列表情空,重新計(jì)算,保證只有五子相連才保存列表,下面橫豎左斜右斜計(jì)算同理。

? ? ? ? ? ? if mp[i][j]==2: #把白子保存到列表post2

? ? ? ? ? ? ? ? pos2.append([i,j]) #關(guān)鍵點(diǎn),如果下次循環(huán)不為黑色,則列表情空,重新計(jì)算,保證只有五子相連才保存列表下面橫豎左斜右斜計(jì)算同理。

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? pos2=[]

? ? ? ? ? ? if len(pos1)>=5: #五子連心

? ? ? ? ? ? ? ? return(1,pos1)

? ? ? ? ? ? if len(pos2)>=5:

? ? ? ? ? ? ? ? return [2,pos2]

? ? for j in range(15): #查看有沒(méi)橫型五子相連。例豎坐標(biāo)為0,查看橫坐標(biāo)是否有五子相連的白子或者黑子

? ? ? ? pos1=[]

? ? ? ? pos2=[]

? ? ? ? for i in range(15):

? ? ? ? ? ? if mp[i][j]==1:

? ? ? ? ? ? ? ? pos1.append([i,j])

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? pos1=[]

? ? ? ? ? ? if mp[i][j]==2:

? ? ? ? ? ? ? ? pos2.append([i,j])

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? pos2=[]

? ? ? ? ? ? if len(pos1)>=5:

? ? ? ? ? ? ? ? return(1,pos1)

? ? ? ? ? ? if len(pos2)>=5:

? ? ? ? ? ? ? ? return [2,pos2]

? ? for i in range(15): #查看有沒(méi)左斜型五子相連。

? ? ? ? for j in range(15):

? ? ? ? ? ? pos1=[]

? ? ? ? ? ? pos2=[]

? ? ? ? ? ? for k in range(15):

? ? ? ? ? ? ? ? if i+k>=15 or j+k>=15:

? ? ? ? ? ? ? ? ? ? break

? ? ? ? ? ? ? ? if mp[i+k][j+k]==1:

? ? ? ? ? ? ? ? ? ? pos1.append([i+k,j+k])

? ? ? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? ? pos1=[]

? ? ? ? ? ? ? ? if mp[i+k][j+k]==2:

? ? ? ? ? ? ? ? ? ? pos2.append([i+k,j+k])

? ? ? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? ? pos2=[]

? ? ? ? ? ? ? ? if len(pos1)>=5:

? ? ? ? ? ? ? ? ? ? return(1,pos1)

? ? ? ? ? ? ? ? if len(pos2)>=5:

? ? ? ? ? ? ? ? ? ? return [2,pos2]

? ? for i in range(15): #查看有沒(méi)右斜型五子相連。

? ? ? ? for j in range(15):

? ? ? ? ? ? pos1=[]

? ? ? ? ? ? pos2=[]

? ? ? ? ? ? for k in range(15):

? ? ? ? ? ? ? ? if i+k>=15 or j-k<0:

? ? ? ? ? ? ? ? ? ? break

? ? ? ? ? ? ? ? if mp[i+k][j-k]==1:

? ? ? ? ? ? ? ? ? ? pos1.append([i+k,j-k])

? ? ? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? ? pos1=[]

? ? ? ? ? ? ? ? if mp[i+k][j-k]==2:

? ? ? ? ? ? ? ? ? ? pos2.append([i+k,j-k])

? ? ? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? ? pos2=[]

? ? ? ? ? ? ? ? if len(pos1)>=5:

? ? ? ? ? ? ? ? ? ? return(1,pos1)

? ? ? ? ? ? ? ? if len(pos2)>=5:

? ? ? ? ? ? ? ? ? ? return [2,pos2]

? ? return [0,[]]

#獲勝信息 一方獲勝后在(250,0)坐標(biāo)顯示獲勝信息

def message_rt(message_text):

? ? # fonts=pygame.font.get_fonts()

? ? # print(fonts) #查看系統(tǒng)字體

? ? text=pygame.font.SysFont("simhei",25) #坑,中文顯示都是方框

? ? print(message_text)

? ? print(message_text.encode("utf-8"))

? ? text_fmt=text.render(message_text,1,(255,0,0))

? ? screen.blit(text_fmt,(250,0))

while True:? #一局結(jié)束重新開(kāi)始下一局

? ? #初始化pygame

? ? pygame.init()

? ? #窗口創(chuàng)建

? ? #獲取對(duì)顯示系統(tǒng)的訪問(wèn),并創(chuàng)建一個(gè)窗口screen

? ? #窗口大小為670x670

? ? screen=pygame.display.set_mode((670,670))

? ? screen_color=[255,165,79] #背景顏色,[255,165,79]對(duì)應(yīng)為棕色

? ? line_color=[0,0,0] #線條顏色,[0,0,0]對(duì)應(yīng)黑色

? ? flag=False

? ? tm=0

? ? over_pos=[]

? ? white_color=[255,255,255]

? ? black_color=[0,0,0]

? ? while True: #不斷訓(xùn)練刷新畫布

? ? ? ? for event in pygame.event.get(): #獲取事件,如果鼠標(biāo)點(diǎn)擊右上角關(guān)閉按鈕,關(guān)閉

? ? ? ? ? ? if event.type in (QUIT,KEYDOWN):

? ? ? ? ? ? ? ? pygame.quit()

? ? ? ? ? ? ? ? sys.exit()

? ? ? ? screen.fill(screen_color)? #清屏,重新開(kāi)始

? ? ? ? #畫棋盤

? ? ? ? for i in range(27,670,44):

? ? ? ? ? ? #先畫豎線

? ? ? ? ? ? if i==27 or i==670-27: #邊緣線稍微粗一些

? ? ? ? ? ? ? ? pygame.draw.line(screen,line_color,[i,27],[i,670-27],4)

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? pygame.draw.line(screen,line_color,[i,27],[i,670-27],2)

? ? ? ? ? ? #先畫橫線

? ? ? ? ? ? if i==27 or i==670-27: #邊緣線稍微粗一些

? ? ? ? ? ? ? ? pygame.draw.line(screen,line_color,[27,i],[670-27,i],4)

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? pygame.draw.line(screen,line_color,[27,i],[670-27,i],2)

? ? ? ? #在棋盤中心畫個(gè)小圓表示正中心位置

? ? ? ? pygame.draw.circle(screen,line_color,[27+44*7,27+44*7],8,0)

? ? ? ? for val in over_pos: #顯示所有落下的棋子

? ? ? ? ? ? pygame.draw.circle(screen,val[1],val[0],20,0)

? ? ? ? #判斷是否存在五子連心

? ? ? ? res=check_win(over_pos)

? ? ? ? if res[0]!=0:

? ? ? ? ? ? for pos in res[1]:

? ? ? ? ? ? ? ? pygame.draw.rect(screen,[238,48,167],[pos[0]*44+27-22,pos[1]*44+27-22,44,44],2,5)

? ? ? ? ? ? pygame.display.update()? #刷新顯示,需要刷新后在界面顯示變化

? ? ? ? if res[0]==2:

? ? ? ? ? ? # Tk().wm_withdraw()

? ? ? ? ? ? # messagebox.showinfo("白棋獲勝","恭喜白棋一方獲勝")

? ? ? ? ? ? message_rt(u"恭喜白棋一方獲勝")? #贏家信息顯示

? ? ? ? ? ? pygame.display.update()

? ? ? ? ? ? pygame.time.wait(1000)

? ? ? ? ? ? break? #游戲結(jié)束,停止下面的操作

? ? ? ? elif res[0]==1:

? ? ? ? ? ? # Tk().wm_withdraw()

? ? ? ? ? ? # messagebox.showinfo("黑棋獲勝","恭喜黑棋一方獲勝")

? ? ? ? ? ? message_rt(u"恭喜黑棋一方獲勝") #贏家信息顯示

? ? ? ? ? ??pygame.display.update()

? ? ? ? ? ? pygame.time.wait(1000)

? ? ? ? ? ? break? #游戲結(jié)束,停止下面的操作

? ? ? ? #獲取鼠標(biāo)的坐標(biāo),調(diào)用函數(shù)find_pos,判斷是否可以落子

? ? ? ? x,y=pygame.mouse.get_pos()

? ? ? ? x,y=find_pos(x,y)

? ? ? ? pygame.draw.rect(screen,[0,229,238],[x-22,y-22,44,44],2,1)

? ? ? ? #鼠標(biāo)左鍵表示落子,tm用來(lái)延時(shí)的,因?yàn)槊看窝h(huán)時(shí)間間隔很斷,容易導(dǎo)致明明只按了一次左鍵,卻被多次獲取,認(rèn)為我按了多次

? ? ? ? keys_pressed=pygame.mouse.get_pressed() #獲取鼠標(biāo)按鍵信息

? ? ? ? if keys_pressed[0] and tm ==0:

? ? ? ? ? ? flag=True

? ? ? ? ? ? if check_over_pos(x,y,over_pos):

? ? ? ? ? ? ? ? if len(over_pos)%2==0:

? ? ? ? ? ? ? ? ? ? over_pos.append([[x,y],black_color])

? ? ? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? ? over_pos.append([[x,y],white_color])

? ? ? ? #鼠標(biāo)左鍵的延時(shí)作用

? ? ? ? if flag:

? ? ? ? ? ? tm +=1

? ? ? ? if tm%20==0:? #延遲時(shí)間設(shè)定20ms

? ? ? ? ? ? flag=False

? ? ? ? ? ? tm=0

? ? ? ? for val in over_pos:

? ? ? ? ? ? pygame.draw.circle(screen,val[1],val[0],20,0)

? ? ? ? pygame.display.update()

? ? ?程序打包為exe

準(zhǔn)備.ico圖標(biāo)和上面py文件,cmd輸入指令,然后執(zhí)行完成后找到對(duì)應(yīng)exe保存路徑即可。

Pygame 五子棋編程

Pygame 五子棋編程

Pygame 五子棋編程

Pygame 五子棋編程

1人點(diǎn)贊

技術(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-477644.html

到了這里,關(guān)于Pygame 五子棋編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • python五子棋代碼最簡(jiǎn)單的,python五子棋代碼能復(fù)制

    python五子棋代碼最簡(jiǎn)單的,python五子棋代碼能復(fù)制

    本篇文章給大家談?wù)刾ython五子棋代碼紅方藍(lán)方,以及python五子棋代碼最簡(jiǎn)單的,希望對(duì)各位有所幫助,不要忘了收藏本站喔。 開(kāi)端 畫棋盤 首先肯定是要畫出棋盤來(lái),用? pygame ?畫出一個(gè) 19 × 19 或 15 × 15 的棋盤并不是什么難事,這在之前的文章中已經(jīng)多次用到,就不贅述了

    2024年03月13日
    瀏覽(26)
  • python五子棋代碼最簡(jiǎn)單的,python五子棋代碼手機(jī)版

    python五子棋代碼最簡(jiǎn)單的,python五子棋代碼手機(jī)版

    大家好,本文將圍繞python五子棋代碼最簡(jiǎn)單的展開(kāi)說(shuō)明,python五子棋代碼手機(jī)版是一個(gè)很多人都想弄明白的事情,想搞清楚python五子棋代碼畫棋盤需要先了解以下幾個(gè)事情。 【實(shí)例簡(jiǎn)介】 【實(shí)例截圖】 【核心代碼】 \\\"\\\"\\\"五子棋之人機(jī)對(duì)戰(zhàn)\\\"\\\"\\\" import sys import random import pygame from

    2024年01月19日
    瀏覽(29)
  • 中秋時(shí)節(jié)賞明月,五子棋戲月餅趣 — Flutter中秋限定版五子棋

    中秋時(shí)節(jié)賞明月,五子棋戲月餅趣 — Flutter中秋限定版五子棋

    前言 當(dāng)中秋時(shí)節(jié)來(lái)臨,我們都期待著與親人朋友共度這個(gè)美好的節(jié)日。這個(gè)時(shí)候,除了傳統(tǒng)的賞月和品嘗美味的月餅,我還有一個(gè)特別的建議——嘗試一款有趣的Flutter五子棋游戲!這款五子棋游戲以中秋為主題,游戲的棋子也可愛(ài)地模仿了月餅和玉兔的形狀,讓我們?cè)谶@個(gè)

    2024年02月06日
    瀏覽(24)
  • 五子棋游戲

    五子棋游戲

    一。畫出棋盤x和y? 橫和豎個(gè)15條線,畫出中央的小點(diǎn) 二,創(chuàng)建列表,計(jì)算出x和y的當(dāng)前坐標(biāo)的位置,且存儲(chǔ)二維列表的值,畫出圓形白色棋子 三.黑白棋子交替出現(xiàn) 四,提示已經(jīng)被其他棋子占領(lǐng)了,不能重復(fù)占領(lǐng) 五。創(chuàng)建檢測(cè)五子相連的函數(shù)? def? check 六.,實(shí)現(xiàn)水平向左和

    2024年02月05日
    瀏覽(22)
  • Python實(shí)現(xiàn)五子棋

    Python實(shí)現(xiàn)五子棋

    我認(rèn)為這個(gè)五子棋核心還是在于二維數(shù)組,將實(shí)際當(dāng)中鼠標(biāo)點(diǎn)擊的物理位置轉(zhuǎn)換到棋盤中的邏輯地址,之后便用數(shù)組的方法進(jìn)行操作,例如檢測(cè)是否獲勝,電腦下棋策略等。 是否可落子 是否有輸贏 每次標(biāo)記最新下棋的位置即可 電腦下棋 策略:主要根據(jù)一個(gè)網(wǎng)上的經(jīng)驗(yàn)評(píng)分

    2024年02月06日
    瀏覽(22)
  • 五子棋(Python實(shí)現(xiàn))

    2024年02月11日
    瀏覽(18)
  • python實(shí)現(xiàn)《五子棋》

    python實(shí)現(xiàn)《五子棋》

    ? ? ? ? 今天突然心血來(lái)潮,想全程自己寫一個(gè)小游戲(畢竟對(duì)于一個(gè)才接觸python不到一個(gè)月的小白來(lái)說(shuō),還是比較為難,雖然不算是完全成功,因?yàn)槠灞P大小和布局還是借鑒了其它博主的,但這都是小問(wèn)題,重要是其它的都是自己寫的嘛?。。。ㄟ?,這小編真能扯,還不上

    2024年02月12日
    瀏覽(21)
  • 在線五子棋對(duì)戰(zhàn)

    在線五子棋對(duì)戰(zhàn)

    目錄 ? 數(shù)據(jù)管理模塊(數(shù)據(jù)庫(kù)設(shè)計(jì)) 前端界面模塊 業(yè)務(wù)處理模塊 會(huì)話管理模塊網(wǎng)絡(luò)通信模塊(session,cookie) 在線管理模塊 房間管理模塊 用戶匹配模塊 項(xiàng)目擴(kuò)展 數(shù)據(jù)庫(kù)中有可能存在很多張表,每張表中管理的數(shù)據(jù)?有不同,要進(jìn)?的數(shù)據(jù)操作也各不相同,因此我們可以為每?

    2024年02月14日
    瀏覽(18)
  • C++制作五子棋

    C++制作五子棋

    正文 01 思路 我沒(méi)有選擇專業(yè)的五子棋棋型,用我自己的邏輯(初高中玩五子棋的方法),去實(shí)現(xiàn)簡(jiǎn)單的人機(jī)對(duì)戰(zhàn)。 首先因?yàn)橐?jì)算五子棋每一步的分?jǐn)?shù),那么你就要分析每一步形成的棋盤,以下圖為例: 當(dāng)你即將在紅色方框區(qū)域內(nèi)落子時(shí),通過(guò)數(shù)據(jù)處理獲取四個(gè)方向的棋子

    2024年02月11日
    瀏覽(16)
  • 鴻蒙小案例-五子棋

    鴻蒙小案例-五子棋

    剛開(kāi)始以為挺簡(jiǎn)單的,越寫越…emo 因?yàn)榇a有點(diǎn)多,所以這里就簡(jiǎn)單講下邏輯,文末貼上代碼 邏輯只是我個(gè)人想的,不代表只有這一種實(shí)現(xiàn)方式,有其他想法可以在下面留言 另外功能做的比較簡(jiǎn)單,有一些沒(méi)實(shí)現(xiàn),但是基本功能都有,大家可以自行優(yōu)化 組件就比較簡(jiǎn)單,采

    2024年02月21日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包