小编今天要给大家分享的是双人贪吃蛇,大家可以和自己的兄弟,姐妹,爸爸,妈妈等一起玩哟!我先介绍一下游戏:

运行游戏,进入初始界面,按下空格键。

玩家(1):w,a,s,d

玩家(2):↑,←,↓,→

玩家要争夺7个实物,直到吃完为止

游戏结束。

下面是小编写的代码:

import math
import random
import pygame
from pygame.locals import *running = False
playing = False
screen = None
timer = None
snk1 = None
snk2 = None
foods = None
remainFoods = 7
radiusFood = 8'''
链表节点
'''
class Node:def __init__(self, data, prev = None, next = None):self.data = dataself.prev = prevself.next = nextdef insert_front(self, node):if self.prev:node.prev = self.prevself.prev.next = nodeself.prev = nodenode.next = selfelse:self.prev = nodenode.next = selfreturn nodedef insert_back(self, node):if self.next:node.next = self.nextself.next.prev = nodeself.next = nodenode.prev = selfelse:self.next = nodenode.prev = selfreturn nodedef remove(self):if self.next:self.next.prev = self.previf self.prev:self.prev.next = self.next'''
蛇
'''
class Snack:def __init__(self, surface, color, start_pos, end_pos, face):self.color = colorself.surface = surfaceself.head = Node(start_pos)self.tail = Node(end_pos)self.head.insert_back(self.tail)self.length = self.distanceBetween(start_pos, end_pos)self.face = faceself.speed = 120self.eat = 0self.grow = 0self.mapAngle = [[0, math.pi * 3 / 2, math.pi / 2],[0, math.pi * 7 / 4, math.pi / 4],[math.pi, math.pi * 5 / 4, math.pi * 3 / 4]]'''坐标取整'''def intPos(self, pos):return (int(pos[0]), int(pos[1]))'''坐标转角度'''def pos2Angle(self, pos):return self.mapAngle[pos[0]][pos[1]]'''极坐标位移'''def polarPos(self, pos, angle, dis):xx = pos[0] + dis * math.cos(angle)yy = pos[1] + dis * math.sin(angle)return (xx, yy)'''计算两点间距离'''def distanceBetween(self, pos1, pos2):dx = pos2[0] - pos1[0]dy = pos2[1] - pos1[1]return math.sqrt(dx*dx + dy*dy)'''计算两点间角度'''def angleBetween(self, pos1, pos2):dx = pos2[0] - pos1[0]dy = pos2[1] - pos1[1]return math.atan2(dy, dx)'''改变面向'''def changeFace(self, newFace):if newFace[0] == 0 and newFace[1] == 0:returnif newFace == self.face:returnxx = self.face[0] + newFace[0]yy = self.face[1] + newFace[1]if xx == 0 and yy == 0:returnself.face = newFaceself.head = self.head.insert_front(Node(self.head.data))'''吃到食物'''def eatFood(self, grow):self.grow = growself.eat += 1'''绘制蛇身'''def draw(self):node = self.headpygame.draw.circle(self.surface, self.color, self.intPos(node.data), 6, 6)while node:n2 = node.next if not n2:breakpygame.draw.line(self.surface, self.color, self.intPos(node.data), self.intPos(n2.data), 6)node = node.next'''每帧移动'''def walk(self, delta):dis = self.speed * delta / 1000self.head.data = self.polarPos(self.head.data, self.pos2Angle(self.face), dis)if self.grow >= dis:self.grow -= diselse:dis -= self.growself.grow = 0self.cutTail(dis)'''收缩尾巴'''def cutTail(self, length):node = self.tailwhile length > 0:n2 = node.prevdis = self.distanceBetween(n2.data, node.data)angle = self.angleBetween(node.data, n2.data)if dis > length:node.data = self.polarPos(node.data, angle, length)length = 0else:self.tail = node.prevnode.remove()length -= disnode = node.prev'''屏幕指定位置绘制文字'''
def printText(surface, str, pos, size = 24, color = (255, 255, 255)):global screenfont = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", size)text = font.render(str, True, color)w = text.get_width()h = text.get_height()surface.blit(text, (pos[0] - w / 2, pos[1] - h / 2))'''添加食物'''
def addFood():global screen, snk1, snk2, foods, remainFoodsif remainFoods <= 0:returnw = screen.get_width()h = screen.get_height()while True:posX = random.randint(5, w - 5)posY = random.randint(5, h - 5)color = tuple(screen.get_at((posX, posY)))if color != snk1.color and color != snk2.color:breakremainFoods -= 1if not foods:foods = Node((posX, posY))else:foods = foods.insert_front(Node((posX, posY)))'''删除食物'''
def removeFood(node):global foodsif node == foods:foods = foods.nextelse:node.remove()'''检测吃到食物'''
def checkEatFood():global foods, radiusFood, snk1, snk2node = foodswhile node:if snk1.distanceBetween(snk1.head.data, node.data) < (radiusFood + 4):snk1.eatFood(50)removeFood(node)addFood()breakelif snk2.distanceBetween(snk2.head.data, node.data) < (radiusFood + 4):snk2.eatFood(50)removeFood(node)addFood()breakelse:node = node.next'''游戏初始界面'''
def logo():global screen, remainFoodsw = screen.get_width()h = screen.get_height()printText(screen, "Snack V1.0", (w / 2, h / 3), 48)printText(screen, "任意键继续", (w / 2, h / 2), 24, (55, 255, 55))printText(screen, str(remainFoods) + "个食物,抢完即止", (w / 2, h * 2 / 3), 32)def quit():pygame.font.quit()'''检测游戏结束'''
def checkGameOver():global remainFoods, snk1, snk2, foods, playing, screenif remainFoods == 0 and foods == None:playing = Falsescreen.fill((0,0,0))w = screen.get_width()h = screen.get_height()if snk1.eat > snk2.eat:printText(screen, "玩家1 胜利", (w / 2, h / 2), 48)elif snk1.eat < snk2.eat:printText(screen, "玩家2 胜利", (w / 2, h / 2), 48)else:printText(screen, "平局", (w / 2, h / 2), 48)'''键盘按键转换成面向角度'''
def cmd():global snk1, snk2keys = pygame.key.get_pressed()x1 = x2 = y1 = y2 = 0if keys[pygame.K_RIGHT]:x2+=1if keys[pygame.K_LEFT]:x2-=1if keys[pygame.K_UP]:y2+=1if keys[pygame.K_DOWN]:y2-=1if keys[pygame.K_d]:x1+=1if keys[pygame.K_a]:x1-=1if keys[pygame.K_w]:y1+=1if keys[pygame.K_s]:y1-=1snk1.changeFace((x1, y1))snk2.changeFace((x2, y2))'''游戏每帧更新'''
def play(delta):global playing, snk1, snk2if not playing:returncmd()snk1.walk(delta)snk2.walk(delta)checkEatFood()checkGameOver()'''绘制'''
def draw():global snk1, snk2, playing, screen, radiusFood, remainFoodsif not playing:returnscreen.fill((0,0,0))snk1.draw()snk2.draw()node = foodswhile node:color = (255, 255, 255)if remainFoods == 0:color = (255, 0, 0)pygame.draw.circle(screen, color, node.data, radiusFood, radiusFood // 2 + 1)node = node.nextdef start(width = 800, height = 600, fps = 60):global running, screen, timer, playing, snk1, snk2pygame.init()pygame.font.init()font = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 20)pygame.display.set_caption("Snack V1.0")screen = pygame.display.set_mode((width, height))logo()snk1 = Snack(screen, (0, 150, 200), (100, 100), (0, 100), (1, 0))snk2 = Snack(screen, (255, 100, 0), (width * 5 // 6, height // 2), (width * 5 // 6 + 100, height // 2), (-1, 0))for i in range(3):addFood()timer = pygame.time.Clock()running = Truewhile running:delta = timer.tick(fps)play(delta)draw()for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE and playing == False:screen.fill((0,0,0))playing = Truepygame.display.flip()if __name__ == "__main__":start()quit()

酱酱!

以上就是双人贪吃蛇的代码啦!

教大家pygame的安装方式

在终端输入

pip install pyame,然后回车键进行安装

Python双人贪吃蛇小游戏相关推荐

  1. python 贪吃蛇小游戏代码_10分钟再用Python编写贪吃蛇小游戏

    Python编写贪吃蛇 前不久我们公众号发布了一篇C++编写贪吃蛇小游戏的推文,反响空前.看来大家对这类简单易上手小游戏还是很喜爱的. 恰逢2018年IEEE Spectrum编程语言排行榜新鲜出炉, ...

  2. 用Python做贪吃蛇小游戏

    用Python做贪吃蛇小游戏 简介 引言 游戏预览 结构图 代码框架图 代码讲解 main主函数-开始工作 show_start_info()欢迎进入游戏 running_game-让我们开始游戏吧 ...

  3. 用python实现贪吃蛇小游戏

    好的,以下是用Python实现贪吃蛇小游戏的基本步骤: 1.导入必要的模块:需要使用Pygame模块来创建游戏窗口.处理用户输入.绘制游戏元素等. 2.初始化游戏:创建游戏窗口.初始化游戏元素(如蛇的 ...

  4. Python实现贪吃蛇小游戏(双人模式)

    这篇文章主要为大家详细介绍了Python实现双人模式的贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单用py写了一个贪吃蛇游戏,有单人.双人模式,比较简 ...

  5. 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...

    贪吃蛇,大家应该都玩过.当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎.今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果: 好了,先介绍一个思路 所有的游戏最主要 ...

  6. python简易贪吃蛇小游戏任务书含代码

    目  录 第一章 绪论 1.1 开发的背景 1.2 开发的目的 1.3 开发的意义 1.4 开发工具简介 第二章 需求分析 (1) 利用方向键来改变蛇的运行方向. (2) 在随机的地方产生食物. (3 ...

  7. python制作贪吃蛇小游戏,畅玩无限制

    前言 大家早好.午好.晚好吖 ❤ ~ 现在这年头,无论玩个什么游戏都有健康机制, 这让我们愉悦玩游戏得步伐变得承重起来, 于是无聊之下我写了个贪吃蛇小游戏,来玩个快乐 代码展示 导入模块 import ...

  8. Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆 附带源码

    开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 贪吃蛇 ...

  9. 单双人贪吃蛇小游戏(控制台)

    本代码参考另一位博主的贪吃蛇的思想.单双人贪吃蛇模式. 编译已通过的平台:VS2019. 如有问题,请伙伴们一起讨论哟. 1. 程序界面功能以及运行截图如下: (1)程序主界面运行截图: (2)单人游 ...

  10. Python:贪吃蛇小游戏

    #pygame游戏库,sys操控python运行的环境 import pygame,sys,random #这个模块包含所有pygame所使用的常亮 from pygame.locals import ...

最新文章

  1. java程序无法连接redis_无法使用jedis连接到redis
  2. python数据挖掘例题_数据挖掘与python实践试题及答案
  3. unix网络编程——ioctl 函数的用法详解
  4. SqlServer在附加数据库时提示:无法打开物理文件**.mdf 操作系统错误拒绝访问
  5. 高行健---江西赣州人
  6. MapStruct解决数据传输对象转换的繁琐
  7. JSON用于多态Java对象序列化
  8. android使用perfetto工具步骤
  9. OleDbCommandBuilder 使用方法
  10. 单片机上电总是立即执行按键程序
  11. Shell同时推送代码至github和gitee的解决办法
  12. mysql 体系架构设计_MySQL数据库的体系架构(转载)
  13. ubunt 文件permission denied问题的解决
  14. windows 10字体突然变小变细,模糊
  15. 带你近距离了解小米这家公司
  16. 2017 年,最热开源静态网站生成器 TOP 20 揭晓!
  17. 网站底部版权声明、备案编号、许可证信息应该怎么写?
  18. 关于AOSP与AOKP
  19. 网页音乐制作器(网页钢琴)-- MusicMaker
  20. Qt ERROR : The inferior stopped because it received a signal from the operating system.

热门文章

  1. Java编码规范总结
  2. g4600黑苹果efi_授人以鱼不如授人以渔,黑苹果EFI相关问题分析方法以及解决思路...
  3. 【MATLAB】MATLAB基本运算
  4. 智慧工厂应用系统建设方案
  5. staruml怎么画协作图_er图怎么画?轻松绘制专业er图的软件
  6. 计算机操作系统---高响应比调度算法,操作系统最高响应比优先调度算法实验报告...
  7. 手把手教你安装IAR
  8. Linux Command hping3 测试网络安全工具
  9. 惠普企业级服务器型号,惠普企业级服务器HP rx8640
  10. “野火FreeRTOS教程”第9章知识点总结-空闲任务与阻塞延时