pygame五子棋
2022/7/25 23:24:17
本文主要是介绍pygame五子棋,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
问题
有个小问题就是有的时候五个棋子相连却不能判断出来
还有就是黑棋/白棋胜利的字体不能显示出来
游戏的音乐是一个类可以单独考虑,不需要对音乐过度纠结
已经完成的
窗口上画出了棋盘
黑棋下一步,白棋下一步
若横竖斜五子则某方胜利,重开游戏
还需要弄的
实现socket联机
能设置棋盘大小
未来:
以后小型游戏,比较随意的游戏可以用pygame,js
偏大型的游戏客户端还是用unity吧
`
import pygame
import sys
WHITE = (255,255,255)
BLACK = (0,0,0)
BACKCOLOR = (100,180,250)
BOARDLINE = 10
x行x列
BOUNDARY = 50
棋盘到游戏界面边界的距离
CHESSLEN = 50
棋盘里每一棋格的大小
CHESS_R = 20
SCREEN = BOARDLINECHESSLEN+2BOUNDARY
`
`
class Manager:
def init(self):
self.IMG = pygame.image.load('E:/图片/chessboard.jpg')
self.IMG = pygame.transform.scale(self.IMG,(CHESSLEN,CHESSLEN))
self.screen = pygame.display.set_mode((SCREEN,SCREEN)) self.title = pygame.display.set_caption('五子棋') self.isblack = True self.boardcount = [[0 for i in range(BOARDLINE)] for i in range(BOARDLINE)] self.s = Sound() def mii(self,row,col): return(BOUNDARY+col*CHESSLEN,BOUNDARY+row*CHESSLEN) def draw(self): for i in range(BOARDLINE): for j in range(BOARDLINE): screenpos = self.mii(i,j) self.screen.blit(self.IMG,screenpos) def inarea(self,pos): return BOUNDARY <= pos[0] <= SCREEN-BOUNDARY and BOUNDARY <= pos[1] <= SCREEN-BOUNDARY def iim(self,pos): x = (pos[0]-BOUNDARY)//CHESSLEN y = (pos[1]-BOUNDARY)//CHESSLEN return (x,y) def makemove(self,pos): if self.boardcount[pos[1]][pos[0]] == 0: self.boardcount[pos[1]][pos[0]] = 1 if self.isblack else -1 return True return False def draw2(self): for row in range(len(self.boardcount)): for col in range(len(self.boardcount[row])): spos = self.mii(row,col) screenpos = (spos[0]+CHESSLEN/2,spos[1]+CHESSLEN/2) if self.boardcount[row][col] == 1: pygame.draw.circle(self.screen,BLACK,screenpos,CHESS_R) if self.boardcount[row][col] == -1: pygame.draw.circle(self.screen,WHITE,screenpos,CHESS_R) def winner(self,a,m2): if self.heng(m2) or self.shu(m2) or self.xie(m2): return 1 if a else -1 return 0 def heng(self,m): x = m[0] row = self.boardcount[m[1]] left_start = max(0,x-4) left_end = x for i in range(left_start,left_end+1): if abs(sum(row[i:i+5])) == 5: return True return False def shu(self,m): y = m[0] col = self.boardcount[m[0]] top_start = max(0, y - 4) top_end = y for i in range(top_start, top_end + 1): if abs(sum(col[i:i + 5])) == 5: return True return False def xie(self,m): x,y = m[0],m[1] all = [] for i in range(-4,5): if 0 <= x+i < BOARDLINE and 0 <= y+i < BOARDLINE: all.append(self.boardcount[y+i][x+i]) roll = self.roll_sum(all,5) if 5 in roll: return True all = [] for i in range(-4, 5): if 0 <= x + i < BOARDLINE and 0 <= y - i < BOARDLINE: all.append(self.boardcount[y - i][x + i]) roll = self.roll_sum(all, 5) if 5 in roll: return True return False def roll_sum(self,values,size): r = [] for i in range(len(values)-size+1): r.append(abs(sum(values[i:i+size]))) return r def end(self,a): self.draw2() font = pygame.font.SysFont(['方正粗黑宋简体', 'microsoftsansserif'], 50) winner = '黑棋' if a else '白棋' text = font.render(winner+'获胜了',True,BLACK,None) self.screen.blit(text,(0,0)) pygame.display.flip() def main(self): self.s.back() while True: pygame.init() for e in pygame.event.get(): if e.type == pygame.QUIT: pygame.quit() sys.exit() if e.type == pygame.MOUSEBUTTONUP: clickpos = pygame.mouse.get_pos()#获取鼠标位置 if self.inarea(clickpos): #self.s.chess_down() mmp = self.iim(clickpos) self.isblack = not self.isblack if self.makemove(mmp) else self.isblack if self.winner(self.isblack,mmp): self.end(not self.isblack) self.isblack = True self.boardcount = [[0 for i in range(BOARDLINE)] for i in range(BOARDLINE)] self.screen.fill(BACKCOLOR) self.draw() self.draw2() pygame.display.flip()
`
`
class Sound:
def init(self):
pygame.mixer.init()
pygame.mixer.music.load("E:/图片/back.mp3")
self._bomb = pygame.mixer.Sound("E:/图片/walk.mp3")
def back(self,x=0.3,y=-1): pygame.mixer.music.set_volume(x) #音量大小 pygame.mixer.music.play(y) #背景音乐,-1为循环播放 def chess_down(self): pygame.mixer.Sound.play(self._bomb)
if name == "main":
m = Manager()
m.main()
`
这篇关于pygame五子棋的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22[开源]10.3K+ Star!轻量强大的开源运维平台,超赞!
- 2024-11-21Flutter基础教程:新手入门指南
- 2024-11-21Flutter跨平台教程:新手入门详解
- 2024-11-21Flutter跨平台教程:新手入门与实践指南
- 2024-11-21Flutter列表组件教程:初学者指南
- 2024-11-21Flutter列表组件教程:新手入门指南
- 2024-11-21Flutter入门教程:初学者必看指南
- 2024-11-21Flutter入门教程:从零开始的Flutter开发指南
- 2024-11-21Flutter升级教程:新手必读的升级指南
- 2024-11-21Flutter升级教程:轻松掌握Flutter版本更新