小言_互联网的博客

【Pygame实战】有趣又益智的游戏:看图猜四字成语,最后一个几乎没人会,哪位学霸来猜猜?这么难的嘛?(猜个锤子)

365人阅读  评论(0)

导语

看图猜成语,是考验一个人的反应能力,也考验一个人的右脑思维。

据说越聪明的人,这道题的完成率越高。你想试一试嘛?今天就给你这次机会啦!

所有文章完整的素材+源码都在👇👇

粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。

哈喽!大家下午好,我是即将出场每天疯狂码代码的木木子。

为了想一下今天给大家更新什么内容的我,想了整整一个晚上,顺便熬了一个通宵的熊猫眼,

在今天晚上快6点下班之前终于赶完了最后的游戏代码。每天都在代码的海洋里来来回回,痛并

快乐喆.....(其实上班只有痛苦,主要是舍不得那个money,只能选择肝了鸭)大实话.jpg

最近很多网友又在问小编要成语游戏玩,我知道大家已经把前面的(往期也有很多游戏PYhton

代码的哈)给玩穿了,所以今天再给大家带来一款全新的Python代码小程序猜成语游戏《疯狂

猜成语》,这款游戏小编觉得是目前(我努力了真的)成语游戏里面做得最为漂亮的,最古朴

的,画风很简单,希望大家不要丢菜叶子跟臭鸡蛋,23333......

当然了游戏本身的挑战非常不简单了,所以喜欢挑战的朋友一定别错过,欢迎大家一起来玩儿

哈,看看谁能问鼎看图猜成语的顶峰呢?评论区看看你们谁的分数最6吧!

正文

本文主要分为两块大的内容代码:首先是爬取成语的图片,然后做一个游戏界面。

一、爬取成语图片

1)运行环境 

 本文用到的环境如下—— 

 Python3、Pycharm社区版,第三方模块:requests、pillow、fake_useragent等部分自带的库只

要安装完 Python就可以直接使用了,需要安装 的库的话看教程下🎐


  
  1.  一般安装:pip install +模块名 
  2. 镜像源安装:pip install -i https: / /pypi.douban.com /simple / +模块名 
  3.  (之前有说过安装报错的几种方式跟解决方法,不会安装的可以去看下,还有很多国内镜像源
  4. 也有文章的)

2)代码展示


  
  1. import requests
  2. import re
  3. import os
  4. import time
  5. from PIL import Image
  6. from fake_useragent import UserAgent
  7. # 爬取成语图片
  8. def SpiderIdiomPictures():
  9. cookies = {
  10. 'BAIDU_SSP_lcr': 'https://www.baidu.com/link?url=58oz4AEVxDWXanBqrfF95dogUPcAVAktBQT0uBu8o4rGPY4J4Kg_-DsmJdvTHryfy8pdGnnOjDG54qbh82KB7K&wd=&eqid=ecc1cb040001afcc0000000662a84cc7',
  11. 'Hm_lvt_8754302607a1cfb0d1d9cddeb79c593d': '1654580566,1655196891',
  12. 'Hm_lpvt_8754302607a1cfb0d1d9cddeb79c593d': '1655200014',
  13. }
  14. headers = {
  15. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
  16. 'Accept-Language': 'zh-CN,zh;q=0.9',
  17. 'Cache-Control': 'no-cache',
  18. 'Connection': 'keep-alive',
  19. 'Pragma': 'no-cache',
  20. 'Referer': 'http://www.hydcd.com/cy/fkccy/index3.htm',
  21. 'Upgrade-Insecure-Requests': '1',
  22. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
  23. }
  24. if not os.path.exists( './看图猜成语'):
  25. os.mkdir( './看图猜成语')
  26. idx = 0
  27. for page in range( 1,3): #爬取 2页的图片
  28. print(f '\n\033[31m<<<第{page}页爬取中……>>>\033[0m')
  29. if page = = 1:
  30. page = ''
  31. url = f 'http://www.hydcd.com/cy/fkccy/index{page}.htm'
  32. session = requests.session()
  33. response = session. get(url =url, cookies =cookies, headers =headers)
  34. response.encoding = response.apparent_encoding
  35. ###解析图片url(http: / /www.hydcd.com /cy /fkccy /images / CF 91100- 50.png)和成语
  36. for i in re.findall( '<img border="0" src="(.*?)"></p>',response.text):
  37. result = i.split( '"')
  38. if len(result) > 2:
  39. img_url = f 'http://www.hydcd.com/cy/fkccy/{result[0]}' #图片url
  40. idiom_name = result[ 2] #图片名字(成语名)
  41. if len(idiom_name) = = 4:
  42. headers[ 'User-Agent'] = UserAgent().Chrome
  43. with open(f './看图猜成语/{idiom_name}.png', 'wb') as f:
  44. f. write(session. get(img_url,headers =headers). content)
  45. print(f '{idiom_name}.png 保存成功!!!')
  46. time.sleep( 0.3)
  47. idx + = 1
  48. print(f '\n抓取完毕!!!\n总共抓取\033[31m{idx}张\033[0m图片')
  49. # 图片放大
  50. def ImageProcessingBig():
  51. print(f '\n\033[31m开始将图片进行放大>>>\033[0m')
  52. for imgfile in os.listdir( './看图猜成语/'):
  53. if len(imgfile.split( '.')) = = 2:
  54. # 待处理图片路径
  55. img_path = Image. open( './看图猜成语/' +imgfile)
  56. # resize图片大小,入口参数为一个tuple,新的图片的大小
  57. img_ size = img_path.resize(( 300, 300))
  58. # 处理图片后存储路径,以及存储格式
  59. imgname = imgfile.split( '.')[ 0]
  60. img_ size.save(f './看图猜成语/{imgname}.png')
  61. print(f '\n\033[31m<<<所有图片已放大完成!!!\033[0m')
  62. if __name__ = = '__main__':
  63. # 爬取网站上的成语图片(http: / /www.hydcd.com /cy /fkccy / index.htm),图片大小 120x 120
  64. SpiderIdiomPictures()
  65. # 把爬取到的所有图片放大( 300x 300
  66. ImageProcessingBig()

3)效果展示

这里是有一千多张图片的哦!

​让我们看下爬下来的图片是怎么样子的吧:

有很多重复的,因为下载了几次了哈。

二、看图猜成语

1)素材准备

2)代码实现


  
  1. import ttkbootstrap as ttk
  2. import sys,os, random,threading, time,datetime
  3. from ttkbootstrap.constants import *
  4. from ttkbootstrap.dialogs import Messagebox,Querybox
  5. class ttkbootstrapWindow:
  6. # 实例化创建应用程序窗口
  7. root = ttk.Window(title = "看图猜成语", themename = "litera", resizable =( False, False))
  8. # 让窗口居中
  9. def window_middle( self,windowwidth,windowheight):
  10. screenwidth = self.root.winfo_screenwidth()
  11. screenheight = self.root.winfo_screenheight()
  12. locx = int((screenwidth - windowwidth) / 2)
  13. locy = int((screenheight - windowheight) / 2)
  14. self.root.geometry( "{}x{}+{}+{}". format(windowwidth, windowheight, locx, locy))
  15. # 显示窗口
  16. def window_displaymodule( self):
  17. self.root.mainloop()
  18. # 看图猜成语
  19. class guessIdiomsFromPictures(ttkbootstrapWindow):
  20. def __init__( self):
  21. super().__init__()
  22. self.inde x()
  23. self.window_displaymodule()
  24. # 首页内容
  25. def index( self):
  26. self.window_middle(windowwidth = 960,windowheight = 540) #窗口大小宽x高( 960 x 540),默认居中
  27. self. index_frame = ttk.Frame( self.root)
  28. self. index_frame.pack(fill =BOTH,expand =YES)
  29. self.bg_img = ttk.PhotoImage( file = './sucai/index_bg.png')
  30. self.bg_img_Label = ttk.Label( self. index_frame, image = self.bg_img)
  31. self.bg_img_Label.pack(fill =BOTH,expand =YES)
  32. self.title_lable = ttk.Label( self. index_frame,text = ' 看图猜成语', font =( '华文行楷', 56, 'italic'), cursor = 'watch', background = '#E7CBB5', bootstyle =WARNING,width = 14)
  33. self.begin_button_img = ttk.PhotoImage( file = './sucai/beginGame.png')
  34. self.entry_nickname = ttk.Entry( self. index_frame, show =None, font =( '微软雅黑', 16))
  35. self.begin_button = ttk.Button( self. index_frame, bootstyle =(SUCCESS, "outline-toolbutton"),image = self.begin_button_img,command = self.begin_game)
  36. self. exit_button_img = ttk.PhotoImage( file = './sucai/exitGame.png')
  37. self. exit_button = ttk.Button( self. index_frame, bootstyle =(SUCCESS, "outline-toolbutton"),image = self. exit_button_img,command = self. exit_game)
  38. self. index_ move()
  39. # 页面组件移动
  40. def index_ move( self):
  41. def run(rate):
  42. rate + = 5
  43. button_posy = 540 - rate * 1.5
  44. self.begin_button.place(x = 270,y =button_posy)
  45. self. exit_button.place(x = 480,y =button_posy + 10)
  46. if rate < 80:
  47. self.title_lable.place(x = 190, y =rate)
  48. self.title_lable. after( 60, run ,rate % 80)
  49. elif 80 <= rate < 150:
  50. self.title_lable. after( 60, run, rate % 150)
  51. else:
  52. ttk.Label( self.bg_img_Label, text = '请输入昵称:', cursor = 'watch', bootstyle =DARK).place(x = 250, y = 212)
  53. self.entry_nickname.insert( '0', "暴龙战士之王")
  54. self.entry_nickname.place(x = 340, y = 200, width = 360, height = 50)
  55. run( 0)
  56. # 验证昵称是否为空
  57. def index_verify( self):
  58. self.nickname = self.entry_nickname. get().strip()
  59. if self.nickname:
  60. return True
  61. else:
  62. return False
  63. # 开始游戏
  64. def begin_game( self):
  65. try:
  66. if not self. index_verify():
  67. Messagebox.show_info(message = "请先输入您的昵称!")
  68. return
  69. self. index_frame.destroy()
  70. game_modeSelection_ page( self.nickname)
  71. except:
  72. pass
  73. # 退出游戏
  74. def exit_game( self):
  75. sys. exit()
  76. #游戏模式选择页面
  77. class game_modeSelection_ page(ttkbootstrapWindow):
  78. def __init__( self,nickname):
  79. super().__init__()
  80. self.nickname = nickname
  81. self. page()
  82. def page( self):
  83. self.window_middle( 500,300)
  84. self.frame = ttk.Frame( self.root)
  85. self.frame.pack(fill =BOTH, expand =YES)
  86. self.bg = ttk.PhotoImage( file = './sucai/bg2.png')
  87. ttk.Label( self.frame,anchor = 'nw', image = self.bg).pack()
  88. l 1 = ttk.Label( self.frame,text = '训练模式', font =( '华文行楷', 32),relief =RAISED, cursor = 'hand2',bootstyle =WARNING,background = '#324762')
  89. l 1.place(x = 150,y = 60)
  90. l 1.bind( "<Button-1>", self.game_train_ mode)
  91. l 2 = ttk.Label( self.frame, text = '闯关模式', font =( '华文行楷', 32),relief =RAISED, cursor = 'hand2',bootstyle =SUCCESS,background = '#324762')
  92. l 2.place(x = 150, y = 140)
  93. l 2.bind( "<Button-1>", self.game_chuangguan_ mode)
  94. def game_train_ mode( self,event):
  95. self.frame.destroy()
  96. game_train_ page( self.nickname)
  97. def game_chuangguan_ mode( self,event):
  98. # 默认 10个关卡(initialvalue = 10
  99. number = Querybox. get_integer(prompt = "请设置关卡数量:",title = "自定义关卡数量 ",initialvalue = 10,minvalue = 0,maxvalue = 50)
  100. if number:
  101. self.frame.destroy()
  102. game_chuangguan_ page( self.nickname, number)
  103. #在游戏两种模式中有相同写法的组件
  104. class game_ same_components(ttkbootstrapWindow):
  105. def __init__( self):
  106. super().__init__()
  107. def same_ page( self,nickname):
  108. self.nickname = nickname
  109. self.window_middle( 960, 540)
  110. self.canvas = ttk.Canvas( self.root)
  111. self.canvas.pack(fill =BOTH, expand =YES)
  112. self.bg = ttk.PhotoImage( file = './sucai/bg3.png')
  113. self.canvas.create_image( 0, 35, anchor = 'nw', image = self.bg)
  114. self.canvas.create_rectangle( 0, 0, 960, 35, fill = '#F4F4F4', outline = '#F4F4F4')
  115. nickname_lable = ttk.Label( self.canvas, text =f '欢迎:【{self.nickname}】玩家上线', font = 20, bootstyle =INFO,background = '#F4F4F4')
  116. nickname_lable.place(x = 960, y = 4)
  117. def nickname_lable_ move(rate):
  118. rate + = 5
  119. nickname_lable.place(x = 960 - rate, y = 4)
  120. if rate < 960:
  121. nickname_lable. after( 50, nickname_lable_ move, rate % 960)
  122. nickname_lable_ move( 0)
  123. self. return_button_img = ttk.PhotoImage( file = './sucai/return.png')
  124. self. return_button = ttk.Button( self.canvas, bootstyle =(LIGHT, "outline-toolbutton"), image = self. return_button_img,command = self. return_game_modeSelection_ page)
  125. self. return_button.place(x = 0, y = 35)
  126. def return_game_modeSelection_ page( self):
  127. self.canvas.destroy()
  128. game_modeSelection_ page( self.nickname)
  129. #游戏训练模式页面
  130. class game_train_ page(game_ same_components):
  131. def __init__( self,nickname):
  132. super().__init__()
  133. self.nickname = nickname
  134. self.game_ page()
  135. loading_img_ times = 0 # 记录加载图片次数
  136. answer_ times = 0 # 记录回答总次数
  137. answer_correct_ times = 0 # 记录回答正确次数
  138. #游戏页面
  139. def game_ page( self):
  140. self. same_ page( self.nickname)
  141. self.canvas.create_rectangle( 200, 100, 535, 435)
  142. self.answer_idiom_entry = ttk.Entry( self.canvas, show =None, font =( '微软雅黑', 32),bootstyle =DANGER)
  143. self.answer_idiom_entry.place(x = 580,y = 190,height = 100,width = 300)
  144. self.answer_idiom_entry.bind( "<Return>", lambda event: self.answer())
  145. self.answer_idiom_button_img = ttk.PhotoImage( file = './sucai/ensure.png')
  146. answer_idiom_button = ttk.Button( self.canvas, bootstyle =(LIGHT, "outline-toolbutton"),image = self.answer_idiom_button_img,command = self.answer)
  147. answer_idiom_button.place(x = 635,y = 310)
  148. see_idiom_button = ttk.Button( self.canvas,text = '查看', bootstyle =(PRIMARY, "outline-toolbutton"),command = self.see_answer)
  149. see_idiom_button.place(x = 480, y = 470)
  150. self.accuracy_lable 1 = ttk.Label( self.canvas,text = '正确率:',font =( '华文行楷', 20),background = '#D3E0E8')
  151. self.accuracy_lable 1.place(x = 600, y = 120)
  152. self.accuracy_lable 2 = ttk.Label( self.canvas, text = "0.0%", font =( '华文行楷', 20),bootstyle =DANGER,background = '#D3E0E8')
  153. self.accuracy_lable 2.place(x = 750, y = 120)
  154. self.loading_idiom_img()
  155. #加载成语图片
  156. def loading_idiom_img( self):
  157. self.loading_img_ times + = 1
  158. self.idiom = random.choice(os.listdir( './看图猜成语'))
  159. self.idiom_result = self.idiom.split( '.')[ 0]
  160. print( '答案:', self.idiom_result)
  161. self.idiom_img = ttk.PhotoImage( file =f './看图猜成语/{self.idiom}')
  162. lm = ttk.Label( self.canvas,image = self.idiom_img)
  163. lm.place(x = 215,y = 115)
  164. guanqia_lable = ttk.Label( self.canvas, font =( '华文行楷', 32),background = '#48A6B0')
  165. guanqia_lable.place(x = 300,y = 450)
  166. guanqia_lable.config(text =f '第 {self.loading_img_times} 关')
  167. #查看答案
  168. def see_answer( self):
  169. Messagebox.show_info(message = self.idiom_result)
  170. def answer( self):
  171. if self.answer_idiom_entry. get().strip():
  172. self.answer_ times + = 1
  173. if self.answer_idiom_entry. get().strip() = = self.idiom_result:
  174. Messagebox.show_info(message = "恭喜,回答正确!!!")
  175. self.loading_idiom_img()
  176. self.answer_idiom_entry. delete( 0, 'end')
  177. self.answer_correct_ times + = 1
  178. else:
  179. if not Messagebox.yesno(message = "回答错误!!!\n是否继续回答?") = = 'Yes':
  180. self.loading_idiom_img()
  181. self.answer_idiom_entry. delete( 0, 'end')
  182. self.accuracy_lable 2.config(text =f '{round(self.answer_correct_times / self.answer_times, 2) * 100}%')
  183. #游戏闯关模式页面
  184. class game_chuangguan_ page(game_ same_components):
  185. CLICKTIMES = 0 #点击次数
  186. TRUEANSWER = '' #答案
  187. IDX = 1 #第几关,默认第 1
  188. def __init__( self, nickname, number):
  189. super().__init__()
  190. self.nickname = nickname
  191. self.idiom_list = random.sample(os.listdir( './看图猜成语'), number) #随机初始化选取 20张图片,用于设置 20个关卡
  192. self.game_ page()
  193. def game_ page( self):
  194. self. same_ page( self.nickname)
  195. self.canvas.create_rectangle( 150, 100, 485, 435)
  196. self.guanqia_lable = ttk.Label( self.canvas,text = '第? / ?关', font =( '华文行楷', 32), background = '#48A6B0') #显示关卡数
  197. self.guanqia_lable.place(x = 200, y = 40)
  198. self.lm = ttk.Label( self.canvas) #用于配置图片
  199. self.lm.place(x = 165, y = 115)
  200. self.result_label = ttk.Label( self.canvas,text = '', font =( '华文行楷', 32), background = '#A1F8EE', bootstyle =DANGER) # 用于显示答案的结果
  201. self.result_label.place(x = 40,y = 135,height = 300)
  202. ttk.Button( self.canvas,text = '重选', bootstyle =(SUCCESS, "outline-toolbutton"),command = self.update_label).place(x = 550,y = 470,width = 90,height = 60) # 重选按钮
  203. self.create_selection_result_label()
  204. self.create_option_text_label()
  205. self.loading_idiom_img()
  206. self.recording_ time()
  207. # 创建四个用于选择结果的标签
  208. def create_selection_result_label( self):
  209. self.answer_list = []
  210. for i in range( 4):
  211. label = ttk.Label( self.canvas, text = '', font =( "微软雅黑", 35), background = '', width = 2, cursor = 'hand2')
  212. label.place(x = 130 + i * 100, y = 450)
  213. self.answer_list.append(label)
  214. # 创建用于选择的内容标签
  215. def create_option_text_label( self):
  216. def click_label(event):
  217. if self.CLICKTIMES < 4:
  218. self.CLICKTIMES + = 1
  219. label_text = event.widget[ "text"] # 得到标签上的文本
  220. self.answer(label_text)
  221. self.label_oop_list = []
  222. # 设置 44列的标签
  223. for i in range( 4):
  224. for j in range( 4):
  225. label = ttk.Label( self.canvas, text = '', font =( "微软雅黑", 35), background = '#FFFAE3', width = 2, cursor = 'hand2')
  226. label.place(x = 510 + j * 100, y = 90 + i * 95)
  227. label.bind( "<Button-1>", click_label)
  228. self.label_oop_list.append(label)
  229. # 加载成语图片
  230. def loading_idiom_img( self,):
  231. self.idiom = self.idiom_list[ self.IDX - 1].split( '.')[ 0]
  232. print( '答案:', self.idiom)
  233. disturb_text_list = [ self.GBK 2312() for i in range( 12)] # 随机生成 12个干扰汉字
  234. disturb_text_list. extend([i for i in self.idiom])
  235. for label_oop in self.label_oop_list:
  236. text = random.choice(disturb_text_list)
  237. disturb_text_list.remove(text)
  238. label_oop.configure(text =text)
  239. self.guanqia_lable.config(text =f '第 {self.IDX} / {len(self.idiom_list)}关')
  240. self.idiom_img = ttk.PhotoImage( file =f './看图猜成语/{self.idiom}.png')
  241. self.lm.configure(image = self.idiom_img)
  242. def answer( self,label_text):
  243. self.answer_list[ self.CLICKTIMES - 1].configure(text =label_text)
  244. self.TRUEANSWER + = label_text
  245. if len( self.TRUEANSWER) = = 4:
  246. if self.TRUEANSWER = = self.idiom:
  247. t = threading.Thread(target = self.dispaly_answer_result,args =( '回\n答\n正\n确',))
  248. t.setDaemon( True)
  249. t. start()
  250. self.IDX + = 1
  251. if self.IDX > len( self.idiom_list):
  252. Messagebox.show_info(message =f "恭喜您已通过!!!\n耗时为:{self.time_}")
  253. self.flag = False
  254. self. return_game_modeSelection_ page()
  255. return
  256. self.update_label()
  257. self.loading_idiom_img()
  258. else:
  259. t = threading.Thread(target = self.dispaly_answer_result, args =( '回\n答\n错\n误',))
  260. t.setDaemon( True)
  261. t. start()
  262. # 显示回答结果是否正确
  263. def dispaly_answer_result( self,text):
  264. self.result_label.configure(text =text)
  265. time.sleep( 3)
  266. try: self.result_label.configure(text = '')
  267. except Exception as e: print(e)
  268. # 重选
  269. def update_label( self):
  270. self.CLICKTIMES = 0
  271. self.TRUEANSWER = ''
  272. for i in self.answer_list:i.destroy()
  273. self.create_selection_result_label()
  274. # 随机生成一个汉字
  275. def GBK 2312( self, ):
  276. head = random.randint( 0xb 0, 0xf 7)
  277. body = random.randint( 0xa 1, 0xfe)
  278. val = f '{head:x}{body:x}'
  279. str = bytes.fromhex(val).decode( 'gb2312')
  280. return str
  281. # 记录通关所耗时
  282. def recording_ time( self):
  283. self.flag = True # 定义一个信号量,用于当我们完成游戏通过时, run()结束循环
  284. time_label = ttk.Label( self.canvas,text = '时长:00:00:00', font =( "华文行楷", 15), background = '#DAEFE6',bootstyle =DANGER)
  285. time_label.place(x = 730,y = 50)
  286. start_ time = datetime.datetime.now()
  287. def run():
  288. if self.flag:
  289. time_label. after( 1000, run)
  290. update_ time = datetime.datetime.now() - start_ time
  291. self. time_ =f '时长:{update_time}'.split( '.')[ 0]
  292. time_label.configure(text = self. time_) # 不显示时长的毫秒值
  293. run()
  294. if __name__ = = '__main__':
  295. guessIdiomsFromPictures()

3)效果展示

游戏界面——

随机截图——

三、成语猜猜猜

最后给大家出几个题目,看看大家猜的出来不?

总结

看图猜成语,等你来挑战,谁能一猜就对,谁能全部猜对,谁能胸怀文墨,腹有学识,而又眼

睛明亮,文采飞扬,小女子在此拜会各位成语王,静观智慧之光。 

哈哈哈,好啦,今天的内容写到这里就结束了哈,喜欢源码的三连找我拿哦~

🎯完整的免费源码领取处:找我吖!文末公众hao可自行领取,滴滴我也可!

🔨推荐往期文章——

项目1.0  超级玛丽

程序员自制游戏:超级玛丽100%真实版,能把你玩哭了~【附源码】

项目1.1   扫雷

 Pygame实战:据说这是史上最难扫雷游戏,没有之一,你们感受下......

项目1.4  水果忍者 

【Pygame实战】风靡全球的切水果游戏升级版“水果忍者”上线啦,你敢来PK嘛?

项目7.0  赛车游戏

【Pygame实战】如果你是赛车爱好者:这款新赛车游戏分分钟让你上瘾(超跑又是谁的梦想?)

项目7.1  虐单身狗游戏

​​​​​​Pygame实战:慎点|虐单身狗的最高境界是…【附源码】

项目1.1  《极速车神打字小游戏》

【Python小游戏】通过这款专为程序员设计的《极限车神》小游戏,你的打字速度可以赢过专业录入员,这个秘密98%的人都不知道哦~(爆赞)

🎄文章汇总——

汇总合集 Python—2022 |已有文章汇总 | 持续更新,直接看这篇就够了

(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~


转载:https://blog.csdn.net/weixin_55822277/article/details/129048420
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场