import random
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import PhotoImage
from tkinter import messagebox
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master=master)
self.master = master
self.grid()
self.username = tk.StringVar()
self.main_frame()
self.moves = ['rock', 'paper', 'scissor']
self.userPoint = 0
self.sysPoint = 0
self.imIndex = 0
self.imDelta = 1
self.animateFrame = 0
self.after_id = None
self.imgDict = {'rock':rock_list, 'paper':paper_list,'scissor':scissor_list}
def main_frame(self):
self.main = tk.Frame(self, width=400, height=300, bg='white')
self.main.grid(row=0, column=0)
self.main.grid_propagate(False)
self.game_lbl = tk.Label(self.main, image=rps_icon)
self.game_lbl.grid(row=0, column=0, columnspan=3, padx=90, pady=10)
self.name_lbl = tk.Label(self.main, text='Enter your name : ',
font='verdana 10', bg='white')
self.name_lbl.grid(row=1, column=0, pady=10)
self.name_entry = ttk.Entry(self.main, textvariable=self.username)
self.name_entry.grid(row=1, column=1, columnspan=2, pady=10)
self.name_entry.focus_set()
self.play = ttk.Button(self.main, text='Play Game', width=10,
command=self.play_game)
self.play.grid(row=2, column=0, pady=20)
self.quit = ttk.Button(self.main, text='Quit Game', width=10,
command=self.master.destroy)
self.quit.grid(row=2, column=2, pady=20)
def play_game(self):
if self.username.get():
self.main.destroy()
self.draw_frames()
self.draw_header_frame()
self.draw_body_frame()
self.draw_footer_frame()
self.rock_user.bind('<Button-1>', lambda event, m='rock': self.move(m))
self.paper_user.bind('<Button-1>', lambda event, m='paper': self.move(m))
self.scissor_user.bind('<Button-1>', lambda event, m='scissor': self.move(m))
else:
messagebox.showinfo('Rock Paper Scissor', 'Player name is required')
self.name_entry.focus_set()
def draw_frames(self):
self.header = tk.Frame(self, width=400, height=100)
self.body = tk.Frame(self, width=400, height=170)
self.footer = tk.Frame(self, width=400, height=30)
self.header.grid(row=0, column=0)
self.body.grid(row=1, column=0)
self.footer.grid(row=2, column=0)
self.header.grid_propagate(False)
self.body.grid_propagate(False)
self.footer.grid_propagate(False)
def draw_header_frame(self):
self.title = tk.Label(self.header, text='Rock Paper Scissor', fg='black',
font='Verdana 14')
self.title.grid(row=0, column=1, columnspan=3, pady=(5,7))
self.left = tk.LabelFrame(self.header, width=150, height=55, borderwidth=5)
self.left.grid(row=1, column=0, columnspan=2, padx=(25,10))
self.left.grid_propagate(False)
self.vs = tk.Label(self.header, text='Vs', fg='red', font='Verdana 15 bold')
self.vs.grid(row=1, column=2)
self.right = tk.LabelFrame(self.header, width=150, height=55, borderwidth=5)
self.right.grid(row=1, column=3, columnspan=2, padx=10)
self.right.grid_propagate(False)
self.username = tk.Label(self.left, text=f'{self.username.get()}', fg='dodgerblue3',
font='verdana 10', padx=30)
self.upoint = tk.Label(self.left, text=f'({self.userPoint})', fg='dodgerblue3',font='verdana 10')
self.username.grid(row=0, column=0, sticky='news')
self.upoint.grid(row=1, column=0, sticky='news')
self.sysname = tk.Label(self.right, text=f'system', fg='dodgerblue3',
font='verdana 10', padx=40)
self.spoint = tk.Label(self.right, text=f'({self.userPoint})', fg='dodgerblue3',font='verdana 10')
self.sysname.grid(row=0, column=0, sticky='news')
self.spoint.grid(row=1, column=0, sticky='news')
def draw_body_frame(self):
self.rock_user = tk.Label(self.body, image=rock_small, cursor='hand2')
self.rock_user.grid(row=0, column=0, pady=(5,0), padx=(45,10))
self.paper_user = tk.Label(self.body, image=paper_small, cursor='hand2')
self.paper_user.grid(row=1, column=0, pady=(5,0), padx=(50,10))
self.scissor_user = tk.Label(self.body, image=scissor_small, cursor='hand2')
self.scissor_user.grid(row=2, column=0, pady=(5,0), padx=(45,10))
self.result_box = tk.Frame(self.body, width=180, height=100)
self.result_box.grid(row=0, column=1, rowspan=2, columnspan=4)
self.result_box.grid_propagate(False)
self.lbox = tk.Frame(self.result_box, width=90, height=100)
self.lbox.grid(row=0, column=0)
self.lbox.grid_propagate(False)
self.rbox = tk.Frame(self.result_box, width=90, height=100)
self.rbox.grid(row=0, column=1)
self.rbox.grid_propagate(False)
self.rock_system = tk.Label(self.body, image=rock_small)
self.rock_system.grid(row=0, column=5, pady=(5,0), padx=(10,10))
self.paper_system = tk.Label(self.body, image=paper_small)
self.paper_system.grid(row=1, column=5, pady=(5,0), padx=(15,10))
self.scissor_system = tk.Label(self.body, image=scissor_small)
self.scissor_system.grid(row=2, column=5, pady=(5,0), padx=(10,10))
self.r1 = tk.Label(self.lbox, image='')
self.r1.grid(row=0, column=0, pady=3, padx=1)
self.r2 = tk.Label(self.rbox, image='')
self.r2.grid(row=0, column=1, pady=3, padx=1)
self.winner_msg = tk.Label(self.body, text='', fg='green',
font='verdana 16 bold')
self.winner_msg.grid(row=2, column=1, columnspan=4)
def draw_footer_frame(self):
self.reset_btn = ttk.Button(self.footer, text='Reset', command=self.reset_game)
self.reset_btn.grid(row=0, column=0, padx=(120,20))
self.home_btn = ttk.Button(self.footer, text='Home', command=self.go_home)
self.home_btn.grid(row=0, column=1, padx=10, sticky='w')
def move(self, user_move):
self.imIndex = 0
if self.after_id:
self.after_cancel(self.after_id)
sys_move = random.choice(self.moves)
if user_move == 'rock':
image1 = rock_large
elif user_move == 'paper':
image1 = paper_large
elif user_move == 'scissor':
image1 = scissor_large
if sys_move == 'rock':
image2 = rock_large
elif sys_move == 'paper':
image2 = paper_large
elif sys_move == 'scissor':
image2 = scissor_large
winner = self.check_winner(user_move, sys_move)
self.update_winner(winner)
if winner == 'You Won!':
self.animate = True
list_ = self.imgDict[user_move]
self.after_id = self.after(100, lambda : self.animate_winner('user', list_))
self.r2['image'] = image2
elif winner == 'You Lost!':
self.animate = True
list_ = self.imgDict[sys_move]
self.after_id = self.after(100, lambda : self.animate_winner('sys', list_))
self.r1['image'] = image1
else:
self.r1['image'] = image1
self.r2['image'] = image2
def check_winner(self, user_move, sys_move):
res = None
if user_move == 'rock':
if sys_move == 'rock':
res = 'Draw'
elif sys_move == 'paper':
res = 'You Lost!'
elif sys_move == 'scissor':
res = 'You Won!'
elif user_move == 'paper':
if sys_move == 'rock':
res = 'You Won!'
elif sys_move == 'paper':
res = 'Draw'
elif sys_move == 'scissor':
res = 'You Lost!'
elif user_move == 'scissor':
if sys_move == 'rock':
res = 'You Lost!'
elif sys_move == 'paper':
res = 'You Won!'
elif sys_move == 'scissor':
res = 'Draw'
return res
def update_winner(self, winner):
if winner == 'You Won!':
fg = 'green'
self.userPoint += 1
self.upoint['text'] = f'({self.userPoint})'
elif winner == 'You Lost!':
fg = 'red'
self.sysPoint += 1
self.spoint['text'] = f'({self.sysPoint})'
elif winner == 'Draw':
fg = 'gray'
self.winner_msg['fg'] = fg
self.winner_msg['text'] = winner
def animate_winner(self, winner, img_list):
img = img_list[self.imIndex]
if self.imIndex == 0:
self.imDelta = 1
if self.imIndex == 10:
self.imDelta = -1
self.imIndex += self.imDelta
if winner == 'user':
self.r1.c
没有合适的资源?快使用搜索试试~ 我知道了~
PYTHON 游戏:图形界面化的猜拳游戏
共41个文件
png:40个
py:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 73 浏览量
2024-01-08
07:44:04
上传
评论
收藏 108KB ZIP 举报
温馨提示
玩家和电脑的猜拳游戏,操作简单,图形化界面
资源推荐
资源详情
资源评论
收起资源包目录
Rock Paper Scissor.zip (41个子文件)
Rock Paper Scissor
game.py 9KB
icons
rock_small.png 965B
rps.png 45KB
rock_large.png 1KB
paper_small.png 907B
paper_large.png 1KB
scissor_small.png 1KB
scissor_large.png 2KB
animate
scissor_large6.png 2KB
paper_large9.png 1KB
paper_large7.png 1KB
scissor_large2.png 2KB
rock_large5.png 1KB
rock_large2.png 1KB
paper_large3.png 1KB
paper_large8.png 1KB
rock_large7.png 1KB
scissor_large7.png 2KB
scissor_large3.png 2KB
rock_large1.png 1KB
rock_large6.png 1KB
paper_large6.png 1KB
paper_large0.png 1KB
paper_large2.png 1KB
scissor_large10.png 2KB
rock_large3.png 1KB
paper_large5.png 1KB
paper_large4.png 1KB
paper_large1.png 1KB
scissor_large1.png 2KB
rock_large10.png 2KB
rock_large0.png 1KB
scissor_large9.png 2KB
rock_large8.png 1KB
rock_large9.png 2KB
scissor_large5.png 2KB
scissor_large0.png 2KB
scissor_large4.png 2KB
rock_large4.png 1KB
paper_large10.png 1KB
scissor_large8.png 2KB
共 41 条
- 1
资源评论
听风吹等浪起
- 粉丝: 1w+
- 资源: 1012
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功