问题描述:
设计五子棋游戏程序。该游戏有一个9x8方格的棋盘。游戏的双方各执一种颜色的棋子,在规定的方格内轮流布棋。如果一方在横、竖、斜方向上连成五子,则胜利。
分析:
制作Python五子棋的主要思路可以分为以下几个步骤:
1. 设计棋盘:你需要使用二维数组来表示棋盘。例如,一个9x8的棋盘可以使用一个15x15的二维数组来表示。数组的每个元素可以用来表示棋盘上的一个位置,元素的值可以表示该位置是空的,还是已经被某个玩家的棋子占据。
2. 设计棋子:你可以设定两个值,例如1和-1,来分别表示两个玩家的棋子。
3. 设计游戏规则:五子棋的规则是比较简单的,只要有五个连续的同色棋子就算赢。你可以设计一个函数来检查棋盘上是否有五个连续的同色棋子。
4. 设计玩家交互:你需要设计一个循环,让玩家轮流进行操作。每次操作,玩家需要输入他们想要放置棋子的位置,然后你需要更新棋盘并检查游戏是否已经结束。
5. 设计界面:虽然这不是必须的,但是一个友好的用户界面可以使游戏更加有趣。你可以使用Python的图形库,例如tkinter,来设计一个图形用户界面。
运行结果:
棋盘;
下棋:
代码:
from tkinter import *
from tkinter.messagebox import *
a=0
avr=[['w','w','w','w','w','w','w','w'],
['w','w','w','w','w','w','w','w'],
['w','w','w','w','w','w','w','w'],
['w','w','w','w','w','w','w','w'],
['w','w','w','w','w','w','w','w'],
['w','w','w','w','w','w','w','w'],
['w','w','w','w','w','w','w','w'],
['w','w','w','w','w','w','w','w'],
['w','w','w','w','w','w','w','w']]
def fun():
for i in range(9):
for j in range(8):
if avr[i][j] == 'bai':
cv.create_oval(8+j*45, 8+i*40, 55+j*45, 48+i*40, outline='red', fill='white')
elif avr[i][j] == 'hei':
cv.create_oval(8 + j * 45, 8 + i * 40, 55 + j * 45, 48 + i * 40, outline='red', fill='black')
def tan(x,y):
global a
if a==0:
avr[x][y]='hei' #黑色为a=0
a=1
else:
avr[x][y]='bai' #白色为a=1
a=0
#获胜方法
def victory():
for i in range(9): #横向
for j in range(0,4):
if avr[i][j]=='hei' and avr[i][j+1]=='hei' and avr[i][j+2]=='hei' and avr[i][j+3]=='hei' and avr[i][j+4]=='hei' :
showinfo(message="恭喜黑棋获胜!")
elif avr[i][j]=='bai' and avr[i][j+1]=='bai' and avr[i][j+2]=='bai' and avr[i][j+3]=='bai' and avr[i][j+4]=='bai' :
showinfo(message="恭喜白棋获胜!")
#纵向
for a in range(8):
for b in range(5):
if avr[b][a]=='hei' and avr[b+1][a]=='hei' and avr[b+2][a]=='hei' and avr[b+3][a]=='hei' and avr[b+4][a]=='hei' :
showinfo(message="恭喜黑棋获胜!")
elif avr[b][a]=='bai' and avr[b+1][a]=='bai' and avr[b+2][a]=='bai' and avr[b+3][a]=='bai' and avr[b+4][a]=='bai' :
showinfo(message="恭喜白棋获胜!")
#斜向
for x in range(5):
for y in range(4):
if avr[x][y]=='bai' and avr[x+1][y+1]=='bai' and avr[x+2][y+2]=='bai' and avr[x+3][y+3]=='bai' and avr[x+4][y+4]=='bai' :
showinfo(message="恭喜白棋获胜!")
elif avr[x][y]=='hei' and avr[x+1][y+1]=='hei' and avr[x+2][y+2]=='hei' and avr[x+3][y+3]=='hei' and avr[x+4][y+4]=='hei' :
showinfo(message="恭喜黑棋获胜!")
for m in range(4,9):
for n in range(4):
if avr[m][n]=='bai' and avr[m-1][n+1]=='bai' and avr[m-2][n+2]=='bai' and avr[m-3][n+3]=='bai' and avr[m-4][n+4]=='bai' :
showinfo(message="恭喜白棋获胜!")
elif avr[m][n]=='hei' and avr[m-1][n+1]=='hei' and avr[m-2][n+2]=='hei' and avr[m-3][n+3]=='hei' and avr[m-4][n+4]=='hei' :
showinfo(message="恭喜黑棋获胜!")
def ovre(event):
y = (event.x - 25) // 42
x = (event.y - 10) // 40
if x<0 or y<0:
x=y=0
tan(x,y)
fun()
victory()
root=Tk()
root.geometry("400x400")
cv=Canvas(root,width=400,height=400,bg='green')
for i in range(0,10):
on = cv.create_line(8, 8+i*40, 380,8+i*40 , arrow='none') #横向
en =cv.create_line(10 + i * 45, 8, 10 + i* 45, 370, arrow='none')
cv.bind("<Button-1>",ovre)
cv.pack()
root.mainloop()