程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python】Pygame學習制作五子棋筆記

編輯:Python

前幾天突發奇想做一個五子棋,但是技術儲備不足,於是就在C站找資料,於是我就借鑒大佬做的五子棋,根據其思路,我做的一些筆記。

目錄

一,棋盤的繪制

1.窗口

 2.網格

3.星位

二,游戲功能介紹

1.下棋

2.勝利的判斷

三,勝利提示

1.棋子上的顯示

2.勝利提示窗口


大佬的代碼寫的已經很詳細了,我就不全拿出來,點擊下方鏈接查看全部代碼。 

Python Pygame制作簡單五子棋游戲(詳細代碼+解釋)_Guapifang的博客-CSDN博客_簡單python五子棋代碼https://blog.csdn.net/weixin_43918046/article/details/119521845?spm=1001.2014.3001.5506

一,棋盤的繪制

1.窗口

這是用代碼寫出來的UI 

# 創建窗體
screen = pygame.display.set_mode((670, 670))
# 背景板顏色
Checkerboard_Color = (0xE3, 0x92, 0x65)

 

 2.網格

棋盤上的線條是通過循環和if條件語句繪制而成

for循環繪制網格線,if條件語句則是讓邊緣線加粗。

# 畫邊緣線
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)
# 邊框內線 起點、終點、步長
for i in range(32, 670, 605):
pygame.draw.line(screen, line_color, [i, 27], [i, 670 - 27], 2)
pygame.draw.line(screen, line_color, [27, i], [670 - 27, i], 2)

3.星位

 之前不懂這是什麼意思,後來C站學習Pygame的基礎,知道這句話的意思是畫圓。

 # 在棋盤中心畫個小圓表示正中心位置 位置 半徑、線厚度
pygame.draw.circle(screen, line_color, [27 + 44 * 7, 27 + 44 * 7], 8, 10)
# 設置四個角落的標點
# 左上
pygame.draw.circle(screen, line_color, [27 + 44 * 3, 27 + 44 * 3], 6, 10)
# 右上
pygame.draw.circle(screen, line_color, [27 + 44 * 11, 27 + 44 * 11], 6, 10)
# 左下
pygame.draw.circle(screen, line_color, [27 + 44 * 3, 27 + 44 * 11], 6, 10)
# 右下
pygame.draw.circle(screen, line_color, [27 + 44 * 11, 27 + 44 * 3], 6, 10)

二,游戲功能介紹

1.下棋

把鼠標設置為一個圓圈,讓下棋的人看起來跟直觀,不容易下錯地方。

# 獲取鼠標坐標信息
x, y = pygame.mouse.get_pos()
x, y = find_pos(x, y)

 棋盤上沒有棋子的時候圓圈是黑色,有棋子的時候變成了白色。

# 把鼠標設置成圓圈
if check_over_pos(x, y, over_pos):
# 顏色 確定位置 長度、寬度、線厚度、圓角度
pygame.draw.rect(screen, [0, 0, 30], [x - 22, y - 22, 44, 44], 3, 20)
# 有棋子後顏色變白
else:
pygame.draw.rect(screen, [224, 224, 223], [x - 22, y - 22, 44, 44], 3, 20)

 定義棋子的顏色

# 白棋顏色
white_color = [244, 244, 244]
# 黑棋顏色
black_color = [10, 10, 10]

2.勝利的判斷

勝利的判斷是通過設置四個方向的條件,來判定輸贏。下面是我拿出一方向來解釋。


# zeros(shape, dtype=float)
# 數據類型對象為整數
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:
mp[x][y] = 2 # 表示白子
else:
mp[x][y] = 1 # 表示黑子
# 向右傾斜連線
# i代表豎直,j代表豎直方向
#用循環嵌套來同時判定水平和豎直方向棋子的位置。
for i in range(15):
for j in range(15):
pos1 = []
pos2 = []
for k in range(15):
# 豎直方向+1,豎直方向向左+1
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]

三,勝利提示

1.棋子上的顯示

如圖所示,連起來的五個棋子周圍會顯示方框提示。

# 獲勝後顯示 顏色 確定位置 長度、寬度、厚度、圓角
pygame.draw.rect(screen, [0, 0, 153], [pos[0] * 44 + 27 - 22, pos[1] * 44 + 27 - 22, 44, 44], 2, 5)

2.勝利提示窗口

這個代碼我在C站找了很久都沒有找到,最後是我的老師告訴我這串代碼。

# 首先在代碼最前面導入tkiner
from tkinter import *
from tkinter import messagebox
#代表白色棋子
if val[1] == white_color:
Tk().wm_withdraw()
messagebox.showinfo('白棋獲勝', '恭喜白棋一方獲勝')
else:
Tk().wm_withdraw()
messagebox.showinfo('黑棋獲勝', '恭喜黑棋一方獲勝')

 喜歡的話,請留下你的贊美。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved