失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 使用pygame实现双人五子棋游戏

使用pygame实现双人五子棋游戏

时间:2018-11-01 15:12:04

相关推荐

使用pygame实现双人五子棋游戏

使用python语言和pygame库制作一个五子棋游戏。

代码转载自《跟我一起玩PYTHON编程(第二版,李珊著)》。

环境

pythonpygame库

python -m pip install pygame

源码

import pygame as pgclass ChessBord:def __init__(s):s.grid_length = 26s.grid_count = 20s.start_x = 150s.start_y = 50s.edge_length = s.grid_length / 2s.piece = "black"s.winner = Nones.gameover = Falses.grid = []for i in range(s.grid_count):s.grid.append(list("." * s.grid_count))def handle_event(s, e):origin_x = s.start_x - s.edge_lengthorigin_y = s.start_y - s.edge_lengthchessbord_length = (s.grid_count - 1) * s.grid_length + s.edge_length * 2mouse_pos = e.posif (mouse_pos[0] >= origin_x and mouse_pos[0] <= origin_x + chessbord_length) and (mouse_pos[1] >= origin_y and mouse_pos[1] <= origin_y + chessbord_length):if not s.gameover:x = mouse_pos[0] - origin_xc = int(x / s.grid_length)y = mouse_pos[1] - origin_yr = int(y / s.grid_length)if s.set_piece(r, c):s.check_win(r, c)def set_piece(s, r, c):if s.grid[r][c] == ".":s.grid[r][c] = s.pieceif s.piece == "black":s.piece = "white"else:s.piece = "black"return Truereturn Falsedef check_win(s, r, c):n_count = s.get_continous_count(r, c, -1, 0)s_count = s.get_continous_count(r, c, 1, 0)w_count = s.get_continous_count(r, c, 0, -1)e_count = s.get_continous_count(r, c, 0, 1)nw_count = s.get_continous_count(r, c, -1, -1)ne_count = s.get_continous_count(r, c, -1, 1)sw_count = s.get_continous_count(r, c, 1, -1)se_count = s.get_continous_count(r, c, 1, 1)if n_count + s_count >= 4 or e_count + w_count >= 4 or se_count + nw_count >= 4 or ne_count + sw_count >= 4:s.winner = s.grid[r][c]s.gameover = Truedef get_continous_count(s, r, c, dr, dc):piece = s.grid[r][c]result = 0i = 1while True:new_r = r + dr * inew_c = c + dc * iif 0 <= new_r < s.grid_count and 0 <= new_c < s.grid_count:if s.grid[new_r][new_c] == piece:result += 1else:breakelse:breaki += 1return resultdef draw(s, screen):pg.draw.rect(screen, (185, 122, 87), [s.start_x - s.edge_length, s.start_y - s.edge_length,(s.grid_count - 1) * s.grid_length + s.edge_length * 2,(s.grid_count - 1) * s.grid_length + s.edge_length * 2], 0)for r in range(s.grid_count):y = s.start_y + r * s.grid_lengthpg.draw.line(screen, (0, 0, 0), [s.start_x, y], [s.start_x + s.grid_length * (s.grid_count - 1), y], 2)for c in range(s.grid_count):x = s.start_x + c * s.grid_lengthpg.draw.line(screen, (0, 0, 0), [x, s.start_y], [x, s.start_y + s.grid_length * (s.grid_count - 1)], 2)for r in range(s.grid_count):for c in range(s.grid_count):piece = s.grid[r][c]if piece != ".":if piece == "black":color = (0, 0, 0)else:color = (255, 255, 255)x = s.start_x + c * s.grid_lengthy = s.start_y + r * s.grid_lengthpg.draw.circle(screen, color, [x, y], s.grid_length // 2)class Gomoku:def __init__(s):pg.init()s.screen = pg.display.set_mode((800, 600))pg.display.set_caption("五子棋")s.clock = pg.time.Clock()s.font = pg.font.Font(u"C:\\Windows\\Fonts\\consola.ttf", 24)s.going = Trues.chessbord = ChessBord()def loop(s):while s.going:s.update()s.draw()s.clock.tick(50)pg.quit()def update(s):for e in pg.event.get():if e.type == pg.QUIT:s.going = Falseelif e.type == pg.MOUSEBUTTONDOWN:s.chessbord.handle_event(e)def draw(s):s.screen.fill((255, 255, 255))s.screen.blit(s.font.render("FPS:{0:.3F}".format(s.clock.get_fps()), True, (0, 0, 0)), (10, 10))s.chessbord.draw(s.screen)if s.chessbord.gameover:s.screen.blit(s.font.render("{0}Win".format("black" if s.chessbord.winner == "black" else "white"), True, (0, 0, 0)),(500, 10))pg.display.update()if __name__ == "__main__":game = Gomoku()game.loop()

游戏运行截图

参考文献

[1]李珊.跟我一起玩PYTHON编程(第二版), 天津:天津科学技术出版社,.

如果觉得《使用pygame实现双人五子棋游戏》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。