用户:L0_0查看:0 回复:0 评论:0 创建时间:2021-03-20T20:25:45
【作品展示】

【作品介绍】
tkinter中的组件可以让我编出好玩的游戏
【作品源代码】
import time
import random
from tkinter import Tk, Menu, Label, Button, messagebox
root = Tk()
root.title('猜拳游戏')
root.resizable(width=False, height=False)
over = False
control_panol_list = ''
my_score = 0
computer_score = 0
my_win_count = 0
my_lose_count = 0
computer_win_count = 0
computer_lose_count = 0
draw_count = 0
game_count = 0
Label(root, width=18, height=3, fg='red', text='我').grid(row=0, columnspan=2)
Label(root, width=18, height=6, fg='orange', text='VS').grid(column=2, row=0, columnspan=2, rowspan=2)
Label(root, width=18, height=3, fg='blue', text='电脑').grid(column=4, row=0, columnspan=2)
my_score_label = Label(root, width=18, height=3, fg='red', text=0)
my_score_label.grid(row=1, columnspan=2)
computer_score_label = Label(root, width=18, height=3, fg='blue', text=0)
computer_score_label.grid(column=4, row=1, columnspan=2)
Label(root, width=6, height=1, bd=4, bg='dark grey', text='控制台', anchor='w').grid(row=3)
control_panel = Label(width=51, height=1, bd=4, bg='grey', anchor='nw')
control_panel.grid(column=1, row=3, columnspan=5)
def show_hint():
messagebox.showinfo('玩法', '游戏和猜拳游戏规则一样,赢了的加分,平局各加一分,你可以查看对战结果在"统计"里。')
def new_game():
global over, control_panol_list
over = False
control_panel['text'] = time.ctime() + ' 新开一局游戏\n'
control_panol_list += control_panel['text']
def show_statistics():
try:
messagebox.showinfo('统计', '游戏比分:\n我 : 电脑 = ' + str(my_score) + ' : ' + str(computer_score) + '\n\n游戏次数:' + str(game_count) + '\n\n我的情况:\n获胜次数:' + str(my_win_count) + '\n失败次数:' + str(my_lose_count) + '\n获胜几率:' + str(my_win_count / game_count * 100) + '%\n\n电脑情况:\n获胜次数:' + str(computer_win_count) + '\n失败次数:' + str(computer_lose_count) + '\n获胜几率:' + str(computer_win_count / game_count * 100) + '%\n\n平局次数:' + str(draw_count))
except:
messagebox.showinfo('统计', '游戏比分:\n我 : 电脑 = 0 : 0\n\n游戏次数:0\n\n我的情况:\n获胜次数:0\n失败次数:0\n获胜几率:0.0%\n\n电脑情况:\n获胜次数:0\n失败次数:0\n获胜几率:0.0%\n\n平局次数:0')
def show_records():
messagebox.showinfo('控制台记录', control_panol_list)
def reset():
global over, my_score, draw_count, game_count, my_win_count, my_lose_count, computer_score, control_panol_list, computer_win_count, computer_lose_count
if messagebox.askquestion('重置游戏数据', '本操作会重置你的游戏记录和控制台记录,是否继续?') == 'yes':
over = False
control_panol_list = ''
my_score = 0
computer_score = 0
my_win_count = 0
my_lose_count = 0
computer_win_count = 0
computer_lose_count = 0
draw_count = 0
game_count = 0
my_score_label['text'] = 0
computer_score_label['text'] = 0
menubar = Menu(root)
gamemenu = Menu(menubar, tearoff=0)
gamemenu.add_command(label='玩法', command=show_hint)
gamemenu.add_command(label='新游戏', command=new_game)
gamemenu.add_separator()
gamemenu.add_command(label='统计', command=show_statistics)
gamemenu.add_command(label='控制台记录', command=show_records)
gamemenu.add_command(label='重置游戏数据', command=reset)
menubar.add_cascade(label='菜单', menu=gamemenu)
root.config(menu=menubar)
def Rock_paper_scissors(text):
global over, my_score, draw_count, game_count, my_win_count, my_lose_count, computer_score, control_panol_list, computer_win_count, computer_lose_count
if not over:
over = True
game_count += 1
right_player = random.choice(['✊', '✌', '✋'])
index_in_left_player = ['✊', '✌', '✋'].index(text)
index_in_right_player = ['✊', '✌', '✋'].index(right_player)
if (index_in_left_player, index_in_right_player) in [(0, 1), (1, 2), (2, 0)]:
message = '你赢了。'
my_win_count += 1
computer_lose_count += 1
my_score += 1
elif (index_in_left_player, index_in_right_player) in [(1, 0), (2, 1), (0, 2)]:
message = '你输了。'
my_lose_count += 1
computer_win_count += 1
computer_score += 1
else:
message = '平局。'
my_score += 1
computer_score += 1
draw_count += 1
control_panel['text'] = time.ctime() + ' ' + '你已出了:' + text + ' 电脑出了:' + right_player + ' ' + message
control_panol_list += control_panel['text'] + '\n'
messagebox.showinfo('猜拳游戏', message)
my_score_label['text'] = my_score
computer_score_label['text'] = computer_score
else:
messagebox.showerror('猜拳游戏', '本局已结束。')
def clear_the_console():
control_panel['text'] = ''
Button(root, width=27, height=3, command=clear_the_console, text='清除控制台').grid(row=2, columnspan=3)
for i in range(3):
Button(root, width=9, height=3, text=['✊', '✌', '✋'][i], command=lambda text=['✊', '✌', '✋'][i]: Rock_paper_scissors(text)).grid(column=3+i, row=2)
root.mainloop()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn