日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pygame 整活五子棋

發布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pygame 整活五子棋 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很早之前寫了一個類似的五子棋,沒有做到pygame里面,閑著沒事給整過來了,主要就是加了一個鼠標映射坐標。

表情被錘會變臉。

設置的0積分不知道能不能下載

https://download.csdn.net/download/ChillingKangaroo/82109145

代碼不多,主要是由幾個圖片

import pygame as pg import math import time import randomclass Tile(): def __init__(self,grid_size,screen_size,x,y): #一個坐標單位self.x,self.y = x,yself.grid_size = grid_sizeself.rectangle = (self.x*tile_size[0]+50,self.y*tile_size[1]+50,tile_size[0],tile_size[1])self.points = [ [(0.5+self.x)*tile_size[0]+50,self.y*tile_size[1]+50], #upper middle[(0.5+self.x)*tile_size[0]+50,(self.y+1)*tile_size[1]+50], #lower middle[(self.x)*tile_size[0]+50,(self.y+0.5)*tile_size[1]+50], #middle left right[(self.x+1)*tile_size[0]+50,(self.y+0.5)*tile_size[1]+50], #middle right] self.chess = Nonedef draw(self,color = (255,253,150),line_color = (150,175,255)): #x,y represents the tile coordinates pg.draw.rect(screen,color,self.rectangle)pg.draw.line(screen,line_color,(self.points[0]),(self.points[1]),3)pg.draw.line(screen,line_color,(self.points[2]),(self.points[3]),3)if self.chess != None:screen.blit(chess[self.chess],((self.x+0.3)*tile_size[0] + 50, (self.y+0.3)*tile_size[1] + 50))pg.display.update()def draw_chessboard():screen.fill((255,255,255))for y in range(grid_size[1]):for x in range(grid_size[0]):matrix[y][x].draw()def get_clicked_tile():x_,y_ = pg.mouse.get_pos() #pixel coordinatesx = int((x_-50)/tile_size[0]) if int((x_-50)) >= 0 else -1y = int((y_-50)/tile_size[1]) if int((y_-50)) >= 0 else -1return x,ydef check_win(x,y):directions = [[(-1,0),(1,0)],[(0,-1),(0,1)],[(-1,1),(1,-1)],[(-1,-1),(1,1)]] #x,yfor line in directions:depth=0 for dx,dy in line:tempx = dxtempy = dyif x+dx in range(grid_size[0]) and y+dy in range(grid_size[1]):while matrix[y+dy][x+dx].chess == matrix[y][x].chess and depth <= 5:depth += 1if depth == 4:return matrix[y][x].chessdx += tempxdy += tempyif x+dx not in range(grid_size[0]) or y+dy not in range(grid_size[1]):breakdef display_score():global turnplayer1_won_text = font.render(f': {player_won[0]}', True, (0,0,0), (255,255,255))player2_won_text = font.render(f': {player_won[1]}', True, (0,0,0), (255,255,255))turn_text = font.render(f'Turns: {turn} ', True, (0,0,0), (255,255,255))screen.blit(player1_won_text,(1000,120))screen.blit(player2_won_text,(1000,220))screen.blit(chess_scoreboard[0],(900,100))screen.blit(chess_scoreboard[1],(900,200))screen.blit(turn_text,(900,300))pg.display.update()def game_over_animation():for x in range(grid_size[0]+1):for y in range(grid_size[1]):if x +1 < grid_size[0]:matrix[y][x+1].chess = 2 if matrix[y][x+1].chess != None else Nonematrix[y][x+1].draw()if x < grid_size[0]:matrix[y][x].chess = 3matrix[y][x].draw()if x > 0:matrix[y][x-1].chess = Nonematrix[y][x-1].draw()time.sleep(0.05)#================================initialize parameter=================================== chess_color = [(0,0,0),(255,255,255)] screen_size = [1200,800] chess_size = [800,800] grid_size = [15,15] tile_size = [(chess_size[0]-100)/grid_size[0],(chess_size[1]-100)/grid_size[1]]run = True game_ended = False player_won = [0,0] turn = 0 chess = [ pg.transform.smoothscale(pg.image.load('smiley.png'), (int(tile_size[0]/2),int(tile_size[0]/2))), #player1pg.transform.smoothscale(pg.image.load('angry.png'), (int(tile_size[0]/2),int(tile_size[0]/2))), #player2pg.transform.smoothscale(pg.image.load('sad.png'), (int(tile_size[0]/2),int(tile_size[0]/2))), #sad facepg.transform.smoothscale(pg.image.load('fist.png'), (int(tile_size[0]/2),int(tile_size[0]/2)))] #fist chess_scoreboard = [ pg.transform.smoothscale(pg.image.load('smiley.png'), (80,80)),pg.transform.smoothscale(pg.image.load('angry.png'), (80,80)),]matrix = [] for y in range(grid_size[1]):temp = []for x in range(grid_size[0]):tile = Tile(grid_size,screen_size,x,y)temp.append(tile)matrix.append(temp)screen = pg.display.set_mode(screen_size) pg.init() #================================draw board============================================== draw_chessboard() font = pg.font.Font('freesansbold.ttf', 32) display_score() #================================game loop============================================== while run:for event in pg.event.get():if event.type == pg.QUIT:run = Falsepg.quit()if event.type == pg.KEYDOWN:if event.key == pg.K_g:winner = (turn+1)%2print(f'player{(turn%2)+1} gave up')player_won[winner] += 1game_ended = Truedisplay_score()if event.type == pg.MOUSEBUTTONUP:if not game_ended:x,y = get_clicked_tile()if x in range(grid_size[0]) and y in range(grid_size[1]) and matrix[y][x].chess == None:matrix[y][x].chess = turn%2matrix[y][x].draw()winner = check_win(x,y)turn += 1if winner != None:print(f'the winner is: player{winner+1}')player_won[winner] += 1game_ended = Truedisplay_score()else:game_over_animation()game_ended = Falseturn = 0display_score()for y in range(grid_size[1]):for x in range(grid_size[0]):matrix[y][x].chess = Nonematrix[y][x].draw()time.sleep(1/30)

總結

以上是生活随笔為你收集整理的Pygame 整活五子棋的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。