基于Python如何实现骰子小游戏

其他教程   发布日期:2023年07月16日   浏览次数:474

这篇文章主要讲解了“基于Python如何实现骰子小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于Python如何实现骰子小游戏”吧!

一、环境准备

1)运行环境

开发环境:Python3、Pycharm社区版、tkinter,部分自带的模块安装Python即可使用。

2)模块安装

第三方库的安装方式如下:

一般安装:pip install +模块名

镜像源安装:pip install -i pypi.douban.com/simple/+模块名…

二、代码展示

1)主程序界面

  1. import tkinter as tk
  2. from sohagame import Unique_SohaGame
  3. from Windows import Unique_Windows
  4. """主函数程序入口"""
  5. if __name__ == '__main__':
  6. root = tk.Tk()
  7. root['width'] = 600
  8. root['height'] = 400
  9. root['bg'] = 'white'
  10. root.title("骰子梭哈游戏")
  11. soha = Unique_SohaGame()
  12. Unique_Windows(root, soha)
  13. root.mainloop()

2)界面类

界面类,主要管理tkintter界面布局, 界面与界面之间的跳转、 信息传递注:为减少冗余描述,类似属性的相同功能仅介绍一遍, 不重复介绍。 整个游戏界面采用tkinter布局中的place布局

  1. import tkinter as tk
  2. import tkinter.messagebox
  3. class Unique_Windows:
  4. # 界面管理类初始化操作, 传入两个参数, root是Tk()对象,用于生成窗口、界面,soha是游戏类对象,用于给按键等附加功能
  5. def __init__(self, root, soha):
  6. self.root = root
  7. self.soha = soha
  8. self.lbl = tk.Label(self.root, text='欢迎来到骰子梭哈游戏', font=('microsoft yahei', 15),
  9. fg='white', bg='#007d65')
  10. self.lbl.place(x=150, y=0)
  11. self.lbl1 = tk.Label(self.root, bg='#007d65', text='请操作:', font=('microsoft yahei', 15),
  12. fg='Orange')
  13. self.lbl1.place(x=120, y=40)
  14. self.f1 = None
  15. self.f2 = None
  16. self.cfl_createStartWidget()
  17. def cfl_createStartWidget(self): # 创造游戏root开始界面(下面相同属性就不一一介绍,道理相同)
  18. self.root['width'] = 600 # 设置宽高
  19. self.root['height'] = 400
  20. self.root['bg'] = "#007d65" # 设置背景颜色
  21. if self.f1: # 如果存在一个Frame窗口框架控件,则删除, 然后新建一个该控件。
  22. self.f1.destroy()
  23. self.f1 = tk.Frame(self.root)
  24. self.f1['width'] = 400 # 设置控件宽高
  25. self.f1['height'] = 300
  26. self.f1['bg'] = '#007d65' # 设置控件背景颜色
  27. '''添加组件到Frame控件中'''
  28. self.btStart = tk.Button(self.f1, text='开始游戏', font=('黑体', 18), # 开始游戏按键,点击开始游戏, 即可进入游戏界面
  29. width=20, fg='black', command=self.cfl_startSohaGame) # 添加按钮关联的方法
  30. self.btStart.place(x=80, y=50) # 整个游戏界面采用place布局
  31. self.btEnd = tk.Button(self.f1, text='结束游戏', font=('黑体', 18),
  32. width=20, fg='black', command=self.cfl_gameOver) # 添加结束游戏方法
  33. self.btEnd.place(x=80, y=150)
  34. self.f1.place(x=0, y=80)
  35. def cfl_createContentWidge(self): # 创造游戏内容界面(本质上是重写了Frame类型f2的布局, 并将以前的f2布局销毁)
  36. """创造游戏内容界面"""
  37. self.root['width'] = 800
  38. self.root['height'] = 600
  39. if self.f2:
  40. self.f2.destroy()
  41. self.f2 = tk.Frame(self.root)
  42. self.f2['width'] = 800
  43. self.f2['height'] = 600
  44. self.f2['bg'] = '#d9d6c3'
  45. self.f2.place(x=0, y=0)
  46. self.lab01 = tk.Label(self.f2, text='双人骰子/多人骰子游戏', font=('黑体', 30), fg='black', bg="#d9d6c3")
  47. self.lab01.place(x=200, y=100)
  48. """主要按钮及显示效果"""
  49. '''返回按钮'''
  50. self.btn1 = tk.Button(self.f2, text="返回", fg='#224b8f', font=('黑体', 18), bg="wheat", command=self.cfl_backToRoot)
  51. self.btn1.place(x=150, y=500)
  52. '''选择双人游戏按钮'''
  53. self.lab03 = tk.Label(self.f2, text="人数限定:2", bg="#d9d6c3", fg='black', font=('黑体', 18))
  54. self.lab03.place(x=150, y=300)
  55. self.btn2 = tk.Button(self.f2, text="双人骰子", bg="wheat", font=('黑体', 18), command=self.cfl_createDoubleDiceGame)
  56. self.btn2.place(x=150, y=200)
  57. '''选择多人游戏按钮'''
  58. self.entry03 = tk.Entry(self.f2, bg="white", font=('黑体', 18))
  59. self.entry03.place(x=350, y=260)
  60. self.lab04 = tk.Label(self.f2, bg="#d9d6c3", fg='black', text="人数限定:3~10(在上方输入框输入人数)", font=('黑体', 18))
  61. self.lab04.place(x=350, y=300)
  62. def cmd1(): # 内置方法, 主要用于实现按钮的功能
  63. self.cfl_Multiplayer(self.entry03.get())
  64. self.btn2 = tk.Button(self.f2, bg="wheat", text="多人骰子", font=('黑体', 18), command=cmd1)
  65. self.btn2.place(x=350, y=200)
  66. def cfl_startSohaGame(self): # 游戏开始
  67. self.cfl_createContentWidge()
  68. def cfl_gameOver(self): # 游戏结束
  69. self.root.quit()
  70. def cfl_backToRoot(self): # 返回开始游戏界面
  71. self.cfl_createStartWidget()
  72. self.f2.destroy()
  73. def cfl_createDoubleDiceGame(self): # 双人骰子游戏界面布局
  74. if self.f2:
  75. self.f2.destroy()
  76. self.f2 = tk.Frame(self.root)
  77. self.f2['width'] = 800
  78. self.f2['height'] = 600
  79. self.lab01 = tk.Label(self.f2, font=('黑体', 14), text="@玩家1,请在下方输入框输入您的名字:")
  80. self.lab01.place(x=140, y=40)
  81. self.entry01 = tk.Entry(self.f2, width=40)
  82. self.entry01.place(x=200, y=90)
  83. self.lab02 = tk.Label(self.f2, font=('黑体', 14), text="@玩家2,请在下方输入框输入您的名字:")
  84. self.lab02.place(x=140, y=160)
  85. self.entry02 = tk.Entry(self.f2, width=40)
  86. self.entry02.place(x=200, y=210)
  87. def cmd1():
  88. '''获取骰子'''
  89. self.soha.zmx_getPlayerDiceList()
  90. def cmd2():
  91. '''获取玩家姓名'''
  92. self.soha.llq_getPlayerName(self.entry01.get(), self.entry02.get())
  93. def cmd3():
  94. '''判断玩家输赢'''
  95. if len(self.soha.playerList) == 0:
  96. tk.messagebox.showinfo("错误提示", "名字不能为空!!!")
  97. elif self.soha.playerList[0].Dice_List == []:
  98. tk.messagebox.showinfo("错误提示", "请为每个玩家获取骰子数据!!!")
  99. else:
  100. self.cfl_outputDoubleWinner()
  101. self.soha.playerList = [] # 清空数据
  102. self.btn2 = tk.Button(self.f2, font=('黑体', 14), text="提交姓名", command=cmd2)
  103. self.btn2.place(x=180, y=280)
  104. self.btn6 = tk.Button(self.f2, font=('黑体', 14), text="获取骰子", command=cmd1)
  105. self.btn6.place(x=360, y=280)
  106. self.btn3 = tk.Button(self.f2, font=('黑体', 14), text="获取输赢结果", command=cmd3)
  107. self.btn3.place(x=360, y=350)
  108. self.btn4 = tk.Button(self.f2, font=('黑体', 14), text="返回", command=self.cfl_createContentWidge)
  109. self.btn4.place(x=180, y=350)
  110. self.f2.place(x=20, y=0)
  111. self.f2.place(x=0, y=0)
  112. def cfl_outputDoubleWinner(self):
  113. result = self.soha.mhl_judgeTwoVictory()
  114. if self.f2:
  115. self.f2.destroy()
  116. self.f2 = tk.Frame(self.root)
  117. self.f2['width'] = 800
  118. self.f2['height'] = 600
  119. self.lab01 = tk.Label(self.f2, font=('黑体', 16), text="双人骰子本轮结果展示如下:")
  120. self.lab01.place(x=100, y=80)
  121. self.lab01 = tk.Label(self.f2, font=('黑体', 16), text=result)
  122. self.lab01.place(x=100, y=150)
  123. def cmd1(): # 返回功能实现函数
  124. self.cfl_createDoubleDiceGame()
  125. self.soha.playerList = [] # 清空数据
  126. self.btn1 = tk.Button(self.f2,font=('黑体', 16), text="返回", command=cmd1)
  127. self.btn1.place(x=100, y=500)
  128. self.f2.place(x=0, y=0)
  129. def cfl_Multiplayer(self, strnum): # 多人游戏骰子
  130. numlist = {'3', '4', '5', '6', '7', '8', '9', '10'}
  131. if strnum not in numlist:
  132. tkinter.messagebox.showinfo("错误提示", "输入错误或未输入,请重新输入!")
  133. else:
  134. num = int(strnum)
  135. if self.f2:
  136. self.f2.destroy()
  137. self.f2 = tk.Frame(self.root)
  138. self.f2['width'] = 800
  139. self.f2['height'] = 600
  140. self.labs = []
  141. self.entrys = []
  142. if num <= 5:
  143. for i in range(0, num):
  144. p = tk.Label(self.f2, font=('黑体', 12), text="@玩家"+str(i+1)+":请在下边输入框输入您的名字:")
  145. p.place(x=100, y=80 * i + 20)
  146. e = tk.Entry(self.f2, width=25)
  147. e.place(x=120, y=80 * i + 60)
  148. self.labs.append(p)
  149. self.entrys.append(e)
  150. else:
  151. for i in range(0, num):
  152. p = tk.Label(self.f2, font=('黑体', 10), text="@玩家"+str(i+1)+":请在右边输入框输入您的名字:")
  153. p.place(x=100, y=50 * i + 20)
  154. e = tk.Entry(self.f2, width=25)
  155. e.place(x=370, y=50 * i + 20)
  156. self.labs.append(p)
  157. self.entrys.append(e)
  158. def cmd1():
  159. '''获取骰子'''
  160. self.soha.zmx_getPlayersDiceList(num)
  161. def cmd2():
  162. '''获取多人玩家姓名'''
  163. namelist = []
  164. for i in range(0, num):
  165. p = self.entrys[i].get()
  166. namelist.append(p)
  167. self.soha.llq_getPlayersName(num, namelist)
  168. def cmd3():
  169. '''判断多人玩家输赢'''
  170. if len(self.soha.playerList) == 0:
  171. tk.messagebox.showinfo("错误提示", "名字不能为空!!!")
  172. elif self.soha.playerList[0].Dice_List == []:
  173. tk.messagebox.showinfo("错误提示", "请为每个玩家获取骰子数据!!!")
  174. else:
  175. self.cfl_ouputMultipleWinner(num)
  176. self.soha.playerList = []
  177. self.btn2 = tk.Button(self.f2, font=('黑体', 14), text="提交姓名", command=cmd2)
  178. self.btn2.place(x=180, y=500)
  179. self.btn6 = tk.Button(self.f2, font=('黑体', 14), text="获取骰子", command=cmd1)
  180. self.btn6.place(x=360, y=500)
  181. self.btn3 = tk.Button(self.f2, font=('黑体', 14), text="获取骰子输赢排名", command=cmd3)
  182. self.btn3.place(x=360, y=550)
  183. self.btn4 = tk.Button(self.f2, font=('黑体', 14), text="返回", command=self.cfl_createContentWidge)
  184. self.btn4.place(x=180, y=550)
  185. self.f2.place(x=0, y=0)
  186. def cfl_ouputMultipleWinner(self, num): # 多人骰子游戏大小排名输出界面
  187. result = self.soha.mhl_judgeMultipleWinner(num)
  188. strResult = self.soha.mhl_getPlayersListData()
  189. tkinter.messagebox.showinfo("恭喜", "@"+result[0].name+",恭喜您,力压众强,获得了本轮游戏的第一!")
  190. if self.f2:
  191. self.f2.destroy()
  192. self.f2 = tk.Frame(self.root)
  193. self.f2['width'] = 800
  194. self.f2['height'] = 600
  195. self.lab01 = tk.Label(self.f2, font=('黑体', 16), text="多人骰子大小排名结果如下")
  196. self.lab01.place(x=100,y=80)
  197. self.labresult = tk.Label(self.f2, font=('黑体', 14), text=strResult)
  198. self.labresult.place(x=100,y=120)
  199. def cmd1(): # 返回功能实现函数
  200. strNum = str(num)
  201. self.cfl_Multiplayer(strNum)
  202. self.soha.playerList = [] # 清空数据
  203. self.btn1 = tk.Button(self.f2,font=('黑体', 16), text="返回", command=cmd1)
  204. self.btn1.place(x=100, y=500)
  205. self.f2.place(x=0, y=0)

以上就是基于Python如何实现骰子小游戏的详细内容,更多关于基于Python如何实现骰子小游戏的资料请关注九品源码其它相关文章!