Python仅四步写出完整漂亮的五子棋

最近比较闲,将写游戏练习python的心得发出来。先以五子棋为例,实现基本功能简单四步即可写出完整漂亮的五子棋,代码不过140余行。现一步一步分解发出来,方便初学者交流。

虽然代码看上去不是很专业,不过,通过这种方式,对python初学者来说很容易理解。基本功能比如判断胜负、悔棋、重新开局都包括在内,也只不过140多行。当然还有需要完善的地方,欢迎交流。以后或将中国象棋,愤怒的小鸟,扫地雷也都分解发出来,以上都无需做图,全用代码实现,且很漂亮的界面。

写游戏不仅非常有趣,而且也能很快加深对编程的理解,欢迎留言交流。

第一步,画出棋盘
画棋盘代码
运行效果图
在这里插入图片描述
第二步,画出棋子,实现轮流下棋

黄框内为画出棋子,实现轮流下棋代码
在这里插入图片描述

第二步运行效果图

第三步,判断胜负

在这里插入图片描述
黄框内为判断胜负新加代码

在这里插入图片描述
第三步运行效果图

第四步,加入重新开局、悔棋、显示步骤信息、退出等功能

在这里插入图片描述
四步全部代码,黄框内为新加功能代码

在这里插入图片描述
运行效果图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很抱歉,我是一个语言模型AI,无法编写实际的代码,但是我可以提供一份五子棋Python实现代码供你参考: ```python import os import sys # 五子棋类 class Gobang: # 初始化 def __init__(self): self.board_size = 15 # 棋盘大小 self.board = [] # 棋盘 for i in range(self.board_size): self.board.append(["+" for j in range(self.board_size)]) self.chess = "x" # 刚开始下棋的颜色 self.win_flag = False # 是否已分出胜负 # 打印棋盘 def print_board(self): os.system("cls") print(" " * 2, end="") for j in range(self.board_size): print(chr(ord("A") + j), end=" ") print() for i in range(self.board_size): print("{:>2} ".format(i + 1), end="") for j in range(self.board_size): print(self.board[i][j], end=" ") print() print() # 判断棋子是否在范围内 def is_valid(self, x, y): if x < 0 or x >= self.board_size or y < 0 or y >= self.board_size: return False return True # 判断位置是否已经有棋子了 def is_empty(self, x, y): if self.board[x][y] == "+": return True return False # 落子 def drop_chess(self, x, y): self.board[x][y] = self.chess # 切换下棋的颜色 def toggle_chess(self): if self.chess == "x": self.chess = "o" else: self.chess = "x" # 判断横向是否有五颗相同的棋子 def check_horizonal(self, x, y): count = 1 # 统计相同的棋子数量 i, j = x, y - 1 while self.is_valid(i, j) and not self.is_empty(i, j) and self.board[i][j] == self.chess: count += 1 j -= 1 i, j = x, y + 1 while self.is_valid(i, j) and not self.is_empty(i, j) and self.board[i][j] == self.chess: count += 1 j += 1 return count >= 5 # 判断纵向是否有五颗相同的棋子 def check_vertical(self, x, y): count = 1 i, j = x - 1, y while self.is_valid(i, j) and not self.is_empty(i, j) and self.board[i][j] == self.chess: count += 1 i -= 1 i, j = x + 1, y while self.is_valid(i, j) and not self.is_empty(i, j) and self.board[i][j] == self.chess: count += 1 i += 1 return count >= 5 # 判断左上到右下是否有五颗相同的棋子 def check_diag1(self, x, y): count = 1 i, j = x - 1, y - 1 while self.is_valid(i, j) and not self.is_empty(i, j) and self.board[i][j] == self.chess: count += 1 i -= 1 j -= 1 i, j = x + 1, y + 1 while self.is_valid(i, j) and not self.is_empty(i, j) and self.board[i][j] == self.chess: count += 1 i += 1 j += 1 return count >= 5 # 判断右上到左下是否有五颗相同的棋子 def check_diag2(self, x, y): count = 1 i, j = x - 1, y + 1 while self.is_valid(i, j) and not self.is_empty(i, j) and self.board[i][j] == self.chess: count += 1 i -= 1 j += 1 i, j = x + 1, y - 1 while self.is_valid(i, j) and not self.is_empty(i, j) and self.board[i][j] == self.chess: count += 1 i += 1 j -= 1 return count >= 5 # 判断是否已经分出胜负 def check_win(self, x, y): if ( self.check_horizonal(x, y) or self.check_vertical(x, y) or self.check_diag1(x, y) or self.check_diag2(x, y) ): return True return False # 游戏循环 def game_loop(self): while not self.win_flag: self.print_board() chess_pos = input("{} to move (e.g. A1): ".format(self.chess)).strip().upper() if len(chess_pos) != 2: continue x = ord(chess_pos[0]) - ord("A") y = int(chess_pos[1:]) - 1 if not self.is_valid(x, y) or not self.is_empty(x, y): continue self.drop_chess(x, y) if self.check_win(x, y): self.win_flag = True print("{} wins!".format(self.chess)) self.toggle_chess() # 主函数 def main(): gobang = Gobang() gobang.game_loop() if __name__ == "__main__": main() ``` 这份代码实现了以下功能: - 初始化一个15x15的棋盘; - 下棋的初始颜色是黑色("x"); - 双方轮流输入棋子的位置坐标,可以输入类似于"A1"这样的形式,输入无效的坐标会被忽略; - 每次落子后会检查是否已经分出胜负,如果已经有一方胜利,则游戏结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_57025519

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值