电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python實現(xiàn)雙人貪吃蛇小游戲

瀏覽:50日期:2022-07-28 11:34:56

小編今天要給大家分享的是雙人貪吃蛇,大家可以和自己的兄弟,姐妹,爸爸,媽媽等一起玩喲!我先介紹一下游戲:

運行游戲,進(jìn)入初始界面,按下空格鍵。

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

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

玩家要爭奪7個實物,直到吃完為止

游戲結(jié)束。

下面是小編寫的代碼:

import mathimport randomimport pygamefrom pygame.locals import * running = Falseplaying = Falsescreen = Nonetimer = Nonesnk1 = Nonesnk2 = Nonefoods = NoneremainFoods = 7radiusFood = 8 ’’’鏈表節(jié)點’’’class Node: def __init__(self, data, prev = None, next = None):self.data = dataself.prev = prevself.next = next def insert_front(self, node):if self.prev: node.prev = self.prev self.prev.next = node self.prev = node node.next = selfelse: self.prev = node node.next = selfreturn node def insert_back(self, node):if self.next: node.next = self.next self.next.prev = node self.next = node node.prev = selfelse: self.next = node node.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]] ’’’坐標(biāo)取整’’’ def intPos(self, pos):return (int(pos[0]), int(pos[1])) ’’’坐標(biāo)轉(zhuǎn)角度’’’ def pos2Angle(self, pos):return self.mapAngle[pos[0]][pos[1]] ’’’極坐標(biāo)位移’’’ 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:break pygame.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.grow self.grow = 0 self.cutTail(dis)’’’收縮尾巴’’’ def cutTail(self, length):node = self.tailwhile length > 0: n2 = node.prev dis = 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 = 0 else:self.tail = node.prevnode.remove()length -= dis node = node.prev ’’’屏幕指定位置繪制文字’’’def printText(surface, str, pos, size = 24, color = (255, 255, 255)): global screen font = 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, remainFoods if remainFoods <= 0:return w = 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: break remainFoods -= 1 if not foods:foods = Node((posX, posY)) else:foods = foods.insert_front(Node((posX, posY))) ’’’刪除食物’’’def removeFood(node): global foods if node == foods:foods = foods.next else:node.remove() ’’’檢測吃到食物’’’def checkEatFood(): global foods, radiusFood, snk1, snk2 node = foods while 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, remainFoods w = screen.get_width() h = screen.get_height() printText(screen, 'Snack V1.0', (w / 2, h / 3), 48) printText(screen, '任意鍵繼續(xù)', (w / 2, h / 2), 24, (55, 255, 55)) printText(screen, str(remainFoods) + '個食物,搶完即止', (w / 2, h * 2 / 3), 32) def quit(): pygame.font.quit() ’’’檢測游戲結(jié)束’’’def checkGameOver(): global remainFoods, snk1, snk2, foods, playing, screen if 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) ’’’鍵盤按鍵轉(zhuǎn)換成面向角度’’’def cmd(): global snk1, snk2 keys = pygame.key.get_pressed() x1 = x2 = y1 = y2 = 0 if keys[pygame.K_RIGHT]:x2+=1 if keys[pygame.K_LEFT]:x2-=1 if keys[pygame.K_UP]:y2+=1 if keys[pygame.K_DOWN]:y2-=1 if keys[pygame.K_d]:x1+=1 if keys[pygame.K_a]:x1-=1 if keys[pygame.K_w]:y1+=1 if keys[pygame.K_s]:y1-=1 snk1.changeFace((x1, y1)) snk2.changeFace((x2, y2)) ’’’游戲每幀更新’’’def play(delta): global playing, snk1, snk2 if not playing:return cmd() snk1.walk(delta) snk2.walk(delta) checkEatFood() checkGameOver() ’’’繪制’’’def draw(): global snk1, snk2, playing, screen, radiusFood, remainFoods if not playing:return screen.fill((0,0,0)) snk1.draw() snk2.draw() node = foods while 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.next def start(width = 800, height = 600, fps = 60): global running, screen, timer, playing, snk1, snk2 pygame.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 = True while running:delta = timer.tick(fps)play(delta)draw()for event in pygame.event.get(): if event.type == pygame.QUIT:running = False elif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE and playing == False: screen.fill((0,0,0)) playing = True pygame.display.flip() if __name__ == '__main__': start() quit()

以上就是雙人貪吃蛇的代碼啦!

教大家pygame的安裝方式

在終端輸入

pip install pyame,然后回車鍵進(jìn)行安裝

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 免费网站网址收录网_海企优网站推荐平台| 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 一体化污水处理设备,一体化污水设备厂家-宜兴市福源水处理设备有限公司 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 退火炉,燃气退火炉,燃气热处理炉生产厂家-丹阳市丰泰工业炉有限公司 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 衬塑管道_衬四氟管道厂家-淄博恒固化工设备有限公司 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 振动台-振动试验台-振动冲击台-广东剑乔试验设备有限公司 | 找培训机构_找学习课程_励普教育| 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 圆窗水平仪|伊莉莎冈特elesa+ganter | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 乙炔气体报警装置|固定式氯化氢检测仪|河南驰诚电气百科 | 首页|光催化反应器_平行反应仪_光化学反应仪-北京普林塞斯科技有限公司 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 事迹材料_个人事迹名人励志故事| 重庆波纹管|重庆钢带管|重庆塑钢管|重庆联进管道有限公司 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 北京百度网站优化|北京网站建设公司-百谷网络科技 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 |