使用python语言编写一个五子棋小游戏,包括双人对战和人机对战(在初始界面可以手动选择模式),自己绘制棋盘和棋子(棋子只能是黑白两色,棋盘为网格,棋子需落在网格横线与竖线的交线处),只通过是否成功连成五个棋子进行判断输赢
时间: 2024-02-28 15:55:28 浏览: 19
好的,我来为您解答这个问题。
首先,我们需要安装pygame模块,用于绘制游戏界面和棋盘。
```
pip install pygame
```
接下来,我们可以创建一个名为gobang.py的文件,并导入pygame模块。
```python
import pygame
```
然后,我们可以定义一些常量,如棋盘大小、棋子大小、格子大小等。
```python
WIDTH = 640
HEIGHT = 640
GRID_SIZE = 40
PIECE_SIZE = 36
ROWS = HEIGHT // GRID_SIZE
COLS = WIDTH // GRID_SIZE
```
接着,我们可以定义一个名为Gobang的类,用于表示游戏。
```python
class Gobang:
def __init__(self):
self.board = [[0] * ROWS for _ in range(COLS)]
self.turn = 1
self.game_over = False
```
在上面的代码中,我们用一个二维列表表示棋盘,0表示空,1表示黑子,2表示白子。turn表示当前玩家,1表示黑方,2表示白方。game_over表示游戏是否结束。
接下来,我们可以定义一些方法,如绘制棋盘、绘制棋子、下棋等。
```python
class Gobang:
...
def draw_board(self, surface):
for i in range(ROWS):
pygame.draw.line(surface, (0, 0, 0), (0, i * GRID_SIZE), (WIDTH, i * GRID_SIZE))
for j in range(COLS):
pygame.draw.line(surface, (0, 0, 0), (j * GRID_SIZE, 0), (j * GRID_SIZE, HEIGHT))
def draw_piece(self, surface, row, col):
x = col * GRID_SIZE + GRID_SIZE // 2
y = row * GRID_SIZE + GRID_SIZE // 2
if self.turn == 1:
color = (0, 0, 0)
else:
color = (255, 255, 255)
pygame.draw.circle(surface, color, (x, y), PIECE_SIZE)
def play(self, row, col):
if self.board[row][col] == 0:
self.board[row][col] = self.turn
self.game_over = self.check_win(row, col)
if not self.game_over:
self.turn = 3 - self.turn
def check_win(self, row, col):
count = 0
for i in range(ROWS):
if self.board[i][col] == self.turn:
count += 1
else:
count = 0
if count == 5:
return True
count = 0
for j in range(COLS):
if self.board[row][j] == self.turn:
count += 1
else:
count = 0
if count == 5:
return True
count = 0
for k in range(-4, 5):
i, j = row + k, col + k
if 0 <= i < ROWS and 0 <= j < COLS and self.board[i][j] == self.turn:
count += 1
else:
count = 0
if count == 5:
return True
count = 0
for k in range(-4, 5):
i, j = row + k, col - k
if 0 <= i < ROWS and 0 <= j < COLS and self.board[i][j] == self.turn:
count += 1
else:
count = 0
if count == 5:
return True
return False
```
在上面的代码中,draw_board方法用于绘制棋盘,draw_piece方法用于绘制棋子,play方法用于下棋,check_win方法用于判断是否胜利。
最后,我们可以创建一个名为main的函数,用于运行游戏。
```python
def main():
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Gobang')
clock = pygame.time.Clock()
game = Gobang()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN and not game.game_over:
x, y = pygame.mouse.get_pos()
col, row = x // GRID_SIZE, y // GRID_SIZE
game.play(row, col)
screen.fill((255, 255, 255))
game.draw_board(screen)
for i in range(ROWS):
for j in range(COLS):
if game.board[i][j] != 0:
game.draw_piece(screen, i, j)
if game.game_over:
font = pygame.font.Font(None, 48)
text = font.render('Player %d wins!' % game.turn, True, (255, 0, 0))
screen.blit(text, (WIDTH // 2 - text.get_width() // 2, HEIGHT // 2 - text.get_height() // 2))
pygame.display.update()
clock.tick(30)
```
在上面的代码中,我们创建了一个名为screen的窗口,并在其中运行游戏。我们用pygame.event.get()获取事件,包括退出事件和鼠标点击事件。在鼠标点击事件中,我们获取鼠标点击的坐标,并调用Gobang的play方法下棋。然后,我们用pygame.draw.circle绘制棋子,并用pygame.font.Font绘制胜利提示信息。
最后,我们可以在main函数中调用pygame.init()初始化pygame,用pygame.display.set_mode()创建窗口,用pygame.display.set_caption()设置窗口标题,用pygame.time.Clock()创建时钟对象,用while True循环运行游戏。
完整的代码如下所示: