我需要人与电脑对战,并且是窗口化的
时间: 2024-02-19 12:02:45 浏览: 23
好的,为了实现人与电脑的对战,我们需要对代码做一些修改,并且使用Python的GUI库来创建窗口化的游戏界面。
下面是一个基于Python的Tkinter库实现的井字棋游戏,你可以在这个游戏中选择人与电脑对战,并且实现了窗口化的界面。
```python
import tkinter as tk
import random
# 定义井字棋游戏窗口
class TicTacToe:
def __init__(self):
self.window = tk.Tk()
self.window.title('井字棋')
self.window.resizable(width=False, height=False)
self.board = [' '] * 9
self.player = 'X'
self.game_over = False
self.buttons = []
self.create_board()
self.create_menu()
# 创建游戏棋盘
def create_board(self):
for i in range(3):
for j in range(3):
button = tk.Button(self.window, text='', font=('Arial', 60), width=5, height=2,
command=lambda row=i, col=j: self.clicked(row, col))
button.grid(row=i, column=j)
self.buttons.append(button)
# 创建游戏菜单
def create_menu(self):
menu = tk.Menu(self.window)
self.window.config(menu=menu)
game_menu = tk.Menu(menu)
menu.add_cascade(label='游戏', menu=game_menu)
game_menu.add_command(label='人机对战', command=self.start_human_vs_ai)
game_menu.add_command(label='退出', command=self.window.destroy)
# 重置游戏状态
def reset_game(self):
self.board = [' '] * 9
self.game_over = False
for button in self.buttons:
button.config(text='')
if self.player == 'O':
self.ai_move()
# 判断是否有玩家获胜
def check_win(self, player):
if (self.board[0] == self.board[1] == self.board[2] == player) or \
(self.board[3] == self.board[4] == self.board[5] == player) or \
(self.board[6] == self.board[7] == self.board[8] == player) or \
(self.board[0] == self.board[3] == self.board[6] == player) or \
(self.board[1] == self.board[4] == self.board[7] == player) or \
(self.board[2] == self.board[5] == self.board[8] == player) or \
(self.board[0] == self.board[4] == self.board[8] == player) or \
(self.board[2] == self.board[4] == self.board[6] == player):
return True
else:
return False
# 玩家点击事件
def clicked(self, row, col):
index = row * 3 + col
if not self.game_over and self.board[index] == ' ':
self.board[index] = self.player
self.buttons[index].config(text=self.player)
if self.check_win(self.player):
self.game_over = True
self.show_message('恭喜你获胜!')
elif ' ' not in self.board:
self.game_over = True
self.show_message('游戏结束,平局!')
else:
self.player = 'O' if self.player == 'X' else 'X'
if not self.game_over and self.player == 'O':
self.ai_move()
# 显示消息框
def show_message(self, msg):
result = tk.messagebox.showinfo('游戏结束', msg)
if result == 'ok':
self.reset_game()
# 电脑下棋
def ai_move(self):
# 随机选择一个空位置
index = random.choice([i for i in range(9) if self.board[i] == ' '])
self.board[index] = 'O'
self.buttons[index].config(text='O')
if self.check_win('O'):
self.game_over = True
self.show_message('很遗憾,你输了!')
elif ' ' not in self.board:
self.game_over = True
self.show_message('游戏结束,平局!')
else:
self.player = 'X'
# 开始人机对战
def start_human_vs_ai(self):
self.reset_game()
# 运行游戏
def run(self):
self.window.mainloop()
# 创建井字棋游戏实例并运行
game = TicTacToe()
game.run()
```
运行代码后,你可以在游戏窗口中选择“游戏”->“人机对战”来开始人与电脑的对战。当你下完棋后,程序会自动判断胜负和平局,并且显示相应的消息框提示你游戏结果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)