python 初级小游戏 五子棋游戏

问题描述:

设计五子棋游戏程序。该游戏有一个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()

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值