赞
踩
这篇文章主要为大家详细介绍了Python实现双人模式的贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
简单用py写了一个贪吃蛇游戏,有单人、双人模式,比较简单,适合初学者练手。本上每行重要的语句都有注释,做了什么事一目了然
这里介绍双人模式
1.游戏主体窗口(尺寸)、画布(尺寸、位置)、按钮(尺寸、位置)、文字(大小、颜色、位置)、图像、背景音乐及相关响应函数(主要是鼠标移动及点击的响应)的设计与合理排布
2.蛇与食物的类的属性设计
3.蛇位置的更新(根据键盘输入)、吃到食物加分的判定、食物的更新
4.蛇死亡的判定条件设计
1.pygame
2.sys
3.random
1.Snake类,定义蛇头蛇身元素的位置
2.Food类,定义食物元素的位置及单个元素的颜色
1.new_food(),功能:生成一个不与蛇头位置重合的食物并返回该食物对象
`def` `new_food(head):` `while` `True``:` `# 循环,不断实例化new_food对象直到生成一个不与蛇头重合的食物` `new_food` `=` `Food(randint(``0``,` `45``)` `*` `20``, randint(``0``,` `28``)` `*` `20``, (randint(``10``,` `255``), randint(``10``,` `255``), randint(``10``,` `255``)))` `# 若new_food和蛇头重合则不创键` `if` `new_food.x !``=` `head.x` `and` `new_food.y !``=` `head.y:` `break` `else``:` `continue` `return` `new_food`
|
2.draw_snake()、draw_food()函数,功能:绘制蛇与食物的图像,传入参数为颜色和对象:
|
|
`# 在窗体中绘制贪吃蛇`
`# 形参:一个是颜色另一个是实例化对象`
`def` `draw_snake(color,` `object``):`
`pygame.draw.circle(window, color, (``object``.x,` `object``.y),` `10``)`
`# 在窗体中绘制食物`
`# 形参:实例化对象`
`def` `draw_food(food):`
`pygame.draw.circle(window, food.color, (food.x, food.y),` `10``)`
|
3.show_end函数,功能:显示双人模式结束时的得分界面:对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,架下我尉(同英): 2763177065 【教程/工具/方法/解疑】
|
`def` `show_end():` `while` `True``:` `window.blit(init_background, (``0``,` `0``))` `for` `event` `in` `pygame.event.get():` `if` `event.``type` `=``=` `pygame.QUIT:` `exit_end()` `# 定义标题` `pygame.display.set_caption(``"贪吃蛇大冒险"``)` `# 定义提示文字` `font` `=` `pygame.font.SysFont(``"simHei"``,` `40``)` `fontsurf` `=` `font.render(``'游戏结束! 玩家1得分: %s 玩家2得分:%s'` `%` `(score1, score2),` `True``, black)` `window.blit(fontsurf, (``150``,` `100``))` `button(``"返回主菜单"``,` `370``,` `300``,` `200``,` `40``, blue, brightred, into_game)` `button(``"退出游戏"``,` `370``,` `470``,` `200``,` `40``, red, brightred, exit_end)` `pygame.display.update()` `clock.tick(``20``)`
|
4.exit_end()函数,功能:在初始界面和游戏结束显示得分界面点击右上角的"×"时,直接退出整个游戏:
|
`# 初始界面和游戏中途点击退出游戏时`
`def` `exit_end():`
`pygame.quit()`
`sys.exit()`
|
5.start_game_double()函数,功能:实现双人正常模式:
|
`def` `start_game_double():` `# 播放音乐` `pygame.mixer.music.play(``-``1``)` `# 定义存分数的全局变量` `global` `score1` `global` `score2` `score1` `=` `score2` `=` `0` `# 初始化存放玩家键盘输入运动方向的变量` `run_direction1` `=` `"right"` `run_direction2` `=` `"up"` `# 初始化贪吃蛇运动方向的变量` `run1` `=` `run_direction1` `run2` `=` `run_direction2` `# 实例化贪吃蛇和食物对象` `head1` `=` `Snake(randint(``0``,` `30``)` `*` `20``, randint(``0``,` `20``)` `*` `20``)` `head2` `=` `Snake(randint(``0``,` `30``)` `*` `20``, randint(``0``,` `20``)` `*` `20``)` `# 实例化蛇身长度为2个单位` `snake_body1` `=` `[Snake(head1.x, head1.y` `+` `20``), Snake(head1.x, head1.y` `+` `40``)]` `snake_body2` `=` `[Snake(head2.x, head2.y` `+` `20``), Snake(head2.x, head2.y` `+` `40``)]` `# 实例化食物列表,列表随着其中食物被吃掉应该不断缩短` `food_list` `=` `[Food(randint(``0``,` `45``)` `*` `20``, randint(``0``,` `28``)` `*` `20``, (randint(``10``,` `255``), randint(``10``,` `255``), randint(``10``,` `255``)))]` `for` `i` `in` `range``(``1``,``24``):` `food_list.append(Food(randint(``0``,` `45``)` `*` `20``, randint(``0``,` `28``)` `*` `20``, (randint(``10``,` `255``), randint(``10``,` `255``), randint(``10``,` `255``))))` `# 实例化单个食物,方便循环内生成单个新食物` `food` `=` `Food(randint(``0``,` `45``)` `*` `20``, randint(``0``,` `28``)` `*` `20``, (randint(``10``,` `255``), randint(``10``,` `255``), randint(``10``,` `255``)))` `while` `True``:` `window.blit(background, (``0``,``0``))` `# 监听玩家键盘输入的运动方向值,并根据输入转为up、down、right或left,方便程序中调用` `# pygame.event.get()返回一个列表,存放本次game执行中程序遇到的一连串事件(按时间顺序依次存放)` `for` `event` `in` `pygame.event.get():` `# pygame.QUIT事件是指用户点击窗口右上角的"×"` `if` `event.``type` `=``=` `pygame.QUIT:` `# 显示结果界面` `show_end()` `# 若事件类型是按下键盘,分↑ ↓ ← →四种情况讨论` `<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。