人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)
Python五子棋小游戲?qū)嵗窒?/h1>
發(fā)布日期:2022-01-22 13:36 | 文章來源:站長之家

本文實例為大家分享了Python實現(xiàn)五子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下

使用的庫

pygame、pyautogui

流程簡述

1.畫棋盤

設(shè)置網(wǎng)格間隔40px ,留白 80 px ,與網(wǎng)格橫豎線數(shù)量 ,初定19 × 19 。

2.鼠標點擊

鼠標點擊取得坐坐標(x0 , y0),再獲得最近的網(wǎng)格上的點(x1 , y1),再將每次動作獲得的(x1 , y1 )放入列表 chess_location 中。

再通過:

chess_location_b = chess_location[0::2]
chess_location_w = chess_location[1::2]

分別獲得黑棋和白棋所走過的坐標。

3.判斷勝負

這一塊網(wǎng)上有很多不同的方法,我為了讓大家讀懂盡量寫的詳細了。
首先 ,我們要知道連五有四個方向:豎直 ,水平 ,右上左下 , 右下左上 。
每次將新落下的子分別進行4個方向的判斷,判斷是否出現(xiàn)連五及以上。
我使用的方法是:

def result(x): # x 為 chess_location_b 或者 chess_location_w
 # 豎直
 score = []
 for i in range(cell_num): #cell_num = 19
  if [x[-1][0], i ] in x:
score.append([x[-1][0], i ])
if score.__len__() >= 5:
 return 1
  else:
score =[]

大概意思就是最新落下的(x1 , y1)中的豎直方向從上往下檢查如果出現(xiàn)黑(白)棋 ,則將出現(xiàn)棋子的坐標加入列表 score 中 , 如果出現(xiàn)異色棋子或者沒有棋子,則清空 score 中的元素 ,如果列表 score 中的元素數(shù)量大于等于5個 ,則分勝負 。
如果棋子填滿棋盤但是仍沒有分出勝負 ,則平局 。

代碼及結(jié)果

代碼

import pygame,pyautogui
from pygame.locals import *
# 初始參數(shù)
cell_size = 40
space = 80
cell_num = 19
grid_size = (cell_num - 1)*cell_size + space*2
screen = pygame.display.set_mode([grid_size,grid_size],0,32)
chess_location , chess_location_w , chess_location_b = [] , [] , []
# 畫棋盤
def grid():
 screen.fill([208,173,108])
 font = pygame.font.SysFont("arial", 20)
 i = 0
 for x in range(0, cell_size * cell_num , cell_size):
  i += 1
  text_surface = font.render("{}".format(i), True, (0, 0, 0))
  screen.blit(text_surface,[(space - font.get_height()) - 10,(space - font.get_height()/2) + cell_size*(i -1 )])
  pygame.draw.line(screen, (0, 0, 0), (x + space, 0 + space), (x + space, cell_size * (cell_num - 1) + space), 2)
 i = 0
 for y in range(0, cell_size * cell_num, cell_size):
  i += 1
  text_surface = font.render("{}".format(chr(64 + i)), True, (0, 0, 0))
  screen.blit(text_surface,[(space + cell_size * (i - 1)) -5, (space - font.get_height() / 2) - 20])
  pygame.draw.line(screen, (0,0,0), (0 + space, y + space),(cell_size * (cell_num - 1) + space, y + space), 2)
# 分勝負
def result(x):
 # 豎直
 score = []
 for i in range(cell_num):
  if [x[-1][0], i ] in x:
score.append([x[-1][0], i ])
if score.__len__() >= 5:
 return 1
  else:
score =[]
 # 水平
 score = []
 for i in range(cell_num):
  if [i , x[-1][1]] in x:
score.append([i , x[-1][1]])
if score.__len__() >= 5:
 return 1
  else:
score = []
 # 右上左下
 score = []
 for i in range(cell_num):
  if [i,x[-1][0] + x[-1][1] - i] in x:
score.append([i,x[-1][0] + x[-1][1] - i])
if score.__len__() >= 5:
 return 1
  else:
score = []
 # 右下左上
 score = []
 for i in range(cell_num):
  if [x[-1][0] - x[-1][1] + i,i] in x:
score.append([x[-1][0] - x[-1][1] + i,i])
if score.__len__() >= 5:
 return 1
  else:
score = []
 # 平局
 if chess_location.__len__() == cell_num * cell_num :
  return 2
# 主循環(huán)
def running():
 global chess_location_w , chess_location_b
 while True:
  grid()
  for event in pygame.event.get():
if event.type == QUIT:
 exit()
# 落子
if event.type == MOUSEBUTTONDOWN:
 x0 , y0 = pygame.mouse.get_pos()
 if x0 > space and y0 > space and x0 < space + cell_size*(cell_num - 1) and y0 < space + cell_size * (cell_num - 1):
  x1 = round((x0 - space) / cell_size)
  y1 = round((y0 - space) / cell_size)
  if [x1 , y1] not in chess_location:chess_location.append([x1 , y1])
# 悔棋
elif event.type == KEYDOWN:
 if event.key == K_LEFT:
  chess_location.pop(-1)
  chess_location_b = chess_location[0::2]
  chess_location_w = chess_location[1::2]
  # 黑棋
  for i in chess_location_b:
pygame.draw.circle(screen, [ 0 , 0 , 0 ], [i[0]* cell_size + space, i[1]* cell_size + space], 15, 0)
  # 白棋
  for i in chess_location_w:
pygame.draw.circle(screen, [255,255,255], [i[0]* cell_size + space, i[1]* cell_size + space], 15, 0)
  # 判斷勝負
  if chess_location_b and result(chess_location_b) == 1:
pyautogui.alert(text='黑棋勝',title='游戲結(jié)束')
exit()
  elif chess_location_w and result(chess_location_w) == 1:
pyautogui.alert(text='白棋勝',title='游戲結(jié)束')
exit()
  elif chess_location_b and chess_location_w:
if result(chess_location_b) or result(chess_location_w) == 2:
 pyautogui.alert(text='平局', title='游戲結(jié)束')
 exit()
  pygame.display.update()

if __name__ == '__main__':
 pygame.init()
 running()

輸出

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持本站。

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關(guān)注
微信

關(guān)注官方微信
頂部