猫史档案馆


【Python作品分享】猜拳游戏【作品秀】

用户:L0_0L0_0查看:0 回复:0 评论:0 创建时间:2021-03-20T20:25:45


【作品展示】

center_image

 

【作品介绍】

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


回复

上一页1 页 / 共 0下一页