import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((750,750))#设置游戏屏幕大小
running = True#建立一个事件
while running:#事件运行
for event in pygame.event.get():
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
screen.fill([125,95,24])#给屏幕画上颜色
for x in range(15):#画出15条竖线
pygame.draw.line(screen, (255, 0, 0),[25+50*x,25],[25+50*x,725],2)
for y in range(15):#画出15条横线
pygame.draw.line(screen, (255, 0, 0),[25,25+50*y],[725,25+50*y],2)
pygame.draw.circle(screen, (255, 0, 0),[25+50*7,25+50*7],8)#棋盘中间画出一个中心点
pygame.display.update()#刷新,变色用的
pygame.quit()#退出游戏
一。画出棋盘x和y 横和竖个15条线,画出中央的小点
二,创建列表,计算出x和y的当前坐标的位置,且存储二维列表的值,画出圆形白色棋子
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((750,750))#设置游戏屏幕大小
map = [0]*15#创建一个列表
for i in range(15):#列表循环来存储数据
map[i] = [0]*15#二维列表来存储数据
running = True#建立一个事件
while running:#事件运行
for event in pygame.event.get():
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
col = round((x - 25)/50)#计算出x的位置
row = round((y - 25)/50)#计算出y的位置
print(row+1,col+1)#打印出x与y的位置
map[row][col] = 1#等于1表示把它的数值存储起来
screen.fill([125,95,24])#给屏幕画上颜色
for x in range(15):#画出15条竖线
pygame.draw.line(screen, (255, 0, 0),[25+50*x,25],[25+50*x,725],2)
for y in range(15):#画出15条横线
pygame.draw.line(screen, (255, 0, 0),[25,25+50*y],[725,25+50*y],2)
x,y = pygame.mouse.get_pos()#获取鼠标所在位置
x = round((x - 25)/50)*50 + 25#找到x和y的交叉点
y = round((y - 25)/50)*50 + 25#找到x和y的交叉点
pygame.draw.rect(screen,(255, 0, 0),[x-25,y-25,50,50],2)#画一个正方形框框,表示可以落子
pygame.draw.circle(screen, (255, 0, 0),[25+50*7,25+50*7],8)#棋盘中间画出一个中心点
for row in range(15):#棋盘上画出白色棋子
for col in range(15):#棋盘上画出白色棋
if map[row][col] == 1:#点击后在棋盘上画出白色棋
pygame.draw.circle(screen,(255, 255, 255),[col*50+25,row*50+25],25)#棋盘上画出白色棋的位置和大小半径
pygame.display.update()#刷新,变色用的
pygame.quit()#退出游戏
三.黑白棋子交替出现
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((750,750))#设置游戏屏幕大小
map = [0]*15#创建一个列表
for i in range(15):#列表循环来存储数据
map[i] = [0]*15#二维列表来存储数据
player = 1#创建玩家1
running = True#建立一个事件
while running:#事件运行
for event in pygame.event.get():
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
col = round((x - 25)/50)#计算出x的位置
row = round((y - 25)/50)#计算出y的位置
print(row+1,col+1)#打印出x与y的位置
# map[row][col] = 1#等于1表示把它的数值存储起来
map[row][col] = player#
if player == 1:#当点击事件后
player = 2 #2是黑子
else:
player = 1#下一次是白子
screen.fill([125,95,24])#给屏幕画上颜色
for x in range(15):#画出15条竖线
pygame.draw.line(screen, (255, 0, 0),[25+50*x,25],[25+50*x,725],2)
for y in range(15):#画出15条横线
pygame.draw.line(screen, (255, 0, 0),[25,25+50*y],[725,25+50*y],2)
x,y = pygame.mouse.get_pos()#获取鼠标所在位置
x = round((x - 25)/50)*50 + 25#找到x和y的交叉点
y = round((y - 25)/50)*50 + 25#找到x和y的交叉点
pygame.draw.rect(screen,(255, 0, 0),[x-25,y-25,50,50],2)#画一个正方形框框,表示可以落子
pygame.draw.circle(screen, (255, 0, 0),[25+50*7,25+50*7],8)#棋盘中间画出一个中心点
for row in range(15):#棋盘上画出白色棋子
for col in range(15):#棋盘上画出白色棋
if map[row][col] == 1:#点击后在棋盘上画出白色棋
pygame.draw.circle(screen,(255, 255, 255),[col*50+25,row*50+25],25)#棋盘上画出白色棋的位置和大小半径
if map[row][col] == 2: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (000, 000, 000), [col * 50 + 25, row * 50 + 25], 25) #当时玩家2时棋盘上画出黑色棋子
pygame.display.update()#刷新,变色用的
pygame.quit()#退出游戏
四,提示已经被其他棋子占领了,不能重复占领
五。创建检测五子相连的函数 def check
六.,实现水平向左和向右方向的五子连线的判断胜负
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((750,750))#设置游戏屏幕大小
map = [0]*15#创建一个列表
for i in range(15):#列表循环来存储数据
map[i] = [0]*15#二维列表来存储数据
player = 1#创建玩家1
running = True
def check(row,col):#创建check函数检测五子连线
#判断左右方向是否五子连线
score = 1
for i in range(4):
if map[row][col+i] == map[row][col+i+1]:
score = score + 1
else:
break
for i in range(4):
if map[row][col-i] == map[row][col-i-1]:
score = score + 1
else:
break
if score == 5:
return True
while running:#事件运行
for event in pygame.event.get():
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
col = round((x - 25)/50)#计算出x的位置
row = round((y - 25)/50)#计算出y的位置
if map[row][col]== 0:
print(row+1,col+1)#打印出x与y的位置
# map[row][col] = 1#等于1表示把它的数值存储起来
map[row][col] = player#
if(check(row,col)):#如果检测到五子连线了那么打印赢了
print("有人赢了")
else:
if player == 1:#当点击事件后
player = 2 #2是黑子
else:
player = 1#下一次是白子
else:
print("当前位置已经被占领了")
screen.fill([125,95,24])#给屏幕画上颜色
for x in range(15):#画出15条竖线
pygame.draw.line(screen, (255, 0, 0),[25+50*x,25],[25+50*x,725],2)
for y in range(15):#画出15条横线
pygame.draw.line(screen, (255, 0, 0),[25,25+50*y],[725,25+50*y],2)
x,y = pygame.mouse.get_pos()#获取鼠标所在位置
x = round((x - 25)/50)*50 + 25#找到x和y的交叉点
y = round((y - 25)/50)*50 + 25#找到x和y的交叉点
pygame.draw.rect(screen,(255, 0, 0),[x-25,y-25,50,50],2)#画一个正方形框框,表示可以落子
pygame.draw.circle(screen, (255, 0, 0),[25+50*7,25+50*7],8)#棋盘中间画出一个中心点
for row in range(15):#棋盘上画出白色棋子
for col in range(15):#棋盘上画出白色棋
if map[row][col] == 1:#点击后在棋盘上画出白色棋
pygame.draw.circle(screen,(255, 255, 255),[col*50+25,row*50+25],25)#棋盘上画出白色棋的位置和大小半径
if map[row][col] == 2: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (000, 000, 000), [col * 50 + 25, row * 50 + 25], 25) #当时玩家2时棋盘上画出黑色棋子
pygame.display.update()#刷新,变色用的
pygame.quit()#退出游戏
检查左右方向的水平方向五子棋连接的五个
检测上下方向五子相连
检测左下 右上方向五子相连
检测左上右下的五子相连
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((750,750))#设置游戏屏幕大小
map = [0]*15#创建一个列表
for i in range(15):#列表循环来存储数据
map[i] = [0]*15#二维列表来存储数据
player = 1#创建玩家1
running = True
def check(row,col):#创建check函数检测五子连线
#判断左右方向是否五子连线
score = 1
for i in range(4):
if map[row][col+i] == map[row][col+i+1]:
score = score + 1
else:
break
for i in range(4):
if map[row][col-i] == map[row][col-i-1]:
score = score + 1
else:
break
if score == 5:
return True
# 判断上下方向是否五子连线
score = 1
for i in range(4):
if map[row+i][col] == map[row+i+1][col]:
score = score + 1
else:
break
for i in range(4):
if map[row-i][col] == map[row-i-1][col]:
score = score + 1
else:
break
if score == 5:
return True
# 判断左下右上方向是否五子连线(左下行和列都减小,右上行和列都变大)
score = 1
for i in range(4):
if map[row+i][col+i] == map[row+i+1][col+i+1]:
score = score + 1
else:
break
for i in range(4):
if map[row-i][col-i] == map[row-i-1][col-i-1]:
score = score + 1
else:
break
if score == 5:
return True
# 判断左上右下方向是否五子连线(左上行增加列减小,右下行变大,列变小)
score = 1
for i in range(4):
if map[row - i][col + i] == map[row - i - 1][col + i + 1]:
score = score + 1
else:
break
for i in range(4):
if map[row + i][col - i] == map[row + i + 1][col - i - 1]:
score = score + 1
else:
break
if score == 5:
return True
while running:#事件运行
for event in pygame.event.get():
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
col = round((x - 25)/50)#计算出x的位置
row = round((y - 25)/50)#计算出y的位置
if map[row][col]== 0:
print(row+1,col+1)#打印出x与y的位置
# map[row][col] = 1#等于1表示把它的数值存储起来
map[row][col] = player#
if(check(row,col)):#如果检测到五子连线了那么打印赢了
print("有人赢了")
else:
if player == 1:#当点击事件后
player = 2 #2是黑子
else:
player = 1#下一次是白子
else:
print("当前位置已经被占领了")
screen.fill([125,95,24])#给屏幕画上颜色
for x in range(15):#画出15条竖线
pygame.draw.line(screen, (255, 0, 0),[25+50*x,25],[25+50*x,725],2)
for y in range(15):#画出15条横线
pygame.draw.line(screen, (255, 0, 0),[25,25+50*y],[725,25+50*y],2)
x,y = pygame.mouse.get_pos()#获取鼠标所在位置
x = round((x - 25)/50)*50 + 25#找到x和y的交叉点
y = round((y - 25)/50)*50 + 25#找到x和y的交叉点
pygame.draw.rect(screen,(255, 0, 0),[x-25,y-25,50,50],2)#画一个正方形框框,表示可以落子
pygame.draw.circle(screen, (255, 0, 0),[25+50*7,25+50*7],8)#棋盘中间画出一个中心点
for row in range(15):#棋盘上画出白色棋子
for col in range(15):#棋盘上画出白色棋
if map[row][col] == 1:#点击后在棋盘上画出白色棋
pygame.draw.circle(screen,(255, 255, 255),[col*50+25,row*50+25],25)#棋盘上画出白色棋的位置和大小半径
if map[row][col] == 2: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (000, 000, 000), [col * 50 + 25, row * 50 + 25], 25) #当时玩家2时棋盘上画出黑色棋子
pygame.display.update()#刷新,变色用的
pygame.quit()#退出游戏
添加变量winner赋值给player,提示谁赢了,且提示3秒退出游戏
bug问题1,不是连续的五个放在一起棋子,不会判断赢输,
修改条件score 》=5
2.优化把所有的数值设置为变量,
pygame.display.set_caption("这是五子棋游戏")
border_left =25
border_right =725
border_top = 25
border_bottom = 725
width = 50
height = 50
3.ttf字体下载网站;https://www.hanyi.com.cn/
下载下来和五子棋放在同一个目录下面
4.把棋盘下面的按钮功能用class button来实现
class Button:#定义按钮的类
def __init__(self,x,y,width,height,text,color,click_color,text_color):#初始化
self.text = text#定义内容
self.color = color#定义颜色
self.click_color = click_color#定义点击后的颜色
self.text_color = text_color#定义文本颜色
self.rect = pygame.Rect(x,y,width,height)#定义按钮的大小
self.clicked = False#不点击
def draw(self,screen):#定义方法生成出按钮
if self.clicked:
pygame.draw.rect(screen,self.click_color,self.rect)#画出按钮
else:
pygame.draw.rect(screen,self.color,self.rect)
text_surface = font.render(self.text,True,self.text_color)#双人对战按钮的颜色
text_rect = text_surface.get_rect(center = self.rect.center)#双人对战按钮的位置坐标
screen.blit(text_surface,text_rect)##双人对战按钮的颜色
button = Button(30,470,100,30,"双人模式",(153,51,250),(221,160,221),(255,255,255))#画一个双人模式按钮
button.draw(screen)#画一个双人模式按钮
button = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
button.draw(screen) # 画一个机器人式按钮
5.坐标出了棋盘范围
在以下两处添加限制x的左右和y轴的上下范围后正常
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((490,590))#设置游戏屏幕大小
#screen = pygame.display.set_mode((750,850))#设置游戏屏幕大小
pygame.display.set_caption("这是五子棋游戏")#游戏的名字
border_left =25#屏幕左边界
border_right =445#屏幕右边界
border_top = 25#屏幕上边界
border_bottom = 445#屏幕下边界
width = 30#棋盘小格子的宽
height = 30#棋盘小格子的高
map = [0]*15#创建一个列表
for i in range(15):#列表循环来存储数据
map[i] = [0]*15#二维列表来存储数据
player = 1#创建玩家1
winner = 0#创建一个变量,看看是谁赢了
running = True
#font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 24)#使用汉语字体大小24
class Button:#定义棋盘上胡按钮的类
def __init__(self,x,y,width,height,text,color,click_color,text_color):#初始化定义类的属性
self.text = text#定义按钮文本内容
self.color = color#定义按钮胡颜色
self.click_color = click_color#定义点击后的颜色
self.text_color = text_color#定义文本颜色
self.rect = pygame.Rect(x,y,width,height)#定义画矩形按钮的大小
self.clicked = False#不点击
def draw(self,screen):#定义方法生成出按钮
if self.clicked:
pygame.draw.rect(screen,self.click_color,self.rect)#画出按钮
else:
pygame.draw.rect(screen,self.color,self.rect)
text_surface = font.render(self.text,True,self.text_color)#双人对战按钮的颜色和文本
text_rect = text_surface.get_rect(center = self.rect.center)#双人对战按钮的位置坐标居中
screen.blit(text_surface,text_rect)##绘画双人对战按钮
def check(row,col):#创建check函数检测五子连线
#判断左右方向是否五子连线
score = 1
for i in range(4):
if map[row][col+i] == map[row][col+i+1]:
score = score + 1
else:
break
for i in range(4):
if map[row][col-i] == map[row][col-i-1]:
score = score + 1
else:
break
if score == 5:
return True
# 判断上下方向是否五子连线
score = 1
for i in range(4):
if map[row+i][col] == map[row+i+1][col]:
score = score + 1
else:
break
for i in range(4):
if map[row-i][col] == map[row-i-1][col]:
score = score + 1
else:
break
if score == 5:
return True
# 判断左下右上方向是否五子连线(左下行和列都减小,右上行和列都变大)
score = 1
for i in range(4):
if map[row+i][col+i] == map[row+i+1][col+i+1]:
score = score + 1
else:
break
for i in range(4):
if map[row-i][col-i] == map[row-i-1][col-i-1]:
score = score + 1
else:
break
if score == 5:
return True
# 判断左上右下方向是否五子连线(左上行增加列减小,右下行变大,列变小)
score = 1
for i in range(4):
if map[row - i][col + i] == map[row - i - 1][col + i + 1]:
score = score + 1
else:
break
for i in range(4):
if map[row + i][col - i] == map[row + i + 1][col - i - 1]:
score = score + 1
else:
break
if score == 5:
return True
while running:#事件运行
for event in pygame.event.get():
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
if x >= border_left and x <= border_right and y >= border_top and y <= border_bottom: # 限制x的左右边
col = round((x - 15)/30)#计算出x的位置
row = round((y - 15)/30)#计算出y的位置
if map[row][col]== 0:
print(row+1,col+1)#打印出x与y的位置
# map[row][col] = 1#等于1表示把它的数值存储起来
map[row][col] = player#
if(check(row,col)):#如果检测到五子连线了那么打印赢了
#print("有人赢了")
winner = player#把赢赋值给winner
else:
if player == 1:#当点击事件后
player = 2 #2是黑子
else:
player = 1#下一次是白子
else:
print("当前位置已经被占领了")
screen.fill([125,95,24])#给屏幕画上颜色
for x in range(15):#画出15条竖线
pygame.draw.line(screen, (255, 0, 0),[border_left+width*x,border_top],[border_left+width*x,border_bottom],2)
for y in range(15):#画出15条横线
pygame.draw.line(screen, (255, 0, 0),[border_left,border_top+height*y],[border_right,border_top+height*y],2)
x,y = pygame.mouse.get_pos()#获取鼠标所在位置
if x >=border_left and x<=border_right and y>=border_top and y<=border_bottom:#限制x的左右边缘和y的上下边缘
x = round((x - border_left)/width)*width + border_left#找到x和y的交叉点
y = round((y - border_top)/width)*width + border_top#找到x和y的交叉点
pygame.draw.rect(screen,(255, 0, 0),[x-15,y-15,30,30],2)#画一个正方形框框,表示可以落子
#pygame.draw.rect(screen,(153, 51, 250),[50,750,100,50],2)#画一个正方形框框,表示按钮
#text_surface = font.render("双人对战",True,(200,200,200))#双人对战按钮的颜色
#text_position = (50,750)#双人对战按钮的位置坐标
#screen.blit(text_surface,text_position)##双人对战按钮的颜色
pygame.draw.circle(screen, (255, 0, 0),[25+30*7,25+30*7],8)#棋盘中间画出一个中心点
button = Button(30,470,100,30,"双人模式",(153,51,250),(221,160,221),(255,255,255))#画一个双人模式按钮,调用类Button实例化对象button(x坐标,Y坐标,文本内容,文本颜色)
button.draw(screen)#画一个双人模式按钮,调用方法draw
button = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
button.draw(screen) # 画一个机器人式按钮
for row in range(15):#棋盘上画出白色棋子
for col in range(15):#棋盘上画出白色棋
if map[row][col] == 1:#点击后在棋盘上画出白色棋
pygame.draw.circle(screen,(255, 255, 255),[col*width+border_left,row*height+border_top],15)#棋盘上画出白色棋的位置和大小半径
if map[row][col] == 2: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (000, 000, 000), [col * width + border_left, row * height +border_top ], 15) #当时玩家2时棋盘上画出黑色棋子
pygame.display.update() # 刷新,变色用的
if(winner !=0):
if winner ==1:
text ="白子赢了,倒计时3秒退出"
color = (255,255,255,255,)
else:
text = '黑子赢了,倒计时3秒退出'
#text = 'black won,countdown to 3 seconds更改'
color = (0,0,0,0)
#font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 20)#使用汉语字体提示
text_surface = font.render(text,True,color)#字体的表面颜色
text_position = (60,60)#字体的坐标
screen.blit(text_surface,text_position)#开始绘画字体文本
pygame.display.update() # 刷新,变色用的
pygame.time.wait(3000)#显示字体等待3秒
running = False#程序关闭
pygame.quit()#退出游戏
5,当在第15格也就是边界时会报错
添加try except break后就可以,比对坐标超过16行了,也不报错了,程序继续运行
到这里这个游戏基本完成了
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((490,590))#设置游戏屏幕大小
#screen = pygame.display.set_mode((750,850))#设置游戏屏幕大小
pygame.display.set_caption("这是五子棋游戏")
border_left =25
border_right =445
border_top = 25
border_bottom = 445
width = 30
height = 30
map = [0]*15#创建一个列表
for i in range(15):#列表循环来存储数据
map[i] = [0]*15#二维列表来存储数据
player = 1#创建玩家1
winner = 0#创建一个变量,看看是谁赢了
running = True
#font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 24)#使用汉语字体大小24
#font = pygame.font.Font("font.ttf",70)
class Button:#定义按钮的类
def __init__(self,x,y,width,height,text,color,click_color,text_color):#初始化
self.text = text#定义内容
self.color = color#定义颜色
self.click_color = click_color#定义点击后的颜色
self.text_color = text_color#定义文本颜色
self.rect = pygame.Rect(x,y,width,height)#定义按钮的大小
self.clicked = False#不点击
def draw(self,screen):#定义方法生成出按钮
if self.clicked:
pygame.draw.rect(screen,self.click_color,self.rect)#画出按钮
else:
pygame.draw.rect(screen,self.color,self.rect)
text_surface = font.render(self.text,True,self.text_color)#双人对战按钮的颜色
text_rect = text_surface.get_rect(center = self.rect.center)#双人对战按钮的位置坐标
screen.blit(text_surface,text_rect)##双人对战按钮的颜色
def check(row,col):#创建check函数检测五子连线
#判断左右方向是否五子连线
score = 1
for i in range(4):
try:
if map[row][col+i] == map[row][col+i+1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if map[row][col-i] == map[row][col-i-1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断上下方向是否五子连线
score = 1
for i in range(4):
try:
if map[row+i][col] == map[row+i+1][col]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if map[row-i][col] == map[row-i-1][col]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断左下右上方向是否五子连线(左下行和列都减小,右上行和列都变大)
score = 1
for i in range(4):
try:
if map[row+i][col+i] == map[row+i+1][col+i+1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if map[row-i][col-i] == map[row-i-1][col-i-1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断左上右下方向是否五子连线(左上行增加列减小,右下行变大,列变小)
score = 1
for i in range(4):
try:
if map[row - i][col + i] == map[row - i - 1][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if map[row + i][col - i] == map[row + i + 1][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
while running:#事件运行
for event in pygame.event.get():
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
if x >= border_left and x <= border_right and y >= border_top and y <= border_bottom: # 限制x的左右边
col = round((x - 15)/30)#计算出x的位置
row = round((y - 15)/30)#计算出y的位置
if map[row][col]== 0:
print(row+1,col+1)#打印出x与y的位置
# map[row][col] = 1#等于1表示把它的数值存储起来
map[row][col] = player#
if(check(row,col)):#如果检测到五子连线了那么打印赢了
#print("有人赢了")
winner = player#把赢赋值给winner
else:
if player == 1:#当点击事件后
player = 2 #2是黑子
else:
player = 1#下一次是白子
else:
print("当前位置已经被占领了")
screen.fill([125,95,24])#给屏幕画上颜色
for x in range(15):#画出15条竖线
pygame.draw.line(screen, (255, 0, 0),[border_left+width*x,border_top],[border_left+width*x,border_bottom],2)
for y in range(15):#画出15条横线
pygame.draw.line(screen, (255, 0, 0),[border_left,border_top+height*y],[border_right,border_top+height*y],2)
x,y = pygame.mouse.get_pos()#获取鼠标所在位置
if x >=border_left and x<=border_right and y>=border_top and y<=border_bottom:#限制x的左右边缘和y的上下边缘
x = round((x - border_left)/width)*width + border_left#找到x和y的交叉点
y = round((y - border_top)/width)*width + border_top#找到x和y的交叉点
pygame.draw.rect(screen,(255, 0, 0),[x-15,y-15,30,30],2)#画一个正方形框框,表示可以落子
#pygame.draw.rect(screen,(153, 51, 250),[50,750,100,50],2)#画一个正方形框框,表示按钮
#text_surface = font.render("双人对战",True,(200,200,200))#双人对战按钮的颜色
#text_position = (50,750)#双人对战按钮的位置坐标
#screen.blit(text_surface,text_position)##双人对战按钮的颜色
pygame.draw.circle(screen, (255, 0, 0),[25+30*7,25+30*7],8)#棋盘中间画出一个中心点
button = Button(30,470,100,30,"双人模式",(153,51,250),(221,160,221),(255,255,255))#画一个双人模式按钮
button.draw(screen)#画一个双人模式按钮
button = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
button.draw(screen) # 画一个机器人式按钮
for row in range(15):#棋盘上画出白色棋子
for col in range(15):#棋盘上画出白色棋
if map[row][col] == 1:#点击后在棋盘上画出白色棋
pygame.draw.circle(screen,(255, 255, 255),[col*width+border_left,row*height+border_top],15)#棋盘上画出白色棋的位置和大小半径
if map[row][col] == 2: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (000, 000, 000), [col * width + border_left, row * height +border_top ], 15) #当时玩家2时棋盘上画出黑色棋子
pygame.display.update() # 刷新,变色用的
if(winner !=0):
if winner ==1:
text ="白子赢了,倒计时3秒后退出"
color = (255,255,255,255,)
else:
text = '黑子赢了,倒计时3秒后退出'
#text = 'black won,countdown to 3 seconds更改'
color = (0,0,0,0)
#font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 20)#使用汉语字体提示
text_surface = font.render(text,True,color)#字体的颜色
text_position = (60,60)#字体的坐标
screen.blit(text_surface,text_position)
pygame.display.update() # 刷新,变色用的
pygame.time.wait(3000)#显示字体等待3秒
running = False#程序关闭
pygame.quit()#退出游戏
创建类把游戏分成2大块,创建2个类分别是按钮类和游戏类,游戏类里面定义三个方法1,开始方法,2检查方法。3是鼠标点击方法
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((490,590))#设置游戏屏幕大小
#screen = pygame.display.set_mode((750,850))#设置游戏屏幕大小
pygame.display.set_caption("这是五子棋游戏")
border_left =25
border_right =445
border_top = 25
border_bottom = 445
width = 30
height = 30
running = True
#font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 24)#使用汉语字体大小24
#font = pygame.font.Font("font.ttf",70)
class Button:#定义按钮的类
def __init__(self,x,y,width,height,text,color,click_color,text_color):#初始化
self.text = text#定义内容
self.color = color#定义颜色
self.click_color = click_color#定义点击后的颜色
self.text_color = text_color#定义文本颜色
self.rect = pygame.Rect(x,y,width,height)#定义按钮的大小
self.clicked = False#不点击
def draw(self,screen):#定义方法生成出按钮
if self.clicked:
pygame.draw.rect(screen,self.click_color,self.rect)#画出按钮
else:
pygame.draw.rect(screen,self.color,self.rect)
text_surface = font.render(self.text,True,self.text_color)#双人对战按钮的颜色
text_rect = text_surface.get_rect(center = self.rect.center)#双人对战按钮的位置坐标
screen.blit(text_surface,text_rect)##双人对战按钮的颜色cla
class Game:
def __init__(self):
self.player = 1 # 创建玩家1
self.winner = 0 # 创建一个变量,看看是谁赢了
self.map = [0] * 15 # 创建一个列表
for i in range(15): # 列表循环来存储数据
self.map[i] = [0] * 15 # 二维列表来存储数据
def start(self):
screen.fill([125, 95, 24]) # 给屏幕画上颜色
for x in range(15): # 画出15条竖线
pygame.draw.line(screen, (255, 0, 0), [border_left + width * x, border_top],
[border_left + width * x, border_bottom], 2)
for y in range(15): # 画出15条横线
pygame.draw.line(screen, (255, 0, 0), [border_left, border_top + height * y],
[border_right, border_top + height * y], 2)
x, y = pygame.mouse.get_pos() # 获取鼠标所在位置
if x >= border_left and x <= border_right and y >= border_top and y <= border_bottom: # 限制x的左右边缘和y的上下边缘
x = round((x - border_left) / width) * width + border_left # 找到x和y的交叉点
y = round((y - border_top) / width) * width + border_top # 找到x和y的交叉点
pygame.draw.rect(screen, (255, 0, 0), [x - 15, y - 15, 30, 30], 2) # 画一个正方形框框,表示可以落子
# pygame.draw.rect(screen,(153, 51, 250),[50,750,100,50],2)#画一个正方形框框,表示按钮
# text_surface = font.render("双人对战",True,(200,200,200))#双人对战按钮的颜色
# text_position = (50,750)#双人对战按钮的位置坐标
# screen.blit(text_surface,text_position)##双人对战按钮的颜色
pygame.draw.circle(screen, (255, 0, 0), [25 + 30 * 7, 25 + 30 * 7], 8) # 棋盘中间画出一个中心点
#button = Button(30, 470, 100, 30, "双人模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个双人模式按钮
button.draw(screen) # 画一个双人模式按钮
#button_ai = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
button_ai.draw(screen) # 画一个机器人式按钮
for row in range(15): # 棋盘上画出白色棋子
for col in range(15): # 棋盘上画出白色棋
if self.map[row][col] == 1: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (255, 255, 255), [col * width + border_left, row * height + border_top],
15) # 棋盘上画出白色棋的位置和大小半径
if self.map[row][col] == 2: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (000, 000, 000), [col * width + border_left, row * height + border_top],
15) # 当时玩家2时棋盘上画出黑色棋子
if (self.winner != 0):
if self.winner == 1:
text = "白子赢了,倒计时3秒后退出"
color = (255, 255, 255, 255,)
else:
text = '黑子赢了,倒计时3秒后退出'
# text = 'black won,countdown to 3 seconds更改'
color = (0, 0, 0, 0)
# font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 20) # 使用汉语字体提示
text_surface = font.render(text, True, color) # 字体的颜色
text_position = (60, 60) # 字体的坐标
screen.blit(text_surface, text_position)
pygame.display.update() # 刷新,变色用的
pygame.time.wait(3000) # 显示字体等待3秒
running = False # 程序关闭
def check(self,row, col): # 创建check函数检测五子连线
# 判断左右方向是否五子连线
score = 1
for i in range(4):
try:
if self.map[row][col + i] == self.map[row][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row][col - i] == self.map[row][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断上下方向是否五子连线
score = 1
for i in range(4):
try:
if self.map[row + i][col] == self.map[row + i + 1][col]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row - i][col] == self.map[row - i - 1][col]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断左下右上方向是否五子连线(左下行和列都减小,右上行和列都变大)
score = 1
for i in range(4):
try:
if self.map[row + i][col + i] == self.map[row + i + 1][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row - i][col - i] == self.map[row - i - 1][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断左上右下方向是否五子连线(左上行增加列减小,右下行变大,列变小)
score = 1
for i in range(4):
try:
if self.map[row - i][col + i] == self.map[row - i - 1][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row + i][col - i] == self.map[row + i + 1][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
def mouseClick(self,x,y):
if x >= border_left and x <= border_right and y >= border_top and y <= border_bottom: # 限制x的左右边
col = round((x - 15) / 30) # 计算出x的位置
row = round((y - 15) / 30) # 计算出y的位置
if self.map[row][col] == 0:
print(row + 1, col + 1) # 打印出x与y的位置
# self.map[row][col] = 1#等于1表示把它的数值存储起来
self.map[row][col] = self.player #
if (self.check(row, col)): # 如果检测到五子连线了那么打印赢了
# print("有人赢了")
self.winner = self.player # 把赢赋值给winner
else:
if self.player == 1: # 当点击事件后
self.player = 2 # 2是黑子
else:
self.player = 1 # 下一次是白子
else:
print("当前位置已经被占领了")
button = Button(30, 470, 100, 30, "双人模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个双人模式按钮
button_ai = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
game = Game()
while running:#事件运行
for event in pygame.event.get():
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
game.mouseClick(x,y)
game.start()
pygame.display.update() # 刷新,变色用的
pygame.quit()#退出游戏
实现了点“ 双人模式”开始玩游戏,没有点击双人“双人模式前”不能在棋盘上落子看到棋子
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((490,590))#设置游戏屏幕大小
#screen = pygame.display.set_mode((750,850))#设置游戏屏幕大小
pygame.display.set_caption("这是五子棋游戏")
border_left =25
border_right =445
border_top = 25
border_bottom = 445
width = 30
height = 30
#running = True
#font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 24)#使用汉语字体大小24
#font = pygame.font.Font("font.ttf",70)
class Button:#定义按钮的类
def __init__(self,x,y,width,height,text,color,click_color,text_color):#初始化
self.text = text#定义内容
self.color = color#定义颜色
self.click_color = click_color#定义点击后的颜色
self.text_color = text_color#定义文本颜色
self.rect = pygame.Rect(x,y,width,height)#定义按钮的大小
self.clicked = False#不点击
def draw(self,screen):#定义方法生成出按钮
if self.clicked:
pygame.draw.rect(screen,self.click_color,self.rect)#画出按钮
else:
pygame.draw.rect(screen,self.color,self.rect)
text_surface = font.render(self.text,True,self.text_color)#双人对战按钮的颜色
text_rect = text_surface.get_rect(center = self.rect.center)#双人对战按钮的位置坐标
screen.blit(text_surface,text_rect)##双人对战按钮的颜色cla
def handle_event(self,event,game):
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
if self.rect.collidepoint(event.pos):
if(self.clicked):
self.clicked = False
print("游戏开始了,别点了")
else:
self.clicked = True
game.started = True
print("点击,已经开始")
class Game:
def __init__(self):
self.started = False#游戏默认是不能玩的
self.player = 1 # 创建玩家1
self.winner = 0 # 创建一个变量,看看是谁赢了
self.map = [0] * 15 # 创建一个列表
for i in range(15): # 列表循环来存储数据
self.map[i] = [0] * 15 # 二维列表来存储数据
def start(self):
screen.fill([125, 95, 24]) # 给屏幕画上颜色
for x in range(15): # 画出15条竖线
pygame.draw.line(screen, (255, 0, 0), [border_left + width * x, border_top],
[border_left + width * x, border_bottom], 2)
for y in range(15): # 画出15条横线
pygame.draw.line(screen, (255, 0, 0), [border_left, border_top + height * y],
[border_right, border_top + height * y], 2)
x, y = pygame.mouse.get_pos() # 获取鼠标所在位置
if x >= border_left and x <= border_right and y >= border_top and y <= border_bottom: # 限制x的左右边缘和y的上下边缘
x = round((x - border_left) / width) * width + border_left # 找到x和y的交叉点
y = round((y - border_top) / width) * width + border_top # 找到x和y的交叉点
pygame.draw.rect(screen, (255, 0, 0), [x - 15, y - 15, 30, 30], 2) # 画一个正方形框框,表示可以落子
# pygame.draw.rect(screen,(153, 51, 250),[50,750,100,50],2)#画一个正方形框框,表示按钮
# text_surface = font.render("双人对战",True,(200,200,200))#双人对战按钮的颜色
# text_position = (50,750)#双人对战按钮的位置坐标
# screen.blit(text_surface,text_position)##双人对战按钮的颜色
pygame.draw.circle(screen, (255, 0, 0), [25 + 30 * 7, 25 + 30 * 7], 8) # 棋盘中间画出一个中心点
#button = Button(30, 470, 100, 30, "双人模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个双人模式按钮
button.draw(screen) # 画一个双人模式按钮
#button_ai = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
button_ai.draw(screen) # 画一个机器人式按钮
for row in range(15): # 棋盘上画出白色棋子
for col in range(15): # 棋盘上画出白色棋
if self.map[row][col] == 1: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (255, 255, 255), [col * width + border_left, row * height + border_top],
15) # 棋盘上画出白色棋的位置和大小半径
if self.map[row][col] == 2: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (000, 000, 000), [col * width + border_left, row * height + border_top],
15) # 当时玩家2时棋盘上画出黑色棋子
if (self.winner != 0):
if self.winner == 1:
text = "白子赢了,倒计时3秒后退出"
color = (255, 255, 255, 255,)
else:
text = '黑子赢了,倒计时3秒后退出'
# text = 'black won,countdown to 3 seconds更改'
color = (0, 0, 0, 0)
# font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 20) # 使用汉语字体提示
text_surface = font.render(text, True, color) # 字体的颜色
text_position = (60, 60) # 字体的坐标
screen.blit(text_surface, text_position)
pygame.display.update() # 刷新,变色用的
pygame.time.wait(3000) # 显示字体等待3秒
#running = False # 程序关闭
button.clicked = False#赢了后点击“双人模式”继续游戏
def check(self,row, col): # 创建check函数检测五子连线
# 判断左右方向是否五子连线
score = 1
for i in range(4):
try:
if self.map[row][col + i] == self.map[row][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row][col - i] == self.map[row][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断上下方向是否五子连线
score = 1
for i in range(4):
try:
if self.map[row + i][col] == self.map[row + i + 1][col]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row - i][col] == self.map[row - i - 1][col]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断左下右上方向是否五子连线(左下行和列都减小,右上行和列都变大)
score = 1
for i in range(4):
try:
if self.map[row + i][col + i] == self.map[row + i + 1][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row - i][col - i] == self.map[row - i - 1][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断左上右下方向是否五子连线(左上行增加列减小,右下行变大,列变小)
score = 1
for i in range(4):
try:
if self.map[row - i][col + i] == self.map[row - i - 1][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row + i][col - i] == self.map[row + i + 1][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
def mouse_Click(self,x,y):
if x >= border_left and x <= border_right and y >= border_top and y <= border_bottom: # 限制x的左右边
if self.started:#点击“双人模式”后可以玩游戏
col = round((x - 15) / 30) # 计算出x的位置
row = round((y - 15) / 30) # 计算出y的位置
if self.map[row][col] == 0:
print(row + 1, col + 1) # 打印出x与y的位置
# self.map[row][col] = 1#等于1表示把它的数值存储起来
self.map[row][col] = self.player #
if (self.check(row, col)): # 如果检测到五子连线了那么打印赢了
# print("有人赢了")
self.winner = self.player # 把赢赋值给winner
else:
if self.player == 1: # 当点击事件后
self.player = 2 # 2是黑子
else:
self.player = 1 # 下一次是白子
else:
print("当前位置已经被占领了")
else:
print("请点击了双人模式 后才能玩游戏了")
button = Button(30, 470, 100, 30, "双人模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个双人模式按钮
button_ai = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
game = Game()
while True:#事件运行
for event in pygame.event.get():
button.handle_event(event,game)
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
pygame.quit() # 退出游戏
exit()#系统级别的退出
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
game.mouse_Click(x,y)
game.start()
pygame.display.update() # 刷新,变色用的
实现下完棋后,棋盘清空,等待三秒可以点击“双人模式”再次打开游戏文章来源:https://www.toymoban.com/news/detail-752824.html
完整代码如下:在pycharm当中运行,python3,7文章来源地址https://www.toymoban.com/news/detail-752824.html
import pygame #导入pygame模块
pygame.init()#初始化
screen = pygame.display.set_mode((490,590))#设置游戏屏幕大小
#screen = pygame.display.set_mode((750,850))#设置游戏屏幕大小
pygame.display.set_caption("这是五子棋游戏")
border_left =25
border_right =445
border_top = 25
border_bottom = 445
width = 30
height = 30
#running = True
#font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 24)#使用汉语字体大小24
#font = pygame.font.Font("font.ttf",70)
class Button:#定义按钮的类
def __init__(self,x,y,width,height,text,color,click_color,text_color):#初始化
self.text = text#定义内容
self.color = color#定义颜色
self.click_color = click_color#定义点击后的颜色
self.text_color = text_color#定义文本颜色
self.rect = pygame.Rect(x,y,width,height)#定义按钮的大小
self.clicked = False#不点击
def draw(self,screen):#定义方法生成出按钮
if self.clicked:
pygame.draw.rect(screen,self.click_color,self.rect)#画出按钮
else:
pygame.draw.rect(screen,self.color,self.rect)
text_surface = font.render(self.text,True,self.text_color)#双人对战按钮的颜色
text_rect = text_surface.get_rect(center = self.rect.center)#双人对战按钮的位置坐标
screen.blit(text_surface,text_rect)##双人对战按钮的颜色cla
def handle_event(self,event,game):
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
if self.rect.collidepoint(event.pos):
if(self.clicked):
self.clicked = False
print("游戏开始了,别点了")
else:
if game.winner == 0:#游戏开始没有人玩的状态
self.clicked = True
game.started = True
print("点击,已经开始")
else:
self.clicked = True
#game.started = False # 游戏默认是不能玩的
game.started = True # 游戏默认是不能玩的
game.player = 1 # 玩家1
game.winner = 0 # 创建一个变量,看看是谁赢了
game.map = [0] * 15 # 创建一个列表
for i in range(15): # 列表循环来存储数据
game.map[i] = [0] * 15 # 二维列表来存储数据
print("点 双人模式 重新开始游戏")
class Game:
def __init__(self):
self.started = False#游戏默认是不能玩的
self.player = 1 # 创建玩家1
self.winner = 0 # 创建一个变量,看看是谁赢了
self.map = [0] * 15 # 创建一个列表
for i in range(15): # 列表循环来存储数据
self.map[i] = [0] * 15 # 二维列表来存储数据
def start(self):
screen.fill([125, 95, 24]) # 给屏幕画上颜色
for x in range(15): # 画出15条竖线
pygame.draw.line(screen, (255, 0, 0), [border_left + width * x, border_top],
[border_left + width * x, border_bottom], 2)
for y in range(15): # 画出15条横线
pygame.draw.line(screen, (255, 0, 0), [border_left, border_top + height * y],
[border_right, border_top + height * y], 2)
x, y = pygame.mouse.get_pos() # 获取鼠标所在位置
if x >= border_left and x <= border_right and y >= border_top and y <= border_bottom: # 限制x的左右边缘和y的上下边缘
x = round((x - border_left) / width) * width + border_left # 找到x和y的交叉点
y = round((y - border_top) / width) * width + border_top # 找到x和y的交叉点
pygame.draw.rect(screen, (255, 0, 0), [x - 15, y - 15, 30, 30], 2) # 画一个正方形框框,表示可以落子
# pygame.draw.rect(screen,(153, 51, 250),[50,750,100,50],2)#画一个正方形框框,表示按钮
# text_surface = font.render("双人对战",True,(200,200,200))#双人对战按钮的颜色
# text_position = (50,750)#双人对战按钮的位置坐标
# screen.blit(text_surface,text_position)##双人对战按钮的颜色
pygame.draw.circle(screen, (255, 0, 0), [25 + 30 * 7, 25 + 30 * 7], 8) # 棋盘中间画出一个中心点
#button = Button(30, 470, 100, 30, "双人模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个双人模式按钮
button.draw(screen) # 画一个双人模式按钮
#button_ai = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
button_ai.draw(screen) # 画一个机器人式按钮
for row in range(15): # 棋盘上画出白色棋子
for col in range(15): # 棋盘上画出白色棋
if self.map[row][col] == 1: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (255, 255, 255), [col * width + border_left, row * height + border_top],
15) # 棋盘上画出白色棋的位置和大小半径
if self.map[row][col] == 2: # 点击后在棋盘上画出白色棋
pygame.draw.circle(screen, (000, 000, 000), [col * width + border_left, row * height + border_top],
15) # 当时玩家2时棋盘上画出黑色棋子
if (self.winner != 0):
if self.winner == 1:
text = "白子赢了,倒计时3秒后退出"
color = (255, 255, 255, 255,)
else:
text = '黑子赢了,倒计时3秒后退出'
# text = 'black won,countdown to 3 seconds更改'
color = (0, 0, 0, 0)
# font = pygame.font.Font(None,30)#使用默认字体英文字体
font = pygame.font.Font("font.ttf", 20) # 使用汉语字体提示
text_surface = font.render(text, True, color) # 字体的颜色
text_position = (60, 60) # 字体的坐标
screen.blit(text_surface, text_position)
pygame.display.update() # 刷新,变色用的
pygame.time.wait(3000) # 显示字体等待3秒
#running = False # 程序关闭
button.clicked = False#赢了后点击“双人模式”继续游戏
def check(self,row, col): # 创建check函数检测五子连线
# 判断左右方向是否五子连线
score = 1
for i in range(4):
try:
if self.map[row][col + i] == self.map[row][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row][col - i] == self.map[row][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断上下方向是否五子连线
score = 1
for i in range(4):
try:
if self.map[row + i][col] == self.map[row + i + 1][col]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row - i][col] == self.map[row - i - 1][col]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断左下右上方向是否五子连线(左下行和列都减小,右上行和列都变大)
score = 1
for i in range(4):
try:
if self.map[row + i][col + i] == self.map[row + i + 1][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row - i][col - i] == self.map[row - i - 1][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
# 判断左上右下方向是否五子连线(左上行增加列减小,右下行变大,列变小)
score = 1
for i in range(4):
try:
if self.map[row - i][col + i] == self.map[row - i - 1][col + i + 1]:
score = score + 1
else:
break
except:
break
for i in range(4):
try:
if self.map[row + i][col - i] == self.map[row + i + 1][col - i - 1]:
score = score + 1
else:
break
except:
break
if score == 5:
return True
def mouse_Click(self,x,y):
if x >= border_left and x <= border_right and y >= border_top and y <= border_bottom: # 限制x的左右边
if self.started:#点击“双人模式”后可以玩游戏
col = round((x - 15) / 30) # 计算出x的位置
row = round((y - 15) / 30) # 计算出y的位置
if self.map[row][col] == 0:
print(row + 1, col + 1) # 打印出x与y的位置
# self.map[row][col] = 1#等于1表示把它的数值存储起来
self.map[row][col] = self.player #
if (self.check(row, col)): # 如果检测到五子连线了那么打印赢了
# print("有人赢了")
self.winner = self.player # 把赢赋值给winner
else:
if self.player == 1: # 当点击事件后
self.player = 2 # 2是黑子
else:
self.player = 1 # 下一次是白子
else:
print("当前位置已经被占领了")
else:
print("请点击了双人模式 后才能玩游戏了")
button = Button(30, 470, 100, 30, "双人模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个双人模式按钮
button_ai = Button(200, 470, 100, 30, "AI模式", (153, 51, 250), (221, 160, 221), (255, 255, 255)) # 画一个机器人模式按钮
game = Game()
while True:#事件运行
for event in pygame.event.get():
button.handle_event(event,game)
if event.type == pygame.QUIT:#当点击事件后退出
running = False #事件关闭
pygame.quit() # 退出游戏
exit()#系统级别的退出
elif event.type == pygame.MOUSEBUTTONDOWN:#鼠标相应点击事件
x,y = pygame.mouse.get_pos()#获取x,y的位置
game.mouse_Click(x,y)
game.start()
pygame.display.update() # 刷新,变色用的
到了这里,关于五子棋游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!