日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2023/12/14 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python游戏】贪吃蛇升级版——双人贪吃蛇小游戏 | 附带源码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

之前做過一個(gè)單人版的貪吃蛇,所以常常就是我只能看著別人玩,或者別人看著我玩,卻沒法兩個(gè)人一起愉快地玩耍。 由此產(chǎn)生了做一個(gè)可以雙人玩的貪吃蛇想法,并且從小時(shí)候一直到現(xiàn)在,之前python還沒有那么火的時(shí)候,就在網(wǎng)上看過一些用python寫游戲的教程。后來系統(tǒng)地學(xué)了一下python,就打算將雙人貪吃蛇安排上了。

相關(guān)文件

想學(xué)Python的小伙伴可以關(guān)注小編的公眾號(hào)【Python日志】
有很多的資源可以白嫖的哈,不定時(shí)會(huì)更新一下Python的小知識(shí)的哈!!
需要源碼的小伙伴可以在公眾號(hào)回復(fù)雙人貪吃蛇游戲
Python源碼、問題解答學(xué)習(xí)交流群:773162165

開發(fā)環(huán)境

Python版本:3.6.7
相關(guān)模塊:
pygame
random
sys
settings
score_board
functions
以及一些python自帶的模塊。

環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

游戲玩法

在游戲中,藍(lán)色的玩家也就是1P通過WASD控制方向,紅色的玩家也就是2P通過上下左右控制方向。 初始的時(shí)候,兩個(gè)玩家分別在屏幕的中上方和中下方出現(xiàn),如果撞墻或者相撞都會(huì)歸為初始狀態(tài),計(jì)分板清零。 單人貪吃蛇通常是一個(gè)玩家,每次產(chǎn)生1個(gè)食物,我在這個(gè)基礎(chǔ)上改進(jìn)了一下,每次產(chǎn)生了10個(gè)食物,可以兩個(gè)玩家一起競(jìng)爭(zhēng)玩耍。當(dāng)然,也可以通過修改設(shè)置只產(chǎn)生1個(gè)食物。 其實(shí)多食物的情況有點(diǎn)類似于球球了,但是這樣增加了更多的可玩性,我還使用了一個(gè)計(jì)分板,顯示的是兩個(gè)玩家的得分,吃1個(gè)得分加1分。

代碼和說明

  • snake_main.py 這是游戲的主程序,用來初始化屏幕、按鍵控制移動(dòng)、碰撞的判定以及繪制游戲中的各種模塊等
  • setting.py該文件里面游戲里面的一些設(shè)置,如各種模塊的初始化值、模塊顏色和移動(dòng)速度
  • function.py該文件里面主要是游戲的一些函數(shù),如生成食物的函數(shù)、繪圖函數(shù)和按鍵響應(yīng)函數(shù)
  • score_board.py該文件是用來繪制兩個(gè)玩家的得分計(jì)數(shù)板
  • 效果展示

    代碼實(shí)現(xiàn)

    主函數(shù)

    """ 雙人貪吃蛇游戲 公眾號(hào):Python日志 Python編程小知識(shí)教學(xué),入門到精通視頻+源碼+課件+學(xué)習(xí)解答加群: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('雙人貪吃蛇 公眾號(hào):Python日志 交流群:773162165')score = Scoreboard(sets,window)sfoods = [] for i in range(10): # 食物的數(shù)量sfoods.append(gen_food(sets))# 設(shè)置幀頻率 clock = pygame.time.Clock() while sets.quit:# 處理幀頻 鎖幀clock.tick(10) # 設(shè)置該項(xiàng)可以改變游戲速度,值越大速度越快check_events(sets)# 吃東西,當(dāng)頭目前的位置和食物的坐標(biāo)相同時(shí)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.把最后一個(gè)sets.snake1刪掉sets.snake1.insert(0, sets.head1.copy()) # 每一次從頭部增加了一個(gè)塊,所以當(dāng)沒有吃東西的時(shí)候,需要每次刪除掉一個(gè)模塊來抵消,否則就會(huì)是拖尾的效果if not snake1_eat: # 沒有吃東西的時(shí)候sets.snake1.pop() # 必須pop掉末尾的模塊sets.snake2.insert(0, sets.head2.copy())if not snake2_eat:sets.snake2.pop()# sets.snake 1 移動(dòng)一下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()# 交還控制權(quán)pygame.display.flip()

    計(jì)分板

    import pygame.font# 顯示得分信息的類 class Scoreboard():def __init__(self, sets, window):# 初始化顯示得分涉及的屬性self.window = windowself.window_rect = window.get_rect()# 顯示得分信息時(shí)使用的字體設(shè)置self.text_color = (0, 0, 0)self.font = pygame.font.SysFont(None, 30)self.font2 = pygame.font.SysFont(None, 35)# 準(zhǔn)備初始得分圖像self.prep_score(sets)def prep_score(self, sets):# 將得分轉(zhuǎn)換為一幅渲染的圖像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)

    具體源碼的獲取可以在公眾號(hào)回復(fù):雙人貪吃蛇游戲
    公眾號(hào):Python日志
    Python源碼、問題解答學(xué)習(xí)交流群:773162165

    總結(jié)

    以上是生活随笔為你收集整理的【Python游戏】贪吃蛇升级版——双人贪吃蛇小游戏 | 附带源码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。