【Python游戏】贪吃蛇升级版——双人贪吃蛇小游戏 | 附带源码

前言

之前做过一个单人版的贪吃蛇,所以常常就是我只能看着别人玩,或者别人看着我玩,却没法两个人一起愉快地玩耍。 由此产生了做一个可以双人玩的贪吃蛇想法,并且从小时候一直到现在,之前python还没有那么火的时候,就在网上看过一些用python写游戏的教程。后来系统地学了一下python,就打算将双人贪吃蛇安排上了。

相关文件

想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复双人贪吃蛇游戏
Python源码、问题解答学习交流群:773162165

开发环境

Python版本:3.6.7
相关模块:
pygame
random
sys
settings
score_board
functions
以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

游戏玩法

在游戏中,蓝色的玩家也就是1P通过WASD控制方向,红色的玩家也就是2P通过上下左右控制方向。 初始的时候,两个玩家分别在屏幕的中上方和中下方出现,如果撞墙或者相撞都会归为初始状态,计分板清零。 单人贪吃蛇通常是一个玩家,每次产生1个食物,我在这个基础上改进了一下,每次产生了10个食物,可以两个玩家一起竞争玩耍。当然,也可以通过修改设置只产生1个食物。 其实多食物的情况有点类似于球球了,但是这样增加了更多的可玩性,我还使用了一个计分板,显示的是两个玩家的得分,吃1个得分加1分。

代码和说明

  1. snake_main.py 这是游戏的主程序,用来初始化屏幕、按键控制移动、碰撞的判定以及绘制游戏中的各种模块等
  2. setting.py该文件里面游戏里面的一些设置,如各种模块的初始化值、模块颜色和移动速度
  3. function.py该文件里面主要是游戏的一些函数,如生成食物的函数、绘图函数和按键响应函数
  4. score_board.py该文件是用来绘制两个玩家的得分计数板

效果展示

在这里插入图片描述

代码实现

主函数

"""
双人贪吃蛇游戏
公众号:Python日志
Python编程小知识教学,入门到精通视频+源码+课件+学习解答加群:773162165
"""
import pygame
import random
from sys import exit
from settings import Settings, Point
from score_board import Scoreboard
from functions import *sets = Settings()# 初始化,屏幕宽度和高度
pygame.init()
window = pygame.display.set_mode((sets.width, sets.hight))
pygame.display.set_caption('双人贪吃蛇  公众号:Python日志  交流群:773162165')score = Scoreboard(sets,window)sfoods = []
for i in range(10): # 食物的数量sfoods.append(gen_food(sets))# 设置帧频率
clock = pygame.time.Clock()
while sets.quit:# 处理帧频 锁帧clock.tick(10) # 设置该项可以改变游戏速度,值越大速度越快check_events(sets)# 吃东西,当头目前的位置和食物的坐标相同时snake1_eat = Falsesnake2_eat = Falsefor index, food in enumerate(sfoods):if (sets.head1.row == food.row and sets.head1.col == food.col):snake1_eat = Truesfoods[index] = Point(row=random.randint(0, sets.ROW - 1), col=random.randint(0, sets.COL - 1))if (sets.head2.row == food.row and sets.head2.col == food.col):snake2_eat = Truesfoods[index] = Point(row=random.randint(0, sets.ROW - 1), col=random.randint(0, sets.COL - 1))# 处理蛇的身子    # 1.把原来的头插入到sets.snake1的头上    # 2.把最后一个sets.snake1删掉sets.snake1.insert(0, sets.head1.copy()) # 每一次从头部增加了一个块,所以当没有吃东西的时候,需要每次删除掉一个模块来抵消,否则就会是拖尾的效果if not snake1_eat: # 没有吃东西的时候sets.snake1.pop() # 必须pop掉末尾的模块sets.snake2.insert(0, sets.head2.copy())if not snake2_eat:sets.snake2.pop()# sets.snake 1 移动一下if sets.snake1_direct == 'left':sets.head1.col -= sets.s1_speedif sets.snake1_direct == 'right':sets.head1.col += sets.s1_speedif sets.snake1_direct == 'top':sets.head1.row -= sets.s1_speedif sets.snake1_direct == 'bottom':sets.head1.row += sets.s1_speedif sets.snake2_direct == 'left':sets.head2.col -= sets.s2_speedif sets.snake2_direct == 'right':sets.head2.col += sets.s2_speedif sets.snake2_direct == 'top':sets.head2.row -= sets.s2_speedif sets.snake2_direct == 'bottom':sets.head2.row += sets.s2_speed # 判断s1身体是否撞到边缘或撞到自身s1dead = Falseif sets.head1.col < 0 or sets.head1.row < 0 or sets.head1.col >= sets.COL or sets.head1.row >= sets.ROW:s1dead = Truefor body in sets.snake1: # s1头部碰撞到s1身体if sets.head1.col == body.col and sets.head1.row == body.row:s1dead = Truebreakfor body in sets.snake2: # s1头部碰撞到s2身体if sets.head1.col == body.col and sets.head1.row == body.row:s1dead = Truebreakif s1dead:sets.init_s1()s1dead = False#sets.head1.row, sets.head1.col = int(sets.ROW/2 -10), int(sets.COL/2)#sets.snake1 = []#print('Game Over')#quit = False# 判断s2碰撞s2dead = Falseif sets.head2.col < 0 or sets.head2.row < 0 or sets.head2.col >= sets.COL or sets.head2.row >= sets.ROW:s2dead = Truefor body in sets.snake2:if sets.head2.col == body.col and sets.head2.row == body.row:s2dead = Truebreakfor body in sets.snake1:if sets.head2.col == body.col and sets.head2.row == body.row:s2dead = Truebreakif s2dead:sets.init_s2()s2dead = False# 背景画图pygame.draw.rect(window, (230, 255, 230), (0, 0, sets.width, sets.hight))# 蛇头rects(window, sets, sets.head1, sets.head1_color)rects(window, sets, sets.head2, sets.head2_color)# 绘制食物for food in sfoods:rects(window, sets, food, sets.snake1Food_color)# 绘制蛇的身子for body1 in sets.snake1:rects(window, sets, body1, sets.snake1_color)for body2 in sets.snake2:rects(window, sets, body2, sets.snake2_color)# 绘制得分score.prep_score(sets)score.show_score()# 交还控制权pygame.display.flip()

计分板


import pygame.font# 显示得分信息的类
class Scoreboard():def __init__(self, sets, window):# 初始化显示得分涉及的属性self.window = windowself.window_rect = window.get_rect()# 显示得分信息时使用的字体设置self.text_color = (0, 0, 0)self.font = pygame.font.SysFont(None, 30)self.font2 = pygame.font.SysFont(None, 35)# 准备初始得分图像self.prep_score(sets)def prep_score(self, sets):# 将得分转换为一幅渲染的图像s1_score = int(len(sets.snake1))-3s1_str = "{:,}".format(s1_score)self.s1_image = self.font.render('Blue Guy:'+s1_str, True, self.text_color, (230, 255, 230))# 将得分放在屏幕右上角self.s1_rect = self.s1_image.get_rect()self.s1_rect.left = 0self.s1_rect.top = 0# Snake2s2_score = int(len(sets.snake2))-3s2_str = "{:,}".format(s2_score)self.s2_image = self.font.render('Red Guy:'+s2_str, True, self.text_color, (230, 255, 230))# 将得分放在屏幕右上角self.s2_rect = self.s2_image.get_rect()self.s2_rect.left = sets.width - 110self.s2_rect.top = 0def show_score(self):# 在屏幕上显示得分self.window.blit(self.s1_image, self.s1_rect)self.window.blit(self.s2_image, self.s2_rect)

具体源码的获取可以在公众号回复:双人贪吃蛇游戏
公众号:Python日志
Python源码、问题解答学习交流群:773162165

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html版贪吃蛇

<!doctype html><html><head></head><body> <div id"box" style"width:256px;font:25px/25px 宋体;background:#000;color:#9f9;"></div><script> var arr[15]; var next10;//最好判断一下arr[1]!arr[0]x…

贪吃蛇智能版(高级)

说明&#xff1a; 在贪吃蛇智能版&#xff08;中级&#xff09;的基础之上&#xff0c;增加了判断小食物是否安全的方法&#xff0c;并且增加了在寻找食物路径失败和寻找尾巴失败之后&#xff0c;会进行一小段的随机溜达&#xff0c;直到重新找到路径为止&#xff0c;当然这段…

贪吃蛇微信小程序源码

每日分享两个小程序源码 下载地址&#xff1a;无极低码&#xff1a;wheart.cnhttps://wheart.cn/so/home?mdw&ridf6d836c8-d54a-11ed-96fa-52540016e6ac <!--snake.wxml--> <view class"control" bindtouchstart"tapStart" bindtouchmove&qu…

win10系统激活提示无法连接到你组织的激活服务器如何解决

1、在桌面新建一个文本文档&#xff0c;把以下代码复制进去&#xff0c;如图所示&#xff1a; slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX slmgr /skms kms.03k.org slmgr /ato 2、点击文件选择“另存为”&#xff0c;在弹出的界面中&#xff0c;将保存位置选择在桌面&#xff…

无法在此设备上激活WINDOWS因为无法连接到你的组织的激活服务器

在搜索框里搜索 cmd&#xff0c; 使用管理员权限运行&#xff0c;执行一句命令&#xff1a; slmgr /skms http://kms.03k.org点完回车以后&#xff0c;再打一句命令激活 slmgr /ato查激活日期 按下Windows R &#xff0c;输入cmd&#xff0c;出来dos对话框后&#xff0c;输入…

microsoft微软登录新账户/切换账户失败,一直转圈,提示“你似乎没有连接到internet”

无论有没有微软账户&#xff0c;是切换账户还是新电脑登录&#xff0c;原理都是一样的&#xff0c;先使用一个账号注册/登录/设置好微软账户&#xff0c;然后再进行你原本的操作。 在可以进入到桌面并且联网的情况下&#xff0c;登录不上微软账户的几种常用解决方法&#xff1…

登录微软账号时无法连接到网络

登录微软账号时无法连接到网络 关闭代理&#xff0c;手动设置ipv4DNS地址&#xff08;微软dns服务器&#xff1a;4.2…2.1)&#xff0c;改完记得改回来。

解决微软newbing chat的Sorry, looks like your network settings are preventing access to this featur问题

2023.03.25最近大家都有疑惑&#xff0c;已经"魔法"了&#xff0c;突然newbing chat用不了&#xff0c;弹出“Sorry, looks like your network settings are preventing access to this featur”&#xff0c; 已下是解决方法&#xff08;步骤操作的前提&#xff1a;…

成功解决长时间挂起虚拟机后再次打开无法连接网络,并提示网络激活失败(亲测有效)

成功解决长时间挂起虚拟机后再次打开无法连接网络&#xff0c;并提示网络激活失败&#xff08;亲测有效&#xff01;&#xff09; 之前做区块链的一个虚拟机很久没打开&#xff0c;一直处于挂起状态&#xff0c;一直提示网络连接激活失败。试了很多种方法没解决&#xff0c;更…

专治疑难系列 - 无法激活网络的解决方法

‍‍&#x1f3e1;博客主页&#xff1a; Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 &#x1f310;所属专栏&#xff1a;『转治疑难系列』 &#x1f30c;上期文章&#xff1a; 无 &#x1f4f0;如觉得博主文章写的不错或对你有所帮助的话&#xff0c;还…

Nature综述:应对新出现的抗真菌耐药性对人类健康的威胁

编译&#xff1a;微科盟小木&#xff0c;编辑&#xff1a;微科盟居居、江舜尧。 微科盟原创微文&#xff0c;欢迎转发转载&#xff0c;转载须注明来源《微生态》公众号。 导读 侵袭性真菌感染对公共健康构成了重大威胁&#xff0c;是抗菌素耐药性的一个未得到充分认识的组成部分…

在传染病中,肠道微生物-免疫力-营养在优化治疗策略中的作用

谷禾健康 传染病&#xff0c;肠道微生物&#xff0c;营养 传染病和感染目前是许多地区尤其是低收入国家主要死亡原因&#xff0c;也是婴儿和老年人等弱势群体的主要风险。免疫系统在这些感染的易感性、持续性和清除中起着至关重要的作用。由于 70-80% 的免疫细胞存在于肠道中&a…

Microbiome:人类肠道和病原菌的可移动抗性组驱动环境中抗生素抗性增长

点击蓝字 关注我们 编译&#xff1a;张璐 校稿&#xff1a;张慧林 论文ID 原名&#xff1a;Mobile resistome of human gut and pathogen drives anthropogenic bloom of antibiotic resistance 译名&#xff1a;人类肠道和病原菌的可移动抗性组驱动环境中抗生素抗性增长 第…

抗生素对微生物组和人体健康的影响

谷禾健康 说起抗生素&#xff0c;可能会觉得有些抽象&#xff0c;那如果说阿莫西林、头孢、红霉素、阿奇霉素等等这些日常生活经常使用的药物&#xff0c;会不会有一些熟悉的感觉。当我们发现身体有一些小炎症(如头痛发热、喉咙痒疼、咳嗽)的时候&#xff0c;首先会想到要使用这…

肠道菌群、性激素与疾病:探索它们的交互作用

谷禾健康 我们的身体中有很多不同的器官&#xff0c;组织&#xff0c;腺体等会产生许多信号分子来精确控制和影响身体的反应和活动&#xff0c;这些信号分子包括激素、神经递质、生长因子、细胞因子等。它们可以促进或抑制细胞的生长和分化&#xff0c;调节细胞间的相互作用和通…

抗生素对肠道微生物群的影响

在与细菌性疾病的斗争中&#xff0c;抗生素是不可避免的。抗生素是人类使用了几十年的治疗细菌感染的救命药物。 虽然抗生素挽救了数百万人的生命&#xff0c;但它们也会消灭一些常驻细菌。现有文献已经确定了与抗生素相关的肠道微生物群失调&#xff08;多样性降低&#xff09…

国外问卷调查项目详解(真正的保姆级教程)

大家好&#xff0c;我是小飞匠&#xff0c;也聊了不少关于国外问卷调查项目的话题&#xff0c;但是不少朋友对于国外问卷调查还是不太了解&#xff0c;今天来做一个国外问卷调查项目详解(全网最全最细致的教程)&#xff0c;如果能够给到大家一点点帮助那也是极好的。 什么是国…

扒一扒传智播客深藏在背后的内幕

扒一扒传智播客深藏在背后的内幕 —— 传智坚持开Java基础班有何猫腻 Java基础太简单&#xff0c;自学一个月就能搞定&#xff1f;大学学了计算机基础的&#xff0c;感觉报基础班有点浪费钱&#xff0c;浪费时间&#xff01;找工作会项目都行了&#xff0c;基础班感觉没多大用…

“马导”怒怼“小鲜肉”,当马儿遇到配音,短视频内容让人捧腹

“马导”怒怼“小鲜肉”&#xff0c;当马儿遇到配音&#xff0c;短视频内容让人捧腹 搞笑配音短视频其实是非常受人欢迎的&#xff0c;尤其是有才华的作者为小动物们配上的搞笑配音&#xff0c;更是让小动物们有了一种拟人的感觉&#xff0c;叫人一看就觉得非常有趣。比如关于以…

中国的程序员培训是不是有问题?

中国技术开放日的出海团对日本进行了为期一周的访问。笔者随行了头两天&#xff0c;参加 Slush Asia 大会&#xff0c;并访问了 Gungho 和 Deloitte 两家企业。虽然已经在日本生活了四年&#xff0c;但这样的体验却甚少&#xff0c;对中日两国的技术力有不少思考。 不知从什么时…